From 48c142c573be1ce561e4144297f4fe737193a33e Mon Sep 17 00:00:00 2001 From: Sherwin Price Date: Sat, 13 Sep 2025 20:33:29 -0400 Subject: [PATCH] track account --- src/java/lodge/TestReservations.java | 20 +++++----- src/java/lodge/reservationsystem/Account.java | 20 ++++++---- .../lodge/reservationsystem/AccountList.java | 17 +++++++++ .../AccountReservationList.java | 2 +- .../reservationsystem/DataRepository.java | 3 ++ .../lodge/reservationsystem/Reservation.java | 13 ++++++- src/resources/acc-A1450981765.json | 37 ++++++++++++++++++- src/resources/acc-A2074212339.json | 27 +++++++++++++- src/resources/rsv-R0123077641.json | 2 +- src/resources/rsv-R0499811708.json | 34 ++++++++++++++++- src/resources/rsv-R0535276622.json | 34 ++++++++++++++++- src/resources/rsv-R2042828431.json | 2 +- 12 files changed, 185 insertions(+), 26 deletions(-) diff --git a/src/java/lodge/TestReservations.java b/src/java/lodge/TestReservations.java index 2e3525c..6402428 100644 --- a/src/java/lodge/TestReservations.java +++ b/src/java/lodge/TestReservations.java @@ -59,18 +59,18 @@ public final class TestReservations { mgr.UpdateAccount(acct); - CabinReservation cabin = new CabinReservation(new Address("30 cabin ave", "Carnelian", "CA", "96140")); - cabin.setMailing_address(new Address("30 cabin ave", "Carnelian Bay", "CA", "96140")); - cabin.setNumberOfBeds(4); - cabin.setNumberOfFloors(2); - cabin.setNumberOfBedRooms(3); - cabin.setSquareFeet(806); - cabin.setReservation_start_date(ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - cabin.setReservation_end_date(ZonedDateTime.of(2025, 11, 30, 22, 0, 0, 0, ZoneId.of("UTC"))); - mgr.addReservation(acct2, cabin); + CabinReservation cabin2 = new CabinReservation(new Address("30 cabin ave", "Carnelian", "CA", "96140")); + cabin2.setMailing_address(new Address("30 cabin ave", "Carnelian Bay", "CA", "96140")); + cabin2.setNumberOfBeds(4); + cabin2.setNumberOfFloors(2); + cabin2.setNumberOfBedRooms(3); + cabin2.setSquareFeet(806); + cabin2.setReservation_start_date(ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); + cabin2.setReservation_end_date(ZonedDateTime.of(2025, 11, 30, 22, 0, 0, 0, ZoneId.of("UTC"))); + mgr.addReservation(acct2, cabin2); mgr.UpdateAccount(acct2); - cabin = new CabinReservation(new Address("40 cabin ave", "Carnelian", "CA", "96140")); + CabinReservation cabin = new CabinReservation(new Address("40 cabin ave", "Carnelian", "CA", "96140")); cabin.setMailing_address(new Address("40 cabin ave", "Carnelian Bay", "CA", "96140")); cabin.setNumberOfBeds(4); cabin.setNumberOfFloors(2); diff --git a/src/java/lodge/reservationsystem/Account.java b/src/java/lodge/reservationsystem/Account.java index 8cbace6..f0611f7 100644 --- a/src/java/lodge/reservationsystem/Account.java +++ b/src/java/lodge/reservationsystem/Account.java @@ -7,6 +7,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Collections; + public class Account { private String account_number = "-99"; private String phone_number; @@ -44,24 +46,21 @@ public class Account { return sb.toString(); } - public boolean add(Reservation rsrv) throws ReservationException { + public boolean add(Reservation rsrv) throws DuplicateObjectException { boolean result = false; if (rsrv == null) { return false; } try { - rsrv.checkValid(); result = reservation_list.add(rsrv); - - if (!result) { - throw new DuplicateObjectException("Error Reservation already exists."); - } } catch (DuplicateObjectException e) { System.out.println(String.format("%s", e.getMessage())); - } catch (ReservationException e) { - System.out.println(e.toString()); } finally { } + if(result){ + /* add account number to reservation for tracking purposes */ + rsrv.setAccountNumber( this.account_number ); + } return result; } @@ -147,4 +146,9 @@ public class Account { this.setMailing_address(acct.mailing_address); } + public Reservation[] getAllReservations() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getAllReservations'"); + } + } \ No newline at end of file diff --git a/src/java/lodge/reservationsystem/AccountList.java b/src/java/lodge/reservationsystem/AccountList.java index 47aa158..8c3c2c3 100644 --- a/src/java/lodge/reservationsystem/AccountList.java +++ b/src/java/lodge/reservationsystem/AccountList.java @@ -1,7 +1,10 @@ package lodge.reservationsystem; import java.io.IOException; +import java.lang.classfile.Superclass; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class AccountList extends ArrayList { @@ -57,4 +60,18 @@ public class AccountList extends ArrayList { } return null; } + + public List getList() { + return Collections.unmodifiableList(this); + } + + public List getListOfReservations() { + ArrayList readList = new ArrayList(); + for (Account acct: this){ + for (Reservation rsrv: acct.getAllReservations()){ + readList.add(rsrv); + } + } + return Collections.unmodifiableList(readList); + } } diff --git a/src/java/lodge/reservationsystem/AccountReservationList.java b/src/java/lodge/reservationsystem/AccountReservationList.java index 046ba5e..f9b8b21 100644 --- a/src/java/lodge/reservationsystem/AccountReservationList.java +++ b/src/java/lodge/reservationsystem/AccountReservationList.java @@ -14,7 +14,7 @@ public class AccountReservationList extends ArrayList { Reservation rsrv = this.find(reservation.getReservation_number()); if( rsrv != null ){ result = false; - throw new DuplicateObjectException(String.format("Error Duplicate: Reservation %s", rsrv.getReservation_number())); + throw new DuplicateObjectException(String.format("Error No Dups, Reservation exists: %s.", rsrv.getReservation_number())); } try { result = reservation.checkValid(); diff --git a/src/java/lodge/reservationsystem/DataRepository.java b/src/java/lodge/reservationsystem/DataRepository.java index bef1be9..c6d518b 100644 --- a/src/java/lodge/reservationsystem/DataRepository.java +++ b/src/java/lodge/reservationsystem/DataRepository.java @@ -236,6 +236,9 @@ final class DataRepository { case "reservation_end_date": rsrv.setReservation_end_date(ZonedDateTime.parse(jsonReader.nextString())); break; + case "account_number": + rsrv.setAccountNumber(jsonReader.nextString()); + break; default: System.out.println(name); diff --git a/src/java/lodge/reservationsystem/Reservation.java b/src/java/lodge/reservationsystem/Reservation.java index 5342f42..caa4a5b 100644 --- a/src/java/lodge/reservationsystem/Reservation.java +++ b/src/java/lodge/reservationsystem/Reservation.java @@ -26,7 +26,9 @@ public abstract class Reservation{ private Integer numberOfFloors; private Integer squareFeet; - Float price; + private Float price; + + protected String accountNumber = null; protected Reservation() { numberOfBeds = 1; @@ -48,6 +50,14 @@ public abstract class Reservation{ return this.reservation_number; } + public String getAccountNumber() { + return this.accountNumber; + } + + protected void setAccountNumber(String account_number) { + this.accountNumber = account_number; + } + public void setPhysical_address(Address physical_address) { this.physical_address = physical_address; } @@ -195,6 +205,7 @@ public abstract class Reservation{ 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("\","); diff --git a/src/resources/acc-A1450981765.json b/src/resources/acc-A1450981765.json index 33b38e7..c30b49f 100755 --- a/src/resources/acc-A1450981765.json +++ b/src/resources/acc-A1450981765.json @@ -1 +1,36 @@ -{ "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 +{ + "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": "R0535276622" + } + }, + { + "HouseReservation": { + "reservation_number": "R0499811708" + } + } + ] + } +} \ No newline at end of file diff --git a/src/resources/acc-A2074212339.json b/src/resources/acc-A2074212339.json index c845682..6eaf084 100644 --- a/src/resources/acc-A2074212339.json +++ b/src/resources/acc-A2074212339.json @@ -1 +1,26 @@ -{ "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"}},"reservation_list":[{"CabinReservation":{"reservation_number":"R2042828431"}}]}} \ No newline at end of file +{ + "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" + } + }, + "reservation_list": [ + { + "CabinReservation": { + "reservation_number": "R2042828431" + } + } + ] + } +} \ No newline at end of file diff --git a/src/resources/rsv-R0123077641.json b/src/resources/rsv-R0123077641.json index 71a1a91..a9182de 100755 --- a/src/resources/rsv-R0123077641.json +++ b/src/resources/rsv-R0123077641.json @@ -1 +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 +{ "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]","account_number": "A1450981765","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": "Kitchenette","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 index d0f5f7e..b060460 100755 --- a/src/resources/rsv-R0499811708.json +++ b/src/resources/rsv-R0499811708.json @@ -1 +1,33 @@ -{ "HouseReservation":{"reservation_type": "HouseReservation","reservation_number": "R0499811708","reservation_status": "Completed","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": "11475.0"}} \ No newline at end of file +{ + "HouseReservation": { + "reservation_type": "HouseReservation", + "reservation_number": "R0499811708", + "reservation_status": "Completed", + "reservation_start_date": "2025-09-05T10:00Z[UTC]", + "reservation_end_date": "2025-11-30T22: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": "4", + "numberOfBedRooms": "3", + "numberOfBathRooms": "1", + "numberOfFloors": "3", + "squareFeet": "1400", + "price": "11475.0" + } +} \ No newline at end of file diff --git a/src/resources/rsv-R0535276622.json b/src/resources/rsv-R0535276622.json index f7d455c..d9a61b7 100644 --- a/src/resources/rsv-R0535276622.json +++ b/src/resources/rsv-R0535276622.json @@ -1 +1,33 @@ -{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R0535276622","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-11-30T22:00Z[UTC]","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": "4","numberOfBedRooms": "3","numberOfBathRooms": "1","numberOfFloors": "2","squareFeet": "806","price": "120.0"}} \ No newline at end of file +{ + "CabinReservation": { + "reservation_type": "CabinReservation", + "reservation_number": "R0535276622", + "reservation_status": "Draft", + "reservation_start_date": "2025-09-05T10:00Z[UTC]", + "reservation_end_date": "2025-11-30T22: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": "4", + "numberOfBedRooms": "3", + "numberOfBathRooms": "1", + "numberOfFloors": "2", + "squareFeet": "806", + "price": "120.0" + } +} \ No newline at end of file diff --git a/src/resources/rsv-R2042828431.json b/src/resources/rsv-R2042828431.json index 5186fa7..67e347f 100755 --- a/src/resources/rsv-R2042828431.json +++ b/src/resources/rsv-R2042828431.json @@ -1 +1 @@ -{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R2042828431","reservation_status": "Draft","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": "120.0"}} \ No newline at end of file +{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R2042828431","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-11-30T22: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": "4","numberOfBedRooms": "3","numberOfBathRooms": "1","numberOfFloors": "2","squareFeet": "806","price": "120.0"}} \ No newline at end of file