Files
reservationsystem/src/main/java/lodge/reservationsystem/AccomodationManager.java
2025-10-01 16:27:34 -04:00

138 lines
4.3 KiB
Java

/**
* license: GPLv3
reservationsystem
*/
package lodge.reservationsystem;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import lodge.datamodel.Account;
import lodge.datamodel.AccountList;
import lodge.datamodel.Address;
import lodge.datamodel.DuplicateObjectException;
import lodge.datamodel.EmailAddress;
import lodge.datamodel.IReservation;
import lodge.datamodel.IllegalOperationException;
import lodge.datamodel.Reservation;
public final class AccomodationManager {
private final AccountList accounts = new AccountList();
@SuppressWarnings("unused")
private AccomodationManager() {
};
public AccomodationManager(String home) {
setDataStoreRoot(home);
};
public final void setDataStoreRoot(String home) {
DataRepository.setDataStoreRoot(home);
}
String getDataStoreRoot(){
return DataRepository.getPath();
}
public final void loadAll()
throws IOException, IllegalArgumentException, IllegalOperationException, DuplicateObjectException {
accounts.clear();
// walk directories
DataRepository.WalkFileSystemTree(this, Path.of(DataRepository.getPath()));
System.out.println(String.format("%s LoadAll Accounts %d", "Deserializing", accounts.size()));
}
// Load / Deserialize Account
protected void load(Path file)
throws IOException, IllegalArgumentException, IllegalOperationException, DuplicateObjectException {
Account account = DataRepository.LoadAccount(file);
if (account == null) {
System.out.println(String.format("No Account: %s", file.toString()));
} else {
account.checkValid();
accounts.add(account);
}
}
public final List<Account> retrieveLoadedAccounts() {
return Collections.unmodifiableList(accounts);
}
public Account retrieveAccount(String acct_id) {
return accounts.find(acct_id);
}
public synchronized void AddAccount(final Account acct) throws Exception {
accounts.add(acct);
}
public synchronized void UpdateAccount(final Account acct) throws Exception {
if (acct != null) {
accounts.save(acct);
}
}
public final Account newAccount(String phone_number, Address mailing_address, EmailAddress email_address)
throws Exception {
Account acct = null;
try {
acct = new Account(phone_number, mailing_address, email_address);
} catch (Exception e) {
System.out.println(e.toString());
}
accounts.save(acct);
return acct;
}
public boolean addReservation(final Account account, final Reservation reservation) {
boolean result = account.add(reservation);
return result;
}
public final Reservation findReservation(String reservation_number) {
Reservation rsrv = null;
for (Account acct : accounts) {
rsrv = acct.findReservation(reservation_number);
if (rsrv != null)
break;
}
return rsrv;
}
public List<Account> getListOfAccounts() {
return accounts.getListOfAccounts();
}
public List<? extends IReservation> getReservationList() {
return accounts.getListOfReservations();
}
// Show all accounts lists of resverations
public void showReservationList() {
for (IReservation irsrv : accounts.getListOfReservations()) {
System.out.println(String.format("Account %s: %s, %s", irsrv.getAccountNumber(),
irsrv.getReservation_number(), irsrv.getPhysical_address().getStreet()));
}
}
// show the accounts
public void showAccountList() {
for (Account acct : accounts.getListOfAccounts()) {
System.out.println(String.format("Account %s", acct.getAccount_number()));
}
}
public final static class getRepositoryConfig {
public final static String getPath() {
String home = System.getenv("HOME") != null ? System.getenv("HOME")
: System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH");
return home.replace('\\', '/') + "/workspace/reservationsystem/src/resources/db";
}
}
}