diff --git a/README.md b/README.md index b2d827a..fc9d582 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ | software | version | | -------- | ------- | | Java | 21 | +| json lib | gson-2.13.1 | | VSCode | 1.103 | ### diff --git a/bin/main/lodge/TestReservations.class b/bin/main/lodge/TestReservations.class index 6111d29..a65d26a 100644 Binary files a/bin/main/lodge/TestReservations.class and b/bin/main/lodge/TestReservations.class differ diff --git a/bin/main/lodge/reservationsystem/AccomodationManager$1.class b/bin/main/lodge/reservationsystem/AccomodationManager$1.class deleted file mode 100644 index 219561b..0000000 Binary files a/bin/main/lodge/reservationsystem/AccomodationManager$1.class and /dev/null differ diff --git a/bin/main/lodge/reservationsystem/AccomodationManager.class b/bin/main/lodge/reservationsystem/AccomodationManager.class index ed906f4..a25d2f9 100644 Binary files a/bin/main/lodge/reservationsystem/AccomodationManager.class and b/bin/main/lodge/reservationsystem/AccomodationManager.class differ diff --git a/bin/main/lodge/reservationsystem/Account.class b/bin/main/lodge/reservationsystem/Account.class index 6228b37..10bd66c 100644 Binary files a/bin/main/lodge/reservationsystem/Account.class and b/bin/main/lodge/reservationsystem/Account.class differ diff --git a/bin/main/lodge/reservationsystem/AccountList.class b/bin/main/lodge/reservationsystem/AccountList.class index 913acb3..d38d3c2 100644 Binary files a/bin/main/lodge/reservationsystem/AccountList.class and b/bin/main/lodge/reservationsystem/AccountList.class differ diff --git a/bin/main/lodge/reservationsystem/AccountReservationList.class b/bin/main/lodge/reservationsystem/AccountReservationList.class index f9a9613..3862da7 100644 Binary files a/bin/main/lodge/reservationsystem/AccountReservationList.class and b/bin/main/lodge/reservationsystem/AccountReservationList.class differ diff --git a/bin/main/lodge/reservationsystem/Address.class b/bin/main/lodge/reservationsystem/Address.class index ac1168c..0aad44e 100644 Binary files a/bin/main/lodge/reservationsystem/Address.class and b/bin/main/lodge/reservationsystem/Address.class differ diff --git a/bin/main/lodge/reservationsystem/CabinReservation.class b/bin/main/lodge/reservationsystem/CabinReservation.class index 1f26be8..e2612a1 100644 Binary files a/bin/main/lodge/reservationsystem/CabinReservation.class and b/bin/main/lodge/reservationsystem/CabinReservation.class differ diff --git a/bin/main/lodge/reservationsystem/DataRepository.class b/bin/main/lodge/reservationsystem/DataRepository.class index 3e03e07..cb551ed 100644 Binary files a/bin/main/lodge/reservationsystem/DataRepository.class and b/bin/main/lodge/reservationsystem/DataRepository.class differ diff --git a/bin/main/lodge/reservationsystem/EmailAddress.class b/bin/main/lodge/reservationsystem/EmailAddress.class index cb8588a..5978912 100644 Binary files a/bin/main/lodge/reservationsystem/EmailAddress.class and b/bin/main/lodge/reservationsystem/EmailAddress.class differ diff --git a/bin/main/lodge/reservationsystem/HotelReservation.class b/bin/main/lodge/reservationsystem/HotelReservation.class index 2854ffd..29bf304 100644 Binary files a/bin/main/lodge/reservationsystem/HotelReservation.class and b/bin/main/lodge/reservationsystem/HotelReservation.class differ diff --git a/bin/main/lodge/reservationsystem/HouseReservation.class b/bin/main/lodge/reservationsystem/HouseReservation.class index 4d6a8c0..5b057df 100644 Binary files a/bin/main/lodge/reservationsystem/HouseReservation.class and b/bin/main/lodge/reservationsystem/HouseReservation.class differ diff --git a/bin/main/lodge/reservationsystem/Reservation.class b/bin/main/lodge/reservationsystem/Reservation.class index cae50ca..384593b 100644 Binary files a/bin/main/lodge/reservationsystem/Reservation.class and b/bin/main/lodge/reservationsystem/Reservation.class differ diff --git a/reservationsystem_classdiagram_0828.pdf b/reservationsystem_classdiagram_0828.pdf deleted file mode 100644 index f2709b4..0000000 Binary files a/reservationsystem_classdiagram_0828.pdf and /dev/null differ diff --git a/src/java/lodge/TestReservations.java b/src/java/lodge/TestReservations.java index 62946c3..5eb11f5 100644 --- a/src/java/lodge/TestReservations.java +++ b/src/java/lodge/TestReservations.java @@ -3,8 +3,10 @@ package lodge; import lodge.reservationsystem.AccomodationManager; import lodge.reservationsystem.Account; import lodge.reservationsystem.Address; -import lodge.reservationsystem.CabinReservation; import lodge.reservationsystem.EmailAddress; +import lodge.reservationsystem.CabinReservation; +import lodge.reservationsystem.HouseReservation; +import lodge.reservationsystem.HotelReservation; import lodge.reservationsystem.Reservation; public final class TestReservations { @@ -38,7 +40,7 @@ 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) - CabinReservation cabin = new CabinReservation(); + HotelReservation cabin = new HotelReservation(); cabin.setPhysical_address(new Address("30 cabin ave", "Carnelian", "CA", "96140")); cabin.setMailing_address(new Address("40 cabin ave", "Carnelian Bay", "CA", "96140")); cabin.setNumberOfBeds(4); @@ -47,9 +49,11 @@ public final class TestReservations { cabin.setSquareFeet(806); mgr.addReservation( mgr.retrieveAccount(acct.account_number()), cabin); Reservation rsrv = cabin; - String reservationId = rsrv.reservation_number(); + String reservationId = rsrv.getReservation_number(); + + mgr.UpdateAccount(mgr.retrieveAccount(acct.account_number())); + // 6. Complete reservation that is associated with an account - rsrv = null; rsrv = mgr.retreiveReservation(reservationId); rsrv.Complete(); diff --git a/src/java/lodge/reservationsystem/AccomodationManager.java b/src/java/lodge/reservationsystem/AccomodationManager.java index e7a2884..65fe515 100644 --- a/src/java/lodge/reservationsystem/AccomodationManager.java +++ b/src/java/lodge/reservationsystem/AccomodationManager.java @@ -6,6 +6,8 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.stream.JsonReader; public final class AccomodationManager { @@ -27,20 +29,87 @@ public final class AccomodationManager { void load(Path file) throws Exception { /** @TODO finish loading Account */ try (BufferedReader in = new BufferedReader(new FileReader(file.toFile(), StandardCharsets.UTF_8))) { + final Gson gson = new GsonBuilder() + .create(); + JsonReader jsonReader = new JsonReader(in); jsonReader.beginObject(); + Account ac = null; + Address ad = null; while (jsonReader.hasNext()) { String name = jsonReader.nextName(); + System.out.println(String.format("Load Account %s", name)); switch (name) { case "Account": - System.out.println("Load Account"); - jsonReader.skipValue(); + jsonReader.beginObject(); + ac = new Account(); + break; + case "account_number": + ac.setAccount_number(jsonReader.nextString()); + break; + case "phone_number": + ac.setPhone_number(jsonReader.nextString()); + break; + case "mailing_address": + jsonReader.beginObject(); + break; + case "Address": + jsonReader.beginObject(); + System.out.println(jsonReader.nextName()); + ad = new Address(); + ad.setStreet(jsonReader.nextString()); + System.out.println(jsonReader.nextName()); + ad.setCity(jsonReader.nextString()); + System.out.println(jsonReader.nextName()); + ad.setState(jsonReader.nextString()); + System.out.println(jsonReader.nextName()); + ad.setZip(jsonReader.nextString()); jsonReader.endObject(); + jsonReader.endObject(); + ac.setMailing_address(ad); + break; + case "email_address": + jsonReader.beginObject(); + break; + case "EmailAddress": + jsonReader.beginObject(); + break; + case "email": + ac.setEmail_address(new EmailAddress(jsonReader.nextString())); + jsonReader.endObject(); + jsonReader.endObject(); + break; + case "reservation_list": + jsonReader.beginArray(); + jsonReader.beginObject(); + break; + case "CabinReservation": + jsonReader.beginObject(); + name = jsonReader.nextName(); + CabinReservation cabin = new CabinReservation(); + cabin.setMailing_address(ad); + cabin.setPhysical_address(ad); + cabin.reservation_number = jsonReader.nextString(); + break; + case "HouseReservation": + jsonReader.beginObject(); + name = jsonReader.nextName(); + HouseReservation house = new HouseReservation(); + house.setMailing_address(ad); + house.setPhysical_address(ad); + house.reservation_number = jsonReader.nextString(); + + break; + case "HotelReservation": + jsonReader.beginObject(); + name = jsonReader.nextName(); + HotelReservation hotel = new HotelReservation(); + hotel.setMailing_address(ad); + hotel.setPhysical_address(ad); + hotel.reservation_number = jsonReader.nextString(); break; default: System.out.println(name); - return; - } } jsonReader.close(); @@ -77,13 +146,13 @@ public final class AccomodationManager { } public boolean addReservation(final Account account, final Reservation reservation) { - return account.reservation_list.add(reservation); + return account.add(reservation); } public Reservation retreiveReservation(String reservation_number) { for (Account acct : account_list) { for (Reservation rsv : acct.reservation_list) { - if (rsv.reservation_number == reservation_number) { + if (rsv.getReservation_number() == reservation_number) { return rsv; } } diff --git a/src/java/lodge/reservationsystem/Account.java b/src/java/lodge/reservationsystem/Account.java index e736895..a9ebce3 100644 --- a/src/java/lodge/reservationsystem/Account.java +++ b/src/java/lodge/reservationsystem/Account.java @@ -13,7 +13,7 @@ public class Account { Address mailing_address; EmailAddress email_address; - AccountReservationList reservation_list=new AccountReservationList(); + AccountReservationList reservation_list = new AccountReservationList();; public Account( String account_number, @@ -26,6 +26,10 @@ public class Account { this.email_address = email_address; } + public Account(){ + + } + @Override public String toString() { @@ -40,6 +44,10 @@ public class Account { return sb.toString(); } + public boolean add(Reservation rsrv){ + return reservation_list.add(rsrv); + } + // @TODO Write Account out in JSON public static void Write(Account acct) throws IOException { String dataRoot = DataRepository.getPath(); diff --git a/src/java/lodge/reservationsystem/AccountList.java b/src/java/lodge/reservationsystem/AccountList.java index 07382a9..3ea051a 100644 --- a/src/java/lodge/reservationsystem/AccountList.java +++ b/src/java/lodge/reservationsystem/AccountList.java @@ -1,5 +1,6 @@ package lodge.reservationsystem; +import java.io.IOException; import java.util.ArrayList; public class AccountList extends ArrayList { @@ -17,7 +18,7 @@ public class AccountList extends ArrayList { return A; } // ** Add account throw error if account number is pre-existing. */ - public static Account addAccount(AccountList account_list, Account account) throws NullPointerException, AccountException { + public static Account addAccount(final AccountList account_list, final Account account) throws NullPointerException, AccountException { String acctNumber = ""; for(Account acct: account_list){ if( acct.account_number() == account.account_number() ){ @@ -34,19 +35,19 @@ public class AccountList extends ArrayList { } // save account in edit status - public void save(Account acct) { - + public static void save(final Account acct) throws IOException { + Account.Write(acct); } // save accounts in edit status - public static void save(AccountList account_list, Account acct) throws Exception { + public static void save(final AccountList account_list, final Account acct) throws Exception { for (Account account : account_list) { - Account.Write(account); + AccountList.save(account); } } // ** Find account return null not-existing. */ - public static Account retrieveAccount(AccountList account_list, String account_number) { + public static Account retrieveAccount(final AccountList account_list, String 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 f73cbfc..935dc3c 100644 --- a/src/java/lodge/reservationsystem/AccountReservationList.java +++ b/src/java/lodge/reservationsystem/AccountReservationList.java @@ -16,13 +16,15 @@ public class AccountReservationList extends ArrayList { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("\"AccountReservationList\":["); + sb.append("\"reservation_list\":["); for(int ix=0; ix < this.size() ; ix++){ + String name = this.get(ix).ReservationType() + ""; + if( ( this.size() - 1 ) == ix ){ - sb.append(String.format("{ \"%d\":\"%s\"}", ix, this.get(ix).reservation_number)); + sb.append(String.format("{\"%s\":{\"reservation_number\":\"%s\"}}", name, this.get(ix).getReservation_number())); }else{ - sb.append(String.format("{ \"%d\":\"%s\"},", ix, this.get(ix).reservation_number)); + sb.append(String.format("{\"%s\":{\"reservation_number\":\"%s\"}},", name, this.get(ix).getReservation_number())); } } sb.append("]"); diff --git a/src/java/lodge/reservationsystem/Address.java b/src/java/lodge/reservationsystem/Address.java index 8426936..1f7af37 100644 --- a/src/java/lodge/reservationsystem/Address.java +++ b/src/java/lodge/reservationsystem/Address.java @@ -14,6 +14,9 @@ public final class Address { this.zip = zip; } + protected Address() { + } + public String getStreet() { return street; } diff --git a/src/java/lodge/reservationsystem/CabinReservation.java b/src/java/lodge/reservationsystem/CabinReservation.java index dfc2e42..c7a306d 100644 --- a/src/java/lodge/reservationsystem/CabinReservation.java +++ b/src/java/lodge/reservationsystem/CabinReservation.java @@ -1,10 +1,14 @@ package lodge.reservationsystem; -public final class CabinReservation extends Reservation { +import java.lang.reflect.Type; - final char type = 'C'; - public final char ReservationType() { - return type; +import com.google.gson.InstanceCreator; + +public final class CabinReservation extends Reservation implements InstanceCreator{ + + public final String ReservationType() { + type='C'; + return "CabinReservation"; } //calculate and return the reservation's price // Cabin price plus additional fee of $20 for full kitchen and $5 for each additional bathroom @@ -13,4 +17,9 @@ public final class CabinReservation extends Reservation { return price; } + @Override + public Reservation createInstance(Type type) { + System.out.println( String.format( "%s.", this.type)); + return new CabinReservation(); + } } diff --git a/src/java/lodge/reservationsystem/EmailAddress.java b/src/java/lodge/reservationsystem/EmailAddress.java index 924f449..2e82e64 100644 --- a/src/java/lodge/reservationsystem/EmailAddress.java +++ b/src/java/lodge/reservationsystem/EmailAddress.java @@ -43,7 +43,7 @@ public class EmailAddress{ @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("{ \"EmailAdress\":{"); + sb.append("{ \"EmailAddress\":{"); sb.append("\"email\": \"" + email_address + "\""); sb.append("}}"); return sb.toString(); diff --git a/src/java/lodge/reservationsystem/HotelReservation.java b/src/java/lodge/reservationsystem/HotelReservation.java index e5747f2..694803c 100644 --- a/src/java/lodge/reservationsystem/HotelReservation.java +++ b/src/java/lodge/reservationsystem/HotelReservation.java @@ -1,15 +1,26 @@ package lodge.reservationsystem; -public final class HotelReservation extends Reservation { +import java.lang.reflect.Type; - final char type = 'H'; - public final char ReservationType() { - return type; +import com.google.gson.InstanceCreator; + +public final class HotelReservation extends Reservation implements InstanceCreator{ + + public final String ReservationType() { + type = 'H'; + return "HotelReservation"; } + //calculate and return the reservation's price // Hotel price plus additional flat fee of $50 plus $10 for kitchenette public float calculatePrice() { // flat fee return 0.0f; } -} \ No newline at end of file + + @Override + public Reservation createInstance(Type type) { + System.out.println( String.format( "%s.", this.type)); + return (Reservation) new HotelReservation(); + } +} diff --git a/src/java/lodge/reservationsystem/HouseReservation.java b/src/java/lodge/reservationsystem/HouseReservation.java index 7df83e1..4a154cb 100644 --- a/src/java/lodge/reservationsystem/HouseReservation.java +++ b/src/java/lodge/reservationsystem/HouseReservation.java @@ -1,10 +1,14 @@ package lodge.reservationsystem; -public final class HouseReservation extends Reservation { +import java.lang.reflect.Type; - final char type = 'Z'; - public final char ReservationType() { - return type; +import com.google.gson.InstanceCreator; + +public final class HouseReservation extends Reservation implements InstanceCreator{ + + public final String ReservationType() { + type = 'Z'; + return "HouseReservation"; } // calculate and return the reservation's price @@ -12,4 +16,9 @@ public final class HouseReservation extends Reservation { return 0.0f; } + @Override + public Reservation createInstance(Type type) { + System.out.println( String.format( "%s.", this.type)); + return new HouseReservation(); + } } \ No newline at end of file diff --git a/src/java/lodge/reservationsystem/Reservation.java b/src/java/lodge/reservationsystem/Reservation.java index c733e57..a0935aa 100644 --- a/src/java/lodge/reservationsystem/Reservation.java +++ b/src/java/lodge/reservationsystem/Reservation.java @@ -1,15 +1,23 @@ package lodge.reservationsystem; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.IOException; -import java.time.ZonedDateTime; +import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.Timestamp; -public abstract class Reservation { +public abstract class Reservation{ + char type; String reservation_number; Address physical_address; Address mailing_address; - ZonedDateTime reservation_start_date; - ZonedDateTime reservation_end_date; + Timestamp reservation_start_date; + Timestamp reservation_end_date; ReservationStatus reservation_status; Boolean hasKitchenette; @@ -21,7 +29,7 @@ public abstract class Reservation { Float price; - public String reservation_number() { + public String getReservation_number() { return reservation_number; } @@ -45,19 +53,19 @@ public abstract class Reservation { this.mailing_address = mailing_address; } - public ZonedDateTime reservation_start_date() { + public Timestamp reservation_start_date() { return reservation_start_date; } - public void setReservation_start_date(ZonedDateTime reservation_start_date) { + public void setReservation_start_date(Timestamp reservation_start_date) { this.reservation_start_date = reservation_start_date; } - public ZonedDateTime reservation_end_date() { + public Timestamp reservation_end_date() { return reservation_end_date; } - public void setReservation_end_date(ZonedDateTime reservation_end_date) { + public void setReservation_end_date(Timestamp reservation_end_date) { this.reservation_end_date = reservation_end_date; } @@ -166,7 +174,7 @@ public abstract class Reservation { @Override public String toString() { StringBuilder sb = new StringBuilder(); - + sb.append("{ \"Reservation\":{"); sb.append("\"reservation_type\": \"" + ReservationType() + "\","); sb.append("\"reservation_number\": \"" + reservation_number + "\","); @@ -184,17 +192,38 @@ public abstract class Reservation { sb.append("}}"); return sb.toString(); } - - //@TODO write reservation out in json - public static void Write(Reservation reservation) throws IOException { - + + // @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(super.toString()); + writer.flush(); + } + } + + // @TODO read reservation out in json + public void Read(Reservation reservation) throws IOException { + String dataRoot = DataRepository.getPath(); + dataRoot = dataRoot + "/rsv-" + reservation.reservation_number + ".json"; + Path path = Paths.get(dataRoot); + + try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { + reader.lines(); + } } public float calculatePricePerNight() { return 0.0f; } - public abstract char ReservationType(); + public abstract String ReservationType(); + public abstract float calculatePrice(); + public abstract Reservation createInstance(Type type); } + diff --git a/src/resources/acc-A1858063803.json b/src/resources/acc-A1858063803.json index 373c7e7..7077488 100644 --- a/src/resources/acc-A1858063803.json +++ b/src/resources/acc-A1858063803.json @@ -1 +1 @@ -{ "Account":{"account_number": "A1858063803","phone_number": "767-456-7890","mailing_address": { "Address":{"street": "10 wilco ave","city": "wilco","state": "WY","zip": "82801"}},"email_address": { "EmailAdress":{"email": "wilco@wyommin.net"}},"AccountReservationList":[{ "0":"R0000000062"}]}} \ No newline at end of file +{ "Account":{"account_number": "A1858063803","phone_number": "767-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":"R0000000062"}}]}} \ No newline at end of file diff --git a/src/resources/rsv-R000000062.json b/src/resources/rsv-R000000062.json index 02a384a..fdd80ad 100644 --- a/src/resources/rsv-R000000062.json +++ b/src/resources/rsv-R000000062.json @@ -1 +1,5 @@ -{"CabinReservation": ""} \ No newline at end of file +{"CabinReservation": { + + "reservation_number":"R000000062" + + }} \ No newline at end of file