Files
reservationsystem/src/java/lodge/data/DataRepository.java

279 lines
12 KiB
Java
Raw Normal View History

2025-09-15 11:08:45 -04:00
/**
* license: GPLv3
* lodge.reservationsystem
*/
2025-09-18 12:18:33 -04:00
package lodge.data;
2025-08-30 11:26:49 -04:00
2025-09-03 08:56:57 -04:00
import java.io.BufferedReader;
import java.io.FileReader;
2025-08-30 11:26:49 -04:00
import java.io.IOException;
2025-09-03 08:56:57 -04:00
import java.nio.charset.StandardCharsets;
2025-08-30 11:26:49 -04:00
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
2025-09-06 19:21:01 -04:00
import java.nio.file.Paths;
2025-08-30 11:26:49 -04:00
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
2025-09-06 19:21:01 -04:00
import java.time.ZonedDateTime;
2025-09-03 08:56:57 -04:00
import com.google.gson.stream.JsonReader;
2025-09-18 21:39:24 -04:00
import lodge.reservation.Reservation;
2025-09-03 08:56:57 -04:00
2025-09-18 12:18:33 -04:00
import lodge.reservationsystem.AccomodationManager;
import lodge.reservationsystem.CabinReservation;
import lodge.reservationsystem.HotelReservation;
import lodge.reservationsystem.HouseReservation;
public final class DataRepository {
2025-08-30 11:26:49 -04:00
// 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();
2025-09-04 22:34:26 -04:00
protected final static DataRepository getInstance() {
2025-08-30 11:26:49 -04:00
return instance;
}
public final static void setDataStoreRoot(final String direcoryPath) {
getInstance().directoryPath = direcoryPath;
}
public final static String getPath() {
return getInstance().directoryPath;
}
2025-09-18 12:18:33 -04:00
public final static Reservation Reservation(String type) {
switch (type) {
case "HotelReservation":
2025-09-18 21:39:24 -04:00
return new HotelReservation();
2025-09-18 12:18:33 -04:00
case "HouseReservation":
2025-09-18 21:39:24 -04:00
return new HouseReservation();
2025-09-18 12:18:33 -04:00
case "CabinReservation":
2025-09-18 21:39:24 -04:00
return new CabinReservation();
2025-09-18 12:18:33 -04:00
}
return null;
}
2025-09-05 09:16:57 -04:00
public static void WalkFileSystemTree(final AccomodationManager manager, final Path rootDir) throws IOException {
2025-08-30 11:26:49 -04:00
Files.walkFileTree(rootDir, new SimpleFileVisitor<Path>() {
@Override
2025-09-05 09:16:57 -04:00
public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) {
2025-08-30 11:26:49 -04:00
System.out.println("File: " + file.toAbsolutePath());
// load account number, and content
if (attrs.isRegularFile()) {
2025-09-05 09:16:57 -04:00
final String namestring = file.getName(file.getNameCount() - 1).toString();
2025-08-30 11:26:49 -04:00
if (namestring.endsWith("json")) {
if (namestring.startsWith("acc")) { // * load Account *//
try {
manager.load(file);
2025-09-05 09:16:57 -04:00
} catch (final Exception e) {
2025-08-30 11:26:49 -04:00
e.printStackTrace();
}
}
}
}
// load reservation
return FileVisitResult.CONTINUE;
}
@Override
2025-09-05 09:16:57 -04:00
public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) {
2025-08-30 11:26:49 -04:00
System.out.println("Directory: " + dir.toAbsolutePath());
// prepare to load account number
return FileVisitResult.CONTINUE;
}
});
2025-09-03 08:56:57 -04:00
}
2025-09-10 15:44:29 -04:00
2025-09-05 09:16:57 -04:00
public final static Account LoadAccount(final Path file) throws IOException {
2025-09-04 22:34:26 -04:00
/** @TODO finish loading Account */
2025-09-05 09:16:57 -04:00
try (BufferedReader in = new BufferedReader(new FileReader(file.toFile(), StandardCharsets.UTF_8));
JsonReader jsonReader = new JsonReader(in)) {
2025-09-03 08:56:57 -04:00
jsonReader.beginObject();
2025-09-05 09:16:57 -04:00
Account ac = new Account();
2025-09-03 08:56:57 -04:00
while (jsonReader.hasNext()) {
2025-09-05 09:16:57 -04:00
final String name = jsonReader.nextName();
2025-09-03 08:56:57 -04:00
switch (name) {
case "Account":
jsonReader.beginObject();
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();
2025-09-03 10:12:45 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String mstreet = jsonReader.nextString();
2025-09-03 10:12:45 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String mcity = jsonReader.nextString();
2025-09-03 10:12:45 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String mstate = jsonReader.nextString();
2025-09-03 10:12:45 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String mzip = jsonReader.nextString();
2025-09-03 08:56:57 -04:00
jsonReader.endObject();
jsonReader.endObject();
2025-09-15 16:47:39 -04:00
ac.setMailing_address(new Address(mstreet, mcity, mstate, mzip));
2025-09-03 08:56:57 -04:00
break;
case "email_address":
jsonReader.beginObject();
break;
case "EmailAddress":
jsonReader.beginObject();
break;
case "email":
2025-09-05 09:16:57 -04:00
String s = jsonReader.nextString();
s = s != null ? s : "";
ac.setEmail_address(new EmailAddress(s));
2025-09-03 08:56:57 -04:00
jsonReader.endObject();
jsonReader.endObject();
break;
2025-09-18 12:18:33 -04:00
case "reservations":
2025-09-06 19:21:01 -04:00
loadReservationRefList(jsonReader, ac);
2025-09-03 08:56:57 -04:00
break;
default:
System.out.println(name);
}
}
jsonReader.close();
2025-09-10 16:08:11 -04:00
return ac.getAccount_number().length() > 8 ? ac : null;
2025-09-03 08:56:57 -04:00
}
2025-09-04 22:34:26 -04:00
}
2025-09-06 19:21:01 -04:00
static void loadReservationRefList(JsonReader rdr, Account ac) throws IOException {
2025-09-04 22:34:26 -04:00
rdr.beginArray();
while (rdr.hasNext()) {
rdr.beginObject();
2025-09-06 19:21:01 -04:00
String reservationType = rdr.nextName();
2025-09-04 22:34:26 -04:00
rdr.beginObject();
2025-09-06 19:21:01 -04:00
rdr.nextName();
String reservationNumber = rdr.nextString();
2025-09-10 16:08:11 -04:00
loadReservation(ac, reservationType, reservationNumber);
2025-09-04 22:34:26 -04:00
rdr.endObject();
rdr.endObject();
}
rdr.endArray();
}
2025-09-06 19:21:01 -04:00
2025-09-10 16:08:11 -04:00
private static void loadReservation(Account ac, String reservationType,
2025-09-15 16:47:39 -04:00
String reservationNumber) throws NullPointerException, IOException {
2025-09-06 19:21:01 -04:00
String filename = String.format("rsv-%s.json", reservationNumber);
Path basePath = Paths.get(getPath());
Path resolvedPath = basePath.resolve(filename);
try (BufferedReader in = new BufferedReader(new FileReader(resolvedPath.toFile(), StandardCharsets.UTF_8))) {
try (JsonReader jsonReader = new JsonReader(in)) {
jsonReader.beginObject();
Reservation rsrv = null;
2025-09-10 15:44:29 -04:00
try {
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
switch (name) {
case "HotelReservation":
jsonReader.beginObject();
2025-09-18 12:18:33 -04:00
rsrv = Reservation("HotelReservation");
2025-09-10 15:44:29 -04:00
break;
case "HouseReservation":
jsonReader.beginObject();
2025-09-18 12:18:33 -04:00
rsrv = Reservation("HouseReservation");
2025-09-10 15:44:29 -04:00
break;
case "CabinReservation":
jsonReader.beginObject();
2025-09-18 12:18:33 -04:00
rsrv = Reservation("CabinReservation");
2025-09-10 15:44:29 -04:00
break;
case "physical_address":
jsonReader.beginObject();
jsonReader.nextName();
jsonReader.beginObject();
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String street = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String city = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String state = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.nextName();
2025-09-18 12:18:33 -04:00
String zip = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.endObject();
jsonReader.endObject();
2025-09-15 16:47:39 -04:00
rsrv.setPhysical_address(new Address(street, city, state, zip));
2025-09-10 15:44:29 -04:00
break;
case "mailing_address":
jsonReader.beginObject();
jsonReader.nextName();
jsonReader.beginObject();
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String mstreet = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String mcity = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.nextName();
2025-09-15 16:47:39 -04:00
String mstate = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.nextName();
2025-09-18 12:18:33 -04:00
String mzip = jsonReader.nextString();
2025-09-10 15:44:29 -04:00
jsonReader.endObject();
jsonReader.endObject();
2025-09-15 16:47:39 -04:00
rsrv.setMailing_address(new Address(mstreet, mcity, mstate, mzip));
2025-09-10 15:44:29 -04:00
break;
case "reservation_type":
jsonReader.nextString();
break;
case "reservation_number":
rsrv.setReservation_number(jsonReader.nextString());
break;
case "reservation_status":
rsrv.setReservation_status(ReservationStatusEnum.valueOf(jsonReader.nextString()));
break;
case "kitchen":
2025-09-16 20:53:58 -04:00
rsrv.setKitchen(KitchenTypeEnum.valueOf(jsonReader.nextString()));
2025-09-10 15:44:29 -04:00
break;
case "numberOfBeds":
rsrv.setNumberOfBeds(Integer.valueOf(jsonReader.nextString()));
break;
case "numberOfBedRooms":
rsrv.setNumberOfBedRooms(Integer.valueOf(jsonReader.nextString()));
break;
case "numberOfBathRooms":
rsrv.setNumberOfBathRooms(Integer.valueOf(jsonReader.nextString()));
break;
case "numberOfFloors":
rsrv.setNumberOfFloors(Integer.valueOf(jsonReader.nextString()));
break;
case "squareFeet":
rsrv.setSquareFeet(Integer.valueOf(jsonReader.nextString()));
break;
case "price":
rsrv.setPrice(Float.valueOf(jsonReader.nextString()));
break;
case "reservation_start_date":
rsrv.setReservation_start_date(ZonedDateTime.parse(jsonReader.nextString()));
break;
case "reservation_end_date":
rsrv.setReservation_end_date(ZonedDateTime.parse(jsonReader.nextString()));
break;
2025-09-13 20:33:29 -04:00
case "account_number":
rsrv.setAccountNumber(jsonReader.nextString());
break;
2025-09-06 19:21:01 -04:00
2025-09-10 15:44:29 -04:00
default:
System.out.println(name);
}
2025-09-06 19:21:01 -04:00
}
2025-09-10 16:08:11 -04:00
ac.add(rsrv);
2025-09-06 19:21:01 -04:00
} catch (Exception e) {
2025-09-10 15:44:29 -04:00
System.out.println(e.toString());
2025-09-06 19:21:01 -04:00
}
}
}
}
2025-08-30 11:26:49 -04:00
}