Booking Management

 avatar
unknown
java
3 months ago
5.1 kB
6
Indexable
// =====================
// Booking Management (Matthew)
// =====================

/**
 * Completes an active booking given its reference number.
 *
 * @param referenceNumber the reference number of the booking to complete
 * @throws IllegalArgumentException if the reference number is not found
 * @throws IllegalStateException if the booking is already completed
 */
public void completeBooking(String referenceNumber) {
    Booking booking = getBookingByReference(referenceNumber);
    if (booking == null) {
        throw new IllegalArgumentException("Booking reference not found: " + referenceNumber);
    }
    booking.completeBooking();
    saveBookings();
}

/**
 * Retrieves a booking by its reference number.
 *
 * @param referenceNumber the reference number to search for
 * @return the matching Booking or null if not found
 */
public Booking getBookingByReference(String referenceNumber) {
    for (Booking booking : bookings) {
        if (booking.getReferenceNumber().equals(referenceNumber)) {
            return booking;
        }
    }
    return null;
}

/**
 * Returns a list of all active bookings.
 *
 * @return list of active bookings
 */
public List<Booking> getActiveBookings() {
    List<Booking> activeBookings = new ArrayList<>();
    for (Booking booking : bookings) {
        if (booking.getStatus() == BookingStatus.ACTIVE) {
            activeBookings.add(booking);
        }
    }
    return activeBookings;
}

/**
 * Returns a list of all completed bookings.
 *
 * @return list of completed bookings
 */
public List<Booking> getCompletedBookings() {
    List<Booking> completedBookings = new ArrayList<>();
    for (Booking booking : bookings) {
        if (booking.getStatus() == BookingStatus.COMPLETED) {
            completedBookings.add(booking);
        }
    }
    return completedBookings;
}

// =====================
// File I/O - Bookings (Matthew)
// =====================

/**
 * Saves all bookings to the bookings file.
 */
private void saveBookings() {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter("data/bookings.txt"))) {
        for (Booking booking : bookings) {
            writer.write(booking.toFileString());
            writer.newLine();
        }
    } catch (IOException e) {
        System.out.println("Error saving bookings: " + e.getMessage());
    }
}

/**
 * Loads all bookings from the bookings file.
 */
private void loadBookings() {
    File file = new File("data/bookings.txt");
    if (!file.exists()) return;
    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
        String line;
        while ((line = reader.readLine()) != null) {
            String[] parts = line.split(",");

            String referenceNumber = parts[0];
            BookingStatus status = BookingStatus.valueOf(parts[1]);
            LocalDateTime createdDateTime = LocalDateTime.parse(parts[2]);
            LocalDateTime completedDateTime = parts[3].equals("null") ? null : LocalDateTime.parse(parts[3]);

            // reconstruct client
            String clientName = parts[4];
            String clientType = parts[5];
            Client client;
            if (clientType.equals("INDIVIDUAL")) {
                String[] nameParts = clientName.split(" ");
                client = new IndividualClient(nameParts[0], nameParts[1], LocalDate.parse(parts[6]));
            } else {
                client = new CommercialClient(clientName, Integer.parseInt(parts[6]),
                        parts[7], parts[8]);
            }

            // reconstruct driving licence
            int licenceOffset = clientType.equals("INDIVIDUAL") ? 7 : 9;
            DrivingLicence licence = new DrivingLicence(
                    parts[licenceOffset],
                    parts[licenceOffset + 1],
                    LocalDate.parse(parts[licenceOffset + 2])
            );

            // look up vehicle from fleet by registration number
            int vehicleOffset = licenceOffset + 3;
            Vehicle vehicle = null;
            for (Vehicle v : fleet) {
                if (v.getRegistrationNumber().equals(parts[vehicleOffset])) {
                    vehicle = v;
                    break;
                }
            }

            // reconstruct credit card
            int cardOffset = vehicleOffset + 1;
            CreditCard card = new CreditCard(
                    parts[cardOffset],
                    parts[cardOffset + 1],
                    LocalDate.parse(parts[cardOffset + 2])
            );

            // create booking and restore status
            Booking booking = new Booking(referenceNumber, client, licence, vehicle, card);
            if (status == BookingStatus.COMPLETED && completedDateTime != null) {
                booking.completeBooking();
            }
            bookings.add(booking);
        }
    } catch (IOException e) {
        System.out.println("Error loading bookings: " + e.getMessage());
    }
}
Editor is loading...
Leave a Comment