diff --git a/libs/error_prone_annotations-2.41.0.jar b/libs/error_prone_annotations-2.41.0.jar new file mode 100644 index 0000000..4ef60ab Binary files /dev/null and b/libs/error_prone_annotations-2.41.0.jar differ diff --git a/libs/gson-2.13.2.jar b/libs/gson-2.13.2.jar new file mode 100644 index 0000000..5a1b74e Binary files /dev/null and b/libs/gson-2.13.2.jar differ diff --git a/sdd/Software_Detail_Design.docx b/sdd/Software_Detail_Design.docx index 231d04c..fd5bd55 100644 Binary files a/sdd/Software_Detail_Design.docx and b/sdd/Software_Detail_Design.docx differ diff --git a/src/main/java/lodge/TestAccountLoad.java b/src/main/java/lodge/TestAccountLoad.java index 3ea07d4..408d1b7 100755 --- a/src/main/java/lodge/TestAccountLoad.java +++ b/src/main/java/lodge/TestAccountLoad.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge; diff --git a/src/main/java/lodge/TestReservations.java b/src/main/java/lodge/TestReservations.java index 7444a66..6013ce5 100644 --- a/src/main/java/lodge/TestReservations.java +++ b/src/main/java/lodge/TestReservations.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge; diff --git a/src/main/java/lodge/datamodel/Account.java b/src/main/java/lodge/datamodel/Account.java index 18c9635..2085a2f 100644 --- a/src/main/java/lodge/datamodel/Account.java +++ b/src/main/java/lodge/datamodel/Account.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; diff --git a/src/main/java/lodge/datamodel/AccountList.java b/src/main/java/lodge/datamodel/AccountList.java index 3909cf9..784f14c 100755 --- a/src/main/java/lodge/datamodel/AccountList.java +++ b/src/main/java/lodge/datamodel/AccountList.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + * reservationsystem */ package lodge.datamodel; @@ -13,7 +13,13 @@ import java.util.ListIterator; public class AccountList extends ArrayList { public static String accountSerial(String phone_number, Address mailing_address, EmailAddress email_address) { - return String.format("A%09d", Math.abs(java.util.Objects.hash(phone_number, mailing_address, email_address))); + String serial = String.format("%09d", Math.abs(java.util.Objects.hash(phone_number, mailing_address, email_address))); + serial = serial.length() > 8 ? serial.substring(1, 9): serial; + return String.format("A%s",serial); + } + + public static String reservationSerial(IReservation reservation) { + return AccountReservationList.reservationSerial((Reservation)reservation); } // ** Add account throw error if account number is pre-existing. */ @@ -52,6 +58,14 @@ public class AccountList extends ArrayList { return null; } + public List getListOfAccounts() { + ArrayList readList = new ArrayList<>(); + for (Account acct : this) { + readList.add(acct); + } + return Collections.unmodifiableList(readList); + } + public List getListOfReservations() { ArrayList readList = new ArrayList<>(); for (Account acct : this) { @@ -62,19 +76,4 @@ public class AccountList extends ArrayList { } return Collections.unmodifiableList(readList); } - - // Show the different accounts lists of resverations - public void showReservationList() { - for (IReservation irsrv : this.getListOfReservations()) { - System.out.println(String.format("Account %s: %s, %s", irsrv.getAccountNumber(), - irsrv.getReservation_number(), irsrv.getPhysical_address().getStreet())); - } - } - - // show the accounts - public void showAccountList() { - for (Account acct : this) { - System.out.println(String.format("Account %s", acct.getAccount_number())); - } - } } diff --git a/src/main/java/lodge/datamodel/AccountReservationList.java b/src/main/java/lodge/datamodel/AccountReservationList.java index 5f82a1c..2c2458e 100755 --- a/src/main/java/lodge/datamodel/AccountReservationList.java +++ b/src/main/java/lodge/datamodel/AccountReservationList.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; @@ -8,15 +8,19 @@ import java.util.ArrayList; class AccountReservationList extends ArrayList { - private static String reservationSerial(Reservation reservation) { - return String.format("R%010d", Math.abs(java.util.Objects.hash(reservation.getPhysical_address()))); + public static String reservationSerial(Reservation reservation) { + String serial = String.format("%010d", Math.abs(java.util.Objects.hash(reservation.getPhysical_address()))); + int e = serial.length(); + int s = e - 10; + serial = serial.substring(s, e-1); + return String.format("R%s", serial); } @Override public synchronized boolean add(final IReservation reservation) throws RuntimeException { boolean result = true; ((Reservation) reservation) - .setReservation_number(AccountReservationList.reservationSerial((Reservation) reservation)); + .setReservation_number(AccountReservationList.reservationSerial((Reservation) reservation)); Reservation rsrv = this.find(reservation.getReservation_number()); result = rsrv == null; if (!result) { diff --git a/src/main/java/lodge/datamodel/Address.java b/src/main/java/lodge/datamodel/Address.java index 8a30195..1bb622e 100644 --- a/src/main/java/lodge/datamodel/Address.java +++ b/src/main/java/lodge/datamodel/Address.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; diff --git a/src/main/java/lodge/datamodel/DuplicateObjectException.java b/src/main/java/lodge/datamodel/DuplicateObjectException.java index 7d6f7af..ae7c7a7 100644 --- a/src/main/java/lodge/datamodel/DuplicateObjectException.java +++ b/src/main/java/lodge/datamodel/DuplicateObjectException.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; diff --git a/src/main/java/lodge/datamodel/EmailAddress.java b/src/main/java/lodge/datamodel/EmailAddress.java index 3b5caf6..cc47488 100644 --- a/src/main/java/lodge/datamodel/EmailAddress.java +++ b/src/main/java/lodge/datamodel/EmailAddress.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; diff --git a/src/main/java/lodge/datamodel/IllegalOperationException.java b/src/main/java/lodge/datamodel/IllegalOperationException.java index b6d32b6..57c21b4 100644 --- a/src/main/java/lodge/datamodel/IllegalOperationException.java +++ b/src/main/java/lodge/datamodel/IllegalOperationException.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; diff --git a/src/main/java/lodge/datamodel/KitchenTypeEnum.java b/src/main/java/lodge/datamodel/KitchenTypeEnum.java index 3a6680c..1fdb2a8 100644 --- a/src/main/java/lodge/datamodel/KitchenTypeEnum.java +++ b/src/main/java/lodge/datamodel/KitchenTypeEnum.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; diff --git a/src/main/java/lodge/datamodel/Reservation.java b/src/main/java/lodge/datamodel/Reservation.java index e851d75..fc2417e 100644 --- a/src/main/java/lodge/datamodel/Reservation.java +++ b/src/main/java/lodge/datamodel/Reservation.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; @@ -227,7 +227,7 @@ public abstract class Reservation implements IReservation{ // @TODO write reservation out in json public void Write(Reservation reservation) throws IOException { String dataRoot = DataRepository.getPath(); - dataRoot = dataRoot + "/rsv-" + reservation.reservation_number + ".json"; + dataRoot = dataRoot + "/res-" + reservation.reservation_number + ".json"; Path path = Paths.get(dataRoot); try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { diff --git a/src/main/java/lodge/datamodel/ReservationStatusEnum.java b/src/main/java/lodge/datamodel/ReservationStatusEnum.java index a82298c..fc47cb2 100644 --- a/src/main/java/lodge/datamodel/ReservationStatusEnum.java +++ b/src/main/java/lodge/datamodel/ReservationStatusEnum.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.datamodel; diff --git a/src/main/java/lodge/reservationsystem/AccomodationManager.java b/src/main/java/lodge/reservationsystem/AccomodationManager.java index 129ad5b..95f2174 100644 --- a/src/main/java/lodge/reservationsystem/AccomodationManager.java +++ b/src/main/java/lodge/reservationsystem/AccomodationManager.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.reservationsystem; @@ -36,7 +36,8 @@ public final class AccomodationManager { DataRepository.setDataStoreRoot(home); } - public final void loadAll()throws IOException,IllegalArgumentException,IllegalOperationException,DuplicateObjectException{ + public final void loadAll() + throws IOException, IllegalArgumentException, IllegalOperationException, DuplicateObjectException { accounts.clear(); // walk directories Path rootDir = Paths.get(DataRepository.getPath()); @@ -45,8 +46,9 @@ public final class AccomodationManager { } // Load / Deserialize Account - protected void load(Path file) throws IOException,IllegalArgumentException,IllegalOperationException,DuplicateObjectException { - + protected void load(Path file) + throws IOException, IllegalArgumentException, IllegalOperationException, DuplicateObjectException { + Account account = DataRepository.LoadAccount(file); if (account == null) { System.out.println(String.format("No Account: %s", file.toString())); @@ -69,7 +71,7 @@ public final class AccomodationManager { } public synchronized void UpdateAccount(final Account acct) throws Exception { - if( acct != null ){ + if (acct != null) { accounts.save(acct); } } @@ -86,7 +88,7 @@ public final class AccomodationManager { return acct; } - public boolean addReservation(final Account account, final Reservation reservation){ + public boolean addReservation(final Account account, final Reservation reservation) { boolean result = account.add(reservation); return result; } @@ -95,21 +97,32 @@ public final class AccomodationManager { Reservation rsrv = null; for (Account acct : accounts) { rsrv = acct.findReservation(reservation_number); - if( rsrv!=null ) break; + if (rsrv != null) + break; } return rsrv; } + public List getListOfAccounts() { + return accounts.getListOfAccounts(); + } + public List getReservationList() { return accounts.getListOfReservations(); } + // Show all accounts lists of resverations public void showReservationList() { - accounts.showReservationList(); + for (IReservation irsrv : accounts.getListOfReservations()) { + System.out.println(String.format("Account %s: %s, %s", irsrv.getAccountNumber(), + irsrv.getReservation_number(), irsrv.getPhysical_address().getStreet())); + } } + // show the accounts public void showAccountList() { - accounts.showAccountList(); + for (Account acct : accounts.getListOfAccounts()) { + System.out.println(String.format("Account %s", acct.getAccount_number())); + } } - } \ No newline at end of file diff --git a/src/main/java/lodge/reservationsystem/CabinReservation.java b/src/main/java/lodge/reservationsystem/CabinReservation.java index 14e116b..8d2fc78 100644 --- a/src/main/java/lodge/reservationsystem/CabinReservation.java +++ b/src/main/java/lodge/reservationsystem/CabinReservation.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.reservationsystem; diff --git a/src/main/java/lodge/reservationsystem/DataRepository.java b/src/main/java/lodge/reservationsystem/DataRepository.java index 8fe7a98..9c93d3e 100644 --- a/src/main/java/lodge/reservationsystem/DataRepository.java +++ b/src/main/java/lodge/reservationsystem/DataRepository.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.reservationsystem; @@ -164,7 +164,7 @@ public final class DataRepository { private static void loadReservation(Account ac, String reservationType, String reservationNumber) throws IOException { - String filename = String.format("rsv-%s.json", reservationNumber); + String filename = String.format("res-%s.json", reservationNumber); Path basePath = Paths.get(getPath()); Path resolvedPath = basePath.resolve(filename); diff --git a/src/main/java/lodge/reservationsystem/HotelReservation.java b/src/main/java/lodge/reservationsystem/HotelReservation.java index 2494098..2687c57 100644 --- a/src/main/java/lodge/reservationsystem/HotelReservation.java +++ b/src/main/java/lodge/reservationsystem/HotelReservation.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.reservationsystem; diff --git a/src/main/java/lodge/reservationsystem/HouseReservation.java b/src/main/java/lodge/reservationsystem/HouseReservation.java index 668b13c..2e093d9 100644 --- a/src/main/java/lodge/reservationsystem/HouseReservation.java +++ b/src/main/java/lodge/reservationsystem/HouseReservation.java @@ -1,6 +1,6 @@ /** * license: GPLv3 - * lodge.reservationsystem + reservationsystem */ package lodge.reservationsystem; diff --git a/src/resources/acc-A07421233.json b/src/resources/acc-A07421233.json new file mode 100644 index 0000000..f3a54f9 --- /dev/null +++ b/src/resources/acc-A07421233.json @@ -0,0 +1 @@ +{ "Account":{"account_number": "A07421233","phone_number": "301-356-3890","mailing_address": { "Address":{"street": "30 Amstadam ave","city": "New York","state": "NY","zip": "12010"}},"email_address": { "EmailAddress":{"email": "newbee952@aol.com"}},"reservations":[{"HotelReservation":{"reservation_number":"R012308734"}},{"CabinReservation":{"reservation_number":"R204282843"}}]}} \ No newline at end of file diff --git a/src/resources/acc-A1450981765.json b/src/resources/acc-A1450981765.json deleted file mode 100755 index 64286ac..0000000 --- a/src/resources/acc-A1450981765.json +++ /dev/null @@ -1 +0,0 @@ -{ "Account":{"account_number": "A1450981765","phone_number": "701-456-7890","mailing_address": { "Address":{"street": "10 wilco ave","city": "wilco","state": "WY","zip": "82801"}},"email_address": { "EmailAddress":{"email": "wilco@wyommin.net"}},"reservations":[]}} \ No newline at end of file diff --git a/src/resources/acc-A2074212339.json b/src/resources/acc-A2074212339.json deleted file mode 100755 index db89428..0000000 --- a/src/resources/acc-A2074212339.json +++ /dev/null @@ -1 +0,0 @@ -{ "Account":{"account_number": "A2074212339","phone_number": "301-356-3890","mailing_address": { "Address":{"street": "30 Amstadam ave","city": "New York","state": "NY","zip": "12010"}},"email_address": { "EmailAddress":{"email": "newbee952@aol.com"}},"reservations":[{"HotelReservation":{"reservation_number":"R0123087344"}},{"CabinReservation":{"reservation_number":"R2042828431"}}]}} \ No newline at end of file diff --git a/src/resources/acc-A45098176.json b/src/resources/acc-A45098176.json new file mode 100644 index 0000000..88afc0b --- /dev/null +++ b/src/resources/acc-A45098176.json @@ -0,0 +1 @@ +{ "Account":{"account_number": "A45098176","phone_number": "701-456-7890","mailing_address": { "Address":{"street": "10 wilco ave","city": "wilco","state": "WY","zip": "82801"}},"email_address": { "EmailAddress":{"email": "wilco@wyommin.net"}},"reservations":[{"CabinReservation":{"reservation_number":"R053527662"}},{"HouseReservation":{"reservation_number":"R049981170"}}]}} \ No newline at end of file diff --git a/src/resources/res-R012308734.json b/src/resources/res-R012308734.json new file mode 100644 index 0000000..e6176eb --- /dev/null +++ b/src/resources/res-R012308734.json @@ -0,0 +1 @@ +{ "HotelReservation":{"reservation_type": "HotelReservation","reservation_number": "R012308734","reservation_status": "Canceled","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A07421233","physical_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"mailing_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "410.0"}} \ No newline at end of file diff --git a/src/resources/res-R049981170.json b/src/resources/res-R049981170.json new file mode 100644 index 0000000..c463413 --- /dev/null +++ b/src/resources/res-R049981170.json @@ -0,0 +1 @@ +{ "HouseReservation":{"reservation_type": "HouseReservation","reservation_number": "R049981170","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A45098176","physical_address": { "Address":{"street": "3000 Osage ave","city": "GreenBelt","state": "MD","zip": "20740"}},"mailing_address": { "Address":{"street": "40012 College ave","city": "College Park","state": "MD","zip": "20740"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file diff --git a/src/resources/res-R053527662.json b/src/resources/res-R053527662.json new file mode 100644 index 0000000..eada2ef --- /dev/null +++ b/src/resources/res-R053527662.json @@ -0,0 +1 @@ +{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R053527662","reservation_status": "Completed","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A45098176","physical_address": { "Address":{"street": "40 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "40 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file diff --git a/src/resources/res-R204282843.json b/src/resources/res-R204282843.json new file mode 100644 index 0000000..1106bfc --- /dev/null +++ b/src/resources/res-R204282843.json @@ -0,0 +1 @@ +{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R204282843","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A07421233","physical_address": { "Address":{"street": "30 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "30 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R0123087344.json b/src/resources/rsv-R0123087344.json deleted file mode 100755 index f174413..0000000 --- a/src/resources/rsv-R0123087344.json +++ /dev/null @@ -1 +0,0 @@ -{ "HotelReservation":{"reservation_type": "HotelReservation","reservation_number": "R0123087344","reservation_status": "Canceled","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A2074212339","physical_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"mailing_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "410.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R0499811708.json b/src/resources/rsv-R0499811708.json deleted file mode 100755 index d09837e..0000000 --- a/src/resources/rsv-R0499811708.json +++ /dev/null @@ -1 +0,0 @@ -{ "HouseReservation":{"reservation_type": "HouseReservation","reservation_number": "R0499811708","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A1450981765","physical_address": { "Address":{"street": "3000 Osage ave","city": "GreenBelt","state": "MD","zip": "20740"}},"mailing_address": { "Address":{"street": "40012 College ave","city": "College Park","state": "MD","zip": "20740"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R0535276622.json b/src/resources/rsv-R0535276622.json deleted file mode 100755 index 9172b49..0000000 --- a/src/resources/rsv-R0535276622.json +++ /dev/null @@ -1 +0,0 @@ -{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R0535276622","reservation_status": "Completed","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A1450981765","physical_address": { "Address":{"street": "40 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "40 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R2042828431.json b/src/resources/rsv-R2042828431.json deleted file mode 100755 index 94b082b..0000000 --- a/src/resources/rsv-R2042828431.json +++ /dev/null @@ -1 +0,0 @@ -{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R2042828431","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A2074212339","physical_address": { "Address":{"street": "30 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "30 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file