Files
reservationsystem/uml/classdiagram.svg
2025-09-19 15:32:40 -04:00

454 lines
38 KiB
XML

<?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.42.4 (0)
-->
<!-- Title: LodgeReservationSystem Pages: 1 -->
<svg width="2054pt" height="1733pt"
viewBox="0.00 0.00 2054.27 1733.00" 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 1729)">
<title>LodgeReservationSystem</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-1729 2050.27,-1729 2050.27,4 -4,4"/>
<!-- Account -->
<g id="node1" class="node">
<title>Account</title>
<polygon fill="lightyellow" stroke="black" points="720.77,-572.5 720.77,-971.5 1167.77,-971.5 1167.77,-572.5 720.77,-572.5"/>
<text text-anchor="middle" x="944.27" y="-956.3" font-family="Times,serif" font-size="14.00">Account</text>
<polyline fill="none" stroke="black" points="720.77,-948.5 1167.77,-948.5 "/>
<text text-anchor="start" x="728.77" y="-933.3" font-family="Times,serif" font-size="14.00">&#45; account_number: String</text>
<text text-anchor="start" x="728.77" y="-918.3" font-family="Times,serif" font-size="14.00"> &#45; phone_number: String</text>
<text text-anchor="start" x="728.77" y="-903.3" font-family="Times,serif" font-size="14.00"> &#45; mailing_address: Address</text>
<text text-anchor="start" x="728.77" y="-888.3" font-family="Times,serif" font-size="14.00"> &#45; email_address: EmailAddress</text>
<text text-anchor="start" x="728.77" y="-873.3" font-family="Times,serif" font-size="14.00"> &#45; reservations: AccountReservationList</text>
<polyline fill="none" stroke="black" points="720.77,-865.5 1167.77,-865.5 "/>
<text text-anchor="start" x="728.77" y="-850.3" font-family="Times,serif" font-size="14.00">+ Account()</text>
<text text-anchor="start" x="728.77" y="-835.3" font-family="Times,serif" font-size="14.00"> + Account(account_number, phone_number, mailing_address, email_address)</text>
<text text-anchor="start" x="728.77" y="-820.3" font-family="Times,serif" font-size="14.00"> + Account(phone_number, mailing_address, email_address)</text>
<text text-anchor="start" x="728.77" y="-805.3" font-family="Times,serif" font-size="14.00"> + toString(): String</text>
<text text-anchor="start" x="728.77" y="-790.3" font-family="Times,serif" font-size="14.00"> + add(rsrv: Reservation): boolean</text>
<text text-anchor="start" x="728.77" y="-775.3" font-family="Times,serif" font-size="14.00"> + Write(acct: Account): void</text>
<text text-anchor="start" x="728.77" y="-760.3" font-family="Times,serif" font-size="14.00"> + getAccount_number(): String</text>
<text text-anchor="start" x="728.77" y="-745.3" font-family="Times,serif" font-size="14.00"> + setAccount_number(account_number: String): void</text>
<text text-anchor="start" x="728.77" y="-730.3" font-family="Times,serif" font-size="14.00"> + getPhone_number(): String</text>
<text text-anchor="start" x="728.77" y="-715.3" font-family="Times,serif" font-size="14.00"> + setPhone_number(phone_number: String): void</text>
<text text-anchor="start" x="728.77" y="-700.3" font-family="Times,serif" font-size="14.00"> + getMailing_address(): Address</text>
<text text-anchor="start" x="728.77" y="-685.3" font-family="Times,serif" font-size="14.00"> + setMailing_address(mailing_address: Address): void</text>
<text text-anchor="start" x="728.77" y="-670.3" font-family="Times,serif" font-size="14.00"> + getEmail_address(): EmailAddress</text>
<text text-anchor="start" x="728.77" y="-655.3" font-family="Times,serif" font-size="14.00"> + setEmail_address(email_address: EmailAddress): void</text>
<text text-anchor="start" x="728.77" y="-640.3" font-family="Times,serif" font-size="14.00"> + hashCode(): int</text>
<text text-anchor="start" x="728.77" y="-625.3" font-family="Times,serif" font-size="14.00"> + findReservation(reservation_number: String): Reservation</text>
<text text-anchor="start" x="728.77" y="-610.3" font-family="Times,serif" font-size="14.00"> + equals(obj: Object): boolean</text>
<text text-anchor="start" x="728.77" y="-595.3" font-family="Times,serif" font-size="14.00"> + update(acct: Account): void</text>
<text text-anchor="start" x="728.77" y="-580.3" font-family="Times,serif" font-size="14.00"> + getAllReservations(): ListIterator&lt;IReservation&gt;</text>
</g>
<!-- AccountReservationList -->
<g id="node3" class="node">
<title>AccountReservationList</title>
<polygon fill="lightyellow" stroke="black" points="1034.77,-316.5 1034.77,-445.5 1423.77,-445.5 1423.77,-316.5 1034.77,-316.5"/>
<text text-anchor="middle" x="1229.27" y="-430.3" font-family="Times,serif" font-size="14.00">AccountReservationList</text>
<polyline fill="none" stroke="black" points="1034.77,-422.5 1423.77,-422.5 "/>
<text text-anchor="middle" x="1229.27" y="-407.3" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="1034.77,-399.5 1423.77,-399.5 "/>
<text text-anchor="start" x="1042.77" y="-384.3" font-family="Times,serif" font-size="14.00">&#45; reservationSerial(reservation: Reservation): String</text>
<text text-anchor="start" x="1042.77" y="-369.3" font-family="Times,serif" font-size="14.00"> + add(reservation: IReservation): boolean</text>
<text text-anchor="start" x="1042.77" y="-354.3" font-family="Times,serif" font-size="14.00"> + toString(): String</text>
<text text-anchor="start" x="1042.77" y="-339.3" font-family="Times,serif" font-size="14.00"> + find(reservation_number: String): Reservation</text>
<text text-anchor="start" x="1042.77" y="-324.3" font-family="Times,serif" font-size="14.00"> + update(incoming_reservation_list: AccountReservationList): void</text>
</g>
<!-- Account&#45;&gt;AccountReservationList -->
<g id="edge9" class="edge">
<title>Account&#45;&gt;AccountReservationList</title>
<path fill="none" stroke="black" d="M1089.9,-572.23C1120.47,-530.5 1150.85,-489.04 1175.4,-455.52"/>
<polygon fill="black" stroke="black" points="1175.41,-455.52 1175.73,-448.31 1182.5,-445.84 1182.18,-453.04 1175.41,-455.52"/>
<text text-anchor="middle" x="1116.77" y="-542.8" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- Address -->
<g id="node4" class="node">
<title>Address</title>
<polygon fill="lightyellow" stroke="black" points="517.27,-241.5 517.27,-520.5 711.27,-520.5 711.27,-241.5 517.27,-241.5"/>
<text text-anchor="middle" x="614.27" y="-505.3" font-family="Times,serif" font-size="14.00">Address</text>
<polyline fill="none" stroke="black" points="517.27,-497.5 711.27,-497.5 "/>
<text text-anchor="start" x="525.27" y="-482.3" font-family="Times,serif" font-size="14.00">&#45; street: String</text>
<text text-anchor="start" x="525.27" y="-467.3" font-family="Times,serif" font-size="14.00"> &#45; city: String</text>
<text text-anchor="start" x="525.27" y="-452.3" font-family="Times,serif" font-size="14.00"> &#45; state: String</text>
<text text-anchor="start" x="525.27" y="-437.3" font-family="Times,serif" font-size="14.00"> &#45; zip: String</text>
<polyline fill="none" stroke="black" points="517.27,-429.5 711.27,-429.5 "/>
<text text-anchor="start" x="525.27" y="-414.3" font-family="Times,serif" font-size="14.00">+ Address(street, city, state, zip)</text>
<text text-anchor="start" x="525.27" y="-399.3" font-family="Times,serif" font-size="14.00"> + getStreet(): String</text>
<text text-anchor="start" x="525.27" y="-384.3" font-family="Times,serif" font-size="14.00"> + setStreet(street: String): void</text>
<text text-anchor="start" x="525.27" y="-369.3" font-family="Times,serif" font-size="14.00"> + getCity(): String</text>
<text text-anchor="start" x="525.27" y="-354.3" font-family="Times,serif" font-size="14.00"> + setCity(city: String): void</text>
<text text-anchor="start" x="525.27" y="-339.3" font-family="Times,serif" font-size="14.00"> + getState(): String</text>
<text text-anchor="start" x="525.27" y="-324.3" font-family="Times,serif" font-size="14.00"> + setState(state: String): void</text>
<text text-anchor="start" x="525.27" y="-309.3" font-family="Times,serif" font-size="14.00"> + getZip(): String</text>
<text text-anchor="start" x="525.27" y="-294.3" font-family="Times,serif" font-size="14.00"> + setZip(zip: String): void</text>
<text text-anchor="start" x="525.27" y="-279.3" font-family="Times,serif" font-size="14.00"> + hashCode(): int</text>
<text text-anchor="start" x="525.27" y="-264.3" font-family="Times,serif" font-size="14.00"> + equals(obj: Object): boolean</text>
<text text-anchor="start" x="525.27" y="-249.3" font-family="Times,serif" font-size="14.00"> + toString(): String</text>
</g>
<!-- Account&#45;&gt;Address -->
<g id="edge10" class="edge">
<title>Account&#45;&gt;Address</title>
<path fill="none" stroke="black" d="M763.72,-572.32C748.85,-555.11 734.2,-537.84 720.27,-521 719.91,-520.56 719.54,-520.12 719.18,-519.68"/>
<polygon fill="black" stroke="black" points="719.1,-519.59 712.21,-517.47 711.51,-510.3 718.4,-512.41 719.1,-519.59"/>
<text text-anchor="middle" x="747.77" y="-542.8" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- EmailAddress -->
<g id="node5" class="node">
<title>EmailAddress</title>
<polygon fill="lightyellow" stroke="black" points="729.77,-309 729.77,-453 1016.77,-453 1016.77,-309 729.77,-309"/>
<text text-anchor="middle" x="873.27" y="-437.8" font-family="Times,serif" font-size="14.00">EmailAddress</text>
<polyline fill="none" stroke="black" points="729.77,-430 1016.77,-430 "/>
<text text-anchor="start" x="737.77" y="-414.8" font-family="Times,serif" font-size="14.00">&#45; email_address: String</text>
<polyline fill="none" stroke="black" points="729.77,-407 1016.77,-407 "/>
<text text-anchor="start" x="737.77" y="-391.8" font-family="Times,serif" font-size="14.00">+ EmailAddress(email_address: String)</text>
<text text-anchor="start" x="737.77" y="-376.8" font-family="Times,serif" font-size="14.00"> + getEmail_address(): String</text>
<text text-anchor="start" x="737.77" y="-361.8" font-family="Times,serif" font-size="14.00"> + setEmail_address(email_address: String): void</text>
<text text-anchor="start" x="737.77" y="-346.8" font-family="Times,serif" font-size="14.00"> + hashCode(): int</text>
<text text-anchor="start" x="737.77" y="-331.8" font-family="Times,serif" font-size="14.00"> + equals(obj: Object): boolean</text>
<text text-anchor="start" x="737.77" y="-316.8" font-family="Times,serif" font-size="14.00"> + toString(): String</text>
</g>
<!-- Account&#45;&gt;EmailAddress -->
<g id="edge11" class="edge">
<title>Account&#45;&gt;EmailAddress</title>
<path fill="none" stroke="black" d="M907.99,-572.23C901.09,-534.4 894.22,-496.78 888.44,-465.11"/>
<polygon fill="black" stroke="black" points="888.43,-465.08 883.42,-459.9 886.28,-453.28 891.29,-458.46 888.43,-465.08"/>
<text text-anchor="middle" x="908.77" y="-542.8" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- AccountList -->
<g id="node2" class="node">
<title>AccountList</title>
<polygon fill="lightyellow" stroke="black" points="977.77,-1031 977.77,-1175 1392.77,-1175 1392.77,-1031 977.77,-1031"/>
<text text-anchor="middle" x="1185.27" y="-1159.8" font-family="Times,serif" font-size="14.00">AccountList</text>
<polyline fill="none" stroke="black" points="977.77,-1152 1392.77,-1152 "/>
<text text-anchor="middle" x="1185.27" y="-1136.8" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="977.77,-1129 1392.77,-1129 "/>
<text text-anchor="start" x="985.77" y="-1113.8" font-family="Times,serif" font-size="14.00">+ accountSerial(phone_number, mailing_address, email_address): String</text>
<text text-anchor="start" x="985.77" y="-1098.8" font-family="Times,serif" font-size="14.00"> + add(account: Account): boolean</text>
<text text-anchor="start" x="985.77" y="-1083.8" font-family="Times,serif" font-size="14.00"> + save(acct: Account): void</text>
<text text-anchor="start" x="985.77" y="-1068.8" font-family="Times,serif" font-size="14.00"> + find(account_number: String): Account</text>
<text text-anchor="start" x="985.77" y="-1053.8" font-family="Times,serif" font-size="14.00"> + getListOfReservations(): List&lt;? extends IReservation&gt;</text>
<text text-anchor="start" x="985.77" y="-1038.8" font-family="Times,serif" font-size="14.00"> + showReservationList(): void</text>
</g>
<!-- AccountList&#45;&gt;Account -->
<g id="edge13" class="edge">
<title>AccountList&#45;&gt;Account</title>
<path fill="none" stroke="black" d="M1132.98,-1030.61C1121.88,-1015.46 1109.63,-998.74 1096.87,-981.32"/>
<polygon fill="none" stroke="black" points="1096.82,-981.25 1090.04,-978.77 1089.73,-971.57 1096.5,-974.04 1096.82,-981.25"/>
<text text-anchor="middle" x="1117.77" y="-993.8" font-family="Times,serif" font-size="14.00">*</text>
</g>
<!-- ArrayList -->
<g id="node20" class="node">
<title>ArrayList</title>
<polygon fill="white" stroke="black" points="1353.27,-77 1353.27,-113 1447.27,-113 1447.27,-77 1353.27,-77"/>
<text text-anchor="middle" x="1400.27" y="-91.3" font-family="Times,serif" font-size="14.00">ArrayList&lt;T&gt;</text>
</g>
<!-- AccountList&#45;&gt;ArrayList -->
<g id="edge1" class="edge">
<title>AccountList&#45;&gt;ArrayList</title>
<path fill="none" stroke="black" d="M1226.74,-1030.79C1286.18,-924.18 1392.77,-714.85 1432.27,-521 1457.11,-399.06 1445.76,-364.71 1432.27,-241 1427.72,-199.23 1415.99,-151.87 1408.07,-122.97"/>
<polygon fill="none" stroke="black" points="1411.4,-121.9 1405.34,-113.21 1404.66,-123.78 1411.4,-121.9"/>
</g>
<!-- IReservation -->
<g id="node11" class="node">
<title>IReservation</title>
<polygon fill="lightgreen" stroke="black" points="340.27,-0.5 340.27,-189.5 552.27,-189.5 552.27,-0.5 340.27,-0.5"/>
<text text-anchor="middle" x="446.27" y="-174.3" font-family="Times,serif" font-size="14.00">«interface»</text>
<text text-anchor="middle" x="446.27" y="-159.3" font-family="Times,serif" font-size="14.00">IReservation</text>
<polyline fill="none" stroke="black" points="340.27,-151.5 552.27,-151.5 "/>
<text text-anchor="middle" x="446.27" y="-136.3" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="340.27,-128.5 552.27,-128.5 "/>
<text text-anchor="start" x="348.27" y="-113.3" font-family="Times,serif" font-size="14.00">+ ReservationType(): String</text>
<text text-anchor="start" x="348.27" y="-98.3" font-family="Times,serif" font-size="14.00"> + copy(type: String): Reservation</text>
<text text-anchor="start" x="348.27" y="-83.3" font-family="Times,serif" font-size="14.00"> + getReservation_number(): String</text>
<text text-anchor="start" x="348.27" y="-68.3" font-family="Times,serif" font-size="14.00"> + getAccountNumber(): String</text>
<text text-anchor="start" x="348.27" y="-53.3" font-family="Times,serif" font-size="14.00"> + getPhysical_address(): Address</text>
<text text-anchor="start" x="348.27" y="-38.3" font-family="Times,serif" font-size="14.00"> + getPricePerNight(): float</text>
<text text-anchor="start" x="348.27" y="-23.3" font-family="Times,serif" font-size="14.00"> + calculatePrice(): float</text>
<text text-anchor="start" x="348.27" y="-8.3" font-family="Times,serif" font-size="14.00"> + checkValid(): boolean</text>
</g>
<!-- AccountReservationList&#45;&gt;IReservation -->
<g id="edge14" class="edge">
<title>AccountReservationList&#45;&gt;IReservation</title>
<path fill="none" stroke="black" d="M1149.81,-316.19C1113.58,-289.71 1069.06,-260.65 1025.27,-241 873.54,-172.92 684.49,-133.21 564.55,-113.06"/>
<polygon fill="none" stroke="black" points="564.28,-113.02 557.71,-115.98 552.45,-111.05 559.02,-108.09 564.28,-113.02"/>
<text text-anchor="middle" x="993.77" y="-211.8" font-family="Times,serif" font-size="14.00">0...*</text>
</g>
<!-- AccountReservationList&#45;&gt;ArrayList -->
<g id="edge2" class="edge">
<title>AccountReservationList&#45;&gt;ArrayList</title>
<path fill="none" stroke="black" d="M1267.65,-316.26C1304.52,-255.02 1358.41,-165.52 1384.7,-121.87"/>
<polygon fill="none" stroke="black" points="1387.86,-123.4 1390.02,-113.03 1381.86,-119.79 1387.86,-123.4"/>
</g>
<!-- DataRepository -->
<g id="node6" class="node">
<title>DataRepository</title>
<polygon fill="lightyellow" stroke="black" points="689.27,-1535.5 689.27,-1724.5 1199.27,-1724.5 1199.27,-1535.5 689.27,-1535.5"/>
<text text-anchor="middle" x="944.27" y="-1709.3" font-family="Times,serif" font-size="14.00">DataRepository</text>
<polyline fill="none" stroke="black" points="689.27,-1701.5 1199.27,-1701.5 "/>
<text text-anchor="start" x="697.27" y="-1686.3" font-family="Times,serif" font-size="14.00">&#45; directoryPath: String</text>
<text text-anchor="start" x="697.27" y="-1671.3" font-family="Times,serif" font-size="14.00"> &#45; instance: DataRepository</text>
<polyline fill="none" stroke="black" points="689.27,-1663.5 1199.27,-1663.5 "/>
<text text-anchor="start" x="697.27" y="-1648.3" font-family="Times,serif" font-size="14.00"># getInstance(): DataRepository</text>
<text text-anchor="start" x="697.27" y="-1633.3" font-family="Times,serif" font-size="14.00"> + setDataStoreRoot(directoryPath: String): void</text>
<text text-anchor="start" x="697.27" y="-1618.3" font-family="Times,serif" font-size="14.00"> + getPath(): String</text>
<text text-anchor="start" x="697.27" y="-1603.3" font-family="Times,serif" font-size="14.00"> + Reservation(type: String): Reservation</text>
<text text-anchor="start" x="697.27" y="-1588.3" font-family="Times,serif" font-size="14.00"> + WalkFileSystemTree(manager: AccomodationManager, rootDir: Path): void</text>
<text text-anchor="start" x="697.27" y="-1573.3" font-family="Times,serif" font-size="14.00"> + LoadAccount(file: Path): Account</text>
<text text-anchor="start" x="697.27" y="-1558.3" font-family="Times,serif" font-size="14.00"> &#45; loadReservationRefList(rdr: JsonReader, ac: Account): void</text>
<text text-anchor="start" x="697.27" y="-1543.3" font-family="Times,serif" font-size="14.00"> &#45; loadReservation(ac: Account, reservationType: String, reservationNumber: String): void</text>
</g>
<!-- DataRepository&#45;&gt;Account -->
<g id="edge19" class="edge">
<title>DataRepository&#45;&gt;Account</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M944.27,-1535.35C944.27,-1403.22 944.27,-1158.5 944.27,-981.91"/>
<polygon fill="black" stroke="black" points="944.27,-971.7 948.77,-981.7 944.27,-976.7 944.27,-981.7 944.27,-981.7 944.27,-981.7 944.27,-976.7 939.77,-981.7 944.27,-971.7 944.27,-971.7"/>
<text text-anchor="middle" x="963.27" y="-1204.8" font-family="Times,serif" font-size="14.00">creates</text>
</g>
<!-- DataRepository&#45;&gt;DataRepository -->
<g id="edge23" class="edge">
<title>DataRepository&#45;&gt;DataRepository</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1199.53,-1643.82C1210.74,-1640.29 1217.27,-1635.68 1217.27,-1630 1217.27,-1626.18 1214.32,-1622.85 1208.99,-1620"/>
<polygon fill="black" stroke="black" points="1199.53,-1616.18 1210.49,-1615.75 1204.16,-1618.05 1208.8,-1619.93 1208.8,-1619.93 1208.8,-1619.93 1204.16,-1618.05 1207.11,-1624.1 1199.53,-1616.18 1199.53,-1616.18"/>
<text text-anchor="middle" x="1242.27" y="-1626.3" font-family="Times,serif" font-size="14.00">singleton</text>
</g>
<!-- Reservation -->
<g id="node12" class="node">
<title>Reservation</title>
<polygon fill="lightgray" stroke="black" points="319.77,-754 319.77,-790 400.77,-790 400.77,-754 319.77,-754"/>
<text text-anchor="middle" x="360.27" y="-768.3" font-family="Times,serif" font-size="14.00">Reservation</text>
</g>
<!-- DataRepository&#45;&gt;Reservation -->
<g id="edge20" class="edge">
<title>DataRepository&#45;&gt;Reservation</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M689.22,-1582.43C471.14,-1527.69 170.4,-1413.26 26.27,-1183 -11.46,-1122.72 -5.56,-1086.59 26.27,-1023 85.97,-903.75 232.57,-826.71 310.19,-792.85"/>
<polygon fill="black" stroke="black" points="319.75,-788.75 312.34,-796.83 315.16,-790.72 310.57,-792.69 310.57,-792.69 310.57,-792.69 315.16,-790.72 308.79,-788.56 319.75,-788.75 319.75,-788.75"/>
<text text-anchor="middle" x="63.27" y="-1204.8" font-family="Times,serif" font-size="14.00">creates</text>
</g>
<!-- AccomodationManager -->
<g id="node13" class="node">
<title>AccomodationManager</title>
<polygon fill="lightyellow" stroke="black" points="972.77,-1234.5 972.77,-1483.5 1397.77,-1483.5 1397.77,-1234.5 972.77,-1234.5"/>
<text text-anchor="middle" x="1185.27" y="-1468.3" font-family="Times,serif" font-size="14.00">AccomodationManager</text>
<polyline fill="none" stroke="black" points="972.77,-1460.5 1397.77,-1460.5 "/>
<text text-anchor="start" x="980.77" y="-1445.3" font-family="Times,serif" font-size="14.00">&#45; accounts: AccountList</text>
<polyline fill="none" stroke="black" points="972.77,-1437.5 1397.77,-1437.5 "/>
<text text-anchor="start" x="980.77" y="-1422.3" font-family="Times,serif" font-size="14.00">+ AccomodationManager(home: String)</text>
<text text-anchor="start" x="980.77" y="-1407.3" font-family="Times,serif" font-size="14.00"> + setDataStoreRoot(home: String): void</text>
<text text-anchor="start" x="980.77" y="-1392.3" font-family="Times,serif" font-size="14.00"> + loadAll(): void</text>
<text text-anchor="start" x="980.77" y="-1377.3" font-family="Times,serif" font-size="14.00"> + load(file: Path): void</text>
<text text-anchor="start" x="980.77" y="-1362.3" font-family="Times,serif" font-size="14.00"> + retrieveLoadedAccounts(): List&lt;Account&gt;</text>
<text text-anchor="start" x="980.77" y="-1347.3" font-family="Times,serif" font-size="14.00"> + retrieveAccount(acct_id: String): Account</text>
<text text-anchor="start" x="980.77" y="-1332.3" font-family="Times,serif" font-size="14.00"> + AddAccount(acct: Account): void</text>
<text text-anchor="start" x="980.77" y="-1317.3" font-family="Times,serif" font-size="14.00"> + UpdateAccount(acct: Account): void</text>
<text text-anchor="start" x="980.77" y="-1302.3" font-family="Times,serif" font-size="14.00"> + newAccount(phone_number, mailing_address, email_address): Account</text>
<text text-anchor="start" x="980.77" y="-1287.3" font-family="Times,serif" font-size="14.00"> + addReservation(account: Account, reservation: Reservation): boolean</text>
<text text-anchor="start" x="980.77" y="-1272.3" font-family="Times,serif" font-size="14.00"> + findReservation(reservation_number: String): Reservation</text>
<text text-anchor="start" x="980.77" y="-1257.3" font-family="Times,serif" font-size="14.00"> + getReservationList(): List&lt;? extends IReservation&gt;</text>
<text text-anchor="start" x="980.77" y="-1242.3" font-family="Times,serif" font-size="14.00"> + showReservationList(): void</text>
</g>
<!-- DataRepository&#45;&gt;AccomodationManager -->
<g id="edge18" class="edge">
<title>DataRepository&#45;&gt;AccomodationManager</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1028.22,-1535.29C1040.95,-1521.09 1054.27,-1506.22 1067.55,-1491.39"/>
<polygon fill="black" stroke="black" points="1074.49,-1483.65 1071.17,-1494.1 1071.15,-1487.38 1067.82,-1491.1 1067.82,-1491.1 1067.82,-1491.1 1071.15,-1487.38 1064.46,-1488.1 1074.49,-1483.65 1074.49,-1483.65"/>
<text text-anchor="middle" x="1070.27" y="-1505.8" font-family="Times,serif" font-size="14.00">uses</text>
</g>
<!-- KitchenTypeEnum -->
<g id="node7" class="node">
<title>KitchenTypeEnum</title>
<polygon fill="lightblue" stroke="black" points="379.27,-335.5 379.27,-426.5 499.27,-426.5 499.27,-335.5 379.27,-335.5"/>
<text text-anchor="middle" x="439.27" y="-411.3" font-family="Times,serif" font-size="14.00">«enumeration»</text>
<text text-anchor="middle" x="439.27" y="-396.3" font-family="Times,serif" font-size="14.00">KitchenTypeEnum</text>
<polyline fill="none" stroke="black" points="379.27,-388.5 499.27,-388.5 "/>
<text text-anchor="start" x="387.27" y="-373.3" font-family="Times,serif" font-size="14.00">None</text>
<text text-anchor="start" x="387.27" y="-358.3" font-family="Times,serif" font-size="14.00"> Kitchenette</text>
<text text-anchor="start" x="387.27" y="-343.3" font-family="Times,serif" font-size="14.00"> FullKitchen</text>
</g>
<!-- ReservationStatusEnum -->
<g id="node8" class="node">
<title>ReservationStatusEnum</title>
<polygon fill="lightblue" stroke="black" points="213.77,-335.5 213.77,-426.5 360.77,-426.5 360.77,-335.5 213.77,-335.5"/>
<text text-anchor="middle" x="287.27" y="-411.3" font-family="Times,serif" font-size="14.00">«enumeration»</text>
<text text-anchor="middle" x="287.27" y="-396.3" font-family="Times,serif" font-size="14.00">ReservationStatusEnum</text>
<polyline fill="none" stroke="black" points="213.77,-388.5 360.77,-388.5 "/>
<text text-anchor="start" x="221.77" y="-373.3" font-family="Times,serif" font-size="14.00">Draft</text>
<text text-anchor="start" x="221.77" y="-358.3" font-family="Times,serif" font-size="14.00"> Canceled</text>
<text text-anchor="start" x="221.77" y="-343.3" font-family="Times,serif" font-size="14.00"> Completed</text>
</g>
<!-- DuplicateObjectException -->
<g id="node9" class="node">
<title>DuplicateObjectException</title>
<polygon fill="lightcoral" stroke="black" points="1484.27,-1588 1484.27,-1672 1756.27,-1672 1756.27,-1588 1484.27,-1588"/>
<text text-anchor="middle" x="1620.27" y="-1656.8" font-family="Times,serif" font-size="14.00">DuplicateObjectException</text>
<polyline fill="none" stroke="black" points="1484.27,-1649 1756.27,-1649 "/>
<text text-anchor="middle" x="1620.27" y="-1633.8" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="1484.27,-1626 1756.27,-1626 "/>
<text text-anchor="start" x="1492.27" y="-1610.8" font-family="Times,serif" font-size="14.00">+ DuplicateObjectException()</text>
<text text-anchor="start" x="1492.27" y="-1595.8" font-family="Times,serif" font-size="14.00"> + DuplicateObjectException(message: String)</text>
</g>
<!-- RuntimeException -->
<g id="node19" class="node">
<title>RuntimeException</title>
<polygon fill="white" stroke="black" points="1707.77,-1341 1707.77,-1377 1826.77,-1377 1826.77,-1341 1707.77,-1341"/>
<text text-anchor="middle" x="1767.27" y="-1355.3" font-family="Times,serif" font-size="14.00">RuntimeException</text>
</g>
<!-- DuplicateObjectException&#45;&gt;RuntimeException -->
<g id="edge3" class="edge">
<title>DuplicateObjectException&#45;&gt;RuntimeException</title>
<path fill="none" stroke="black" d="M1642.76,-1587.85C1673.38,-1531.81 1727.32,-1433.11 1752.96,-1386.19"/>
<polygon fill="none" stroke="black" points="1756.11,-1387.71 1757.84,-1377.26 1749.97,-1384.36 1756.11,-1387.71"/>
</g>
<!-- IllegalOperationException -->
<g id="node10" class="node">
<title>IllegalOperationException</title>
<polygon fill="lightcoral" stroke="black" points="1774.27,-1588 1774.27,-1672 2046.27,-1672 2046.27,-1588 1774.27,-1588"/>
<text text-anchor="middle" x="1910.27" y="-1656.8" font-family="Times,serif" font-size="14.00">IllegalOperationException</text>
<polyline fill="none" stroke="black" points="1774.27,-1649 2046.27,-1649 "/>
<text text-anchor="middle" x="1910.27" y="-1633.8" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="1774.27,-1626 2046.27,-1626 "/>
<text text-anchor="start" x="1782.27" y="-1610.8" font-family="Times,serif" font-size="14.00">+ IllegalOperationException()</text>
<text text-anchor="start" x="1782.27" y="-1595.8" font-family="Times,serif" font-size="14.00"> + IllegalOperationException(message: String)</text>
</g>
<!-- IllegalOperationException&#45;&gt;RuntimeException -->
<g id="edge4" class="edge">
<title>IllegalOperationException&#45;&gt;RuntimeException</title>
<path fill="none" stroke="black" d="M1888.4,-1587.85C1858.6,-1531.81 1806.13,-1433.11 1781.19,-1386.19"/>
<polygon fill="none" stroke="black" points="1784.23,-1384.45 1776.45,-1377.26 1778.05,-1387.73 1784.23,-1384.45"/>
</g>
<!-- Reservation&#45;&gt;Address -->
<g id="edge15" class="edge">
<title>Reservation&#45;&gt;Address</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M371.51,-753.78C397.11,-714.58 461.88,-615.39 518.08,-529.32"/>
<polygon fill="black" stroke="black" points="523.66,-520.76 521.96,-531.6 520.93,-524.95 518.2,-529.14 518.2,-529.14 518.2,-529.14 520.93,-524.95 514.43,-526.68 523.66,-520.76 523.66,-520.76"/>
<text text-anchor="middle" x="522.27" y="-542.8" font-family="Times,serif" font-size="14.00">uses</text>
</g>
<!-- Reservation&#45;&gt;KitchenTypeEnum -->
<g id="edge17" class="edge">
<title>Reservation&#45;&gt;KitchenTypeEnum</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M363.77,-753.78C374.92,-698.85 410,-526.13 428.15,-436.77"/>
<polygon fill="black" stroke="black" points="430.17,-426.82 432.59,-437.51 429.17,-431.72 428.18,-436.62 428.18,-436.62 428.18,-436.62 429.17,-431.72 423.77,-435.72 430.17,-426.82 430.17,-426.82"/>
<text text-anchor="middle" x="419.27" y="-542.8" font-family="Times,serif" font-size="14.00">uses</text>
</g>
<!-- Reservation&#45;&gt;ReservationStatusEnum -->
<g id="edge16" class="edge">
<title>Reservation&#45;&gt;ReservationStatusEnum</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M357.04,-753.78C346.73,-698.85 314.32,-526.13 297.55,-436.77"/>
<polygon fill="black" stroke="black" points="295.68,-426.82 301.95,-435.82 296.6,-431.73 297.53,-436.65 297.53,-436.65 297.53,-436.65 296.6,-431.73 293.1,-437.48 295.68,-426.82 295.68,-426.82"/>
<text text-anchor="middle" x="332.27" y="-542.8" font-family="Times,serif" font-size="14.00">uses</text>
</g>
<!-- Reservation&#45;&gt;IReservation -->
<g id="edge5" class="edge">
<title>Reservation&#45;&gt;IReservation</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M344.68,-753.89C311.02,-715.65 232.3,-618.87 204.27,-521 170.01,-401.37 142.92,-349.27 204.27,-241 231.77,-192.46 282.71,-158.41 330.79,-135.56"/>
<polygon fill="none" stroke="black" points="332.43,-138.66 340.04,-131.28 329.5,-132.3 332.43,-138.66"/>
</g>
<!-- AccomodationManager&#45;&gt;AccountList -->
<g id="edge12" class="edge">
<title>AccomodationManager&#45;&gt;AccountList</title>
<path fill="none" stroke="black" d="M1185.27,-1234.35C1185.27,-1218.48 1185.27,-1202.54 1185.27,-1187.52"/>
<polygon fill="none" stroke="black" points="1185.27,-1187.15 1181.27,-1181.15 1185.27,-1175.15 1189.27,-1181.15 1185.27,-1187.15"/>
<text text-anchor="middle" x="1188.77" y="-1204.8" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- HotelReservation -->
<g id="node14" class="node">
<title>HotelReservation</title>
<polygon fill="lightyellow" stroke="black" points="334.77,-1023.5 334.77,-1182.5 613.77,-1182.5 613.77,-1023.5 334.77,-1023.5"/>
<text text-anchor="middle" x="474.27" y="-1167.3" font-family="Times,serif" font-size="14.00">HotelReservation</text>
<polyline fill="none" stroke="black" points="334.77,-1159.5 613.77,-1159.5 "/>
<text text-anchor="middle" x="474.27" y="-1144.3" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="334.77,-1136.5 613.77,-1136.5 "/>
<text text-anchor="start" x="342.77" y="-1121.3" font-family="Times,serif" font-size="14.00">+ HotelReservation()</text>
<text text-anchor="start" x="342.77" y="-1106.3" font-family="Times,serif" font-size="14.00"> + HotelReservation(physical_address: Address)</text>
<text text-anchor="start" x="342.77" y="-1091.3" font-family="Times,serif" font-size="14.00"> + copy(reservationType: String): Reservation</text>
<text text-anchor="start" x="342.77" y="-1076.3" font-family="Times,serif" font-size="14.00"> + ReservationType(): String</text>
<text text-anchor="start" x="342.77" y="-1061.3" font-family="Times,serif" font-size="14.00"> + checkValid(): boolean</text>
<text text-anchor="start" x="342.77" y="-1046.3" font-family="Times,serif" font-size="14.00"> + getPricePerNight(): float</text>
<text text-anchor="start" x="342.77" y="-1031.3" font-family="Times,serif" font-size="14.00"> + calculatePrice(): float</text>
</g>
<!-- HotelReservation&#45;&gt;Reservation -->
<g id="edge6" class="edge">
<title>HotelReservation&#45;&gt;Reservation</title>
<path fill="none" stroke="black" d="M446.96,-1023.2C421.93,-950.94 386.28,-848.07 369.58,-799.87"/>
<polygon fill="none" stroke="black" points="372.8,-798.48 366.22,-790.17 366.19,-800.77 372.8,-798.48"/>
</g>
<!-- HouseReservation -->
<g id="node15" class="node">
<title>HouseReservation</title>
<polygon fill="lightyellow" stroke="black" points="632.27,-1023.5 632.27,-1182.5 916.27,-1182.5 916.27,-1023.5 632.27,-1023.5"/>
<text text-anchor="middle" x="774.27" y="-1167.3" font-family="Times,serif" font-size="14.00">HouseReservation</text>
<polyline fill="none" stroke="black" points="632.27,-1159.5 916.27,-1159.5 "/>
<text text-anchor="middle" x="774.27" y="-1144.3" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="632.27,-1136.5 916.27,-1136.5 "/>
<text text-anchor="start" x="640.27" y="-1121.3" font-family="Times,serif" font-size="14.00">+ HouseReservation()</text>
<text text-anchor="start" x="640.27" y="-1106.3" font-family="Times,serif" font-size="14.00"> + HouseReservation(physical_address: Address)</text>
<text text-anchor="start" x="640.27" y="-1091.3" font-family="Times,serif" font-size="14.00"> + copy(reservationType: String): Reservation</text>
<text text-anchor="start" x="640.27" y="-1076.3" font-family="Times,serif" font-size="14.00"> + ReservationType(): String</text>
<text text-anchor="start" x="640.27" y="-1061.3" font-family="Times,serif" font-size="14.00"> + checkValid(): boolean</text>
<text text-anchor="start" x="640.27" y="-1046.3" font-family="Times,serif" font-size="14.00"> + getPricePerNight(): float</text>
<text text-anchor="start" x="640.27" y="-1031.3" font-family="Times,serif" font-size="14.00"> + calculatePrice(): float</text>
</g>
<!-- HouseReservation&#45;&gt;Reservation -->
<g id="edge7" class="edge">
<title>HouseReservation&#45;&gt;Reservation</title>
<path fill="none" stroke="black" d="M675.37,-1023.41C582.35,-949.49 448.86,-843.4 390.04,-796.65"/>
<polygon fill="none" stroke="black" points="391.92,-793.68 381.91,-790.2 387.56,-799.16 391.92,-793.68"/>
</g>
<!-- CabinReservation -->
<g id="node16" class="node">
<title>CabinReservation</title>
<polygon fill="lightyellow" stroke="black" points="35.77,-1031 35.77,-1175 316.77,-1175 316.77,-1031 35.77,-1031"/>
<text text-anchor="middle" x="176.27" y="-1159.8" font-family="Times,serif" font-size="14.00">CabinReservation</text>
<polyline fill="none" stroke="black" points="35.77,-1152 316.77,-1152 "/>
<text text-anchor="middle" x="176.27" y="-1136.8" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="35.77,-1129 316.77,-1129 "/>
<text text-anchor="start" x="43.77" y="-1113.8" font-family="Times,serif" font-size="14.00">+ CabinReservation()</text>
<text text-anchor="start" x="43.77" y="-1098.8" font-family="Times,serif" font-size="14.00"> + CabinReservation(physical_address: Address)</text>
<text text-anchor="start" x="43.77" y="-1083.8" font-family="Times,serif" font-size="14.00"> + ReservationType(): String</text>
<text text-anchor="start" x="43.77" y="-1068.8" font-family="Times,serif" font-size="14.00"> + checkValid(): boolean</text>
<text text-anchor="start" x="43.77" y="-1053.8" font-family="Times,serif" font-size="14.00"> + getPricePerNight(): float</text>
<text text-anchor="start" x="43.77" y="-1038.8" font-family="Times,serif" font-size="14.00"> + calculatePrice(): float</text>
</g>
<!-- CabinReservation&#45;&gt;Reservation -->
<g id="edge8" class="edge">
<title>CabinReservation&#45;&gt;Reservation</title>
<path fill="none" stroke="black" d="M216.2,-1030.61C257.01,-957.64 318.2,-848.22 345.83,-798.83"/>
<polygon fill="none" stroke="black" points="348.91,-800.49 350.73,-790.05 342.8,-797.07 348.91,-800.49"/>
</g>
<!-- TestReservations -->
<g id="node17" class="node">
<title>TestReservations</title>
<polygon fill="lightyellow" stroke="black" points="1292.77,-1595.5 1292.77,-1664.5 1461.77,-1664.5 1461.77,-1595.5 1292.77,-1595.5"/>
<text text-anchor="middle" x="1377.27" y="-1649.3" font-family="Times,serif" font-size="14.00">TestReservations</text>
<polyline fill="none" stroke="black" points="1292.77,-1641.5 1461.77,-1641.5 "/>
<text text-anchor="middle" x="1377.27" y="-1626.3" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="1292.77,-1618.5 1461.77,-1618.5 "/>
<text text-anchor="start" x="1300.77" y="-1603.3" font-family="Times,serif" font-size="14.00">+ main(args: String[]): void</text>
</g>
<!-- TestReservations&#45;&gt;AccomodationManager -->
<g id="edge21" class="edge">
<title>TestReservations&#45;&gt;AccomodationManager</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1353.34,-1595.47C1334.48,-1569.05 1306.86,-1530.36 1279.45,-1491.95"/>
<polygon fill="black" stroke="black" points="1273.61,-1483.76 1283.08,-1489.29 1276.51,-1487.83 1279.41,-1491.9 1279.41,-1491.9 1279.41,-1491.9 1276.51,-1487.83 1275.75,-1494.52 1273.61,-1483.76 1273.61,-1483.76"/>
<text text-anchor="middle" x="1305.27" y="-1505.8" font-family="Times,serif" font-size="14.00">uses</text>
</g>
<!-- getRepositoryConfig -->
<g id="node18" class="node">
<title>getRepositoryConfig</title>
<polygon fill="lightyellow" stroke="black" points="1416.27,-1324.5 1416.27,-1393.5 1546.27,-1393.5 1546.27,-1324.5 1416.27,-1324.5"/>
<text text-anchor="middle" x="1481.27" y="-1378.3" font-family="Times,serif" font-size="14.00">getRepositoryConfig</text>
<polyline fill="none" stroke="black" points="1416.27,-1370.5 1546.27,-1370.5 "/>
<text text-anchor="middle" x="1481.27" y="-1355.3" font-family="Times,serif" font-size="14.00"> </text>
<polyline fill="none" stroke="black" points="1416.27,-1347.5 1546.27,-1347.5 "/>
<text text-anchor="start" x="1424.27" y="-1332.3" font-family="Times,serif" font-size="14.00">+ getPath(): String</text>
</g>
<!-- TestReservations&#45;&gt;getRepositoryConfig -->
<g id="edge22" class="edge">
<title>TestReservations&#45;&gt;getRepositoryConfig</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1390.23,-1595.47C1409.04,-1546.82 1443.92,-1456.6 1464.62,-1403.07"/>
<polygon fill="black" stroke="black" points="1468.31,-1393.52 1468.9,-1404.47 1466.51,-1398.19 1464.7,-1402.85 1464.7,-1402.85 1464.7,-1402.85 1466.51,-1398.19 1460.51,-1401.23 1468.31,-1393.52 1468.31,-1393.52"/>
<text text-anchor="middle" x="1438.27" y="-1505.8" font-family="Times,serif" font-size="14.00">uses</text>
</g>
</g>
</svg>