updates
This commit is contained in:
267
src/main/java/lodge/datamodel/Reservation.java
Normal file
267
src/main/java/lodge/datamodel/Reservation.java
Normal file
@@ -0,0 +1,267 @@
|
||||
/**
|
||||
* license: GPLv3
|
||||
* lodge.reservationsystem
|
||||
*/
|
||||
package lodge.datamodel;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import lodge.reservationsystem.DataRepository;
|
||||
|
||||
public abstract class Reservation implements IReservation{
|
||||
private char type;
|
||||
private String reservation_number = "-99";
|
||||
private Address physical_address;
|
||||
private Address mailing_address;
|
||||
|
||||
private ZonedDateTime reservation_start_date;
|
||||
private ZonedDateTime reservation_end_date;
|
||||
private ReservationStatusEnum reservation_status;
|
||||
|
||||
private KitchenTypeEnum kitchen;
|
||||
|
||||
private Integer numberOfBeds;
|
||||
private Integer numberOfBedRooms;
|
||||
private Integer numberOfBathRooms;
|
||||
private Integer numberOfFloors;
|
||||
private Integer squareFeet;
|
||||
|
||||
private Float price;
|
||||
|
||||
protected String accountNumber = null;
|
||||
|
||||
protected Reservation() {
|
||||
numberOfBeds = 1;
|
||||
numberOfBedRooms = 1;
|
||||
numberOfBathRooms = 1;
|
||||
numberOfFloors = 1;
|
||||
kitchen = KitchenTypeEnum.None;
|
||||
price = 120.0f;
|
||||
reservation_status = ReservationStatusEnum.Draft;
|
||||
mailing_address = null;
|
||||
physical_address = null;
|
||||
}
|
||||
|
||||
public void setReservation_number(String reservation_number) {
|
||||
this.reservation_number = reservation_number;
|
||||
}
|
||||
|
||||
public String getReservation_number() {
|
||||
return this.reservation_number;
|
||||
}
|
||||
|
||||
public String getAccountNumber() {
|
||||
return this.accountNumber;
|
||||
}
|
||||
|
||||
public void setAccountNumber(String account_number) {
|
||||
this.accountNumber = account_number;
|
||||
}
|
||||
|
||||
public void setPhysical_address(Address physical_address) {
|
||||
this.physical_address = physical_address;
|
||||
}
|
||||
|
||||
public Address mailing_address() {
|
||||
return mailing_address;
|
||||
}
|
||||
|
||||
public void setMailing_address(Address mailing_address) {
|
||||
this.mailing_address = mailing_address;
|
||||
}
|
||||
|
||||
public void setReservation_start_date(ZonedDateTime reservation_start_date) {
|
||||
this.reservation_start_date = reservation_start_date;
|
||||
}
|
||||
|
||||
public void setReservation_end_date(ZonedDateTime reservation_end_date) {
|
||||
this.reservation_end_date = reservation_end_date;
|
||||
}
|
||||
|
||||
public void setReservation_status(ReservationStatusEnum reservation_status) {
|
||||
this.reservation_status = reservation_status;
|
||||
}
|
||||
|
||||
public KitchenTypeEnum getKitchen() {
|
||||
return kitchen;
|
||||
}
|
||||
|
||||
public void setKitchen(KitchenTypeEnum kitchen) {
|
||||
this.kitchen = kitchen;
|
||||
}
|
||||
|
||||
public void setNumberOfBeds(Integer numberOfBeds) {
|
||||
this.numberOfBeds = numberOfBeds;
|
||||
}
|
||||
|
||||
public Integer numberOfBedRooms() {
|
||||
return numberOfBedRooms;
|
||||
}
|
||||
|
||||
public void setNumberOfBedRooms(Integer numberOfBedRooms) {
|
||||
this.numberOfBedRooms = numberOfBedRooms;
|
||||
}
|
||||
|
||||
public void setNumberOfBathRooms(Integer numberOfBathRooms) {
|
||||
this.numberOfBathRooms = numberOfBathRooms;
|
||||
}
|
||||
|
||||
public void setNumberOfFloors(Integer numberOfFloors) {
|
||||
this.numberOfFloors = numberOfFloors;
|
||||
}
|
||||
|
||||
public void setSquareFeet(Integer squareFeet) {
|
||||
this.squareFeet = squareFeet;
|
||||
}
|
||||
|
||||
public void setPrice(Float price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public char getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(char type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Address getPhysical_address() {
|
||||
return physical_address;
|
||||
}
|
||||
|
||||
public Address getMailing_address() {
|
||||
return mailing_address;
|
||||
}
|
||||
|
||||
public ZonedDateTime getReservation_start_date() {
|
||||
return reservation_start_date;
|
||||
}
|
||||
|
||||
public ZonedDateTime getReservation_end_date() {
|
||||
return reservation_end_date;
|
||||
}
|
||||
|
||||
public ReservationStatusEnum getReservation_status() {
|
||||
return reservation_status;
|
||||
}
|
||||
|
||||
public Integer getNumberOfBeds() {
|
||||
return numberOfBeds;
|
||||
}
|
||||
|
||||
public Integer getNumberOfBedRooms() {
|
||||
return numberOfBedRooms;
|
||||
}
|
||||
|
||||
public Integer getNumberOfBathRooms() {
|
||||
return numberOfBathRooms;
|
||||
}
|
||||
|
||||
public Integer getNumberOfFloors() {
|
||||
return numberOfFloors;
|
||||
}
|
||||
|
||||
public Integer getSquareFeet() {
|
||||
return squareFeet;
|
||||
}
|
||||
|
||||
public Float getPrice() {
|
||||
return 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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(String.format("{ \"%s\":{", this.ReservationType()));
|
||||
sb.append("\"reservation_type\": \"").append(ReservationType()).append("\",");
|
||||
sb.append("\"reservation_number\": \"").append(reservation_number).append("\",");
|
||||
sb.append("\"reservation_status\": \"").append(reservation_status).append("\",");
|
||||
sb.append("\"reservation_start_date\": \"").append(reservation_start_date).append("\",");
|
||||
sb.append("\"reservation_end_date\": \"").append(reservation_end_date).append("\",");
|
||||
sb.append("\"account_number\": \"").append(accountNumber).append("\",");
|
||||
sb.append("\"physical_address\": ").append(physical_address).append(",");
|
||||
sb.append("\"mailing_address\": ").append(mailing_address).append(",");
|
||||
sb.append("\"kitchen\": \"").append(kitchen).append("\",");
|
||||
sb.append("\"numberOfBeds\": \"").append(numberOfBeds).append("\",");
|
||||
sb.append("\"numberOfBedRooms\": \"").append(numberOfBedRooms).append("\",");
|
||||
sb.append("\"numberOfBathRooms\": \"").append(numberOfBathRooms).append("\",");
|
||||
sb.append("\"numberOfFloors\": \"").append(numberOfFloors).append("\",");
|
||||
sb.append("\"squareFeet\": \"").append(squareFeet).append("\",");
|
||||
sb.append("\"price\": \"").append(price).append("\"");
|
||||
sb.append("}}");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
// @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)) {
|
||||
writer.write(toString());
|
||||
writer.flush();
|
||||
}
|
||||
}
|
||||
|
||||
public void Change(Reservation reservation, ReservationStatusEnum newStatus) throws IllegalOperationException {
|
||||
try {
|
||||
if (reservation.reservation_status == ReservationStatusEnum.Completed ||
|
||||
reservation.reservation_status == ReservationStatusEnum.Canceled) {
|
||||
if (newStatus == ReservationStatusEnum.Canceled) {
|
||||
throw new IllegalOperationException(
|
||||
String.format("Invalid Change, reservation has %s.", reservation.getReservation_status()));
|
||||
}
|
||||
if (ZonedDateTime.now().compareTo(this.reservation_start_date) > -1) {
|
||||
throw new IllegalOperationException("Invalid Change, reservation has begun.");
|
||||
}
|
||||
}
|
||||
|
||||
if (newStatus == ReservationStatusEnum.Completed) {
|
||||
IReservation irsrv = (IReservation) this;
|
||||
this.setPrice(irsrv.calculatePrice());
|
||||
}
|
||||
reservation.setReservation_status(newStatus);
|
||||
} catch (IllegalOperationException e) {
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public void update(Reservation rsrv) {
|
||||
|
||||
}
|
||||
|
||||
public abstract String ReservationType();
|
||||
}
|
||||
Reference in New Issue
Block a user