finish deserialization.

This commit is contained in:
2025-09-06 19:21:01 -04:00
parent 6a0001d43b
commit a3bd96e749
13 changed files with 204 additions and 32 deletions

View File

@@ -3,12 +3,16 @@ 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;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.ZonedDateTime;
import com.google.gson.stream.JsonReader;
@@ -62,6 +66,10 @@ 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
@@ -116,7 +124,7 @@ final class DataRepository {
jsonReader.endObject();
break;
case "reservation_list":
loadReservation(jsonReader, ac);
loadReservationRefList(jsonReader, ac);
break;
default:
System.out.println(name);
@@ -125,23 +133,136 @@ final class DataRepository {
jsonReader.close();
return ac.account_number.length() > 8 ? ac : null;
}
return ac;
}
static void loadReservation(final JsonReader rdr, final Account ac) throws IOException {
final AccountReservationList reservation_list = new AccountReservationList();
static void loadReservationRefList(JsonReader rdr, Account ac) throws IOException {
rdr.beginArray();
while (rdr.hasNext()) {
rdr.beginObject();
String name = rdr.nextName();
final Reservation rsrv = new HouseReservation(new Address());
String reservationType = rdr.nextName();
rdr.beginObject();
name = rdr.nextName();
rsrv.reservation_number = rdr.nextString();
rdr.nextName();
String reservationNumber = rdr.nextString();
loadReservation(ac.reservation_list, reservationType, reservationNumber);
rdr.endObject();
rdr.endObject();
reservation_list.add(rsrv);
}
rdr.endArray();
}
private static void loadReservation(AccountReservationList reservation_list, String reservationType,
String reservationNumber) throws IOException {
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;
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
switch (name) {
case "HotelReservation":
jsonReader.beginObject();
rsrv = new HotelReservation();
break;
case "HouseReservation":
jsonReader.beginObject();
rsrv = new HouseReservation();
break;
case "CabinReservation":
jsonReader.beginObject();
rsrv = new CabinReservation();
break;
case "physical_address":
jsonReader.beginObject();
jsonReader.nextName();
jsonReader.beginObject();
jsonReader.nextName();
Address adP = new Address();
adP.setStreet(jsonReader.nextString());
jsonReader.nextName();
adP.setCity(jsonReader.nextString());
jsonReader.nextName();
adP.setState(jsonReader.nextString());
jsonReader.nextName();
adP.setZip(jsonReader.nextString());
jsonReader.endObject();
jsonReader.endObject();
rsrv.setPhysical_address(adP);
break;
case "mailing_address":
jsonReader.beginObject();
jsonReader.nextName();
jsonReader.beginObject();
jsonReader.nextName();
Address adM = new Address();
adM.setStreet(jsonReader.nextString());
jsonReader.nextName();
adM.setCity(jsonReader.nextString());
jsonReader.nextName();
adM.setState(jsonReader.nextString());
jsonReader.nextName();
adM.setZip(jsonReader.nextString());
jsonReader.endObject();
jsonReader.endObject();
rsrv.setMailing_address(adM);
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":
rsrv.setKitchen(KitchenEnum.valueOf(jsonReader.nextString()));
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;
default:
System.out.println(name);
}
}
try {
if (rsrv.checkValid()) {
reservation_list.add(rsrv);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}