Files
reservationsystem/uml/classdiagram1.svg

317 lines
26 KiB
XML
Raw Normal View History

2025-09-30 23:11:46 -04:00
<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="2188pt" height="1090pt" viewBox="0.00 0.00 2188.25 1089.60">
<g id="graph0" class="graph" transform="translate(4,1085.5999755859375) scale(1)" data-name="ClassDiagram">
<polygon fill="white" stroke="none" points="-4,4 -4,-1085.6 2184.25,-1085.6 2184.25,4 -4,4" style=""/>
<!-- IReservation -->
<g id="node1" class="node" pointer-events="visible" data-name="IReservation">
<polygon fill="palegreen" stroke="black" points="96.96,-0.5 96.96,-150.9 309.04,-150.9 309.04,-0.5 96.96,-0.5" style=""/>
<text text-anchor="middle" x="203" y="-134.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">interface</text>
<text text-anchor="middle" x="203" y="-117.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">IReservation</text>
<polyline fill="none" stroke="black" points="96.96,-109.3 309.04,-109.3" style=""/>
<text text-anchor="start" x="104.96" y="-92.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ ReservationType(): String</text>
<text text-anchor="start" x="104.96" y="-75.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ checkValid(): boolean</text>
<text text-anchor="start" x="104.96" y="-59.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ calculatePrice(): float</text>
<text text-anchor="start" x="104.96" y="-42.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ getReservation_number(): String</text>
<text text-anchor="start" x="104.96" y="-25.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ getPhysical_address(): Address</text>
<text text-anchor="start" x="104.96" y="-8.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ getAccountNumber(): String</text>
</g>
<!-- Reservation -->
<g id="node2" class="node" pointer-events="visible" data-name="Reservation">
<polygon fill="lightyellow" stroke="black" points="507.57,-593.9 507.57,-629.9 590.43,-629.9 590.43,-593.9 507.57,-593.9" style=""/>
<text text-anchor="middle" x="549" y="-607.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">Reservation</text>
</g>
<!-- Reservation&#45;&gt;IReservation -->
<g id="edge1" class="edge" data-name="Reservation-&gt;IReservation">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M507.77,-605C425.81,-605 250.22,-605 250.22,-605 250.22,-605 250.22,-162.21 250.22,-162.21" style=""/>
<polygon fill="none" stroke="black" points="253.72,-162.21 250.22,-152.21 246.72,-162.21 253.72,-162.21" style=""/>
<text text-anchor="middle" x="178.66" y="-368.8" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">implements</text>
</g>
<!-- DataRepository -->
<g id="node4" class="node" pointer-events="visible" data-name="DataRepository">
<polygon fill="orchid" stroke="black" points="932.07,-269.9 932.07,-305.9 1035.93,-305.9 1035.93,-269.9 932.07,-269.9" style=""/>
<text text-anchor="middle" x="984" y="-283.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">DataRepository</text>
</g>
<!-- Reservation&#45;&gt;DataRepository -->
<g id="edge24" class="edge" data-name="Reservation-&gt;DataRepository">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M590.17,-605C696.93,-605 974.38,-605 974.38,-605 974.38,-605 974.38,-315.86 974.38,-315.86" style=""/>
<polygon fill="black" stroke="black" points="974.38,-305.86 978.88,-315.86 974.38,-310.86 974.38,-315.86 974.38,-315.86 974.38,-315.86 974.38,-310.86 969.88,-315.86 974.38,-305.86 974.38,-305.86" style=""/>
<text text-anchor="middle" x="830.31" y="-441.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">uses for Write()</text>
</g>
<!-- Address -->
<g id="node13" class="node" pointer-events="visible" data-name="Address">
<polygon fill="lightblue" stroke="black" points="428.74,-263.1 428.74,-312.7 669.26,-312.7 669.26,-263.1 428.74,-263.1" style=""/>
<text text-anchor="middle" x="549" y="-296.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">Address</text>
<polyline fill="none" stroke="black" points="428.74,-287.9 669.26,-287.9" style=""/>
<text text-anchor="start" x="436.74" y="-271.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ Address(String, String, String, String)</text>
</g>
<!-- Reservation&#45;&gt;Address -->
<g id="edge11" class="edge" data-name="Reservation-&gt;Address">
<path fill="none" stroke="black" d="M562.81,-594.02C562.81,-594.02 562.81,-324.57 562.81,-324.57" style=""/>
<polygon fill="none" stroke="black" points="562.81,-324.57 558.81,-318.57 562.81,-312.57 566.81,-318.57 562.81,-324.57" style=""/>
<text text-anchor="middle" x="595.66" y="-441.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">physical/mailing</text>
</g>
<!-- ReservationStatusEnum -->
<g id="node15" class="node" pointer-events="visible" data-name="ReservationStatusEnum">
<polygon fill="lightgray" stroke="black" points="254.73,-424.9 254.73,-466.5 405.27,-466.5 405.27,-424.9 254.73,-424.9" style=""/>
<text text-anchor="middle" x="330" y="-449.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">enum</text>
<text text-anchor="middle" x="330" y="-433.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">ReservationStatusEnum</text>
</g>
<!-- Reservation&#45;&gt;ReservationStatusEnum -->
<g id="edge25" class="edge" data-name="Reservation-&gt;ReservationStatusEnum">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M535.19,-594.19C535.19,-549.19 535.19,-434 535.19,-434 535.19,-434 415.24,-434 415.24,-434" style=""/>
<polygon fill="black" stroke="black" points="405.24,-434 415.24,-429.5 410.24,-434 415.24,-434 415.24,-434 415.24,-434 410.24,-434 415.24,-438.5 405.24,-434 405.24,-434" style=""/>
<text text-anchor="middle" x="342.06" y="-514.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">uses</text>
</g>
<!-- AccomodationManager -->
<g id="node3" class="node" pointer-events="visible" data-name="AccomodationManager">
<polygon fill="lightyellow" stroke="black" points="1010.14,-757.3 1010.14,-941.3 1345.86,-941.3 1345.86,-757.3 1010.14,-757.3" style=""/>
<text text-anchor="middle" x="1178" y="-924.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">AccomodationManager</text>
<polyline fill="none" stroke="black" points="1010.14,-916.5 1345.86,-916.5" style=""/>
<text text-anchor="start" x="1018.14" y="-899.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ AccomodationManager(String)</text>
<text text-anchor="start" x="1018.14" y="-883.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ loadAll(): void</text>
<text text-anchor="start" x="1018.14" y="-866.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ retrieveAccount(String): Account</text>
<text text-anchor="start" x="1018.14" y="-849.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ retrieveLoadedAccounts(): AccountList</text>
<text text-anchor="start" x="1018.14" y="-832.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ newAccount(String, Address, EmailAddress): Account</text>
<text text-anchor="start" x="1018.14" y="-815.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ AddAccount(Account): void</text>
<text text-anchor="start" x="1018.14" y="-799.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ UpdateAccount(Account): void</text>
<text text-anchor="start" x="1018.14" y="-782.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ addReservation(Account, Reservation): boolean</text>
<text text-anchor="start" x="1018.14" y="-765.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ showReservationList(): void</text>
</g>
<!-- AccomodationManager&#45;&gt;DataRepository -->
<g id="edge21" class="edge" data-name="AccomodationManager-&gt;DataRepository">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1018.74,-757.54C1018.74,-757.54 1018.74,-315.5 1018.74,-315.5" style=""/>
<polygon fill="black" stroke="black" points="1018.74,-305.5 1023.24,-315.5 1018.74,-310.5 1018.74,-315.5 1018.74,-315.5 1018.74,-315.5 1018.74,-310.5 1014.24,-315.5 1018.74,-305.5 1018.74,-305.5" style=""/>
<text text-anchor="middle" x="996.06" y="-514.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">uses</text>
</g>
<!-- Account -->
<g id="node5" class="node" pointer-events="visible" data-name="Account">
<polygon fill="lightyellow" stroke="black" points="1332.29,-427.7 1332.29,-463.7 1395.71,-463.7 1395.71,-427.7 1332.29,-427.7" style=""/>
<text text-anchor="middle" x="1364" y="-441.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">Account</text>
</g>
<!-- AccomodationManager&#45;&gt;Account -->
<g id="edge22" class="edge" data-name="AccomodationManager-&gt;Account">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1243.44,-757.58C1243.44,-641.37 1243.44,-456 1243.44,-456 1243.44,-456 1322.32,-456 1322.32,-456" style=""/>
<polygon fill="black" stroke="black" points="1332.32,-456 1322.32,-460.5 1327.32,-456 1322.32,-456 1322.32,-456 1322.32,-456 1327.32,-456 1322.32,-451.5 1332.32,-456 1332.32,-456" style=""/>
<text text-anchor="middle" x="1189.49" y="-607.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">manages</text>
</g>
<!-- AccountList -->
<g id="node6" class="node" pointer-events="visible" data-name="AccountList">
<polygon fill="lightyellow" stroke="black" points="1285.97,-570.3 1285.97,-653.5 1442.03,-653.5 1442.03,-570.3 1285.97,-570.3" style=""/>
<text text-anchor="middle" x="1364" y="-636.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">AccountList</text>
<polyline fill="none" stroke="black" points="1285.97,-628.7 1442.03,-628.7" style=""/>
<text text-anchor="start" x="1293.97" y="-612.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ add(Account): boolean</text>
<text text-anchor="start" x="1293.97" y="-595.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ find(String): Account</text>
<text text-anchor="start" x="1293.97" y="-578.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ save(Account): void</text>
</g>
<!-- AccomodationManager&#45;&gt;AccountList -->
<g id="edge5" class="edge" data-name="AccomodationManager-&gt;AccountList">
<path fill="none" stroke="black" d="M1315.91,-757.51C1315.91,-757.51 1315.91,-665.24 1315.91,-665.24" style=""/>
<polygon fill="black" stroke="black" points="1315.91,-665.24 1311.91,-659.24 1315.91,-653.24 1319.91,-659.24 1315.91,-665.24" style=""/>
<text text-anchor="middle" x="1353.19" y="-701.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">has a</text>
</g>
<!-- Account&#45;&gt;DataRepository -->
<g id="edge23" class="edge" data-name="Account-&gt;DataRepository">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1332.33,-442C1248.52,-442 1027.34,-442 1027.34,-442 1027.34,-442 1027.34,-315.88 1027.34,-315.88" style=""/>
<polygon fill="black" stroke="black" points="1027.34,-305.88 1031.84,-315.88 1027.34,-310.88 1027.34,-315.88 1027.34,-315.88 1027.34,-315.88 1027.34,-310.88 1022.84,-315.88 1027.34,-305.88 1027.34,-305.88" style=""/>
<text text-anchor="middle" x="1262.31" y="-368.8" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">uses for Write()</text>
</g>
<!-- AccountReservationList -->
<g id="node7" class="node" pointer-events="visible" data-name="AccountReservationList">
<polygon fill="lightyellow" stroke="black" points="1200.91,-254.7 1200.91,-321.1 1381.09,-321.1 1381.09,-254.7 1200.91,-254.7" style=""/>
<text text-anchor="middle" x="1291" y="-304.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">AccountReservationList</text>
<polyline fill="none" stroke="black" points="1200.91,-296.3 1381.09,-296.3" style=""/>
<text text-anchor="start" x="1208.91" y="-279.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ add(IReservation): boolean</text>
<text text-anchor="start" x="1208.91" y="-262.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ find(String): Reservation</text>
</g>
<!-- Account&#45;&gt;AccountReservationList -->
<g id="edge7" class="edge" data-name="Account-&gt;AccountReservationList">
<path fill="none" stroke="black" d="M1356.69,-427.91C1356.69,-427.91 1356.69,-333.01 1356.69,-333.01" style=""/>
<polygon fill="black" stroke="black" points="1356.69,-333.01 1352.69,-327.01 1356.69,-321.01 1360.69,-327.01 1356.69,-333.01" style=""/>
<text text-anchor="middle" x="1398.19" y="-368.8" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">has a</text>
</g>
<!-- Account&#45;&gt;Address -->
<g id="edge9" class="edge" data-name="Account-&gt;Address">
<path fill="none" stroke="black" d="M1332.45,-449C1191.93,-449 629.85,-449 629.85,-449 629.85,-449 629.85,-324.37 629.85,-324.37" style=""/>
<polygon fill="none" stroke="black" points="629.85,-324.37 625.85,-318.37 629.85,-312.37 633.85,-318.37 629.85,-324.37" style=""/>
<text text-anchor="middle" x="1119.39" y="-368.8" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">mailing</text>
</g>
<!-- EmailAddress -->
<g id="node14" class="node" pointer-events="visible" data-name="EmailAddress">
<polygon fill="lightblue" stroke="black" points="1698.87,-263.1 1698.87,-312.7 1849.13,-312.7 1849.13,-263.1 1698.87,-263.1" style=""/>
<text text-anchor="middle" x="1774" y="-296.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">EmailAddress</text>
<polyline fill="none" stroke="black" points="1698.87,-287.9 1849.13,-287.9" style=""/>
<text text-anchor="start" x="1706.87" y="-271.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ EmailAddress(String)</text>
</g>
<!-- Account&#45;&gt;EmailAddress -->
<g id="edge10" class="edge" data-name="Account-&gt;EmailAddress">
<path fill="none" stroke="black" d="M1388.4,-427.8C1388.4,-386.3 1388.4,-287 1388.4,-287 1388.4,-287 1687.2,-287 1687.2,-287" style=""/>
<polygon fill="none" stroke="black" points="1687.2,-287 1693.2,-283 1699.2,-287 1693.2,-291 1687.2,-287" style=""/>
</g>
<!-- AccountList&#45;&gt;Account -->
<g id="edge6" class="edge" data-name="AccountList-&gt;Account">
<path fill="none" stroke="black" d="M1364,-570.39C1364,-570.39 1364,-475.41 1364,-475.41" style=""/>
<polygon fill="none" stroke="black" points="1364,-475.41 1360,-469.41 1364,-463.41 1368,-469.41 1364,-475.41" style=""/>
<text text-anchor="middle" x="1374.5" y="-514.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">0..*</text>
</g>
<!-- AccountReservationList&#45;&gt;IReservation -->
<g id="edge8" class="edge" data-name="AccountReservationList-&gt;IReservation">
<path fill="none" stroke="black" d="M1201,-258C953.67,-258 281.88,-258 281.88,-258 281.88,-258 281.88,-162.64 281.88,-162.64" style=""/>
<polygon fill="black" stroke="black" points="281.88,-162.64 277.88,-156.64 281.88,-150.64 285.88,-156.64 281.88,-162.64" style=""/>
<text text-anchor="middle" x="785.5" y="-198.6" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">0..*</text>
</g>
<!-- HotelReservation -->
<g id="node8" class="node" pointer-events="visible" data-name="HotelReservation">
<polygon fill="lightyellow" stroke="black" points="245.71,-816.1 245.71,-882.5 426.29,-882.5 426.29,-816.1 245.71,-816.1" style=""/>
<text text-anchor="middle" x="336" y="-865.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">HotelReservation</text>
<polyline fill="none" stroke="black" points="245.71,-857.7 426.29,-857.7" style=""/>
<text text-anchor="start" x="253.71" y="-841.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ HotelReservation(Address)</text>
<text text-anchor="start" x="253.71" y="-824.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ calculatePrice(): float</text>
</g>
<!-- HotelReservation&#45;&gt;Reservation -->
<g id="edge2" class="edge" data-name="HotelReservation-&gt;Reservation">
<path fill="none" stroke="black" d="M415.78,-816.16C415.78,-752.2 415.78,-618 415.78,-618 415.78,-618 496.06,-618 496.06,-618" style=""/>
<polygon fill="none" stroke="black" points="496.06,-621.5 506.06,-618 496.06,-614.5 496.06,-621.5" style=""/>
<text text-anchor="middle" x="413.38" y="-701.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">extends</text>
</g>
<!-- CabinReservation -->
<g id="node9" class="node" pointer-events="visible" data-name="CabinReservation">
<polygon fill="lightyellow" stroke="black" points="498.54,-816.1 498.54,-882.5 681.46,-882.5 681.46,-816.1 498.54,-816.1" style=""/>
<text text-anchor="middle" x="590" y="-865.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">CabinReservation</text>
<polyline fill="none" stroke="black" points="498.54,-857.7 681.46,-857.7" style=""/>
<text text-anchor="start" x="506.54" y="-841.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ CabinReservation(Address)</text>
<text text-anchor="start" x="506.54" y="-824.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ calculatePrice(): float</text>
</g>
<!-- CabinReservation&#45;&gt;Reservation -->
<g id="edge3" class="edge" data-name="CabinReservation-&gt;Reservation">
<path fill="none" stroke="black" d="M549,-816.29C549,-816.29 549,-641.16 549,-641.16" style=""/>
<polygon fill="none" stroke="black" points="552.5,-641.16 549,-631.16 545.5,-641.16 552.5,-641.16" style=""/>
<text text-anchor="middle" x="590.38" y="-701.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">extends</text>
</g>
<!-- HouseReservation -->
<g id="node10" class="node" pointer-events="visible" data-name="HouseReservation">
<polygon fill="lightyellow" stroke="black" points="753.38,-816.1 753.38,-882.5 938.62,-882.5 938.62,-816.1 753.38,-816.1" style=""/>
<text text-anchor="middle" x="846" y="-865.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">HouseReservation</text>
<polyline fill="none" stroke="black" points="753.38,-857.7 938.62,-857.7" style=""/>
<text text-anchor="start" x="761.38" y="-841.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ HouseReservation(Address)</text>
<text text-anchor="start" x="761.38" y="-824.3" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">+ calculatePrice(): float</text>
</g>
<!-- HouseReservation&#45;&gt;Reservation -->
<g id="edge4" class="edge" data-name="HouseReservation-&gt;Reservation">
<path fill="none" stroke="black" d="M842.72,-816.16C842.72,-752.2 842.72,-618 842.72,-618 842.72,-618 601.66,-618 601.66,-618" style=""/>
<polygon fill="none" stroke="black" points="601.66,-614.5 591.66,-618 601.66,-621.5 601.66,-614.5" style=""/>
<text text-anchor="middle" x="779.38" y="-701.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">extends</text>
</g>
<!-- TestReservations -->
<g id="node11" class="node" pointer-events="visible" data-name="TestReservations">
<polygon fill="lightyellow" stroke="black" points="1121.79,-1045.1 1121.79,-1081.1 1234.21,-1081.1 1234.21,-1045.1 1121.79,-1045.1" style=""/>
<text text-anchor="middle" x="1178" y="-1058.9" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">TestReservations</text>
</g>
<!-- TestReservations&#45;&gt;AccomodationManager -->
<g id="edge12" class="edge" data-name="TestReservations-&gt;AccomodationManager">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1178,-1045.24C1178,-1045.24 1178,-951.14 1178,-951.14" style=""/>
<polygon fill="black" stroke="black" points="1178,-941.14 1182.5,-951.14 1178,-946.14 1178,-951.14 1178,-951.14 1178,-951.14 1178,-946.14 1173.5,-951.14 1178,-941.14 1178,-941.14" style=""/>
<text text-anchor="middle" x="1190.06" y="-989" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">uses</text>
</g>
<!-- TestReservations&#45;&gt;Account -->
<g id="edge17" class="edge" data-name="TestReservations-&gt;Account">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1233.9,-1052C1326.87,-1052 1503.18,-1052 1503.18,-1052 1503.18,-1052 1503.18,-445 1503.18,-445 1503.18,-445 1405.58,-445 1405.58,-445" style=""/>
<polygon fill="black" stroke="black" points="1395.58,-445 1405.58,-440.5 1400.58,-445 1405.58,-445 1405.58,-445 1405.58,-445 1400.58,-445 1405.58,-449.5 1395.58,-445 1395.58,-445" style=""/>
<text text-anchor="middle" x="1491.06" y="-701.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">uses</text>
</g>
<!-- TestReservations&#45;&gt;HotelReservation -->
<g id="edge14" class="edge" data-name="TestReservations-&gt;HotelReservation">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1122.1,-1074C934.04,-1074 336,-1074 336,-1074 336,-1074 336,-892.46 336,-892.46" style=""/>
<polygon fill="black" stroke="black" points="336,-882.46 340.5,-892.46 336,-887.46 336,-892.46 336,-892.46 336,-892.46 336,-887.46 331.5,-892.46 336,-882.46 336,-882.46" style=""/>
<text text-anchor="middle" x="417.43" y="-989" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">creates</text>
</g>
<!-- TestReservations&#45;&gt;CabinReservation -->
<g id="edge15" class="edge" data-name="TestReservations-&gt;CabinReservation">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1121.89,-1059C974.91,-1059 590,-1059 590,-1059 590,-1059 590,-892.07 590,-892.07" style=""/>
<polygon fill="black" stroke="black" points="590,-882.07 594.5,-892.07 590,-887.07 590,-892.07 590,-892.07 590,-892.07 590,-887.07 585.5,-892.07 590,-882.07 590,-882.07" style=""/>
<text text-anchor="middle" x="780.43" y="-989" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">creates</text>
</g>
<!-- TestReservations&#45;&gt;HouseReservation -->
<g id="edge16" class="edge" data-name="TestReservations-&gt;HouseReservation">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1122.06,-1052C1027.44,-1052 846,-1052 846,-1052 846,-1052 846,-892.32 846,-892.32" style=""/>
<polygon fill="black" stroke="black" points="846,-882.32 850.5,-892.32 846,-887.32 846,-892.32 846,-892.32 846,-892.32 846,-887.32 841.5,-892.32 846,-882.32 846,-882.32" style=""/>
<text text-anchor="middle" x="1019.43" y="-989" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">creates</text>
</g>
<!-- TestReservations.getRepositoryConfig -->
<g id="node12" class="node" pointer-events="visible" data-name="TestReservations.getRepositoryConfig">
<polygon fill="lightyellow" stroke="black" points="1564.32,-831.3 1564.32,-867.3 1797.68,-867.3 1797.68,-831.3 1564.32,-831.3" style=""/>
<text text-anchor="middle" x="1681" y="-845.1" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">TestReservations.getRepositoryConfig</text>
</g>
<!-- TestReservations&#45;&gt;TestReservations.getRepositoryConfig -->
<g id="edge13" class="edge" data-name="TestReservations-&gt;TestReservations.getRepositoryConfig">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1233.75,-1059C1364.71,-1059 1681,-1059 1681,-1059 1681,-1059 1681,-877.18 1681,-877.18" style=""/>
<polygon fill="black" stroke="black" points="1681,-867.18 1685.5,-877.18 1681,-872.18 1681,-877.18 1681,-877.18 1681,-877.18 1681,-872.18 1676.5,-877.18 1681,-867.18 1681,-867.18" style=""/>
<text text-anchor="middle" x="1693.06" y="-989" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">uses</text>
</g>
<!-- TestReservations&#45;&gt;Address -->
<g id="edge18" class="edge" data-name="TestReservations-&gt;Address">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1121.95,-1066C953.54,-1066 463.64,-1066 463.64,-1066 463.64,-1066 463.64,-322.47 463.64,-322.47" style=""/>
<polygon fill="black" stroke="black" points="463.64,-312.47 468.14,-322.47 463.64,-317.47 463.64,-322.47 463.64,-322.47 463.64,-322.47 463.64,-317.47 459.14,-322.47 463.64,-312.47 463.64,-312.47" style=""/>
<text text-anchor="middle" x="19.43" y="-607.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">creates</text>
</g>
<!-- TestReservations&#45;&gt;EmailAddress -->
<g id="edge19" class="edge" data-name="TestReservations-&gt;EmailAddress">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1234.15,-1066C1391.17,-1066 1823.41,-1066 1823.41,-1066 1823.41,-1066 1823.41,-322.47 1823.41,-322.47" style=""/>
<polygon fill="black" stroke="black" points="1823.41,-312.47 1827.91,-322.47 1823.41,-317.47 1823.41,-322.47 1823.41,-322.47 1823.41,-322.47 1823.41,-317.47 1818.91,-322.47 1823.41,-312.47 1823.41,-312.47" style=""/>
<text text-anchor="middle" x="1926.43" y="-607.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">creates</text>
</g>
<!-- DuplicateObjectException -->
<g id="node16" class="node" pointer-events="visible" data-name="DuplicateObjectException">
<polygon fill="lightpink" stroke="black" points="2015.75,-828.5 2015.75,-870.1 2180.25,-870.1 2180.25,-828.5 2015.75,-828.5" style=""/>
<text text-anchor="middle" x="2098" y="-853.5" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">exception</text>
<text text-anchor="middle" x="2098" y="-836.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">DuplicateObjectException</text>
</g>
<!-- TestReservations&#45;&gt;DuplicateObjectException -->
<g id="edge20" class="edge" data-name="TestReservations-&gt;DuplicateObjectException">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1234.17,-1074C1433.91,-1074 2098,-1074 2098,-1074 2098,-1074 2098,-880.04 2098,-880.04" style=""/>
<polygon fill="black" stroke="black" points="2098,-870.04 2102.5,-880.04 2098,-875.04 2098,-880.04 2098,-880.04 2098,-880.04 2098,-875.04 2093.5,-880.04 2098,-870.04 2098,-870.04" style=""/>
<text text-anchor="middle" x="2118.6" y="-989" font-family="Helvetica,Arial,sans-serif" font-size="14.00" style="">catches</text>
</g>
</g>
</svg>