Booking Management
unknown
java
3 months ago
5.1 kB
5
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