diff --git a/src/java/lodge/TestReservations.java b/src/java/lodge/TestReservations.java index dd336a3..efa68d3 100644 --- a/src/java/lodge/TestReservations.java +++ b/src/java/lodge/TestReservations.java @@ -1,12 +1,9 @@ package lodge; -import java.net.URI; - import lodge.reservationsystem.AccomodationManager; import lodge.reservationsystem.Account; import lodge.reservationsystem.Address; import lodge.reservationsystem.CabinReservation; -import lodge.reservationsystem.DataRepository; import lodge.reservationsystem.EmailAddress; import lodge.reservationsystem.Reservation; @@ -16,8 +13,7 @@ public final class TestReservations { AccomodationManager mgr = new AccomodationManager(); String home = System.getenv("HOMEDRIVE")+System.getenv("HOMEPATH"); home= home.replace("\\", "/") + "/data"; - DataRepository.setDataStoreRoot(home); - + mgr.setDataStoreRoot(home); // 1. Get the list of loaded accounts from Manager mgr.loadAll(); @@ -49,20 +45,20 @@ public final class TestReservations { cabin.setNumberOfBedRooms(3); cabin.setSquareFeet(806); mgr.addReservation( mgr.retrieveAccount(acct.account_number()), cabin); - + Reservation rsrv = cabin; + String reservationId = rsrv.reservation_number(); // 6. Complete reservation that is associated with an account - Reservation rsrv = mgr.retreiveReservation("R######"); + rsrv = null; + rsrv = mgr.retreiveReservation(reservationId); rsrv.Complete(); - //mgr.UpdateAccount(mgr.retrieveAccount(acct.account_number())); - - /* - * // 7. Cancel reservation that is associated with an account - * if (acct != null) { - * rsrv = acct.retrieve("?######"); - * if (rsrv != null) - * rsrv.Cancel(); - * } + mgr.UpdateAccount(mgr.retrieveAccount(acct.account_number())); + + // 7. Cancel reservation that is associated with an account + rsrv = mgr.retreiveReservation(reservationId); + rsrv.Cancel(); + mgr.UpdateAccount(mgr.retrieveAccount(acct.account_number())); + /* * * if (rsrv != null) { * // 8. Change reservation values that can be changed (if reservation is diff --git a/src/java/lodge/reservationsystem/AccomodationManager.java b/src/java/lodge/reservationsystem/AccomodationManager.java index 1ecbedc..ab451f8 100644 --- a/src/java/lodge/reservationsystem/AccomodationManager.java +++ b/src/java/lodge/reservationsystem/AccomodationManager.java @@ -20,7 +20,7 @@ public class AccomodationManager { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { System.out.println("File: " + file.toAbsolutePath()); // load account number, and content - // load reservation files + // load reservation return FileVisitResult.CONTINUE; } @@ -57,13 +57,41 @@ public class AccomodationManager { return acct; } - public void addReservation(Account account, CabinReservation cabin) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'addReservation'"); + public boolean addReservation(final Account account, final Reservation reservation) { + return account.reservation_list.add(reservation); } - public Reservation retreiveReservation(String string) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'retreiveReservation'"); + public Reservation retreiveReservation(String reservation_number) { + for(Account acct: account_list){ + for(Reservation rsv: acct.reservation_list){ + if(rsv.reservation_number == reservation_number){ + return rsv; + } + } + } + return null; + } + + public void setDataStoreRoot(String home) { + DataRepository.setDataStoreRoot(home); + } +} + +final class DataRepository { + // SINGLETON CLASS + // hard code data store location for storage of + // account data files on filesystem + private String directoryPath; + private static final DataRepository instance = new DataRepository(); + static DataRepository getInstance() { + return instance; + } + + final static void setDataStoreRoot(final String direcoryPath){ + getInstance().directoryPath = direcoryPath; + } + + final static String getPath() { + return getInstance().directoryPath; } } diff --git a/src/java/lodge/reservationsystem/Account.java b/src/java/lodge/reservationsystem/Account.java index b8e4cdc..69a8b78 100644 --- a/src/java/lodge/reservationsystem/Account.java +++ b/src/java/lodge/reservationsystem/Account.java @@ -13,6 +13,8 @@ public class Account { Address mailing_address; EmailAddress email_address; + AccountReservationList reservation_list=new AccountReservationList(); + public Account( String account_number, String phone_number, @@ -40,11 +42,12 @@ public class Account { // @TODO Write Account out in JSON public static void Write(Account acct) throws IOException { String dataRoot = DataRepository.getPath(); - dataRoot = dataRoot + "/" + acct.account_number + ".json"; + dataRoot = dataRoot + "/acc-" + acct.account_number + ".json"; Path path = Paths.get(dataRoot); try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { writer.write(acct.toString()); + writer.write(acct.reservation_list.toString()); writer.flush(); } } diff --git a/src/java/lodge/reservationsystem/AccountList.java b/src/java/lodge/reservationsystem/AccountList.java index e95f55b..3397bb5 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 static String accountSerial(String phone_number, Address mailing_address, EmailAddress email_address) { - return "A" + java.util.Objects.hash(phone_number, mailing_address, email_address); + return String.format("A%010d", 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 { diff --git a/src/java/lodge/reservationsystem/AccountReservationList.java b/src/java/lodge/reservationsystem/AccountReservationList.java index bd022bf..f56c33d 100644 --- a/src/java/lodge/reservationsystem/AccountReservationList.java +++ b/src/java/lodge/reservationsystem/AccountReservationList.java @@ -2,11 +2,25 @@ package lodge.reservationsystem; import java.util.ArrayList; -public class AccountReservationList { +public class AccountReservationList extends ArrayList { - ArrayList reservation_list = new ArrayList(); + private static String reservationSerial(Reservation reservation) { + return String.format("R%04d", java.util.Objects.hash(reservation)); + } - public void addReservation(Reservation reservation) { - reservation_list.add(reservation); + public boolean add(final Reservation reservation) { + reservation.reservation_number = AccountReservationList.reservationSerial(reservation); + return super.add(reservation); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ \"AccountReservationList\":{"); + for(int ix=0; ix < this.size() ; ++ix){ + sb.append(String.format("{ \"%d\":\"%s\"},", ix, this.get(ix).reservation_number)); + } + sb.append("}}"); + return sb.toString(); } } diff --git a/src/java/lodge/reservationsystem/DataRepository.java b/src/java/lodge/reservationsystem/DataRepository.java deleted file mode 100644 index 0a03238..0000000 --- a/src/java/lodge/reservationsystem/DataRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package lodge.reservationsystem; - -public final class DataRepository { - // hard code data store location for storage of - // account data files on filesystem - private String directoryPath; - private static final DataRepository instance = new DataRepository(); - public static DataRepository getInstance() { - return instance; - } - - public static void setDataStoreRoot(String direcoryPath){ - getInstance().directoryPath = direcoryPath; - } - - public static String getPath() { - return getInstance().directoryPath; - } -} diff --git a/src/java/lodge/reservationsystem/Reservation.java b/src/java/lodge/reservationsystem/Reservation.java index 5c75494..1230231 100644 --- a/src/java/lodge/reservationsystem/Reservation.java +++ b/src/java/lodge/reservationsystem/Reservation.java @@ -1,5 +1,6 @@ package lodge.reservationsystem; +import java.io.IOException; import java.time.ZonedDateTime; public abstract class Reservation { @@ -180,6 +181,11 @@ public abstract class Reservation { sb.append("}}"); return sb.toString(); } + + //@TODO write reservation out in json + public static void Write(Reservation reservation) throws IOException { + + } public float calculatePricePerNight() { return 0.0f;