This commit is contained in:
2025-09-18 21:39:24 -04:00
parent 3dcbc6aa47
commit 55c278dcba
17 changed files with 507 additions and 517 deletions

View File

@@ -1,101 +1,102 @@
digraph LodgeReservationSystem {
// Graph settings
// Graph attributes
rankdir=TB;
node [shape=record, fontname="Arial", fontsize=10];
edge [fontname="Arial", fontsize=8];
// Define clusters for packages
// Package: lodge.data
subgraph cluster_data {
label="lodge.data";
style=filled;
color=lightgrey;
// Data classes
Account [label="{Account|+ account_number: String\l+ phone_number: String\l+ mailing_address: Address\l+ email_address: EmailAddress\l- reservation_list: AccountReservationList\l|+ add(Reservation): boolean\l+ findReservation(String): Reservation\l+ getAllReservations(): ListIterator\<IReservation\>\l+ update(Account): void\l+ Write(Account): void\l}"];
// Core data classes
Account [label="{Account|+ account_number: String\l+ phone_number: String\l+ mailing_address: Address\l+ email_address: EmailAddress\l+ reservations: AccountReservationList\l|+ add(Reservation): boolean\l+ findReservation(String): Reservation\l+ getAllReservations(): ListIterator\<IReservation\>\l+ update(Account): void\l+ Write(Account): void\l}"];
AccountList [label="{AccountList|extends ArrayList\<Account\>|+ accountSerial(...): String\l+ add(Account): boolean\l+ find(String): Account\l+ save(Account): void\l+ getListOfReservations(): List\<IReservation\>\l}"];
AccountList [label="{AccountList|extends ArrayList\<Account\>|+ accountSerial(String, Address, EmailAddress): String\l+ add(Account): boolean\l+ find(String): Account\l+ save(Account): void\l+ getListOfReservations(): List\<? extends IReservation\>\l+ showReservationList(): void\l}"];
AccountReservationList [label="{AccountReservationList|extends ArrayList\<IReservation\>|- reservationSerial(Reservation): String\l+ add(IReservation): boolean\l+ find(String): Reservation\l+ update(AccountReservationList): void\l}"];
AccountReservationList [label="{AccountReservationList|extends ArrayList\<IReservation\>|+ add(IReservation): boolean\l+ find(String): Reservation\l+ update(AccountReservationList): void\l+ toString(): String\l}"];
Address [label="{Address|+ street: String\l+ city: String\l+ state: String\l+ zip: String\l|+ getters/setters\l+ hashCode(): int\l+ equals(Object): boolean\l}"];
Address [label="{Address|+ street: String\l+ city: String\l+ state: String\l+ zip: String\l|+ getStreet(): String\l+ setStreet(String): void\l+ getCity(): String\l+ setCity(String): void\l+ getState(): String\l+ setState(String): void\l+ getZip(): String\l+ setZip(String): void\l+ equals(Object): boolean\l+ hashCode(): int\l+ toString(): String\l}"];
EmailAddress [label="{EmailAddress|+ email_address: String\l|+ getters/setters\l+ hashCode(): int\l+ equals(Object): boolean\l}"];
EmailAddress [label="{EmailAddress|+ email_address: String\l|+ getEmail_address(): String\l+ setEmail_address(String): void\l+ equals(Object): boolean\l+ hashCode(): int\l+ toString(): String\l}"];
Reservation [label="{Reservation|\<\<abstract\>\>|# type: char\l- reservation_number: String\l- physical_address: Address\l- mailing_address: Address\l- reservation_start_date: ZonedDateTime\l- reservation_end_date: ZonedDateTime\l- reservation_status: ReservationStatusEnum\l- kitchen: KitchenTypeEnum\l- numberOfBeds: Integer\l- numberOfBedRooms: Integer\l- numberOfBathRooms: Integer\l- numberOfFloors: Integer\l- squareFeet: Integer\l- price: Float\l# accountNumber: String\l|+ getters/setters\l+ Write(Reservation): void\l+ Change(Reservation, ReservationStatusEnum): void\l+ update(Reservation): void\l+ \<\<abstract\>\> ReservationType(): String\l}"];
DataRepository [label="{DataRepository|\<\<singleton\>\>|- directoryPath: String\l- instance: DataRepository\l|+ setDataStoreRoot(String): void\l+ getPath(): String\l+ Reservation(String): Reservation\l+ WalkFileSystemTree(...): void\l+ LoadAccount(Path): Account\l- loadReservation(...): void\l}"];
DuplicateObjectException [label="{DuplicateObjectException|extends RuntimeException||+ DuplicateObjectException()\l+ DuplicateObjectException(String)\l}"];
DataRepository [label="{DataRepository|- directoryPath: String\l- instance: DataRepository\l|+ setDataStoreRoot(String): void\l+ getPath(): String\l+ Reservation(String): Reservation\l+ WalkFileSystemTree(AccomodationManager, Path): void\l+ LoadAccount(Path): Account\l}"];
// Enums
KitchenTypeEnum [label="{KitchenTypeEnum|\<\<enumeration\>\>|None\lKitchenette\lFullKitchen\l}"];
KitchenTypeEnum [label="{«enumeration»\lKitchenTypeEnum|None\lKitchenette\lFullKitchen\l}"];
ReservationStatusEnum [label="{ReservationStatusEnum|\<\<enumeration\>\>|Draft\lCanceled\lCompleted\l}"];
ReservationStatusEnum [label="{«enumeration»\lReservationStatusEnum|Draft\lCanceled\lCompleted\l}"];
// Exceptions
DuplicateObjectException [label="{DuplicateObjectException|+ DuplicateObjectException()\l+ DuplicateObjectException(String)\l}"];
IllegalOperationException [label="{IllegalOperationException|+ IllegalOperationException()\l+ IllegalOperationException(String)\l}"];
}
subgraph cluster_reservationsystem {
label="lodge.reservationsystem";
// Package: lodge.reservation
subgraph cluster_reservation {
label="lodge.reservation";
style=filled;
color=lightblue;
AccomodationManager [label="{AccomodationManager|- accounts: AccountList\l|+ AccomodationManager(String)\l+ loadAll(): void\l+ load(Path): void\l+ retrieveLoadedAccounts(): List\<Account\>\l+ retrieveAccount(String): Account\l+ AddAccount(Account): void\l+ UpdateAccount(Account): void\l+ newAccount(...): Account\l+ addReservation(...): boolean\l+ findReservation(String): Reservation\l+ getReservationList(): List\<IReservation\>\l+ showReservationList(): void\l}"];
IReservation [label="{«interface»\lIReservation|+ ReservationType(): String\l+ getReservation_number(): String\l+ getAccountNumber(): String\l+ getPhysical_address(): Address\l+ getPricePerNight(): float\l+ calculatePrice(): float\l+ checkValid(): boolean\l}"];
IReservation [label="{IReservation|\<\<interface\>\>||+ ReservationType(): String\l+ getReservation_number(): String\l+ getAccountNumber(): String\l+ getPhysical_address(): Address\l+ getPricePerNight(): float\l+ calculatePrice(): float\l+ checkValid(): boolean\l}"];
HotelReservation [label="{HotelReservation|extends Reservation\limplements IReservation|# type: 'H'\l|+ HotelReservation(Address)\l+ ReservationType(): String\l+ checkValid(): boolean\l+ getPricePerNight(): float\l+ calculatePrice(): float\l+ Reservation(String): Reservation\l}"];
CabinReservation [label="{CabinReservation|extends Reservation\limplements IReservation|# type: 'C'\l|+ CabinReservation(Address)\l+ ReservationType(): String\l+ checkValid(): boolean\l+ getPricePerNight(): float\l+ calculatePrice(): float\l+ Reservation(String): Reservation\l}"];
HouseReservation [label="{HouseReservation|extends Reservation\limplements IReservation|# type: 'Z'\l|+ HouseReservation(Address)\l+ ReservationType(): String\l+ checkValid(): boolean\l+ getPricePerNight(): float\l+ calculatePrice(): float\l+ Reservation(String): Reservation\l}"];
IllegalOperationException [label="{IllegalOperationException|extends RuntimeException||+ IllegalOperationException()\l+ IllegalOperationException(String)\l}"];
Reservation [label="{«abstract»\lReservation|# type: char\l# reservation_number: String\l# physical_address: Address\l# mailing_address: Address\l# reservation_start_date: ZonedDateTime\l# reservation_end_date: ZonedDateTime\l# reservation_status: ReservationStatusEnum\l# kitchen: KitchenTypeEnum\l# numberOfBeds: Integer\l# numberOfBedRooms: Integer\l# numberOfBathRooms: Integer\l# numberOfFloors: Integer\l# squareFeet: Integer\l# price: Float\l# accountNumber: String\l|+ getReservation_number(): String\l+ setReservation_number(String): void\l+ getAccountNumber(): String\l+ setAccountNumber(String): void\l+ getPhysical_address(): Address\l+ setPhysical_address(Address): void\l+ Write(Reservation): void\l+ Change(Reservation, ReservationStatusEnum): void\l+ update(Reservation): void\l+ ReservationType(): String\l}"];
}
subgraph cluster_main {
label="lodge";
// Package: lodge.reservationsystem
subgraph cluster_reservationsystem {
label="lodge.reservationsystem";
style=filled;
color=lightyellow;
TestReservations [label="{TestReservations||+ main(String[]): void\l}"];
AccomodationManager [label="{AccomodationManager|- accounts: AccountList\l|+ loadAll(): void\l+ load(Path): void\l+ retrieveLoadedAccounts(): List\<Account\>\l+ retrieveAccount(String): Account\l+ AddAccount(Account): void\l+ UpdateAccount(Account): void\l+ newAccount(String, Address, EmailAddress): Account\l+ addReservation(Account, Reservation): boolean\l+ findReservation(String): Reservation\l+ getReservationList(): List\<? extends IReservation\>\l+ showReservationList(): void\l}"];
HotelReservation [label="{HotelReservation|extends Reservation|+ HotelReservation()\l+ HotelReservation(Address)\l+ copy(String): Reservation\l+ ReservationType(): String\l+ checkValid(): boolean\l+ getPricePerNight(): float\l+ calculatePrice(): float\l}"];
CabinReservation [label="{CabinReservation|extends Reservation|+ CabinReservation()\l+ CabinReservation(Address)\l+ ReservationType(): String\l+ checkValid(): boolean\l+ getPricePerNight(): float\l+ calculatePrice(): float\l}"];
HouseReservation [label="{HouseReservation|extends Reservation|+ HouseReservation()\l+ HouseReservation(Address)\l+ copy(String): Reservation\l+ ReservationType(): String\l+ checkValid(): boolean\l+ getPricePerNight(): float\l+ calculatePrice(): float\l}"];
}
// Test class
TestReservations [label="{TestReservations|+ main(String[]): void\l}"];
// Relationships
// Composition relationships
Account -> AccountReservationList [label="1" arrowhead=diamond];
Account -> Address [label="1" arrowhead=diamond];
Account -> EmailAddress [label="1" arrowhead=diamond];
AccountList -> Account [label="0...*" arrowhead=odiamond];
AccountReservationList -> IReservation [label="0...*" arrowhead=odiamond];
AccomodationManager -> AccountList [label="1" arrowhead=diamond];
// Inheritance relationships
AccountList -> Account [arrowhead=diamond, label="contains"];
AccountReservationList -> IReservation [arrowhead=diamond, label="contains"];
Reservation -> IReservation [arrowhead=empty, style=dashed, label="implements"];
HotelReservation -> Reservation [arrowhead=empty, label="extends"];
CabinReservation -> Reservation [arrowhead=empty, label="extends"];
HouseReservation -> Reservation [arrowhead=empty, label="extends"];
HotelReservation -> Reservation [arrowhead=empty];
CabinReservation -> Reservation [arrowhead=empty];
HouseReservation -> Reservation [arrowhead=empty];
HotelReservation -> IReservation [arrowhead=empty, style=dashed];
CabinReservation -> IReservation [arrowhead=empty, style=dashed];
HouseReservation -> IReservation [arrowhead=empty, style=dashed];
// Composition/Aggregation relationships
Account -> Address [arrowhead=diamond, label="mailing_address"];
Account -> EmailAddress [arrowhead=diamond, label="email_address"];
Account -> AccountReservationList [arrowhead=diamond, label="reservation_list"];
// Dependencies and associations
Reservation -> Address [label="1", arrowhead=diamond];
Reservation -> KitchenTypeEnum [arrowhead=open, style=dashed];
Reservation -> ReservationStatusEnum [arrowhead=open, style=dashed];
DataRepository -> AccomodationManager [arrowhead=open, style=dashed];
Reservation -> Address [arrowhead=diamond, label="physical_address\nmailing_address"];
Reservation -> KitchenTypeEnum [arrowhead=open, label="kitchen"];
Reservation -> ReservationStatusEnum [arrowhead=open, label="reservation_status"];
AccomodationManager -> AccountList [arrowhead=diamond, label="accounts"];
AccomodationManager -> DataRepository [arrowhead=open, label="uses"];
// Usage relationships
TestReservations -> AccomodationManager [arrowhead=open, label="uses"];
TestReservations -> HotelReservation [arrowhead=open, label="creates"];
TestReservations -> CabinReservation [arrowhead=open, label="creates"];
TestReservations -> HouseReservation [arrowhead=open, label="creates"];
DataRepository -> Account [arrowhead=open, label="loads"];
DataRepository -> Reservation [arrowhead=open, label="creates"];
AccomodationManager -> Reservation [arrowhead=open, style=dashed];
AccomodationManager -> DataRepository [arrowhead=open, style=dashed];
TestReservations -> AccomodationManager [arrowhead=open, style=dashed];
TestReservations -> HotelReservation [arrowhead=open, style=dashed];
TestReservations -> CabinReservation [arrowhead=open, style=dashed];
TestReservations -> HouseReservation [arrowhead=open, style=dashed];
// Exception relationships
AccountList -> DuplicateObjectException [arrowhead=open, style=dashed, label="throws"];
AccountReservationList -> DuplicateObjectException [arrowhead=open, style=dashed, label="throws"];
Reservation -> IllegalOperationException [arrowhead=open, style=dashed, label="throws"];
AccountList -> DuplicateObjectException [arrowhead=open, style=dashed];
AccountReservationList -> DuplicateObjectException [arrowhead=open, style=dashed];
Reservation -> IllegalOperationException [arrowhead=open, style=dashed];
Reservation -> ZonedDateTime [arrowhead=open, style=dashed];
}

View File

@@ -1,465 +1,451 @@
<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1791pt" height="1094pt" viewBox="0.00 0.00 1791 1094.2">
<g id="graph0" class="graph" transform="translate(4,1090.199951171875) scale(1)" data-name="LodgeReservationSystem">
<polygon fill="white" stroke="none" points="-4,4 -4,-1090.2 1787,-1090.2 1787,4 -4,4"/>
<g id="clust1" class="cluster" data-name="cluster_data">
<polygon fill="lightgrey" stroke="lightgrey" points="994,-8 994,-904 1775,-904 1775,-8 994,-8" style=""/>
<text text-anchor="middle" x="1384.5" y="-887.4" font-family="Times,serif" font-size="14.00" style="">lodge.data</text>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.44.1 (20200629.0846)
-->
<!-- Title: LodgeReservationSystem Pages: 1 -->
<svg width="1415pt" height="1382pt"
viewBox="0.00 0.00 1414.74 1381.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1377.5)">
<title>LodgeReservationSystem</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-1377.5 1410.74,-1377.5 1410.74,4 -4,4"/>
<g id="clust3" class="cluster">
<title>cluster_reservationsystem</title>
<polygon fill="lightyellow" stroke="lightyellow" points="470,-1100.5 470,-1307.5 1232,-1307.5 1232,-1100.5 470,-1100.5"/>
<text text-anchor="middle" x="851" y="-1292.3" font-family="Times New Roman,serif" font-size="14.00">lodge.reservationsystem</text>
</g>
<g id="clust2" class="cluster" data-name="cluster_reservationsystem">
<polygon fill="lightblue" stroke="lightblue" points="8,-394.8 8,-924 986,-924 986,-394.8 8,-394.8" style=""/>
<text text-anchor="middle" x="497" y="-907.4" font-family="Times,serif" font-size="14.00" style="">lodge.reservationsystem</text>
<g id="clust1" class="cluster">
<title>cluster_data</title>
<polygon fill="lightgrey" stroke="lightgrey" points="8,-8 8,-685.5 1011,-685.5 1011,-8 8,-8"/>
<text text-anchor="middle" x="509.5" y="-670.3" font-family="Times New Roman,serif" font-size="14.00">lodge.data</text>
</g>
<g id="clust3" class="cluster" data-name="cluster_main">
<polygon fill="lightyellow" stroke="lightyellow" points="303,-951.6 303,-1078.2 427,-1078.2 427,-951.6 303,-951.6" style=""/>
<text text-anchor="middle" x="365" y="-1061.6" font-family="Times,serif" font-size="14.00" style="">lodge</text>
<g id="clust2" class="cluster">
<title>cluster_reservation</title>
<polygon fill="lightblue" stroke="lightblue" points="1019,-532 1019,-1073.5 1283,-1073.5 1283,-532 1019,-532"/>
<text text-anchor="middle" x="1151" y="-1058.3" font-family="Times New Roman,serif" font-size="14.00">lodge.reservation</text>
</g>
<!-- Account -->
<g id="node1" class="node" pointer-events="visible" data-name="Account">
<polygon fill="none" stroke="black" points="1276.37,-401.3 1276.37,-557.3 1511.63,-557.3 1511.63,-401.3 1276.37,-401.3"/>
<text text-anchor="middle" x="1394" y="-544.3" font-family="Arial" font-size="10.00">Account</text>
<polyline fill="none" stroke="black" points="1276.37,-537.3 1511.63,-537.3"/>
<text text-anchor="start" x="1284.37" y="-524.3" font-family="Arial" font-size="10.00">+ account_number: String</text>
<text text-anchor="start" x="1284.37" y="-512.3" font-family="Arial" font-size="10.00">+ phone_number: String</text>
<text text-anchor="start" x="1284.37" y="-500.3" font-family="Arial" font-size="10.00">+ mailing_address: Address</text>
<text text-anchor="start" x="1284.37" y="-488.3" font-family="Arial" font-size="10.00">+ email_address: EmailAddress</text>
<text text-anchor="start" x="1284.37" y="-476.3" font-family="Arial" font-size="10.00">- reservation_list: AccountReservationList</text>
<polyline fill="none" stroke="black" points="1276.37,-469.3 1511.63,-469.3"/>
<text text-anchor="start" x="1284.37" y="-456.3" font-family="Arial" font-size="10.00">+ add(Reservation): boolean</text>
<text text-anchor="start" x="1284.37" y="-444.3" font-family="Arial" font-size="10.00">+ findReservation(String): Reservation</text>
<text text-anchor="start" x="1284.37" y="-432.3" font-family="Arial" font-size="10.00">+ getAllReservations(): ListIterator&lt;IReservation&gt;</text>
<text text-anchor="start" x="1284.37" y="-420.3" font-family="Arial" font-size="10.00">+ update(Account): void</text>
<text text-anchor="start" x="1284.37" y="-408.3" font-family="Arial" font-size="10.00">+ Write(Account): void</text>
<g id="node1" class="node">
<title>Account</title>
<polygon fill="none" stroke="black" points="484,-349.5 484,-494.5 712,-494.5 712,-349.5 484,-349.5"/>
<text text-anchor="middle" x="598" y="-482.5" font-family="Arial" font-size="10.00">Account</text>
<polyline fill="none" stroke="black" points="484,-475.5 712,-475.5 "/>
<text text-anchor="start" x="492" y="-463.5" font-family="Arial" font-size="10.00">+ account_number: String</text>
<text text-anchor="start" x="492" y="-452.5" font-family="Arial" font-size="10.00">+ phone_number: String</text>
<text text-anchor="start" x="492" y="-441.5" font-family="Arial" font-size="10.00">+ mailing_address: Address</text>
<text text-anchor="start" x="492" y="-430.5" font-family="Arial" font-size="10.00">+ email_address: EmailAddress</text>
<text text-anchor="start" x="492" y="-419.5" font-family="Arial" font-size="10.00">+ reservations: AccountReservationList</text>
<polyline fill="none" stroke="black" points="484,-412.5 712,-412.5 "/>
<text text-anchor="start" x="492" y="-400.5" font-family="Arial" font-size="10.00">+ add(Reservation): boolean</text>
<text text-anchor="start" x="492" y="-389.5" font-family="Arial" font-size="10.00">+ findReservation(String): Reservation</text>
<text text-anchor="start" x="492" y="-378.5" font-family="Arial" font-size="10.00">+ getAllReservations(): ListIterator&lt;IReservation&gt;</text>
<text text-anchor="start" x="492" y="-367.5" font-family="Arial" font-size="10.00">+ update(Account): void</text>
<text text-anchor="start" x="492" y="-356.5" font-family="Arial" font-size="10.00">+ Write(Account): void</text>
</g>
<!-- AccountReservationList --><g id="edge11" class="edge" data-name="Account-&gt;AccountReservationList" data-comment="AccountReservationList">
<path fill="none" stroke="black" d="M1378.25,-401.44C1368.19,-365.99 1352.34,-324.93 1328,-293.6 1321.55,-285.29 1313.94,-277.56 1305.78,-270.46"/>
<polygon fill="black" stroke="black" points="1305.98,-270.62 1298.8,-269.89 1296.72,-262.99 1303.89,-263.72 1305.98,-270.62"/>
<text text-anchor="middle" x="1366.9" y="-300.8" font-family="Arial" font-size="8.00">reservation_list</text>
</g>
<g id="node3" class="node" pointer-events="visible" data-name="AccountReservationList">
<polygon fill="none" stroke="black" points="1117.59,-167.1 1117.59,-263.1 1308.41,-263.1 1308.41,-167.1 1117.59,-167.1"/>
<text text-anchor="middle" x="1213" y="-250.1" font-family="Arial" font-size="10.00">AccountReservationList</text>
<polyline fill="none" stroke="black" points="1117.59,-243.1 1308.41,-243.1"/>
<text text-anchor="middle" x="1213" y="-230.1" font-family="Arial" font-size="10.00">extends ArrayList&lt;IReservation&gt;</text>
<polyline fill="none" stroke="black" points="1117.59,-223.1 1308.41,-223.1"/>
<text text-anchor="start" x="1125.59" y="-210.1" font-family="Arial" font-size="10.00">- reservationSerial(Reservation): String</text>
<text text-anchor="start" x="1125.59" y="-198.1" font-family="Arial" font-size="10.00">+ add(IReservation): boolean</text>
<text text-anchor="start" x="1125.59" y="-186.1" font-family="Arial" font-size="10.00">+ find(String): Reservation</text>
<text text-anchor="start" x="1125.59" y="-174.1" font-family="Arial" font-size="10.00">+ update(AccountReservationList): void</text>
<!-- AccountReservationList -->
<g id="node3" class="node">
<title>AccountReservationList</title>
<polygon fill="none" stroke="black" points="596.5,-158.5 596.5,-248.5 781.5,-248.5 781.5,-158.5 596.5,-158.5"/>
<text text-anchor="middle" x="689" y="-236.5" font-family="Arial" font-size="10.00">AccountReservationList</text>
<polyline fill="none" stroke="black" points="596.5,-229.5 781.5,-229.5 "/>
<text text-anchor="middle" x="689" y="-217.5" font-family="Arial" font-size="10.00">extends ArrayList&lt;IReservation&gt;</text>
<polyline fill="none" stroke="black" points="596.5,-210.5 781.5,-210.5 "/>
<text text-anchor="start" x="604.5" y="-198.5" font-family="Arial" font-size="10.00">+ add(IReservation): boolean</text>
<text text-anchor="start" x="604.5" y="-187.5" font-family="Arial" font-size="10.00">+ find(String): Reservation</text>
<text text-anchor="start" x="604.5" y="-176.5" font-family="Arial" font-size="10.00">+ update(AccountReservationList): void</text>
<text text-anchor="start" x="604.5" y="-165.5" font-family="Arial" font-size="10.00">+ toString(): String</text>
</g>
<!-- Account&#45;&gt;AccountReservationList -->
<!-- Address --><g id="edge9" class="edge" data-name="Account-&gt;Address" data-comment="Address">
<path fill="none" stroke="black" d="M1434.62,-401.45C1452.17,-368.26 1472.95,-329.01 1491.75,-293.6 1493.2,-290.85 1494.69,-288.06 1496.19,-285.23"/>
<polygon fill="black" stroke="black" points="1496.04,-285.51 1495.33,-278.33 1501.68,-274.91 1502.39,-282.09 1496.04,-285.51"/>
<text text-anchor="middle" x="1520.13" y="-300.8" font-family="Arial" font-size="8.00">mailing_address</text>
<g id="edge1" class="edge">
<title>Account&#45;&gt;AccountReservationList</title>
<path fill="none" stroke="black" d="M628.18,-349.21C640.4,-320.13 654.29,-287.08 665.71,-259.91"/>
<polygon fill="black" stroke="black" points="665.79,-259.71 664.43,-252.63 670.44,-248.65 671.8,-255.73 665.79,-259.71"/>
<text text-anchor="middle" x="641.5" y="-324.6" font-family="Arial" font-size="8.00">1</text>
</g>
<g id="node4" class="node" pointer-events="visible" data-name="Address">
<polygon fill="none" stroke="black" points="1467.6,-155.1 1467.6,-275.1 1598.4,-275.1 1598.4,-155.1 1467.6,-155.1"/>
<text text-anchor="middle" x="1533" y="-262.1" font-family="Arial" font-size="10.00">Address</text>
<polyline fill="none" stroke="black" points="1467.6,-255.1 1598.4,-255.1"/>
<text text-anchor="start" x="1475.6" y="-242.1" font-family="Arial" font-size="10.00">+ street: String</text>
<text text-anchor="start" x="1475.6" y="-230.1" font-family="Arial" font-size="10.00">+ city: String</text>
<text text-anchor="start" x="1475.6" y="-218.1" font-family="Arial" font-size="10.00">+ state: String</text>
<text text-anchor="start" x="1475.6" y="-206.1" font-family="Arial" font-size="10.00">+ zip: String</text>
<polyline fill="none" stroke="black" points="1467.6,-199.1 1598.4,-199.1"/>
<text text-anchor="start" x="1475.6" y="-186.1" font-family="Arial" font-size="10.00">+ getters/setters</text>
<text text-anchor="start" x="1475.6" y="-174.1" font-family="Arial" font-size="10.00">+ hashCode(): int</text>
<text text-anchor="start" x="1475.6" y="-162.1" font-family="Arial" font-size="10.00">+ equals(Object): boolean</text>
<!-- Address -->
<g id="node4" class="node">
<title>Address</title>
<polygon fill="none" stroke="black" points="857,-103.5 857,-303.5 985,-303.5 985,-103.5 857,-103.5"/>
<text text-anchor="middle" x="921" y="-291.5" font-family="Arial" font-size="10.00">Address</text>
<polyline fill="none" stroke="black" points="857,-284.5 985,-284.5 "/>
<text text-anchor="start" x="865" y="-272.5" font-family="Arial" font-size="10.00">+ street: String</text>
<text text-anchor="start" x="865" y="-261.5" font-family="Arial" font-size="10.00">+ city: String</text>
<text text-anchor="start" x="865" y="-250.5" font-family="Arial" font-size="10.00">+ state: String</text>
<text text-anchor="start" x="865" y="-239.5" font-family="Arial" font-size="10.00">+ zip: String</text>
<polyline fill="none" stroke="black" points="857,-232.5 985,-232.5 "/>
<text text-anchor="start" x="865" y="-220.5" font-family="Arial" font-size="10.00">+ getStreet(): String</text>
<text text-anchor="start" x="865" y="-209.5" font-family="Arial" font-size="10.00">+ setStreet(String): void</text>
<text text-anchor="start" x="865" y="-198.5" font-family="Arial" font-size="10.00">+ getCity(): String</text>
<text text-anchor="start" x="865" y="-187.5" font-family="Arial" font-size="10.00">+ setCity(String): void</text>
<text text-anchor="start" x="865" y="-176.5" font-family="Arial" font-size="10.00">+ getState(): String</text>
<text text-anchor="start" x="865" y="-165.5" font-family="Arial" font-size="10.00">+ setState(String): void</text>
<text text-anchor="start" x="865" y="-154.5" font-family="Arial" font-size="10.00">+ getZip(): String</text>
<text text-anchor="start" x="865" y="-143.5" font-family="Arial" font-size="10.00">+ setZip(String): void</text>
<text text-anchor="start" x="865" y="-132.5" font-family="Arial" font-size="10.00">+ equals(Object): boolean</text>
<text text-anchor="start" x="865" y="-121.5" font-family="Arial" font-size="10.00">+ hashCode(): int</text>
<text text-anchor="start" x="865" y="-110.5" font-family="Arial" font-size="10.00">+ toString(): String</text>
</g>
<!-- Account&#45;&gt;Address -->
<!-- EmailAddress --><g id="edge10" class="edge" data-name="Account-&gt;EmailAddress" data-comment="EmailAddress">
<path fill="none" stroke="black" d="M1478.46,-401.4C1526.96,-357.25 1586.4,-303.13 1628.49,-264.81"/>
<polygon fill="black" stroke="black" points="1628.33,-264.96 1630.07,-257.97 1637.2,-256.88 1635.46,-263.88 1628.33,-264.96"/>
<text text-anchor="middle" x="1614.01" y="-300.8" font-family="Arial" font-size="8.00">email_address</text>
<g id="edge2" class="edge">
<title>Account&#45;&gt;Address</title>
<path fill="none" stroke="black" d="M712.17,-354.07C738.08,-338.15 765.25,-320.88 790,-304 808.9,-291.11 828.8,-276.55 847.22,-262.62"/>
<polygon fill="black" stroke="black" points="847.45,-262.45 849.8,-255.63 857,-255.18 854.64,-262 847.45,-262.45"/>
<text text-anchor="middle" x="762.5" y="-324.6" font-family="Arial" font-size="8.00">1</text>
</g>
<g id="node5" class="node" pointer-events="visible" data-name="EmailAddress">
<polygon fill="none" stroke="black" points="1616.6,-173.1 1616.6,-257.1 1747.4,-257.1 1747.4,-173.1 1616.6,-173.1"/>
<text text-anchor="middle" x="1682" y="-244.1" font-family="Arial" font-size="10.00">EmailAddress</text>
<polyline fill="none" stroke="black" points="1616.6,-237.1 1747.4,-237.1"/>
<text text-anchor="start" x="1624.6" y="-224.1" font-family="Arial" font-size="10.00">+ email_address: String</text>
<polyline fill="none" stroke="black" points="1616.6,-217.1 1747.4,-217.1"/>
<text text-anchor="start" x="1624.6" y="-204.1" font-family="Arial" font-size="10.00">+ getters/setters</text>
<text text-anchor="start" x="1624.6" y="-192.1" font-family="Arial" font-size="10.00">+ hashCode(): int</text>
<text text-anchor="start" x="1624.6" y="-180.1" font-family="Arial" font-size="10.00">+ equals(Object): boolean</text>
<!-- EmailAddress -->
<g id="node5" class="node">
<title>EmailAddress</title>
<polygon fill="none" stroke="black" points="420,-153 420,-254 578,-254 578,-153 420,-153"/>
<text text-anchor="middle" x="499" y="-242" font-family="Arial" font-size="10.00">EmailAddress</text>
<polyline fill="none" stroke="black" points="420,-235 578,-235 "/>
<text text-anchor="start" x="428" y="-223" font-family="Arial" font-size="10.00">+ email_address: String</text>
<polyline fill="none" stroke="black" points="420,-216 578,-216 "/>
<text text-anchor="start" x="428" y="-204" font-family="Arial" font-size="10.00">+ getEmail_address(): String</text>
<text text-anchor="start" x="428" y="-193" font-family="Arial" font-size="10.00">+ setEmail_address(String): void</text>
<text text-anchor="start" x="428" y="-182" font-family="Arial" font-size="10.00">+ equals(Object): boolean</text>
<text text-anchor="start" x="428" y="-171" font-family="Arial" font-size="10.00">+ hashCode(): int</text>
<text text-anchor="start" x="428" y="-160" font-family="Arial" font-size="10.00">+ toString(): String</text>
</g>
<!-- Account&#45;&gt;EmailAddress -->
<!-- AccountList --><g id="edge1" class="edge" data-name="AccountList-&gt;Account" data-comment="AccountList">
<path fill="none" stroke="black" d="M1349.9,-715.97C1357.6,-674.85 1368.44,-616.92 1377.44,-568.79"/>
<polygon fill="black" stroke="black" points="1377.42,-568.89 1374.6,-562.26 1379.63,-557.1 1382.46,-563.73 1377.42,-568.89"/>
<text text-anchor="middle" x="1376.9" y="-648.2" font-family="Arial" font-size="8.00">contains</text>
<g id="edge3" class="edge">
<title>Account&#45;&gt;EmailAddress</title>
<path fill="none" stroke="black" d="M565.17,-349.21C552.77,-322.08 538.78,-291.5 526.87,-265.46"/>
<polygon fill="black" stroke="black" points="526.73,-265.13 520.59,-261.34 521.74,-254.22 527.87,-258.01 526.73,-265.13"/>
<text text-anchor="middle" x="557.5" y="-324.6" font-family="Arial" font-size="8.00">1</text>
</g>
<g id="node2" class="node" pointer-events="visible" data-name="AccountList">
<polygon fill="none" stroke="black" points="1230.7,-715.9 1230.7,-823.9 1449.3,-823.9 1449.3,-715.9 1230.7,-715.9"/>
<text text-anchor="middle" x="1340" y="-810.9" font-family="Arial" font-size="10.00">AccountList</text>
<polyline fill="none" stroke="black" points="1230.7,-803.9 1449.3,-803.9"/>
<text text-anchor="middle" x="1340" y="-790.9" font-family="Arial" font-size="10.00">extends ArrayList&lt;Account&gt;</text>
<polyline fill="none" stroke="black" points="1230.7,-783.9 1449.3,-783.9"/>
<text text-anchor="start" x="1238.7" y="-770.9" font-family="Arial" font-size="10.00">+ accountSerial(...): String</text>
<text text-anchor="start" x="1238.7" y="-758.9" font-family="Arial" font-size="10.00">+ add(Account): boolean</text>
<text text-anchor="start" x="1238.7" y="-746.9" font-family="Arial" font-size="10.00">+ find(String): Account</text>
<text text-anchor="start" x="1238.7" y="-734.9" font-family="Arial" font-size="10.00">+ save(Account): void</text>
<text text-anchor="start" x="1238.7" y="-722.9" font-family="Arial" font-size="10.00">+ getListOfReservations(): List&lt;IReservation&gt;</text>
<!-- AccountList -->
<g id="node2" class="node">
<title>AccountList</title>
<polygon fill="none" stroke="black" points="306,-542 306,-654 564,-654 564,-542 306,-542"/>
<text text-anchor="middle" x="435" y="-642" font-family="Arial" font-size="10.00">AccountList</text>
<polyline fill="none" stroke="black" points="306,-635 564,-635 "/>
<text text-anchor="middle" x="435" y="-623" font-family="Arial" font-size="10.00">extends ArrayList&lt;Account&gt;</text>
<polyline fill="none" stroke="black" points="306,-616 564,-616 "/>
<text text-anchor="start" x="314" y="-604" font-family="Arial" font-size="10.00">+ accountSerial(String, Address, EmailAddress): String</text>
<text text-anchor="start" x="314" y="-593" font-family="Arial" font-size="10.00">+ add(Account): boolean</text>
<text text-anchor="start" x="314" y="-582" font-family="Arial" font-size="10.00">+ find(String): Account</text>
<text text-anchor="start" x="314" y="-571" font-family="Arial" font-size="10.00">+ save(Account): void</text>
<text text-anchor="start" x="314" y="-560" font-family="Arial" font-size="10.00">+ getListOfReservations(): List&lt;? extends IReservation&gt;</text>
<text text-anchor="start" x="314" y="-549" font-family="Arial" font-size="10.00">+ showReservationList(): void</text>
</g>
<!-- AccountList&#45;&gt;Account -->
<!-- DuplicateObjectException --><g id="edge23" class="edge" data-name="AccountList-&gt;DuplicateObjectException" data-comment="DuplicateObjectException">
<path fill="none" stroke="black" d="M1418.55,-716.23C1452.19,-691.59 1490.63,-660.5 1521,-627.8 1649.07,-489.92 1701.43,-455.69 1756,-275.6 1771.59,-224.13 1788.2,-197.67 1756,-154.6 1730.17,-120.06 1623.31,-94.07 1542.43,-78.87" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="1532.7,-77.07 1543.35,-74.46 1537.62,-77.98 1542.53,-78.89 1542.53,-78.89 1542.53,-78.89 1537.62,-77.98 1541.71,-83.31 1532.7,-77.07 1532.7,-77.07"/>
<text text-anchor="middle" x="1760.78" y="-300.8" font-family="Arial" font-size="8.00">throws</text>
<g id="edge4" class="edge">
<title>AccountList&#45;&gt;Account</title>
<path fill="none" stroke="black" d="M486.57,-541.95C498.02,-529.73 510.37,-516.54 522.55,-503.54"/>
<polygon fill="none" stroke="black" points="522.73,-503.35 523.92,-496.23 530.94,-494.59 529.75,-501.7 522.73,-503.35"/>
<text text-anchor="middle" x="519.5" y="-515.6" font-family="Arial" font-size="8.00">0...*</text>
</g>
<g id="node8" class="node" pointer-events="visible" data-name="DuplicateObjectException">
<polygon fill="none" stroke="black" points="1361.05,-16.5 1361.05,-108.5 1532.95,-108.5 1532.95,-16.5 1361.05,-16.5"/>
<text text-anchor="middle" x="1447" y="-95.5" font-family="Arial" font-size="10.00">DuplicateObjectException</text>
<polyline fill="none" stroke="black" points="1361.05,-88.5 1532.95,-88.5"/>
<text text-anchor="middle" x="1447" y="-75.5" font-family="Arial" font-size="10.00">extends RuntimeException</text>
<polyline fill="none" stroke="black" points="1361.05,-68.5 1532.95,-68.5"/>
<text text-anchor="middle" x="1447" y="-55.5" font-family="Arial" font-size="10.00"> </text>
<polyline fill="none" stroke="black" points="1361.05,-48.5 1532.95,-48.5"/>
<text text-anchor="start" x="1369.05" y="-35.5" font-family="Arial" font-size="10.00">+ DuplicateObjectException()</text>
<text text-anchor="start" x="1369.05" y="-23.5" font-family="Arial" font-size="10.00">+ DuplicateObjectException(String)</text>
<!-- DuplicateObjectException -->
<g id="node9" class="node">
<title>DuplicateObjectException</title>
<polygon fill="none" stroke="black" points="660,-16.5 660,-65.5 830,-65.5 830,-16.5 660,-16.5"/>
<text text-anchor="middle" x="745" y="-53.5" font-family="Arial" font-size="10.00">DuplicateObjectException</text>
<polyline fill="none" stroke="black" points="660,-46.5 830,-46.5 "/>
<text text-anchor="start" x="668" y="-34.5" font-family="Arial" font-size="10.00">+ DuplicateObjectException()</text>
<text text-anchor="start" x="668" y="-23.5" font-family="Arial" font-size="10.00">+ DuplicateObjectException(String)</text>
</g>
<!-- AccountList&#45;&gt;DuplicateObjectException --><g id="edge24" class="edge" data-name="AccountReservationList-&gt;DuplicateObjectException" data-comment="AccountList-&gt;DuplicateObjectException">
<path fill="none" stroke="black" d="M1285.76,-167.27C1312.14,-150.29 1342.04,-131.05 1368.87,-113.78" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="1377.09,-108.49 1371.12,-117.69 1372.89,-111.2 1368.68,-113.9 1368.68,-113.9 1368.68,-113.9 1372.89,-111.2 1366.25,-110.12 1377.09,-108.49 1377.09,-108.49"/>
<text text-anchor="middle" x="1355.78" y="-129.4" font-family="Arial" font-size="8.00">throws</text>
<!-- AccountList&#45;&gt;DuplicateObjectException -->
<g id="edge21" class="edge">
<title>AccountList&#45;&gt;DuplicateObjectException</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M547.21,-541.96C555.86,-538.39 564.52,-535.02 573,-532 636.86,-509.22 670.68,-540.44 721,-495 786.64,-435.72 817.64,-187.02 790,-103 786.6,-92.67 780.71,-82.66 774.29,-73.83"/>
<polygon fill="black" stroke="black" points="768.04,-65.76 777.72,-70.91 771.1,-69.71 774.16,-73.67 774.16,-73.67 774.16,-73.67 771.1,-69.71 770.61,-76.42 768.04,-65.76 768.04,-65.76"/>
</g>
<!-- AccountReservationList&#45;&gt;DuplicateObjectException -->
<!-- IReservation --><g id="edge2" class="edge" data-name="AccountReservationList-&gt;IReservation" data-comment="IReservation">
<path fill="none" stroke="black" d="M1136.01,-263.01C1127.07,-267.6 1117.94,-271.91 1109,-275.6 1080.58,-287.33 1071.28,-283.61 1042.2,-293.6 921.72,-335.01 787.27,-393.61 699.46,-433.63"/>
<polygon fill="black" stroke="black" points="699.64,-433.55 695.84,-439.68 688.72,-438.53 692.52,-432.4 699.64,-433.55"/>
<text text-anchor="middle" x="1056.9" y="-300.8" font-family="Arial" font-size="8.00">contains</text>
<g id="edge22" class="edge">
<title>AccountReservationList&#45;&gt;DuplicateObjectException</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M704.45,-158.22C713.57,-132.08 724.93,-99.51 733.31,-75.51"/>
<polygon fill="black" stroke="black" points="736.7,-65.79 737.65,-76.72 735.05,-70.51 733.4,-75.23 733.4,-75.23 733.4,-75.23 735.05,-70.51 729.16,-73.75 736.7,-65.79 736.7,-65.79"/>
</g>
<g id="node12" class="node" pointer-events="visible" data-name="IReservation">
<polygon fill="none" stroke="black" points="519.16,-403.3 519.16,-555.3 688.84,-555.3 688.84,-403.3 519.16,-403.3"/>
<text text-anchor="middle" x="604" y="-542.3" font-family="Arial" font-size="10.00">IReservation</text>
<polyline fill="none" stroke="black" points="519.16,-535.3 688.84,-535.3"/>
<text text-anchor="middle" x="604" y="-522.3" font-family="Arial" font-size="10.00">&lt;&lt;interface&gt;&gt;</text>
<polyline fill="none" stroke="black" points="519.16,-515.3 688.84,-515.3"/>
<text text-anchor="middle" x="604" y="-502.3" font-family="Arial" font-size="10.00"> </text>
<polyline fill="none" stroke="black" points="519.16,-495.3 688.84,-495.3"/>
<text text-anchor="start" x="527.16" y="-482.3" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="527.16" y="-470.3" font-family="Arial" font-size="10.00">+ getReservation_number(): String</text>
<text text-anchor="start" x="527.16" y="-458.3" font-family="Arial" font-size="10.00">+ getAccountNumber(): String</text>
<text text-anchor="start" x="527.16" y="-446.3" font-family="Arial" font-size="10.00">+ getPhysical_address(): Address</text>
<text text-anchor="start" x="527.16" y="-434.3" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="527.16" y="-422.3" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
<text text-anchor="start" x="527.16" y="-410.3" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
<!-- IReservation -->
<g id="node11" class="node">
<title>IReservation</title>
<polygon fill="none" stroke="black" points="1048,-540.5 1048,-655.5 1212,-655.5 1212,-540.5 1048,-540.5"/>
<text text-anchor="start" x="1056" y="-643.5" font-family="Arial" font-size="10.00">«interface»</text>
<text text-anchor="middle" x="1130" y="-632.5" font-family="Arial" font-size="10.00">IReservation</text>
<polyline fill="none" stroke="black" points="1048,-625.5 1212,-625.5 "/>
<text text-anchor="start" x="1056" y="-613.5" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="1056" y="-602.5" font-family="Arial" font-size="10.00">+ getReservation_number(): String</text>
<text text-anchor="start" x="1056" y="-591.5" font-family="Arial" font-size="10.00">+ getAccountNumber(): String</text>
<text text-anchor="start" x="1056" y="-580.5" font-family="Arial" font-size="10.00">+ getPhysical_address(): Address</text>
<text text-anchor="start" x="1056" y="-569.5" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="1056" y="-558.5" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
<text text-anchor="start" x="1056" y="-547.5" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
</g>
<!-- AccountReservationList&#45;&gt;IReservation -->
<!-- Reservation --><g id="edge12" class="edge" data-name="Reservation-&gt;Address" data-comment="Reservation">
<path fill="none" stroke="black" d="M1224.41,-331.32C1238.36,-313.65 1251.58,-299.68 1262.19,-293.6 1335.2,-251.76 1374.21,-303.78 1456.55,-275.8"/>
<polygon fill="black" stroke="black" points="1456.39,-275.86 1460.61,-270.01 1467.63,-271.65 1463.41,-277.5 1456.39,-275.86"/>
<text text-anchor="middle" x="1292.91" y="-305.6" font-family="Arial" font-size="8.00">physical_address</text>
<text text-anchor="middle" x="1292.91" y="-296" font-family="Arial" font-size="8.00">mailing_address</text>
</g>
<g id="node6" class="node" pointer-events="visible" data-name="Reservation">
<polygon fill="none" stroke="black" points="1001.52,-331.3 1001.52,-627.3 1258.48,-627.3 1258.48,-331.3 1001.52,-331.3"/>
<text text-anchor="middle" x="1130" y="-614.3" font-family="Arial" font-size="10.00">Reservation</text>
<polyline fill="none" stroke="black" points="1001.52,-607.3 1258.48,-607.3"/>
<text text-anchor="middle" x="1130" y="-594.3" font-family="Arial" font-size="10.00">&lt;&lt;abstract&gt;&gt;</text>
<polyline fill="none" stroke="black" points="1001.52,-587.3 1258.48,-587.3"/>
<text text-anchor="start" x="1009.52" y="-574.3" font-family="Arial" font-size="10.00"># type: char</text>
<text text-anchor="start" x="1009.52" y="-562.3" font-family="Arial" font-size="10.00">- reservation_number: String</text>
<text text-anchor="start" x="1009.52" y="-550.3" font-family="Arial" font-size="10.00">- physical_address: Address</text>
<text text-anchor="start" x="1009.52" y="-538.3" font-family="Arial" font-size="10.00">- mailing_address: Address</text>
<text text-anchor="start" x="1009.52" y="-526.3" font-family="Arial" font-size="10.00">- reservation_start_date: ZonedDateTime</text>
<text text-anchor="start" x="1009.52" y="-514.3" font-family="Arial" font-size="10.00">- reservation_end_date: ZonedDateTime</text>
<text text-anchor="start" x="1009.52" y="-502.3" font-family="Arial" font-size="10.00">- reservation_status: ReservationStatusEnum</text>
<text text-anchor="start" x="1009.52" y="-490.3" font-family="Arial" font-size="10.00">- kitchen: KitchenTypeEnum</text>
<text text-anchor="start" x="1009.52" y="-478.3" font-family="Arial" font-size="10.00">- numberOfBeds: Integer</text>
<text text-anchor="start" x="1009.52" y="-466.3" font-family="Arial" font-size="10.00">- numberOfBedRooms: Integer</text>
<text text-anchor="start" x="1009.52" y="-454.3" font-family="Arial" font-size="10.00">- numberOfBathRooms: Integer</text>
<text text-anchor="start" x="1009.52" y="-442.3" font-family="Arial" font-size="10.00">- numberOfFloors: Integer</text>
<text text-anchor="start" x="1009.52" y="-430.3" font-family="Arial" font-size="10.00">- squareFeet: Integer</text>
<text text-anchor="start" x="1009.52" y="-418.3" font-family="Arial" font-size="10.00">- price: Float</text>
<text text-anchor="start" x="1009.52" y="-406.3" font-family="Arial" font-size="10.00"># accountNumber: String</text>
<polyline fill="none" stroke="black" points="1001.52,-399.3 1258.48,-399.3"/>
<text text-anchor="start" x="1009.52" y="-386.3" font-family="Arial" font-size="10.00">+ getters/setters</text>
<text text-anchor="start" x="1009.52" y="-374.3" font-family="Arial" font-size="10.00">+ Write(Reservation): void</text>
<text text-anchor="start" x="1009.52" y="-362.3" font-family="Arial" font-size="10.00">+ Change(Reservation, ReservationStatusEnum): void</text>
<text text-anchor="start" x="1009.52" y="-350.3" font-family="Arial" font-size="10.00">+ update(Reservation): void</text>
<text text-anchor="start" x="1009.52" y="-338.3" font-family="Arial" font-size="10.00">+ &lt;&lt;abstract&gt;&gt; ReservationType(): String</text>
</g>
<!-- Reservation&#45;&gt;Address -->
<!-- Reservation&#45;&gt;KitchenTypeEnum -->
<!-- KitchenTypeEnum --><g id="edge13" class="edge" data-name="Reservation-&gt;KitchenTypeEnum" data-comment="KitchenTypeEnum">
<path fill="none" stroke="black" d="M1085.77,-331.49C1078.74,-308.17 1071.92,-285.52 1066.2,-266.56"/>
<polygon fill="black" stroke="black" points="1063.32,-256.99 1070.51,-265.27 1064.76,-261.78 1066.21,-266.57 1066.21,-266.57 1066.21,-266.57 1064.76,-261.78 1061.9,-267.87 1063.32,-256.99 1063.32,-256.99"/>
<text text-anchor="middle" x="1090.67" y="-300.8" font-family="Arial" font-size="8.00">kitchen</text>
</g>
<g id="node9" class="node" pointer-events="visible" data-name="KitchenTypeEnum">
<polygon fill="none" stroke="black" points="1002.15,-173.1 1002.15,-257.1 1099.85,-257.1 1099.85,-173.1 1002.15,-173.1"/>
<text text-anchor="middle" x="1051" y="-244.1" font-family="Arial" font-size="10.00">KitchenTypeEnum</text>
<polyline fill="none" stroke="black" points="1002.15,-237.1 1099.85,-237.1"/>
<text text-anchor="middle" x="1051" y="-224.1" font-family="Arial" font-size="10.00">&lt;&lt;enumeration&gt;&gt;</text>
<polyline fill="none" stroke="black" points="1002.15,-217.1 1099.85,-217.1"/>
<text text-anchor="start" x="1010.15" y="-204.1" font-family="Arial" font-size="10.00">None</text>
<text text-anchor="start" x="1010.15" y="-192.1" font-family="Arial" font-size="10.00">Kitchenette</text>
<text text-anchor="start" x="1010.15" y="-180.1" font-family="Arial" font-size="10.00">FullKitchen</text>
</g><!-- ReservationStatusEnum -->
<g id="node10" class="node" pointer-events="visible" data-name="ReservationStatusEnum">
<polygon fill="none" stroke="black" points="1326.08,-173.1 1326.08,-257.1 1449.92,-257.1 1449.92,-173.1 1326.08,-173.1"/>
<text text-anchor="middle" x="1388" y="-244.1" font-family="Arial" font-size="10.00">ReservationStatusEnum</text>
<polyline fill="none" stroke="black" points="1326.08,-237.1 1449.92,-237.1"/>
<text text-anchor="middle" x="1388" y="-224.1" font-family="Arial" font-size="10.00">&lt;&lt;enumeration&gt;&gt;</text>
<polyline fill="none" stroke="black" points="1326.08,-217.1 1449.92,-217.1"/>
<text text-anchor="start" x="1334.08" y="-204.1" font-family="Arial" font-size="10.00">Draft</text>
<text text-anchor="start" x="1334.08" y="-192.1" font-family="Arial" font-size="10.00">Canceled</text>
<text text-anchor="start" x="1334.08" y="-180.1" font-family="Arial" font-size="10.00">Completed</text>
</g>
<!-- Reservation&#45;&gt;ReservationStatusEnum -->
<g id="edge14" class="edge" data-name="Reservation-&gt;ReservationStatusEnum">
<path fill="none" stroke="black" d="M1147.14,-331.55C1153.88,-317.25 1162.83,-304.16 1174.63,-293.6 1222.17,-251.08 1258.55,-301.12 1317,-275.6 1324.79,-272.2 1332.4,-267.66 1339.55,-262.61"/>
<polygon fill="black" stroke="black" points="1347.14,-256.95 1341.82,-266.54 1343.13,-259.94 1339.12,-262.93 1339.12,-262.93 1339.12,-262.93 1343.13,-259.94 1336.43,-259.32 1347.14,-256.95 1347.14,-256.95"/>
<text text-anchor="middle" x="1206.68" y="-300.8" font-family="Arial" font-size="8.00">reservation_status</text>
</g>
<!-- IllegalOperationException -->
<g id="node16" class="node" pointer-events="visible" data-name="IllegalOperationException">
<polygon fill="none" stroke="black" points="806.32,-723.9 806.32,-815.9 977.68,-815.9 977.68,-723.9 806.32,-723.9"/>
<text text-anchor="middle" x="892" y="-802.9" font-family="Arial" font-size="10.00">IllegalOperationException</text>
<polyline fill="none" stroke="black" points="806.32,-795.9 977.68,-795.9"/>
<text text-anchor="middle" x="892" y="-782.9" font-family="Arial" font-size="10.00">extends RuntimeException</text>
<polyline fill="none" stroke="black" points="806.32,-775.9 977.68,-775.9"/>
<text text-anchor="middle" x="892" y="-762.9" font-family="Arial" font-size="10.00"> </text>
<polyline fill="none" stroke="black" points="806.32,-755.9 977.68,-755.9"/>
<text text-anchor="start" x="814.32" y="-742.9" font-family="Arial" font-size="10.00">+ IllegalOperationException()</text>
<text text-anchor="start" x="814.32" y="-730.9" font-family="Arial" font-size="10.00">+ IllegalOperationException(String)</text>
</g>
<!-- Reservation&#45;&gt;IllegalOperationException -->
<g id="edge25" class="edge" data-name="Reservation-&gt;IllegalOperationException">
<path fill="none" stroke="black" d="M1008.85,-627.21C982.44,-659.24 956.16,-691.09 935.24,-716.46" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="928.93,-724.12 931.82,-713.54 932.11,-720.27 935.29,-716.41 935.29,-716.41 935.29,-716.41 932.11,-720.27 938.76,-719.27 928.93,-724.12 928.93,-724.12"/>
<text text-anchor="middle" x="1000.78" y="-648.2" font-family="Arial" font-size="8.00">throws</text>
<g id="edge5" class="edge">
<title>AccountReservationList&#45;&gt;IReservation</title>
<path fill="none" stroke="black" d="M738.63,-248.67C816.38,-317.87 967.28,-452.18 1057.29,-532.29"/>
<polygon fill="none" stroke="black" points="1057.38,-532.37 1064.52,-533.37 1066.35,-540.35 1059.2,-539.35 1057.38,-532.37"/>
<text text-anchor="middle" x="1017.5" y="-420.1" font-family="Arial" font-size="8.00">0...*</text>
</g>
<!-- DataRepository -->
<g id="node7" class="node" pointer-events="visible" data-name="DataRepository">
<polygon fill="none" stroke="black" points="1013.16,-693.9 1013.16,-845.9 1182.84,-845.9 1182.84,-693.9 1013.16,-693.9"/>
<text text-anchor="middle" x="1098" y="-832.9" font-family="Arial" font-size="10.00">DataRepository</text>
<polyline fill="none" stroke="black" points="1013.16,-825.9 1182.84,-825.9"/>
<text text-anchor="middle" x="1098" y="-812.9" font-family="Arial" font-size="10.00">&lt;&lt;singleton&gt;&gt;</text>
<polyline fill="none" stroke="black" points="1013.16,-805.9 1182.84,-805.9"/>
<text text-anchor="start" x="1021.16" y="-792.9" font-family="Arial" font-size="10.00">- directoryPath: String</text>
<text text-anchor="start" x="1021.16" y="-780.9" font-family="Arial" font-size="10.00">- instance: DataRepository</text>
<polyline fill="none" stroke="black" points="1013.16,-773.9 1182.84,-773.9"/>
<text text-anchor="start" x="1021.16" y="-760.9" font-family="Arial" font-size="10.00">+ setDataStoreRoot(String): void</text>
<text text-anchor="start" x="1021.16" y="-748.9" font-family="Arial" font-size="10.00">+ getPath(): String</text>
<text text-anchor="start" x="1021.16" y="-736.9" font-family="Arial" font-size="10.00">+ Reservation(String): Reservation</text>
<text text-anchor="start" x="1021.16" y="-724.9" font-family="Arial" font-size="10.00">+ WalkFileSystemTree(...): void</text>
<text text-anchor="start" x="1021.16" y="-712.9" font-family="Arial" font-size="10.00">+ LoadAccount(Path): Account</text>
<text text-anchor="start" x="1021.16" y="-700.9" font-family="Arial" font-size="10.00">- loadReservation(...): void</text>
</g>
<!-- DataRepository&#45;&gt;Account -->
<g id="edge21" class="edge" data-name="DataRepository-&gt;Account">
<path fill="none" stroke="black" d="M1182.46,-702.97C1210.24,-680.1 1240.72,-653.68 1267,-627.8 1286.92,-608.18 1307.23,-585.83 1325.6,-564.57"/>
<polygon fill="black" stroke="black" points="1332.01,-557.1 1328.91,-567.62 1328.75,-560.9 1325.5,-564.69 1325.5,-564.69 1325.5,-564.69 1328.75,-560.9 1322.08,-561.76 1332.01,-557.1 1332.01,-557.1"/>
<text text-anchor="middle" x="1254.56" y="-648.2" font-family="Arial" font-size="8.00">loads</text>
</g>
<!-- DataRepository&#45;&gt;Reservation -->
<g id="edge22" class="edge" data-name="DataRepository-&gt;Reservation">
<path fill="none" stroke="black" d="M1106.28,-694.2C1108.25,-676.48 1110.42,-656.91 1112.62,-637.02"/>
<polygon fill="black" stroke="black" points="1113.71,-627.24 1117.08,-637.68 1113.16,-632.21 1112.6,-637.18 1112.6,-637.18 1112.6,-637.18 1113.16,-632.21 1108.13,-636.69 1113.71,-627.24 1113.71,-627.24"/>
<text text-anchor="middle" x="1124.12" y="-648.2" font-family="Arial" font-size="8.00">creates</text>
<g id="node6" class="node">
<title>DataRepository</title>
<polygon fill="none" stroke="black" points="16.5,-542 16.5,-654 287.5,-654 287.5,-542 16.5,-542"/>
<text text-anchor="middle" x="152" y="-642" font-family="Arial" font-size="10.00">DataRepository</text>
<polyline fill="none" stroke="black" points="16.5,-635 287.5,-635 "/>
<text text-anchor="start" x="24.5" y="-623" font-family="Arial" font-size="10.00">&#45; directoryPath: String</text>
<text text-anchor="start" x="24.5" y="-612" font-family="Arial" font-size="10.00">&#45; instance: DataRepository</text>
<polyline fill="none" stroke="black" points="16.5,-605 287.5,-605 "/>
<text text-anchor="start" x="24.5" y="-593" font-family="Arial" font-size="10.00">+ setDataStoreRoot(String): void</text>
<text text-anchor="start" x="24.5" y="-582" font-family="Arial" font-size="10.00">+ getPath(): String</text>
<text text-anchor="start" x="24.5" y="-571" font-family="Arial" font-size="10.00">+ Reservation(String): Reservation</text>
<text text-anchor="start" x="24.5" y="-560" font-family="Arial" font-size="10.00">+ WalkFileSystemTree(AccomodationManager, Path): void</text>
<text text-anchor="start" x="24.5" y="-549" font-family="Arial" font-size="10.00">+ LoadAccount(Path): Account</text>
</g>
<!-- AccomodationManager -->
<g id="node11" class="node" pointer-events="visible" data-name="AccomodationManager">
<polygon fill="none" stroke="black" points="15.97,-673.9 15.97,-865.9 224.03,-865.9 224.03,-673.9 15.97,-673.9"/>
<text text-anchor="middle" x="120" y="-852.9" font-family="Arial" font-size="10.00">AccomodationManager</text>
<polyline fill="none" stroke="black" points="15.97,-845.9 224.03,-845.9"/>
<text text-anchor="start" x="23.97" y="-832.9" font-family="Arial" font-size="10.00">- accounts: AccountList</text>
<polyline fill="none" stroke="black" points="15.97,-825.9 224.03,-825.9"/>
<text text-anchor="start" x="23.97" y="-812.9" font-family="Arial" font-size="10.00">+ AccomodationManager(String)</text>
<text text-anchor="start" x="23.97" y="-800.9" font-family="Arial" font-size="10.00">+ loadAll(): void</text>
<text text-anchor="start" x="23.97" y="-788.9" font-family="Arial" font-size="10.00">+ load(Path): void</text>
<text text-anchor="start" x="23.97" y="-776.9" font-family="Arial" font-size="10.00">+ retrieveLoadedAccounts(): List&lt;Account&gt;</text>
<text text-anchor="start" x="23.97" y="-764.9" font-family="Arial" font-size="10.00">+ retrieveAccount(String): Account</text>
<text text-anchor="start" x="23.97" y="-752.9" font-family="Arial" font-size="10.00">+ AddAccount(Account): void</text>
<text text-anchor="start" x="23.97" y="-740.9" font-family="Arial" font-size="10.00">+ UpdateAccount(Account): void</text>
<text text-anchor="start" x="23.97" y="-728.9" font-family="Arial" font-size="10.00">+ newAccount(...): Account</text>
<text text-anchor="start" x="23.97" y="-716.9" font-family="Arial" font-size="10.00">+ addReservation(...): boolean</text>
<text text-anchor="start" x="23.97" y="-704.9" font-family="Arial" font-size="10.00">+ findReservation(String): Reservation</text>
<text text-anchor="start" x="23.97" y="-692.9" font-family="Arial" font-size="10.00">+ getReservationList(): List&lt;IReservation&gt;</text>
<text text-anchor="start" x="23.97" y="-680.9" font-family="Arial" font-size="10.00">+ showReservationList(): void</text>
<g id="node13" class="node">
<title>AccomodationManager</title>
<polygon fill="none" stroke="black" points="478.5,-1109 478.5,-1276 739.5,-1276 739.5,-1109 478.5,-1109"/>
<text text-anchor="middle" x="609" y="-1264" font-family="Arial" font-size="10.00">AccomodationManager</text>
<polyline fill="none" stroke="black" points="478.5,-1257 739.5,-1257 "/>
<text text-anchor="start" x="486.5" y="-1245" font-family="Arial" font-size="10.00">&#45; accounts: AccountList</text>
<polyline fill="none" stroke="black" points="478.5,-1238 739.5,-1238 "/>
<text text-anchor="start" x="486.5" y="-1226" font-family="Arial" font-size="10.00">+ loadAll(): void</text>
<text text-anchor="start" x="486.5" y="-1215" font-family="Arial" font-size="10.00">+ load(Path): void</text>
<text text-anchor="start" x="486.5" y="-1204" font-family="Arial" font-size="10.00">+ retrieveLoadedAccounts(): List&lt;Account&gt;</text>
<text text-anchor="start" x="486.5" y="-1193" font-family="Arial" font-size="10.00">+ retrieveAccount(String): Account</text>
<text text-anchor="start" x="486.5" y="-1182" font-family="Arial" font-size="10.00">+ AddAccount(Account): void</text>
<text text-anchor="start" x="486.5" y="-1171" font-family="Arial" font-size="10.00">+ UpdateAccount(Account): void</text>
<text text-anchor="start" x="486.5" y="-1160" font-family="Arial" font-size="10.00">+ newAccount(String, Address, EmailAddress): Account</text>
<text text-anchor="start" x="486.5" y="-1149" font-family="Arial" font-size="10.00">+ addReservation(Account, Reservation): boolean</text>
<text text-anchor="start" x="486.5" y="-1138" font-family="Arial" font-size="10.00">+ findReservation(String): Reservation</text>
<text text-anchor="start" x="486.5" y="-1127" font-family="Arial" font-size="10.00">+ getReservationList(): List&lt;? extends IReservation&gt;</text>
<text text-anchor="start" x="486.5" y="-1116" font-family="Arial" font-size="10.00">+ showReservationList(): void</text>
</g>
<!-- DataRepository&#45;&gt;AccomodationManager -->
<g id="edge14" class="edge">
<title>DataRepository&#45;&gt;AccomodationManager</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M168.34,-654.16C200.05,-752.98 278.55,-961.88 409,-1090.5 426.61,-1107.86 447.8,-1122.82 469.71,-1135.51"/>
<polygon fill="black" stroke="black" points="478.47,-1140.45 467.55,-1139.46 474.11,-1137.99 469.76,-1135.54 469.76,-1135.54 469.76,-1135.54 474.11,-1137.99 471.97,-1131.62 478.47,-1140.45 478.47,-1140.45"/>
</g>
<!-- KitchenTypeEnum -->
<g id="node7" class="node">
<title>KitchenTypeEnum</title>
<polygon fill="none" stroke="black" points="582,-562.5 582,-633.5 678,-633.5 678,-562.5 582,-562.5"/>
<text text-anchor="start" x="590" y="-621.5" font-family="Arial" font-size="10.00">«enumeration»</text>
<text text-anchor="middle" x="630" y="-610.5" font-family="Arial" font-size="10.00">KitchenTypeEnum</text>
<polyline fill="none" stroke="black" points="582,-603.5 678,-603.5 "/>
<text text-anchor="start" x="590" y="-591.5" font-family="Arial" font-size="10.00">None</text>
<text text-anchor="start" x="590" y="-580.5" font-family="Arial" font-size="10.00">Kitchenette</text>
<text text-anchor="start" x="590" y="-569.5" font-family="Arial" font-size="10.00">FullKitchen</text>
</g>
<!-- ReservationStatusEnum -->
<g id="node8" class="node">
<title>ReservationStatusEnum</title>
<polygon fill="none" stroke="black" points="696.5,-562.5 696.5,-633.5 817.5,-633.5 817.5,-562.5 696.5,-562.5"/>
<text text-anchor="start" x="704.5" y="-621.5" font-family="Arial" font-size="10.00">«enumeration»</text>
<text text-anchor="middle" x="757" y="-610.5" font-family="Arial" font-size="10.00">ReservationStatusEnum</text>
<polyline fill="none" stroke="black" points="696.5,-603.5 817.5,-603.5 "/>
<text text-anchor="start" x="704.5" y="-591.5" font-family="Arial" font-size="10.00">Draft</text>
<text text-anchor="start" x="704.5" y="-580.5" font-family="Arial" font-size="10.00">Canceled</text>
<text text-anchor="start" x="704.5" y="-569.5" font-family="Arial" font-size="10.00">Completed</text>
</g>
<!-- IllegalOperationException -->
<g id="node10" class="node">
<title>IllegalOperationException</title>
<polygon fill="none" stroke="black" points="835.5,-573.5 835.5,-622.5 1002.5,-622.5 1002.5,-573.5 835.5,-573.5"/>
<text text-anchor="middle" x="919" y="-610.5" font-family="Arial" font-size="10.00">IllegalOperationException</text>
<polyline fill="none" stroke="black" points="835.5,-603.5 1002.5,-603.5 "/>
<text text-anchor="start" x="843.5" y="-591.5" font-family="Arial" font-size="10.00">+ IllegalOperationException()</text>
<text text-anchor="start" x="843.5" y="-580.5" font-family="Arial" font-size="10.00">+ IllegalOperationException(String)</text>
</g>
<!-- Reservation -->
<g id="node12" class="node">
<title>Reservation</title>
<polygon fill="none" stroke="black" points="1027,-721 1027,-1042 1275,-1042 1275,-721 1027,-721"/>
<text text-anchor="start" x="1035" y="-1030" font-family="Arial" font-size="10.00">«abstract»</text>
<text text-anchor="middle" x="1151" y="-1019" font-family="Arial" font-size="10.00">Reservation</text>
<polyline fill="none" stroke="black" points="1027,-1012 1275,-1012 "/>
<text text-anchor="start" x="1035" y="-1000" font-family="Arial" font-size="10.00"># type: char</text>
<text text-anchor="start" x="1035" y="-989" font-family="Arial" font-size="10.00"># reservation_number: String</text>
<text text-anchor="start" x="1035" y="-978" font-family="Arial" font-size="10.00"># physical_address: Address</text>
<text text-anchor="start" x="1035" y="-967" font-family="Arial" font-size="10.00"># mailing_address: Address</text>
<text text-anchor="start" x="1035" y="-956" font-family="Arial" font-size="10.00"># reservation_start_date: ZonedDateTime</text>
<text text-anchor="start" x="1035" y="-945" font-family="Arial" font-size="10.00"># reservation_end_date: ZonedDateTime</text>
<text text-anchor="start" x="1035" y="-934" font-family="Arial" font-size="10.00"># reservation_status: ReservationStatusEnum</text>
<text text-anchor="start" x="1035" y="-923" font-family="Arial" font-size="10.00"># kitchen: KitchenTypeEnum</text>
<text text-anchor="start" x="1035" y="-912" font-family="Arial" font-size="10.00"># numberOfBeds: Integer</text>
<text text-anchor="start" x="1035" y="-901" font-family="Arial" font-size="10.00"># numberOfBedRooms: Integer</text>
<text text-anchor="start" x="1035" y="-890" font-family="Arial" font-size="10.00"># numberOfBathRooms: Integer</text>
<text text-anchor="start" x="1035" y="-879" font-family="Arial" font-size="10.00"># numberOfFloors: Integer</text>
<text text-anchor="start" x="1035" y="-868" font-family="Arial" font-size="10.00"># squareFeet: Integer</text>
<text text-anchor="start" x="1035" y="-857" font-family="Arial" font-size="10.00"># price: Float</text>
<text text-anchor="start" x="1035" y="-846" font-family="Arial" font-size="10.00"># accountNumber: String</text>
<polyline fill="none" stroke="black" points="1027,-839 1275,-839 "/>
<text text-anchor="start" x="1035" y="-827" font-family="Arial" font-size="10.00">+ getReservation_number(): String</text>
<text text-anchor="start" x="1035" y="-816" font-family="Arial" font-size="10.00">+ setReservation_number(String): void</text>
<text text-anchor="start" x="1035" y="-805" font-family="Arial" font-size="10.00">+ getAccountNumber(): String</text>
<text text-anchor="start" x="1035" y="-794" font-family="Arial" font-size="10.00">+ setAccountNumber(String): void</text>
<text text-anchor="start" x="1035" y="-783" font-family="Arial" font-size="10.00">+ getPhysical_address(): Address</text>
<text text-anchor="start" x="1035" y="-772" font-family="Arial" font-size="10.00">+ setPhysical_address(Address): void</text>
<text text-anchor="start" x="1035" y="-761" font-family="Arial" font-size="10.00">+ Write(Reservation): void</text>
<text text-anchor="start" x="1035" y="-750" font-family="Arial" font-size="10.00">+ Change(Reservation, ReservationStatusEnum): void</text>
<text text-anchor="start" x="1035" y="-739" font-family="Arial" font-size="10.00">+ update(Reservation): void</text>
<text text-anchor="start" x="1035" y="-728" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
</g>
<!-- Reservation&#45;&gt;Address -->
<g id="edge11" class="edge">
<title>Reservation&#45;&gt;Address</title>
<path fill="none" stroke="black" d="M1275.02,-808.7C1317.77,-776.91 1360.73,-735.32 1384,-685.5 1412.87,-623.69 1415.36,-592.59 1384,-532 1302.27,-374.07 1105.41,-275.97 996.55,-231.89"/>
<polygon fill="black" stroke="black" points="996.48,-231.86 989.42,-233.35 985.33,-227.41 992.39,-225.92 996.48,-231.86"/>
<text text-anchor="middle" x="1380.5" y="-515.6" font-family="Arial" font-size="8.00">1</text>
</g>
<!-- Reservation&#45;&gt;KitchenTypeEnum -->
<g id="edge12" class="edge">
<title>Reservation&#45;&gt;KitchenTypeEnum</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1026.81,-850C926.74,-820.65 786.74,-768.33 687,-685.5 672.89,-673.78 660.98,-657.67 651.75,-642.53"/>
<polygon fill="black" stroke="black" points="646.63,-633.77 655.56,-640.13 649.15,-638.08 651.67,-642.4 651.67,-642.4 651.67,-642.4 649.15,-638.08 647.79,-644.67 646.63,-633.77 646.63,-633.77"/>
</g>
<!-- Reservation&#45;&gt;ReservationStatusEnum -->
<g id="edge13" class="edge">
<title>Reservation&#45;&gt;ReservationStatusEnum</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1026.74,-819.61C963.05,-785.13 886.41,-738.37 826,-685.5 811.49,-672.8 797.74,-656.75 786.4,-641.94"/>
<polygon fill="black" stroke="black" points="780.35,-633.87 789.95,-639.18 783.35,-637.87 786.35,-641.87 786.35,-641.87 786.35,-641.87 783.35,-637.87 782.75,-644.57 780.35,-633.87 780.35,-633.87"/>
</g>
<!-- Reservation&#45;&gt;IllegalOperationException -->
<g id="edge23" class="edge">
<title>Reservation&#45;&gt;IllegalOperationException</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1026.85,-729.86C995.88,-692.28 965.68,-655.64 945.16,-630.74"/>
<polygon fill="black" stroke="black" points="938.58,-622.76 948.41,-627.61 941.76,-626.62 944.94,-630.47 944.94,-630.47 944.94,-630.47 941.76,-626.62 941.47,-633.34 938.58,-622.76 938.58,-622.76"/>
</g>
<!-- Reservation&#45;&gt;IReservation -->
<g id="edge7" class="edge">
<title>Reservation&#45;&gt;IReservation</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1139.09,-720.83C1137.65,-701.51 1136.24,-682.68 1134.98,-665.82"/>
<polygon fill="none" stroke="black" points="1138.46,-665.3 1134.22,-655.59 1131.48,-665.82 1138.46,-665.3"/>
<text text-anchor="middle" x="1157" y="-696.1" font-family="Arial" font-size="8.00">implements</text>
</g>
<!-- ZonedDateTime -->
<g id="node18" class="node">
<title>ZonedDateTime</title>
<polygon fill="none" stroke="black" points="1291,-580 1291,-616 1375,-616 1375,-580 1291,-580"/>
<text text-anchor="middle" x="1333" y="-595.5" font-family="Arial" font-size="10.00">ZonedDateTime</text>
</g>
<!-- Reservation&#45;&gt;ZonedDateTime -->
<g id="edge24" class="edge">
<title>Reservation&#45;&gt;ZonedDateTime</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1264.63,-720.84C1272.36,-708.98 1279.89,-697.12 1287,-685.5 1299.05,-665.79 1311.27,-642.64 1320.08,-625.25"/>
<polygon fill="black" stroke="black" points="1324.6,-616.24 1324.14,-627.2 1322.36,-620.71 1320.11,-625.18 1320.11,-625.18 1320.11,-625.18 1322.36,-620.71 1316.09,-623.16 1324.6,-616.24 1324.6,-616.24"/>
</g>
<!-- AccomodationManager&#45;&gt;AccountList -->
<g id="edge15" class="edge" data-name="AccomodationManager-&gt;AccountList">
<path fill="none" stroke="black" d="M181.97,-865.64C196.7,-881.27 213.8,-895.25 233,-904.18 329.6,-949.15 1092.59,-942.56 1192,-904.18 1230.13,-889.46 1264.51,-859.85 1290.52,-832.17"/>
<polygon fill="black" stroke="black" points="1290.21,-832.51 1291.31,-825.38 1298.31,-823.66 1297.21,-830.79 1290.21,-832.51"/>
<text text-anchor="middle" x="602" y="-934.4" font-family="Arial" font-size="8.00">accounts</text>
<g id="edge6" class="edge">
<title>AccomodationManager&#45;&gt;AccountList</title>
<path fill="none" stroke="black" d="M584.71,-1108.8C549.94,-990.41 486.65,-774.88 454.65,-665.91"/>
<polygon fill="black" stroke="black" points="454.57,-665.62 449.04,-660.99 451.18,-654.11 456.71,-658.74 454.57,-665.62"/>
<text text-anchor="middle" x="576.5" y="-879.6" font-family="Arial" font-size="8.00">1</text>
</g>
<!-- AccomodationManager&#45;&gt;DataRepository -->
<g id="edge16" class="edge" data-name="AccomodationManager-&gt;DataRepository">
<path fill="none" stroke="black" d="M181.97,-865.64C196.7,-881.27 213.8,-895.25 233,-904.18 309.26,-939.68 914.14,-940.52 990,-904.18 1013.45,-892.95 1033.42,-873.87 1049.58,-853.57"/>
<polygon fill="black" stroke="black" points="1055.58,-845.74 1053.06,-856.41 1052.54,-849.71 1049.49,-853.67 1049.49,-853.67 1049.49,-853.67 1052.54,-849.71 1045.92,-850.94 1055.58,-845.74 1055.58,-845.74"/>
<text text-anchor="middle" x="464" y="-934.4" font-family="Arial" font-size="8.00">uses</text>
<g id="edge16" class="edge">
<title>AccomodationManager&#45;&gt;DataRepository</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M500.6,-1108.76C489.18,-1097.61 478.35,-1085.76 469,-1073.5 364.21,-936.09 413,-856.2 306,-720.5 288.63,-698.47 266.49,-678.04 244.45,-660.45"/>
<polygon fill="black" stroke="black" points="236.34,-654.11 246.99,-656.73 240.28,-657.19 244.22,-660.27 244.22,-660.27 244.22,-660.27 240.28,-657.19 241.44,-663.81 236.34,-654.11 236.34,-654.11"/>
</g>
<!-- AccomodationManager&#45;&gt;Reservation -->
<g id="edge15" class="edge">
<title>AccomodationManager&#45;&gt;Reservation</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M735.01,-1108.94C739.72,-1106.06 744.39,-1103.24 749,-1100.5 837.2,-1048.03 938.83,-992.96 1017.84,-951.3"/>
<polygon fill="black" stroke="black" points="1026.87,-946.55 1020.12,-955.19 1022.44,-948.88 1018.02,-951.21 1018.02,-951.21 1018.02,-951.21 1022.44,-948.88 1015.92,-947.23 1026.87,-946.55 1026.87,-946.55"/>
</g>
<!-- HotelReservation -->
<g id="node13" class="node" pointer-events="visible" data-name="HotelReservation">
<polygon fill="none" stroke="black" points="618.16,-693.9 618.16,-845.9 787.84,-845.9 787.84,-693.9 618.16,-693.9"/>
<text text-anchor="middle" x="703" y="-832.9" font-family="Arial" font-size="10.00">HotelReservation</text>
<polyline fill="none" stroke="black" points="618.16,-825.9 787.84,-825.9"/>
<text text-anchor="start" x="626.16" y="-812.9" font-family="Arial" font-size="10.00">extends Reservation</text>
<text text-anchor="middle" x="703" y="-800.9" font-family="Arial" font-size="10.00">implements IReservation</text>
<polyline fill="none" stroke="black" points="618.16,-793.9 787.84,-793.9"/>
<text text-anchor="start" x="626.16" y="-780.9" font-family="Arial" font-size="10.00"># type: 'H'</text>
<polyline fill="none" stroke="black" points="618.16,-773.9 787.84,-773.9"/>
<text text-anchor="start" x="626.16" y="-760.9" font-family="Arial" font-size="10.00">+ HotelReservation(Address)</text>
<text text-anchor="start" x="626.16" y="-748.9" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="626.16" y="-736.9" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
<text text-anchor="start" x="626.16" y="-724.9" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="626.16" y="-712.9" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
<text text-anchor="start" x="626.16" y="-700.9" font-family="Arial" font-size="10.00">+ Reservation(String): Reservation</text>
<g id="node14" class="node">
<title>HotelReservation</title>
<polygon fill="none" stroke="black" points="758,-1131 758,-1254 898,-1254 898,-1131 758,-1131"/>
<text text-anchor="middle" x="828" y="-1242" font-family="Arial" font-size="10.00">HotelReservation</text>
<polyline fill="none" stroke="black" points="758,-1235 898,-1235 "/>
<text text-anchor="middle" x="828" y="-1223" font-family="Arial" font-size="10.00">extends Reservation</text>
<polyline fill="none" stroke="black" points="758,-1216 898,-1216 "/>
<text text-anchor="start" x="766" y="-1204" font-family="Arial" font-size="10.00">+ HotelReservation()</text>
<text text-anchor="start" x="766" y="-1193" font-family="Arial" font-size="10.00">+ HotelReservation(Address)</text>
<text text-anchor="start" x="766" y="-1182" font-family="Arial" font-size="10.00">+ copy(String): Reservation</text>
<text text-anchor="start" x="766" y="-1171" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="766" y="-1160" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
<text text-anchor="start" x="766" y="-1149" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="766" y="-1138" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
</g>
<!-- HotelReservation&#45;&gt;Reservation -->
<g id="edge3" class="edge" data-name="HotelReservation-&gt;Reservation">
<path fill="none" stroke="black" d="M767.95,-693.99C777.1,-686.23 786.86,-679.11 797,-673.4 873.81,-630.17 913.59,-671.73 990,-627.8 990.75,-627.37 991.49,-626.94 992.23,-626.5"/>
<polygon fill="none" stroke="black" points="993.9,-629.59 1000.52,-621.32 990.18,-623.65 993.9,-629.59"/>
</g>
<!-- HotelReservation&#45;&gt;IReservation -->
<g id="edge6" class="edge" data-name="HotelReservation-&gt;IReservation">
<path fill="none" stroke="black" d="M677.38,-694.2C663.91,-654.95 647.35,-606.67 633.37,-565.92" stroke-dasharray="5,2"/>
<polygon fill="none" stroke="black" points="636.73,-564.94 630.18,-556.62 630.11,-567.21 636.73,-564.94"/>
<g id="edge8" class="edge">
<title>HotelReservation&#45;&gt;Reservation</title>
<path fill="none" stroke="black" d="M878.79,-1130.81C887.96,-1120.49 897.6,-1110.04 907,-1100.5 942.09,-1064.91 981.89,-1028.02 1019.01,-994.95"/>
<polygon fill="none" stroke="black" points="1021.73,-997.21 1026.88,-987.95 1017.08,-991.97 1021.73,-997.21"/>
<text text-anchor="middle" x="941" y="-1084.1" font-family="Arial" font-size="8.00">extends</text>
</g>
<!-- CabinReservation -->
<g id="node14" class="node" pointer-events="visible" data-name="CabinReservation">
<polygon fill="none" stroke="black" points="430.16,-693.9 430.16,-845.9 599.84,-845.9 599.84,-693.9 430.16,-693.9"/>
<text text-anchor="middle" x="515" y="-832.9" font-family="Arial" font-size="10.00">CabinReservation</text>
<polyline fill="none" stroke="black" points="430.16,-825.9 599.84,-825.9"/>
<text text-anchor="start" x="438.16" y="-812.9" font-family="Arial" font-size="10.00">extends Reservation</text>
<text text-anchor="middle" x="515" y="-800.9" font-family="Arial" font-size="10.00">implements IReservation</text>
<polyline fill="none" stroke="black" points="430.16,-793.9 599.84,-793.9"/>
<text text-anchor="start" x="438.16" y="-780.9" font-family="Arial" font-size="10.00"># type: 'C'</text>
<polyline fill="none" stroke="black" points="430.16,-773.9 599.84,-773.9"/>
<text text-anchor="start" x="438.16" y="-760.9" font-family="Arial" font-size="10.00">+ CabinReservation(Address)</text>
<text text-anchor="start" x="438.16" y="-748.9" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="438.16" y="-736.9" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
<text text-anchor="start" x="438.16" y="-724.9" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="438.16" y="-712.9" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
<text text-anchor="start" x="438.16" y="-700.9" font-family="Arial" font-size="10.00">+ Reservation(String): Reservation</text>
<g id="node15" class="node">
<title>CabinReservation</title>
<polygon fill="none" stroke="black" points="916.5,-1136.5 916.5,-1248.5 1059.5,-1248.5 1059.5,-1136.5 916.5,-1136.5"/>
<text text-anchor="middle" x="988" y="-1236.5" font-family="Arial" font-size="10.00">CabinReservation</text>
<polyline fill="none" stroke="black" points="916.5,-1229.5 1059.5,-1229.5 "/>
<text text-anchor="middle" x="988" y="-1217.5" font-family="Arial" font-size="10.00">extends Reservation</text>
<polyline fill="none" stroke="black" points="916.5,-1210.5 1059.5,-1210.5 "/>
<text text-anchor="start" x="924.5" y="-1198.5" font-family="Arial" font-size="10.00">+ CabinReservation()</text>
<text text-anchor="start" x="924.5" y="-1187.5" font-family="Arial" font-size="10.00">+ CabinReservation(Address)</text>
<text text-anchor="start" x="924.5" y="-1176.5" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="924.5" y="-1165.5" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
<text text-anchor="start" x="924.5" y="-1154.5" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="924.5" y="-1143.5" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
</g>
<!-- CabinReservation&#45;&gt;Reservation -->
<g id="edge4" class="edge" data-name="CabinReservation-&gt;Reservation">
<path fill="none" stroke="black" d="M577.98,-694.01C587.62,-685.97 598.04,-678.78 609,-673.4 632.1,-662.06 813.44,-648.86 839,-645.8 906.11,-637.77 929.59,-658.11 990,-627.8 990.62,-627.49 991.23,-627.18 991.85,-626.86"/>
<polygon fill="none" stroke="black" points="993.3,-630.05 1000.35,-622.14 989.91,-623.93 993.3,-630.05"/>
</g>
<!-- CabinReservation&#45;&gt;IReservation -->
<g id="edge7" class="edge" data-name="CabinReservation-&gt;IReservation">
<path fill="none" stroke="black" d="M538.04,-694.2C550.11,-655.04 564.97,-606.88 577.52,-566.18" stroke-dasharray="5,2"/>
<polygon fill="none" stroke="black" points="580.86,-567.22 580.46,-556.63 574.17,-565.16 580.86,-567.22"/>
<g id="edge9" class="edge">
<title>CabinReservation&#45;&gt;Reservation</title>
<path fill="none" stroke="black" d="M1017.14,-1136.26C1029.93,-1112 1045.71,-1082.09 1061.89,-1051.42"/>
<polygon fill="none" stroke="black" points="1065.13,-1052.79 1066.7,-1042.32 1058.93,-1049.53 1065.13,-1052.79"/>
<text text-anchor="middle" x="1061" y="-1084.1" font-family="Arial" font-size="8.00">extends</text>
</g>
<!-- HouseReservation -->
<g id="node15" class="node" pointer-events="visible" data-name="HouseReservation">
<polygon fill="none" stroke="black" points="242.16,-693.9 242.16,-845.9 411.84,-845.9 411.84,-693.9 242.16,-693.9"/>
<text text-anchor="middle" x="327" y="-832.9" font-family="Arial" font-size="10.00">HouseReservation</text>
<polyline fill="none" stroke="black" points="242.16,-825.9 411.84,-825.9"/>
<text text-anchor="start" x="250.16" y="-812.9" font-family="Arial" font-size="10.00">extends Reservation</text>
<text text-anchor="middle" x="327" y="-800.9" font-family="Arial" font-size="10.00">implements IReservation</text>
<polyline fill="none" stroke="black" points="242.16,-793.9 411.84,-793.9"/>
<text text-anchor="start" x="250.16" y="-780.9" font-family="Arial" font-size="10.00"># type: 'Z'</text>
<polyline fill="none" stroke="black" points="242.16,-773.9 411.84,-773.9"/>
<text text-anchor="start" x="250.16" y="-760.9" font-family="Arial" font-size="10.00">+ HouseReservation(Address)</text>
<text text-anchor="start" x="250.16" y="-748.9" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="250.16" y="-736.9" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
<text text-anchor="start" x="250.16" y="-724.9" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="250.16" y="-712.9" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
<text text-anchor="start" x="250.16" y="-700.9" font-family="Arial" font-size="10.00">+ Reservation(String): Reservation</text>
<g id="node16" class="node">
<title>HouseReservation</title>
<polygon fill="none" stroke="black" points="1078,-1131 1078,-1254 1224,-1254 1224,-1131 1078,-1131"/>
<text text-anchor="middle" x="1151" y="-1242" font-family="Arial" font-size="10.00">HouseReservation</text>
<polyline fill="none" stroke="black" points="1078,-1235 1224,-1235 "/>
<text text-anchor="middle" x="1151" y="-1223" font-family="Arial" font-size="10.00">extends Reservation</text>
<polyline fill="none" stroke="black" points="1078,-1216 1224,-1216 "/>
<text text-anchor="start" x="1086" y="-1204" font-family="Arial" font-size="10.00">+ HouseReservation()</text>
<text text-anchor="start" x="1086" y="-1193" font-family="Arial" font-size="10.00">+ HouseReservation(Address)</text>
<text text-anchor="start" x="1086" y="-1182" font-family="Arial" font-size="10.00">+ copy(String): Reservation</text>
<text text-anchor="start" x="1086" y="-1171" font-family="Arial" font-size="10.00">+ ReservationType(): String</text>
<text text-anchor="start" x="1086" y="-1160" font-family="Arial" font-size="10.00">+ checkValid(): boolean</text>
<text text-anchor="start" x="1086" y="-1149" font-family="Arial" font-size="10.00">+ getPricePerNight(): float</text>
<text text-anchor="start" x="1086" y="-1138" font-family="Arial" font-size="10.00">+ calculatePrice(): float</text>
</g>
<!-- HouseReservation&#45;&gt;Reservation -->
<g id="edge5" class="edge" data-name="HouseReservation-&gt;Reservation">
<path fill="none" stroke="black" d="M389.55,-693.91C399.29,-685.84 409.85,-678.66 421,-673.4 546.09,-614.35 593.11,-656.73 731,-645.8 788.51,-641.24 937.81,-652.4 990,-627.8 990.62,-627.51 991.25,-627.21 991.87,-626.91"/>
<polygon fill="none" stroke="black" points="993.25,-630.13 1000.46,-622.38 989.99,-623.94 993.25,-630.13"/>
</g>
<!-- HouseReservation&#45;&gt;IReservation -->
<g id="edge8" class="edge" data-name="HouseReservation-&gt;IReservation">
<path fill="none" stroke="black" d="M398.69,-694.2C437.17,-654.12 484.68,-604.61 524.31,-563.33" stroke-dasharray="5,2"/>
<polygon fill="none" stroke="black" points="526.68,-565.92 531.08,-556.28 521.63,-561.07 526.68,-565.92"/>
<g id="edge10" class="edge">
<title>HouseReservation&#45;&gt;Reservation</title>
<path fill="none" stroke="black" d="M1151,-1130.82C1151,-1107.89 1151,-1080.52 1151,-1052.46"/>
<polygon fill="none" stroke="black" points="1154.5,-1052.1 1151,-1042.1 1147.5,-1052.1 1154.5,-1052.1"/>
<text text-anchor="middle" x="1166" y="-1084.1" font-family="Arial" font-size="8.00">extends</text>
</g>
<!-- TestReservations -->
<g id="node17" class="node" pointer-events="visible" data-name="TestReservations">
<polygon fill="none" stroke="black" points="310.73,-960.1 310.73,-1020.1 419.27,-1020.1 419.27,-960.1 310.73,-960.1"/>
<text text-anchor="middle" x="365" y="-1007.1" font-family="Arial" font-size="10.00">TestReservations</text>
<polyline fill="none" stroke="black" points="310.73,-1000.1 419.27,-1000.1"/>
<text text-anchor="middle" x="365" y="-987.1" font-family="Arial" font-size="10.00"> </text>
<polyline fill="none" stroke="black" points="310.73,-980.1 419.27,-980.1"/>
<text text-anchor="start" x="318.73" y="-967.1" font-family="Arial" font-size="10.00">+ main(String[]): void</text>
<g id="node17" class="node">
<title>TestReservations</title>
<polygon fill="none" stroke="black" points="854.5,-1335 854.5,-1373 961.5,-1373 961.5,-1335 854.5,-1335"/>
<text text-anchor="middle" x="908" y="-1361" font-family="Arial" font-size="10.00">TestReservations</text>
<polyline fill="none" stroke="black" points="854.5,-1354 961.5,-1354 "/>
<text text-anchor="start" x="862.5" y="-1342" font-family="Arial" font-size="10.00">+ main(String[]): void</text>
</g>
<!-- TestReservations&#45;&gt;AccomodationManager -->
<g id="edge17" class="edge" data-name="TestReservations-&gt;AccomodationManager">
<path fill="none" stroke="black" d="M310.79,-969.33C285.47,-958.43 255.93,-943.18 233,-924 215.59,-909.44 199.39,-891.67 185.01,-873.47"/>
<polygon fill="black" stroke="black" points="178.95,-865.64 188.63,-870.8 182.01,-869.6 185.07,-873.55 185.07,-873.55 185.07,-873.55 182.01,-869.6 181.51,-876.31 178.95,-865.64 178.95,-865.64"/>
<text text-anchor="middle" x="263.45" y="-934.4" font-family="Arial" font-size="8.00">uses</text>
<g id="edge17" class="edge">
<title>TestReservations&#45;&gt;AccomodationManager</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M854.41,-1343.33C822.57,-1336.23 782.09,-1324.77 749,-1307.5 735.08,-1300.23 721.24,-1291.44 707.99,-1282.01"/>
<polygon fill="black" stroke="black" points="699.83,-1276.06 710.56,-1278.31 703.87,-1279 707.91,-1281.95 707.91,-1281.95 707.91,-1281.95 703.87,-1279 705.26,-1285.58 699.83,-1276.06 699.83,-1276.06"/>
</g>
<!-- TestReservations&#45;&gt;HotelReservation -->
<g id="edge18" class="edge" data-name="TestReservations-&gt;HotelReservation">
<path fill="none" stroke="black" d="M419,-984.87C484.76,-978.76 590.93,-965.48 622,-941.6 649.93,-920.13 668.69,-886.63 681.04,-854.98"/>
<polygon fill="black" stroke="black" points="684.52,-845.67 685.24,-856.61 682.77,-850.35 681.02,-855.04 681.02,-855.04 681.02,-855.04 682.77,-850.35 676.8,-853.46 684.52,-845.67 684.52,-845.67"/>
<text text-anchor="middle" x="642.12" y="-934.4" font-family="Arial" font-size="8.00">creates</text>
<g id="edge18" class="edge">
<title>TestReservations&#45;&gt;HotelReservation</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M898.82,-1334.7C890.01,-1317.14 876.14,-1289.47 863,-1263.27"/>
<polygon fill="black" stroke="black" points="858.39,-1254.08 866.89,-1261.01 860.63,-1258.55 862.87,-1263.02 862.87,-1263.02 862.87,-1263.02 860.63,-1258.55 858.85,-1265.04 858.39,-1254.08 858.39,-1254.08"/>
</g>
<!-- TestReservations&#45;&gt;CabinReservation -->
<g id="edge19" class="edge" data-name="TestReservations-&gt;CabinReservation">
<path fill="none" stroke="black" d="M391.68,-960.1C401.32,-949.11 412.03,-936.28 421,-924 437.05,-902.01 453.08,-877.22 467.24,-854.09"/>
<polygon fill="black" stroke="black" points="472.37,-845.66 471.02,-856.54 469.77,-849.93 467.18,-854.2 467.18,-854.2 467.18,-854.2 469.77,-849.93 463.33,-851.86 472.37,-845.66 472.37,-845.66"/>
<text text-anchor="middle" x="426.12" y="-934.4" font-family="Arial" font-size="8.00">creates</text>
<g id="edge19" class="edge">
<title>TestReservations&#45;&gt;CabinReservation</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M917.18,-1334.7C926.58,-1315.96 941.75,-1285.71 955.64,-1258.02"/>
<polygon fill="black" stroke="black" points="960.29,-1248.74 959.83,-1259.7 958.05,-1253.21 955.81,-1257.68 955.81,-1257.68 955.81,-1257.68 958.05,-1253.21 951.79,-1255.66 960.29,-1248.74 960.29,-1248.74"/>
</g>
<!-- TestReservations&#45;&gt;HouseReservation -->
<g id="edge20" class="edge" data-name="TestReservations-&gt;HouseReservation">
<path fill="none" stroke="black" d="M354.09,-960.23C352.09,-954.14 350.18,-947.71 348.77,-941.6 342.33,-913.88 337.67,-883.15 334.36,-855.49"/>
<polygon fill="black" stroke="black" points="333.24,-845.84 338.86,-855.26 333.81,-850.81 334.39,-855.78 334.39,-855.78 334.39,-855.78 333.81,-850.81 329.92,-856.29 333.24,-845.84 333.24,-845.84"/>
<text text-anchor="middle" x="361.12" y="-934.4" font-family="Arial" font-size="8.00">creates</text>
<g id="edge20" class="edge">
<title>TestReservations&#45;&gt;HouseReservation</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M961.5,-1346.8C994.55,-1340.9 1036.5,-1329.48 1068,-1307.5 1084.99,-1295.64 1099.83,-1279.16 1112.06,-1262.41"/>
<polygon fill="black" stroke="black" points="1117.86,-1254.19 1115.78,-1264.95 1114.98,-1258.27 1112.1,-1262.36 1112.1,-1262.36 1112.1,-1262.36 1114.98,-1258.27 1108.42,-1259.77 1117.86,-1254.19 1117.86,-1254.19"/>
</g>
</g>
</svg>
</svg>

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 35 KiB