diff --git a/src/java/lodge/TestReservations.java b/src/java/lodge/TestReservations.java index 064a3dd..cebc50d 100644 --- a/src/java/lodge/TestReservations.java +++ b/src/java/lodge/TestReservations.java @@ -12,6 +12,7 @@ import lodge.reservationsystem.HotelReservation; import lodge.reservationsystem.HouseReservation; import lodge.reservationsystem.Reservation; import lodge.reservationsystem.ReservationStatusEnum; +import lodge.reservationsystem.DuplicateObjectException; public final class TestReservations { public static void main(String[] args) throws Exception { @@ -91,12 +92,12 @@ public final class TestReservations { Reservation rsrv = account.getReservation_list().getLast(); // 6. Complete reservation that is associated with an account - rsrv = mgr.retreiveReservation(cabin.getReservation_number()); + rsrv = mgr.retreiveReservation(rsrv.getReservation_number()); rsrv.Change(rsrv, ReservationStatusEnum.Completed); mgr.UpdateAccount(mgr.retrieveAccount(acct.account_number())); // 7. Cancel reservation that is associated with an account - rsrv = mgr.retreiveReservation(cabin.getReservation_number()); + rsrv = mgr.retreiveReservation(rsrv.getReservation_number()); rsrv.Change(rsrv, ReservationStatusEnum.Canceled); mgr.UpdateAccount(mgr.retrieveAccount(acct.account_number())); /* diff --git a/src/java/lodge/reservationsystem/AccomodationManager.java b/src/java/lodge/reservationsystem/AccomodationManager.java index 3c9f173..824f166 100644 --- a/src/java/lodge/reservationsystem/AccomodationManager.java +++ b/src/java/lodge/reservationsystem/AccomodationManager.java @@ -7,14 +7,13 @@ public final class AccomodationManager { private final AccountList account_list = new AccountList(); - @SuppressWarnings("unused") - AccomodationManager(){ + AccomodationManager() { }; - - public AccomodationManager(String home){ - + + public AccomodationManager(String home) { + setDataStoreRoot(home); - }; + }; public final void setDataStoreRoot(String home) { DataRepository.setDataStoreRoot(home); @@ -30,13 +29,12 @@ public final class AccomodationManager { // Load / Deserialize Account void load(Path file) throws Exception { - AddAccount( DataRepository.LoadAccount(file) ); + Account account = DataRepository.LoadAccount(file); - if( account == null ) - { - System.out.println( String.format("%s", file.toString() )); - }else{ - account_list.add( account ); + if (account == null) { + System.out.println(String.format("%s", file.toString())); + } else { + account_list.add(account); } } @@ -53,8 +51,9 @@ public final class AccomodationManager { } public void UpdateAccount(Account acct) throws Exception { - - AccountList.save(account_list, acct); + if( acct != null ){ + AccountList.save(account_list, acct); + } } public final Account newAccount(String phone_number, Address mailing_address, EmailAddress email_address) diff --git a/src/java/lodge/reservationsystem/Account.java b/src/java/lodge/reservationsystem/Account.java index c0e1940..48f2bbe 100644 --- a/src/java/lodge/reservationsystem/Account.java +++ b/src/java/lodge/reservationsystem/Account.java @@ -55,7 +55,7 @@ public class Account { result = reservation_list.add(rsrv); if (!result) { - throw new ReservationException("Error Reservation already exists."); + throw new DuplicateObjectException("Error Reservation already exists."); } } catch (ReservationException e) { e.printStackTrace(); diff --git a/src/java/lodge/reservationsystem/AccountList.java b/src/java/lodge/reservationsystem/AccountList.java index f1df929..31e2620 100644 --- a/src/java/lodge/reservationsystem/AccountList.java +++ b/src/java/lodge/reservationsystem/AccountList.java @@ -5,7 +5,7 @@ import java.util.ArrayList; public class AccountList extends ArrayList { - public AccountList(){ + public AccountList() { } @@ -13,7 +13,8 @@ public class AccountList extends ArrayList { return String.format("A%09d", Math.abs(java.util.Objects.hash(phone_number, mailing_address, email_address))); } - public static Account newAccount(String phone_number, Address mailing_address, EmailAddress email_address) throws Exception { + public static Account newAccount(String phone_number, Address mailing_address, EmailAddress email_address) + throws Exception { Account A = new Account(AccountList.accountSerial(phone_number, mailing_address, email_address), phone_number, mailing_address, @@ -21,20 +22,21 @@ public class AccountList extends ArrayList { return A; } - // ** Add account throw error if account number is pre-existing. */ - public static Account addAccount(final AccountList account_list, final Account account) throws DuplicateObjectException, AccountException { - String acctNumber = ""; - for(Account acct: account_list){ - if( acct.account_number() == account.account_number() ){ - acctNumber = acct.account_number(); - break; + + // ** Add account throw error if account number is pre-existing. */ + public static Account addAccount(final AccountList account_list, final Account account) + throws DuplicateObjectException, AccountException { + try { + for (Account acct : account_list) { + if (acct.account_number().compareTo(account.account_number()) == 0) { + throw new DuplicateObjectException( + String.format("Account %s exists, duplicates not allowed.", acct.account_number())); + } } + } catch (DuplicateObjectException e) { + return null; } - if (!acctNumber.isEmpty()) { - throw new DuplicateObjectException("Account exists, duplicates not allowed."); - } else { - account_list.add(account); - } + account_list.add(account); return account; } @@ -52,8 +54,8 @@ public class AccountList extends ArrayList { // ** Find account return null not-existing. */ public static Account retrieveAccount(final AccountList account_list, String account_number) { - for(Account acct: account_list){ - if( acct.account_number() == account_number ){ + for (Account acct : account_list) { + if (acct.account_number() == account_number) { return acct; } } diff --git a/src/java/lodge/reservationsystem/AccountReservationList.java b/src/java/lodge/reservationsystem/AccountReservationList.java index 6a9aef0..1579163 100644 --- a/src/java/lodge/reservationsystem/AccountReservationList.java +++ b/src/java/lodge/reservationsystem/AccountReservationList.java @@ -16,10 +16,10 @@ public class AccountReservationList extends ArrayList { return false; } for(Reservation rsrv: this){ - boolean result = reservation.getReservation_number().compareTo(rsrv.getReservation_number()) == 0; - if(result){ - return result; - } + result = reservation.getReservation_number().compareTo(rsrv.getReservation_number()) == 0; + if(result){ + return false; + } } reservation.reservation_number = AccountReservationList.reservationSerial(reservation); return super.add(reservation); diff --git a/src/java/lodge/reservationsystem/DataRepository.java b/src/java/lodge/reservationsystem/DataRepository.java index 1ec61c3..4055fc8 100644 --- a/src/java/lodge/reservationsystem/DataRepository.java +++ b/src/java/lodge/reservationsystem/DataRepository.java @@ -3,7 +3,6 @@ package lodge.reservationsystem; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; -import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.nio.file.FileVisitResult; import java.nio.file.Files; @@ -13,7 +12,6 @@ import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.time.ZonedDateTime; - import com.google.gson.stream.JsonReader; final class DataRepository { @@ -65,15 +63,7 @@ final class DataRepository { } }); } - - public static Account LoadAccount(Path file) throws IOException { - Account ac = null; - try (BufferedReader in = new BufferedReader(new FileReader(file.toFile(), StandardCharsets.UTF_8))) { - JsonReader jsonReader = new JsonReader(in); - /** - * @param file - * @throws IOException - */ + public final static Account LoadAccount(final Path file) throws IOException { /** @TODO finish loading Account */ try (BufferedReader in = new BufferedReader(new FileReader(file.toFile(), StandardCharsets.UTF_8)); @@ -133,7 +123,6 @@ final class DataRepository { jsonReader.close(); return ac.account_number.length() > 8 ? ac : null; } - return ac; } static void loadReservationRefList(JsonReader rdr, Account ac) throws IOException { diff --git a/src/java/lodge/reservationsystem/DuplicateObjectException.java b/src/java/lodge/reservationsystem/DuplicateObjectException.java index 1824aa7..c5c9ea6 100644 --- a/src/java/lodge/reservationsystem/DuplicateObjectException.java +++ b/src/java/lodge/reservationsystem/DuplicateObjectException.java @@ -1,6 +1,6 @@ package lodge.reservationsystem; -class DuplicateObjectException extends RuntimeException { +public class DuplicateObjectException extends RuntimeException { public DuplicateObjectException() { super(); } diff --git a/src/resources/acc-A1450981765.json b/src/resources/acc-A1450981765.json new file mode 100644 index 0000000..33b38e7 --- /dev/null +++ b/src/resources/acc-A1450981765.json @@ -0,0 +1 @@ +{ "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"}},"reservation_list":[{"HotelReservation":{"reservation_number":"R0123077641"}},{"CabinReservation":{"reservation_number":"R2042828431"}},{"HouseReservation":{"reservation_number":"R0499811708"}}]}} \ No newline at end of file diff --git a/src/resources/rsv-R0123077641.json b/src/resources/rsv-R0123077641.json new file mode 100644 index 0000000..71a1a91 --- /dev/null +++ b/src/resources/rsv-R0123077641.json @@ -0,0 +1 @@ +{ "HotelReservation":{"reservation_type": "HotelReservation","reservation_number": "R0123077641","reservation_status": "Draft","reservation_start_date": "2025-07-05T10:00Z[UTC]","reservation_end_date": "2025-11-30T22:00Z[UTC]","physical_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "CA","zip": "20723"}},"mailing_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"kitchen": "None","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "120.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R0499811708.json b/src/resources/rsv-R0499811708.json new file mode 100644 index 0000000..e3889e1 --- /dev/null +++ b/src/resources/rsv-R0499811708.json @@ -0,0 +1 @@ +{ "HouseReservation":{"reservation_type": "HouseReservation","reservation_number": "R0499811708","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-11-30T22:00Z[UTC]","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": "FullKitchen","numberOfBeds": "4","numberOfBedRooms": "3","numberOfBathRooms": "1","numberOfFloors": "3","squareFeet": "1400","price": "120.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R2042828431.json b/src/resources/rsv-R2042828431.json new file mode 100644 index 0000000..bcbe1e9 --- /dev/null +++ b/src/resources/rsv-R2042828431.json @@ -0,0 +1 @@ +{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R2042828431","reservation_status": "Completed","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-11-30T22:00Z[UTC]","physical_address": { "Address":{"street": "30 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": "4","numberOfBedRooms": "3","numberOfBathRooms": "1","numberOfFloors": "2","squareFeet": "806","price": "10200.0"}} \ No newline at end of file