diff --git a/src/java/lodge/TestReservations.java b/src/java/lodge/TestReservations.java index 57a6328..4ffccbb 100644 --- a/src/java/lodge/TestReservations.java +++ b/src/java/lodge/TestReservations.java @@ -41,14 +41,15 @@ public final class TestReservations { // 5. Add draft lodging reservation to an account (if reservation object already // exists with the same reservation number, it is considered an error) - HotelReservation hotel = new HotelReservation(new Address("400 hotel ave", "Maryland City", "CA", "20723")); + HotelReservation hotel = new HotelReservation( + new Address("400 hotel ave", "Maryland City", "CA", "20723")); hotel.setMailing_address(new Address("400 hotel ave", "Maryland City", "MD", "20723")); hotel.setNumberOfBeds(2); hotel.setNumberOfFloors(1); hotel.setNumberOfBedRooms(1); hotel.setSquareFeet(450); hotel.setReservation_start_date(ZonedDateTime.of(2025, 07, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - hotel.setReservation_end_date(ZonedDateTime.of(2025, 11, 30, 22, 0, 0, 0, ZoneId.of("UTC"))); + hotel.setReservation_end_date(ZonedDateTime.of(2025, 11, 30, 22, 0, 0, 0, ZoneId.of("UTC"))); boolean success1 = mgr.addReservation(acct, hotel); assert success1; @@ -67,7 +68,8 @@ public final class TestReservations { mgr.UpdateAccount(acct); - HouseReservation house = new HouseReservation(new Address("3000 Osage ave", "GreenBelt", "MD", "20740")); + HouseReservation house = new HouseReservation( + new Address("3000 Osage ave", "GreenBelt", "MD", "20740")); house.setMailing_address(new Address("40012 College ave", "College Park", "MD", "20740")); house.setNumberOfBeds(4); house.setNumberOfFloors(3); @@ -80,17 +82,16 @@ public final class TestReservations { mgr.UpdateAccount(acct); - try { - mgr.addReservation(acct, cabin); - mgr.UpdateAccount(mgr.retrieveAccount(acct.getAccount_number())); + mgr.addReservation(acct, cabin); + mgr.UpdateAccount(mgr.retrieveAccount(acct.getAccount_number())); } catch (DuplicateObjectException e) { System.out.println(e.getMessage()); } Account account = mgr.retrieveLoadedAccounts().getFirst(); - Reservation rsrv = account.getReservation_list().getLast(); + Reservation rsrv = account.findReservation(house.getReservation_number()); // 6. Complete reservation that is associated with an account rsrv = mgr.retreiveReservation(rsrv.getReservation_number()); rsrv.Change(rsrv, ReservationStatusEnum.Completed); @@ -100,29 +101,28 @@ public final class TestReservations { rsrv = mgr.retreiveReservation(rsrv.getReservation_number()); rsrv.Change(rsrv, ReservationStatusEnum.Canceled); mgr.UpdateAccount(mgr.retrieveAccount(acct.getAccount_number())); - /* - * - * if (rsrv != null) { - * // 8. Change reservation values that can be changed (if reservation is - * // cancelled, completed, or for past date, it is considered an error) - * rsrv = Reservation.update(rsrv); - * - * // 9. Request for price per night to be calculated and returned for a - * specific - * // reservation - * - * rsrv = Reservation.calculatePricePerNight(rsrv); - * // 10. Request for total reservation price to be calculated and returned for - * a - * // specific reservation - * } - */ + + // 8. Change reservation values that can be changed (if reservation is + // cancelled, completed, or for past date, it is considered an error) + rsrv.update(rsrv); + + // 9. Request for price per night to be calculated and returned for a + // per night + // reservation + + // 10. Request for total reservation price to be calculated and returned for + // specific reservation + rsrv = account.findReservation(house.getReservation_number()); + rsrv.calculatePrice(); + System.out.println("Program Completed."); } - public final static class getRepositoryConfig{ - public final static String getPath(){ - String home = System.getenv("HOME")!=null? System.getenv("HOME"): System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH"); - return home.replace('\\', '/') + "/workspace/reservationsystem/src/resources"; + + public final static class getRepositoryConfig { + public final static String getPath() { + String home = System.getenv("HOME") != null ? System.getenv("HOME") + : System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH"); + return home.replace('\\', '/') + "/workspace/reservationsystem/src/resources"; } } } diff --git a/src/java/lodge/reservationsystem/Account.java b/src/java/lodge/reservationsystem/Account.java index d9c1e98..8cbace6 100644 --- a/src/java/lodge/reservationsystem/Account.java +++ b/src/java/lodge/reservationsystem/Account.java @@ -29,20 +29,16 @@ public class Account { } private final AccountReservationList reservation_list = new AccountReservationList();; - - public final AccountReservationList getReservation_list() { - return reservation_list; - } - + @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{ \"Account\":{"); - sb.append("\"account_number\": \"" + account_number + "\","); - sb.append("\"phone_number\": \"" + phone_number + "\","); - sb.append("\"mailing_address\": " + mailing_address + ","); - sb.append("\"email_address\": " + email_address + ","); + sb.append("\"account_number\": \"").append(account_number).append("\","); + sb.append("\"phone_number\": \"").append(phone_number).append("\","); + sb.append("\"mailing_address\": ").append(mailing_address).append(","); + sb.append("\"email_address\": ").append(email_address).append(","); sb.append(this.reservation_list.toString()); sb.append("}}"); return sb.toString(); @@ -149,7 +145,6 @@ public class Account { this.setEmail_address(acct.email_address); this.setPhone_number(acct.phone_number); this.setMailing_address(acct.mailing_address); - this.getReservation_list().update(acct.getReservation_list()); } } \ No newline at end of file diff --git a/src/java/lodge/reservationsystem/AccountReservationList.java b/src/java/lodge/reservationsystem/AccountReservationList.java index 5ba1694..046ba5e 100644 --- a/src/java/lodge/reservationsystem/AccountReservationList.java +++ b/src/java/lodge/reservationsystem/AccountReservationList.java @@ -5,7 +5,7 @@ import java.util.ArrayList; public class AccountReservationList extends ArrayList { private static String reservationSerial(Reservation reservation) { - return String.format("R%010d", Math.abs(java.util.Objects.hash(reservation.physical_address))); + return String.format("R%010d", Math.abs(java.util.Objects.hash(reservation.getPhysical_address()))); } @Override @@ -19,7 +19,7 @@ public class AccountReservationList extends ArrayList { try { result = reservation.checkValid(); } catch (ReservationException ex) { - return false; + result = false; } if(result){ reservation.setReservation_number(AccountReservationList.reservationSerial(reservation)); diff --git a/src/java/lodge/reservationsystem/CabinReservation.java b/src/java/lodge/reservationsystem/CabinReservation.java index b3b97f7..3f5313e 100644 --- a/src/java/lodge/reservationsystem/CabinReservation.java +++ b/src/java/lodge/reservationsystem/CabinReservation.java @@ -7,29 +7,29 @@ public final class CabinReservation extends Reservation{ CabinReservation(){ super(); + setType('C'); } public CabinReservation(final Address physical_address) { - numberOfBeds = 1; - kitchen = KitchenEnum.Kitchenette; - this.physical_address = new Address(); - this.physical_address.setStreet(physical_address.getStreet()); - this.physical_address.setCity(physical_address.getCity()); - this.physical_address.setState(physical_address.getState()); - this.physical_address.setZip(physical_address.getZip()); + setNumberOfBeds( 1); + setKitchen( KitchenEnum.Kitchenette ); + this.setPhysical_address(new Address()); + this.getPhysical_address().setStreet(physical_address.getStreet()); + this.getPhysical_address().setCity(physical_address.getCity()); + this.getPhysical_address().setState(physical_address.getState()); + this.getPhysical_address().setZip(physical_address.getZip()); } public final String ReservationType() { - type='C'; return "CabinReservation"; } @Override public boolean checkValid() throws IllegalArgumentException { boolean result = false; - if (physical_address == null) { + if (getPhysical_address() == null) { throw new IllegalArgumentException("not valid, physical_address"); } - if (mailing_address == null) { + if (getMailing_address() == null) { throw new IllegalArgumentException("not valid, mailing_address"); } result = true; @@ -40,19 +40,19 @@ public final class CabinReservation extends Reservation{ // Cabin price plus additional fee of $20 for full kitchen and $5 for each additional bathroom @Override public float calculatePrice() { - ZonedDateTime enddt = reservation_end_date.truncatedTo(ChronoUnit.DAYS); - ZonedDateTime startdt = reservation_start_date.truncatedTo(ChronoUnit.DAYS); + ZonedDateTime enddt = getReservation_end_date().truncatedTo(ChronoUnit.DAYS); + ZonedDateTime startdt = getReservation_start_date().truncatedTo(ChronoUnit.DAYS); long days = ChronoUnit.DAYS.between( startdt ,enddt); days = ( days < 2 ) ? 1: days - 1; - price = (squareFeet > 900.0f) ? 120.0f + 15.0f : 120.0f; - if ( kitchen == KitchenEnum.FullKitchen ){ - price = price + 20.0f ; + float calcprice = (getSquareFeet() > 900.0f) ? 120.0f + 15.0f : 120.0f; + if ( getKitchen() == KitchenEnum.FullKitchen ){ + calcprice = calcprice + 20.0f; } - if( numberOfBathRooms > 1 ){ - price = price + (numberOfBathRooms * 5.0f); + if( getNumberOfBathRooms() > 1 ){ + setPrice( getPrice() + (getNumberOfBathRooms() * 5.0f)); } - price = price * days; - return price; + calcprice = calcprice * days; + return calcprice; } } diff --git a/src/java/lodge/reservationsystem/HotelReservation.java b/src/java/lodge/reservationsystem/HotelReservation.java index c6b6c3e..a49f74c 100644 --- a/src/java/lodge/reservationsystem/HotelReservation.java +++ b/src/java/lodge/reservationsystem/HotelReservation.java @@ -7,43 +7,44 @@ public final class HotelReservation extends Reservation { HotelReservation() { super(); - numberOfBeds = 2; + setType('H'); + setNumberOfBeds( 2 ); } public HotelReservation(final Address physical_address) { - numberOfBeds = 2; - numberOfBedRooms = 1; - numberOfBathRooms = 1; - kitchen = KitchenEnum.None; - this.physical_address = new Address(); - this.physical_address.setStreet(physical_address.getStreet()); - this.physical_address.setCity(physical_address.getCity()); - this.physical_address.setState(physical_address.getState()); - this.physical_address.setZip(physical_address.getZip()); + setNumberOfBeds(2); + setNumberOfBedRooms(1); + setNumberOfBathRooms(1); + setNumberOfFloors(1); + setKitchen(KitchenEnum.Kitchenette ); + this.setPhysical_address(new Address()); + this.getPhysical_address().setStreet(physical_address.getStreet()); + this.getPhysical_address().setCity(physical_address.getCity()); + this.getPhysical_address().setState(physical_address.getState()); + this.getPhysical_address().setZip(physical_address.getZip()); } @Override public final String ReservationType() { - type = 'H'; return "HotelReservation"; } @Override public boolean checkValid() throws IllegalArgumentException { boolean result = false; - if (numberOfBathRooms != 1) { + if (getNumberOfBathRooms() != 1) { throw new IllegalArgumentException("not valid, Baths"); } - if (numberOfBedRooms != 1) { + if (getNumberOfBedRooms() != 1) { throw new IllegalArgumentException("not valid, BedRooms"); } - if (numberOfBeds != 2) { + if (getNumberOfBeds() != 2) { throw new IllegalArgumentException("not valid, Beds"); } - if (physical_address == null) { + if (getPhysical_address() == null) { throw new IllegalArgumentException("not valid, physical_address"); } - if (mailing_address == null) { + if (getMailing_address() == null) { throw new IllegalArgumentException("not valid, mailing_address"); } result = true; @@ -52,17 +53,19 @@ public final class HotelReservation extends Reservation { // calculate and return the reservation's price // Hotel price plus additional flat fee of $50 plus $10 for kitchenette + @Override public float calculatePrice() { - ZonedDateTime enddt = reservation_end_date.truncatedTo(ChronoUnit.DAYS); - ZonedDateTime startdt = reservation_start_date.truncatedTo(ChronoUnit.DAYS); - long days = ChronoUnit.DAYS.between(startdt, enddt); - days = (days < 2) ? 1 : days - 1; - price = (squareFeet > 900.0f) ? 120.0f + 15.0f : 120.0f; - if (kitchen == KitchenEnum.FullKitchen) { - price = price + 10.0f; + ZonedDateTime enddt = getReservation_end_date().truncatedTo(ChronoUnit.DAYS); + ZonedDateTime startdt = getReservation_start_date().truncatedTo(ChronoUnit.DAYS); + long days = ChronoUnit.DAYS.between( startdt ,enddt); + days = ( days < 2 ) ? 1: days - 1; + + float calcprice = (getSquareFeet() > 900.0f) ? 120.0f + 15.0f : 120.0f; + if (getKitchen() == KitchenEnum.FullKitchen) { + calcprice = calcprice + 10.0f; } - price = price * days; - price = price + 50.0f; - return price; + calcprice = calcprice * days; + calcprice = calcprice + 50.0f; + return calcprice; } } diff --git a/src/java/lodge/reservationsystem/HouseReservation.java b/src/java/lodge/reservationsystem/HouseReservation.java index dce9265..f3e066d 100644 --- a/src/java/lodge/reservationsystem/HouseReservation.java +++ b/src/java/lodge/reservationsystem/HouseReservation.java @@ -7,32 +7,32 @@ public final class HouseReservation extends Reservation { HouseReservation(){ super(); + this.setType( 'Z' ); } public HouseReservation(final Address physical_address) { - numberOfBeds = 2; - numberOfBedRooms = 1; - numberOfBathRooms = 1; - numberOfFloors = 1; - kitchen = KitchenEnum.FullKitchen; - this.physical_address = new Address(); - this.physical_address.setStreet(physical_address.getStreet()); - this.physical_address.setCity(physical_address.getCity()); - this.physical_address.setState(physical_address.getState()); - this.physical_address.setZip(physical_address.getZip()); + setNumberOfBeds(2); + setNumberOfBedRooms(1); + setNumberOfBathRooms(1); + setNumberOfFloors(1); + setKitchen(KitchenEnum.Kitchenette ); + this.setPhysical_address(new Address()); + this.getPhysical_address().setStreet(physical_address.getStreet()); + this.getPhysical_address().setCity(physical_address.getCity()); + this.getPhysical_address().setState(physical_address.getState()); + this.getPhysical_address().setZip(physical_address.getZip()); } public final String ReservationType() { - type = 'Z'; return "HouseReservation"; } public boolean checkValid() throws IllegalArgumentException { boolean result = false; - if (physical_address == null) { + if (getPhysical_address() == null) { throw new IllegalArgumentException("not valid, physical_address"); } - if (mailing_address == null) { + if (getMailing_address() == null) { throw new IllegalArgumentException("not valid, mailing_address"); } result = true; @@ -40,19 +40,18 @@ public final class HouseReservation extends Reservation { } public float getPricePerNight(){ - price = (squareFeet > 900.0f) ? 120.0f + 15.0f : 120.0f; - return price; + return (getSquareFeet() > 900.0f) ? 120.0f + 15.0f : 120.0f; } // calculate and return the reservation's price // Hotel price plus additional flat fee of $50 plus $10 for kitchenette @Override public float calculatePrice() { - ZonedDateTime enddt = reservation_end_date.truncatedTo(ChronoUnit.DAYS); - ZonedDateTime startdt = reservation_start_date.truncatedTo(ChronoUnit.DAYS); - long days = ChronoUnit.DAYS.between( startdt, enddt); + ZonedDateTime enddt = getReservation_end_date().truncatedTo(ChronoUnit.DAYS); + ZonedDateTime startdt = getReservation_start_date().truncatedTo(ChronoUnit.DAYS); + long days = ChronoUnit.DAYS.between( startdt ,enddt); days = ( days < 2 ) ? 1: days - 1; - price = getPricePerNight() * days; - return price; + float calcprice = getPricePerNight() * days; + return calcprice; } } \ No newline at end of file diff --git a/src/java/lodge/reservationsystem/Reservation.java b/src/java/lodge/reservationsystem/Reservation.java index ce26a6f..20ef705 100644 --- a/src/java/lodge/reservationsystem/Reservation.java +++ b/src/java/lodge/reservationsystem/Reservation.java @@ -9,26 +9,26 @@ import java.nio.file.Paths; import java.time.ZonedDateTime; public abstract class Reservation { - char type; - String reservation_number = "-99"; - Address physical_address; - Address mailing_address; + private char type; + private String reservation_number = "-99"; + private Address physical_address; + private Address mailing_address; - ZonedDateTime reservation_start_date; - ZonedDateTime reservation_end_date; - ReservationStatusEnum reservation_status; + private ZonedDateTime reservation_start_date; + private ZonedDateTime reservation_end_date; + private ReservationStatusEnum reservation_status; - KitchenEnum kitchen; + private KitchenEnum kitchen; - Integer numberOfBeds; - Integer numberOfBedRooms; - Integer numberOfBathRooms; - Integer numberOfFloors; - Integer squareFeet; + private Integer numberOfBeds; + private Integer numberOfBedRooms; + private Integer numberOfBathRooms; + private Integer numberOfFloors; + private Integer squareFeet; Float price; - Reservation() { + protected Reservation() { numberOfBeds = 1; numberOfBedRooms = 1; numberOfBathRooms = 1; @@ -40,16 +40,12 @@ public abstract class Reservation { physical_address = null; } - public String getReservation_number() { - return reservation_number; - } - public void setReservation_number(String reservation_number) { this.reservation_number = reservation_number; } - public Address physical_address() { - return physical_address; + public String getReservation_number() { + return this.reservation_number; } public void setPhysical_address(Address physical_address) { @@ -64,26 +60,14 @@ public abstract class Reservation { this.mailing_address = mailing_address; } - public ZonedDateTime reservation_start_date() { - return reservation_start_date; - } - public void setReservation_start_date(ZonedDateTime reservation_start_date) { this.reservation_start_date = reservation_start_date; } - public ZonedDateTime reservation_end_date() { - return reservation_end_date; - } - public void setReservation_end_date(ZonedDateTime reservation_end_date) { this.reservation_end_date = reservation_end_date; } - public ReservationStatusEnum reservation_status() { - return reservation_status; - } - public void setReservation_status(ReservationStatusEnum reservation_status) { this.reservation_status = reservation_status; } @@ -96,11 +80,6 @@ public abstract class Reservation { this.kitchen = kitchen; } - - public Integer numberOfBeds() { - return numberOfBeds; - } - public void setNumberOfBeds(Integer numberOfBeds) { this.numberOfBeds = numberOfBeds; } @@ -113,38 +92,74 @@ public abstract class Reservation { 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; } + public char getType() { + return type; + } + + protected 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; @@ -175,20 +190,20 @@ public abstract class Reservation { StringBuilder sb = new StringBuilder(); sb.append(String.format("{ \"%s\":{", ReservationType())); - sb.append("\"reservation_type\": \"" + ReservationType() + "\","); - sb.append("\"reservation_number\": \"" + reservation_number + "\","); - sb.append("\"reservation_status\": \"" + reservation_status + "\","); - sb.append("\"reservation_start_date\": \"" + reservation_start_date + "\","); - sb.append("\"reservation_end_date\": \"" + reservation_end_date + "\","); - sb.append("\"physical_address\": " + physical_address + ","); - sb.append("\"mailing_address\": " + mailing_address + ","); - sb.append("\"kitchen\": \"" + kitchen + "\","); - 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("\"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("\"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(); } @@ -205,14 +220,14 @@ public abstract class Reservation { } } - public void Change(Reservation reservation, ReservationStatusEnum newStatus) throws IllegalOperationException { + public void Change(Reservation reservation, ReservationStatusEnum newStatus) throws IllegalOperationException { try { if (reservation.reservation_status == ReservationStatusEnum.Completed) { if (newStatus == ReservationStatusEnum.Canceled) { - throw new IllegalOperationException ("Invalid Change, reservation has completed."); + throw new IllegalOperationException("Invalid Change, reservation has completed."); } if (ZonedDateTime.now().compareTo(this.reservation_start_date) > -1) { - throw new IllegalOperationException ("Invalid Change, reservation time started."); + throw new IllegalOperationException("Invalid Change, reservation time started."); } } @@ -225,10 +240,6 @@ public abstract class Reservation { } } - public float calculatePricePerNight() { - return 0.0f; - } - public abstract String ReservationType(); public abstract float calculatePrice();