Files
reservationsystem/uml/classdiagram6.dot
2025-09-29 09:59:37 -04:00

98 lines
4.7 KiB
Plaintext

digraph "Reservation System" {
// General graph settings
graph [
rankdir="TB",
splines=ortho,
nodesep=1.0,
ranksep=1.0,
fontname="Arial",
fontsize=12
];
// General node and edge settings
node [
shape=record,
style=filled,
fillcolor=lightyellow,
fontname="Arial",
fontsize=10
];
edge [
fontname="Arial",
fontsize=9
];
// Packages
subgraph cluster_reservationsystem {
label="lodge.reservationsystem";
style=filled;
color=lightgrey;
AccomodationManager [label="{AccomodationManager|+ AccomodationManager(String)\l+ loadAll(): void\l+ retrieveAccount(String): Account\l+ retrieveLoadedAccounts(): AccountList\l+ newAccount(String, Address, EmailAddress): Account\l+ AddAccount(Account): void\l+ UpdateAccount(Account): void\l+ addReservation(Account, Reservation): boolean\l+ showReservationList(): void\l}"];
DataRepository [label="{DataRepository (Singleton)|- directoryPath: String\l- instance: DataRepository\l|+ getInstance(): DataRepository\l+ setDataStoreRoot(path: String)\l+ getPath(): String\l+ Reservation(type: String): Reservation\l+ WalkFileSystemTree(manager: AccomodationManager, rootDir: Path)\l+ LoadAccount(file: Path): Account\l- loadReservationRefList(rdr: JsonReader, ac: Account)\l- loadReservation(ac: Account, type: String, num: String)\l}"];
HotelReservation [label="{HotelReservation|+ HotelReservation(physicalAddress: Address)\l}"];
HouseReservation [label="{HouseReservation|+ HouseReservation(physicalAddress: Address)\l}"];
CabinReservation [label="{CabinReservation|+ CabinReservation(physicalAddress: Address)\l}"];
}
subgraph cluster_datamodel {
label="lodge.datamodel";
style=filled;
color=lightblue;
IReservation [label="<<interface>>\nIReservation"];
Reservation [label="{Reservation|+ Reservation()\l+ Reservation(physicalAddress: Address)\l+ Change(rsrv: Reservation, status: ReservationStatusEnum)\l+ update(rsrv: Reservation)\l+ calculatePrice(): float\l+ getPricePerNight(): float\l+ ReservationType(): String\l}"];
Account [label="{Account|+ Account()\l+ add(rsrv: Reservation)\l+ findReservation(reservationNumber: String): Reservation\l+ getAllReservations(): Iterator<IReservation>\l}"];
Address [label="{Address|+ Address(street: String, city: String, state: String, zip: String)\l}"];
EmailAddress [label="{EmailAddress|+ EmailAddress(email: String)\l}"];
ReservationStatusEnum [label="<<enum>>\nReservationStatusEnum|DRAFT\lCOMPLETED\lCANCELED\l"];
KitchenTypeEnum [label="<<enum>>\nKitchenTypeEnum|NONE\lPARTIAL\lFULL\l"];
DuplicateObjectException [label="<<exception>>\nDuplicateObjectException"];
}
subgraph cluster_test {
label="lodge (Test)";
style=filled;
color=honeydew;
TestReservations [label="{TestReservations|+ main(args: String[])\l}"];
}
// Relationships
AccomodationManager -> Account [label="manages"];
AccomodationManager -> Reservation [label="manages"];
AccomodationManager -> DataRepository [label="uses"];
DataRepository -> AccomodationManager [label="uses"];
DataRepository -> Reservation [label="creates"];
DataRepository -> HotelReservation [label="creates"];
DataRepository -> HouseReservation [label="creates"];
DataRepository -> CabinReservation [label="creates"];
DataRepository -> Account [label="loads/updates"];
TestReservations -> AccomodationManager [label="uses"];
TestReservations -> Account [label="uses"];
TestReservations -> HotelReservation [label="creates"];
TestReservations -> HouseReservation [label="creates"];
TestReservations -> CabinReservation [label="creates"];
Account -> IReservation [label="contains 0..*"];
Account -> Address [label="has mailing"];
Account -> EmailAddress [label="has"];
Reservation -> IReservation [style=dashed, arrowhead=empty, label="implements"];
Reservation -> Address [label="has physical/mailing"];
Reservation -> ReservationStatusEnum;
Reservation -> KitchenTypeEnum;
HotelReservation -> Reservation [style=dashed, arrowhead=empty, label="extends"];
HouseReservation -> Reservation [style=dashed, arrowhead=empty, label="extends"];
CabinReservation -> Reservation [style=dashed, arrowhead=empty, label="extends"];
// Exceptions
edge [color=red, style=dashed, arrowhead=open];
AccomodationManager -> DuplicateObjectException [label="<<throws>>"];
AccomodationManager -> Exception [label="<<throws>>"];
DataRepository -> IOException [label="<<throws>>"];
}