Files
reservationsystem/src/java/lodge/reservationsystem/Reservation.java

238 lines
7.0 KiB
Java
Raw Normal View History

2025-08-28 21:08:16 -04:00
package lodge.reservationsystem;
2025-08-31 18:59:49 -04:00
import java.io.BufferedWriter;
2025-08-29 10:32:10 -04:00
import java.io.IOException;
2025-08-31 18:59:49 -04:00
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
2025-09-03 08:56:57 -04:00
import java.time.ZonedDateTime;
2025-08-31 18:59:49 -04:00
2025-09-03 16:08:44 -04:00
public abstract class Reservation {
2025-08-31 18:59:49 -04:00
char type;
2025-09-03 16:08:44 -04:00
String reservation_number = "-99";
2025-08-29 07:26:53 -04:00
Address physical_address;
Address mailing_address;
2025-08-28 21:08:16 -04:00
2025-09-03 08:56:57 -04:00
ZonedDateTime reservation_start_date;
ZonedDateTime reservation_end_date;
2025-09-03 16:08:44 -04:00
ReservationStatusEnum reservation_status;
2025-08-28 21:08:16 -04:00
2025-09-03 16:08:44 -04:00
KitchenEnum kitchen;
2025-09-04 22:34:26 -04:00
2025-08-28 21:08:16 -04:00
Integer numberOfBeds;
Integer numberOfBedRooms;
Integer numberOfBathRooms;
Integer numberOfFloors;
Integer squareFeet;
Float price;
2025-09-06 19:21:01 -04:00
Reservation() {
2025-09-03 16:08:44 -04:00
numberOfBeds = 1;
numberOfBedRooms = 1;
numberOfBathRooms = 1;
numberOfFloors = 1;
kitchen = KitchenEnum.None;
price = 120.0f;
reservation_status = ReservationStatusEnum.Draft;
mailing_address = null;
physical_address = null;
}
2025-08-31 18:59:49 -04:00
public String getReservation_number() {
2025-08-28 21:08:16 -04:00
return reservation_number;
}
public void setReservation_number(String reservation_number) {
this.reservation_number = reservation_number;
}
2025-08-29 07:26:53 -04:00
public Address physical_address() {
2025-08-28 21:08:16 -04:00
return physical_address;
}
2025-08-29 07:26:53 -04:00
public void setPhysical_address(Address physical_address) {
2025-08-28 21:08:16 -04:00
this.physical_address = physical_address;
}
2025-08-29 07:26:53 -04:00
public Address mailing_address() {
2025-08-28 21:08:16 -04:00
return mailing_address;
}
2025-08-29 07:26:53 -04:00
public void setMailing_address(Address mailing_address) {
2025-08-28 21:08:16 -04:00
this.mailing_address = mailing_address;
}
2025-09-03 08:56:57 -04:00
public ZonedDateTime reservation_start_date() {
2025-08-28 21:08:16 -04:00
return reservation_start_date;
}
2025-09-03 08:56:57 -04:00
public void setReservation_start_date(ZonedDateTime reservation_start_date) {
2025-08-28 21:08:16 -04:00
this.reservation_start_date = reservation_start_date;
}
2025-09-03 08:56:57 -04:00
public ZonedDateTime reservation_end_date() {
2025-08-28 21:08:16 -04:00
return reservation_end_date;
}
2025-09-03 08:56:57 -04:00
public void setReservation_end_date(ZonedDateTime reservation_end_date) {
2025-08-28 21:08:16 -04:00
this.reservation_end_date = reservation_end_date;
}
2025-09-03 16:08:44 -04:00
public ReservationStatusEnum reservation_status() {
2025-08-28 21:08:16 -04:00
return reservation_status;
}
2025-09-03 16:08:44 -04:00
public void setReservation_status(ReservationStatusEnum reservation_status) {
2025-08-28 21:08:16 -04:00
this.reservation_status = reservation_status;
}
2025-09-04 22:34:26 -04:00
public KitchenEnum getKitchen() {
return kitchen;
}
public void setKitchen(KitchenEnum kitchen) {
this.kitchen = kitchen;
}
2025-08-28 21:08:16 -04:00
public Integer numberOfBeds() {
return numberOfBeds;
}
public void setNumberOfBeds(Integer numberOfBeds) {
this.numberOfBeds = numberOfBeds;
}
public Integer numberOfBedRooms() {
return numberOfBedRooms;
}
public void setNumberOfBedRooms(Integer numberOfBedRooms) {
this.numberOfBedRooms = numberOfBedRooms;
}
public Integer numberOfBathRooms() {
return numberOfBathRooms;
}
public void setNumberOfBathRooms(Integer numberOfBathRooms) {
this.numberOfBathRooms = numberOfBathRooms;
}
public Integer numberOfFloors() {
return numberOfFloors;
}
public void setNumberOfFloors(Integer numberOfFloors) {
this.numberOfFloors = numberOfFloors;
}
public Integer squareFeet() {
return squareFeet;
}
public void setSquareFeet(Integer squareFeet) {
this.squareFeet = squareFeet;
}
public Float price() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((reservation_number == null) ? 0 : reservation_number.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Reservation other = (Reservation) obj;
if (reservation_number == null) {
if (other.reservation_number != null)
return false;
} else if (!reservation_number.equals(other.reservation_number))
return false;
return true;
}
2025-08-29 07:26:53 -04:00
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
2025-08-31 18:59:49 -04:00
2025-08-31 23:54:17 -04:00
sb.append(String.format("{ \"%s\":{", ReservationType()));
2025-08-30 11:26:49 -04:00
sb.append("\"reservation_type\": \"" + ReservationType() + "\",");
2025-08-29 07:26:53 -04:00
sb.append("\"reservation_number\": \"" + reservation_number + "\",");
sb.append("\"reservation_status\": \"" + reservation_status + "\",");
sb.append("\"reservation_start_date\": \"" + reservation_start_date + "\",");
2025-09-06 19:21:01 -04:00
sb.append("\"reservation_end_date\": \"" + reservation_end_date + "\",");
sb.append("\"physical_address\": " + physical_address + ",");
sb.append("\"mailing_address\": " + mailing_address + ",");
2025-09-04 22:34:26 -04:00
sb.append("\"kitchen\": \"" + kitchen + "\",");
2025-08-29 07:26:53 -04:00
sb.append("\"numberOfBeds\": \"" + numberOfBeds + "\",");
sb.append("\"numberOfBedRooms\": \"" + numberOfBedRooms + "\",");
sb.append("\"numberOfBathRooms\": \"" + numberOfBathRooms + "\",");
sb.append("\"numberOfFloors\": \"" + numberOfFloors + "\",");
sb.append("\"squareFeet\": \"" + squareFeet + "\",");
sb.append("\"price\": \"" + price + "\"");
sb.append("}}");
return sb.toString();
}
2025-08-31 18:59:49 -04:00
// @TODO write reservation out in json
public void Write(Reservation reservation) throws IOException {
String dataRoot = DataRepository.getPath();
dataRoot = dataRoot + "/rsv-" + reservation.reservation_number + ".json";
Path path = Paths.get(dataRoot);
try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
2025-08-31 23:54:17 -04:00
writer.write(toString());
2025-08-31 18:59:49 -04:00
writer.flush();
}
}
2025-09-04 22:34:26 -04:00
public void Change(Reservation reservation, ReservationStatusEnum newStatus) throws IllegalOperationException {
2025-09-03 16:08:44 -04:00
try {
if (reservation.reservation_status == ReservationStatusEnum.Completed) {
if (newStatus == ReservationStatusEnum.Canceled) {
2025-09-04 22:34:26 -04:00
throw new IllegalOperationException ("Invalid Change, reservation has completed.");
2025-09-03 16:08:44 -04:00
}
if (ZonedDateTime.now().compareTo(this.reservation_start_date) > -1) {
2025-09-04 22:34:26 -04:00
throw new IllegalOperationException ("Invalid Change, reservation started.");
2025-09-03 16:08:44 -04:00
}
}
if (newStatus == ReservationStatusEnum.Completed) {
this.setPrice(this.calculatePrice());
}
reservation.setReservation_status(newStatus);
2025-09-04 22:34:26 -04:00
} catch (IllegalOperationException e) {
2025-09-03 16:08:44 -04:00
e.printStackTrace();
}
}
2025-08-29 07:26:53 -04:00
public float calculatePricePerNight() {
2025-08-28 21:08:16 -04:00
return 0.0f;
2025-08-29 07:26:53 -04:00
}
2025-08-28 21:08:16 -04:00
2025-08-31 18:59:49 -04:00
public abstract String ReservationType();
2025-09-03 16:08:44 -04:00
public abstract float calculatePrice();
2025-08-31 18:59:49 -04:00
2025-09-03 16:08:44 -04:00
public abstract boolean checkValid() throws Exception;
}