update uml

This commit is contained in:
2025-10-29 13:14:10 -04:00
parent 88b520d756
commit 1a4014c503
4 changed files with 421 additions and 472 deletions

View File

@@ -5,4 +5,20 @@ Associations: Shows composition relationships (Customer has Address, Transaction
Enumerations: InventoryType and TransactionOperationEnum
Exceptions: four application exception classes extend RuntimeException
Manager Classes: Singleton pattern managers with their collections
Collections: Custom list classes extending ArrayList
Collections: Custom list classes extending ArrayList
Abstract base class (InventoryPiece) with 4 concrete implementations (Drawing, Painting, Print, Sculpture)
Enumerations (InventoryType, TransactionOperationEnum)
Manager classes (Singleton pattern): InventoryManager, CustomerManager, TransactionManager
Model classes: Customer, Address, Transaction
Collection classes: InventoryList, CustomerList, TransactionList
Repository: DataRepository for persistence
Exception classes: 4 custom runtime exceptions
Relationships shown:
Inheritance (empty arrow heads)
Composition (diamond arrow heads)
Associations (open arrow heads)
Dependencies (dashed lines)

View File

@@ -1,91 +1,90 @@
digraph InventoryManagementSystem {
rankdir=TB;
node [shape=record, fontname="Arial", fontsize=10];
edge [fontname="Arial", fontsize=9];
node [shape=record, fontname=Arial, fontsize=10];
edge [fontname=Arial, fontsize=9];
// Core Model Classes
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+ hashCode(): int\l+ equals(Object): boolean\l+ toString(): String\l}"];
// Abstract and Base Classes
InventoryPiece [label="{InventoryPiece\n(abstract)|+ id: String\n+ price: float\n+ created: ZonedDateTime\n+ title: String\n+ description: String\n+ Author: String\n- iventoryType: InventoryType|+ getId(): String\n+ setId(String): void\n+ getPrice(): float\n+ setPrice(float): void\n+ getCreated(): ZonedDateTime\n+ setCreated(ZonedDateTime): void\n+ getTitle(): String\n+ setTitle(String): void\n+ getDescription(): String\n+ setDescription(String): void\n+ getAuthor(): String\n+ setAuthor(String): void\n+ isArt(InventoryPiece): Boolean\n+ getType(): String}", style=filled, fillcolor=lightblue];
Customer [label="{Customer|# id: String\l# updated: ZonedDateTime\l- phone: String\l- mailing: Address\l- email: String\l- nameFirst: String\l- nameLast: String\l|+ Customer()\l+ Customer(String, String, String, String)\l+ getId(): String\l+ setId(String): void\l+ getPhone(): String\l+ setPhone(String): void\l+ getMailing(): Address\l+ setMailing(Address): void\l+ getEmail(): String\l+ setEmail(String): void\l+ getNameFirst(): String\l+ setNameFirst(String): void\l+ getNameLast(): String\l+ setNameLast(String): void\l}"];
InventoryPiece [label="{«abstract»\lInventoryPiece|+ id: String\l+ price: float\l+ created: ZonedDateTime\l+ title: String\l+ description: String\l+ Author: String\l- iventoryType: InventoryType\l|+ InventoryPiece()\l+ InventoryPiece(InventoryType)\l+ isArt(InventoryPiece): Boolean\l+ getType(): String\l+ getId(): String\l+ setId(String): void\l+ getPrice(): float\l+ setPrice(float): void\l+ getCreated(): ZonedDateTime\l+ setCreated(ZonedDateTime): void\l+ getTitle(): String\l+ setTitle(String): void\l+ getDescription(): String\l+ setDescription(String): void\l+ getAuthor(): String\l+ setAuthor(String): void\l}"];
Transaction [label="{Transaction|- id: String\l- created: ZonedDateTime\l- completed: ZonedDateTime\l- customerId: String\l- shipToAddress: Address\l- customerInventoryList: InventoryList\l- attributes: JsonArray\l|+ Transaction()\l+ getId(): String\l+ setId(String): void\l+ getCreated(): ZonedDateTime\l+ setCreated(ZonedDateTime): void\l+ getCompleted(): ZonedDateTime\l+ setCompleted(ZonedDateTime): void\l}"];
// Inventory Subclasses
Drawing [label="{Drawing|+ style: String\l+ technique: String\l+ category: String\l|+ Drawing()\l}"];
Painting [label="{Painting|- height: int\l- width: int\l- style: String\l- technique: String\l- category: String\l|+ Painting()\l}"];
Print [label="{Print|- openEditionType: String\l- category: String\l|+ Print()\l+ Print(String, String)\l+ getOpenEditionType(): String\l+ setOpenEditionType(String): void\l+ getCategory(): String\l+ setCategory(String): void\l}"];
Sculpture [label="{Sculpture|- material: String\l- weight: float\l|+ Sculpture()\l}"];
// Concrete Inventory Classes
Drawing [label="{Drawing|+ style: String\n+ technique: String\n+ category: String|+ Drawing()}", style=filled, fillcolor=lightgreen];
Painting [label="{Painting|+ height: int\n+ width: int\n+ style: String\n+ technique: String\n+ category: String|+ Painting()}", style=filled, fillcolor=lightgreen];
Print [label="{Print|+ openEditionType: String\n+ category: String|+ Print()\n+ Print(String, String)\n+ getOpenEditionType(): String\n+ setOpenEditionType(String): void\n+ getCategory(): String\n+ setCategory(String): void}", style=filled, fillcolor=lightgreen];
Sculpture [label="{Sculpture|+ material: String\n+ weight: float|+ Sculpture()}", style=filled, fillcolor=lightgreen];
// Enums
InventoryType [label="{«enumeration»\lInventoryType|PAINTING\lDRAWING\lPRINT\lSCULPTURE\l}"];
InventoryType [label="{\\<\\<enumeration\\>\\>\nInventoryType|PAINTING\nDRAWING\nPRINT\nSCULPTURE}", style=filled, fillcolor=lightyellow];
TransactionOperationEnum [label="{\\<\\<enumeration\\>\\>\nTransactionOperationEnum|Completed\nDraft\nPricing\nRemoved\nShipping}", style=filled, fillcolor=lightyellow];
TransactionOperationEnum [label="{«enumeration»\lTransactionOperationEnum|Completed\lDraft\lPricing\lRemoved\lShipping\l}"];
// Customer Related Classes
Customer [label="{Customer|# id: String\n# updated: ZonedDateTime\n- phone: String\n- mailing: Address\n- email: String\n- nameFirst: String\n- nameLast: String|+ Customer()\n+ Customer(String, String, String, String)\n+ getEmail(): String\n+ getId(): String\n+ setId(String): void\n+ getPhone(): String\n+ setPhone(String): void\n+ getMailing(): Address\n+ setMailing(Address): void\n+ setEmail(String): void\n+ getNameFirst(): String\n+ setNameFirst(String): void\n+ getNameLast(): String\n+ setNameLast(String): void}", style=filled, fillcolor=lightcyan];
// Collections
CustomerList [label="{CustomerList|+ CustomerList()\l}"];
InventoryList [label="{InventoryList|+ InventoryList()\l}"];
TransactionList [label="{TransactionList|+ TransactionList()\l+ add(Transaction): boolean\l}"];
Address [label="{Address|- street: String\n- city: String\n- state: String\n- zip: String|+ Address()\n+ Address(String, String, String, String)\n+ getStreet(): String\n+ setStreet(String): void\n+ getCity(): String\n+ setCity(String): void\n+ getState(): String\n+ setState(String): void\n+ getZip(): String\n+ setZip(String): void\n+ hashCode(): int\n+ equals(Object): boolean\n+ toString(): String}", style=filled, fillcolor=white];
// Managers
CustomerManager [label="{CustomerManager|- INSTANCE: CustomerManager\l+ CUSTOMERS: CustomerList\l|+ getInstance(): CustomerManager\l+ add(Customer): boolean\l- check(Customer): void\l+ findById(String): Customer\l+ findByEmail(String): Customer\l}"];
// Transaction
Transaction [label="{Transaction|- id: String\n- created: ZonedDateTime\n- completed: ZonedDateTime\n- customerId: String\n- shipToAddress: Address\n- customerInventoryList: InventoryList\n- attributes: JsonArray|+ Transaction()\n+ getId(): String\n+ setId(String): void\n+ getCreated(): ZonedDateTime\n+ setCreated(ZonedDateTime): void\n+ getCompleted(): ZonedDateTime\n+ setCompleted(ZonedDateTime): void}", style=filled, fillcolor=lightcyan];
InventoryManager [label="{InventoryManager|- INSTANCE: InventoryManager\l+ INVENTORY: InventoryList\l|+ getInstance(): InventoryManager\l+ getArtPieceTypes(): Set\l+ add(InventoryPiece): void\l+ find(String): InventoryPiece\l+ update(InventoryPiece): InventoryPiece\l+ save(): void\l+ loadAll(): void\l+ Remove(InventoryPiece): void\l}"];
// List Classes (Collections)
InventoryList [label="{InventoryList|\\<extends ArrayList\\<InventoryPiece\\>\\>|+ InventoryList()}", style=filled, fillcolor=wheat];
CustomerList [label="{CustomerList|\\<extends ArrayList\\<Customer\\>\\>|+ CustomerList()}", style=filled, fillcolor=wheat];
TransactionList [label="{TransactionList|\\<extends ArrayList\\<Transaction\\>\\>|+ TransactionList()\n+ add(Transaction): boolean}", style=filled, fillcolor=wheat];
TransactionManager [label="{TransactionManager|- INSTANCE: TransactionManager\l+ TRANSACTIONS: TransactionList\l|+ getInstance(): TransactionManager\l+ TransactRequest(Customer, InventoryList, Transaction): Transaction\l+ compute(Transaction, TransactionOperationEnum): void\l+ compute(Transaction): void\l+ complete(Transaction): void\l+ findByCustomerEmail(String): TransactionList\l+ findByTransactionId(String): TransactionList\l+ findByTransactionDate(ZonedDateTime): TransactionList\l+ remove(Transaction): void\l+ save(): void\l}"];
// Manager Classes (Singletons)
InventoryManager [label="{InventoryManager|+ INVENTORY: InventoryList\n- INSTANCE: InventoryManager|+ getInstance(): InventoryManager\n+ getArtPieceTypes(): Set\\<InventoryType\\>\n+ add(InventoryPiece): void\n+ find(String): InventoryPiece\n+ update(InventoryPiece): InventoryPiece\n+ save(): void\n+ loadAll(): void\n+ Remove(InventoryPiece): void}", style=filled, fillcolor=lightpink];
CustomerManager [label="{CustomerManager|+ CUSTOMERS: CustomerList\n- INSTANCE: CustomerManager|+ getInstance(): CustomerManager\n+ add(Customer): boolean\n- check(Customer): void\n+ findById(String): Customer\n+ findByEmail(String): Customer}", style=filled, fillcolor=lightpink];
TransactionManager [label="{TransactionManager|+ TRANSACTIONS: TransactionList\n- INSTANCE: TransactionManager|+ getInstance(): TransactionManager\n+ TransactRequest(Customer, InventoryList, Transaction): Transaction\n+ compute(Transaction, TransactionOperationEnum): void\n+ compute(Transaction): void\n+ complete(Transaction): void\n+ findByCustomerEmail(String): TransactionList\n+ findByTransactionId(String): TransactionList\n+ findByTransactionDate(ZonedDateTime): TransactionList\n+ remove(Transaction): void\n+ save(): void}", style=filled, fillcolor=lightpink];
DataRepository [label="{DataRepository|- INSTANCE: DataRepository\l|+ getInstance(): DataRepository\l+ generateRandomID(int): String\l+ generateRandom10DigitID(): String\l+ WalkFileSystemTree(InventoryManager): void\l+ WalkFileSystemTree(CustomerManager): void\l+ WalkFileSystemTree(TransactionManager): void\l+ mapJsonToObjectList(String, Class): List\l}"];
// Repository
DataRepository [label="{DataRepository|+ INSTANCE: DataRepository|+ getInstance(): DataRepository\n+ generateRandomID(int): String\n+ generateRandom10DigitID(): String\n+ WalkFileSystemTree(InventoryManager): void\n+ WalkFileSystemTree(CustomerManager): void\n+ WalkFileSystemTree(TransactionManager): void\n- serialize_deserialize(): void\n+ mapJsonToObjectList(String, Class\\<T\\>): List\\<T\\>}", style=filled, fillcolor=orange];
// Exceptions
InvalidRecordDataException [label="{InvalidRecordDataException|+ InvalidRecordDataException(String)\l+ InvalidRecordDataException(String, Throwable)\l+ InvalidRecordDataException(Throwable)\l}"];
// Exception Classes
InvalidArtOperationException [label="{InvalidArtOperationException|\\<extends RuntimeException\\>|+ InvalidArtOperationException(String)\n+ InvalidArtOperationException(String, Throwable)\n+ InvalidArtOperationException(Throwable)}", style=filled, fillcolor=tomato];
InvalidRecordDataException [label="{InvalidRecordDataException|\\<extends RuntimeException\\>|+ InvalidRecordDataException(String)\n+ InvalidRecordDataException(String, Throwable)\n+ InvalidRecordDataException(Throwable)}", style=filled, fillcolor=tomato];
InvalidTransactionException [label="{InvalidTransactionException|\\<extends RuntimeException\\>|+ InvalidTransactionException(String)\n+ InvalidTransactionException(String, Throwable)\n+ InvalidTransactionException(Throwable)}", style=filled, fillcolor=tomato];
InvalidTransOperationException [label="{InvalidTransOperationException|\\<extends RuntimeException\\>|+ InvalidTransOperationException(String)\n+ InvalidTransOperationException(String, Throwable)\n+ InvalidTransOperationException(Throwable)}", style=filled, fillcolor=tomato];
InvalidArtOperationException [label="{InvalidArtOperationException|+ InvalidArtOperationException(String)\l+ InvalidArtOperationException(String, Throwable)\l+ InvalidArtOperationException(Throwable)\l}"];
InvalidTransactionException [label="{InvalidTransactionException|+ InvalidTransactionException(String)\l+ InvalidTransactionException(String, Throwable)\l+ InvalidTransactionException(Throwable)\l}"];
InvalidTransOperationException [label="{InvalidTransOperationException|+ InvalidTransOperationException(String)\l+ InvalidTransOperationException(String, Throwable)\l+ InvalidTransOperationException(Throwable)\l}"];
// Inheritance relationships
// Inheritance Relationships
Drawing -> InventoryPiece [arrowhead=empty, label="extends"];
Painting -> InventoryPiece [arrowhead=empty, label="extends"];
Print -> InventoryPiece [arrowhead=empty, label="extends"];
Sculpture -> InventoryPiece [arrowhead=empty, label="extends"];
CustomerList -> "ArrayList<Customer>" [arrowhead=empty, label="extends"];
InventoryList -> "ArrayList<InventoryPiece>" [arrowhead=empty, label="extends"];
TransactionList -> "ArrayList<Transaction>" [arrowhead=empty, label="extends"];
InvalidRecordDataException -> RuntimeException [arrowhead=empty, label="extends"];
InvalidArtOperationException -> RuntimeException [arrowhead=empty, label="extends"];
InvalidTransactionException -> RuntimeException [arrowhead=empty, label="extends"];
InvalidTransOperationException -> RuntimeException [arrowhead=empty, label="extends"];
// Associations
Customer -> Address [arrowhead=open, label="mailing"];
InventoryPiece -> InventoryType [arrowhead=open, style=dashed, label="uses"];
Customer -> Address [arrowhead=diamond, label="has"];
Transaction -> Address [arrowhead=open, label="shipToAddress"];
Transaction -> InventoryList [arrowhead=open, label="customerInventoryList"];
CustomerManager -> CustomerList [arrowhead=open, label="CUSTOMERS"];
InventoryManager -> InventoryList [arrowhead=open, label="INVENTORY"];
TransactionManager -> TransactionList [arrowhead=open, label="TRANSACTIONS"];
InventoryPiece -> InventoryType [arrowhead=open, label="iventoryType"];
// Dependencies
CustomerManager -> InvalidRecordDataException [style=dashed, arrowhead=open, label="throws"];
DataRepository -> InventoryManager [style=dashed, arrowhead=open];
DataRepository -> CustomerManager [style=dashed, arrowhead=open];
DataRepository -> TransactionManager [style=dashed, arrowhead=open];
TransactionManager -> Customer [style=dashed, arrowhead=open];
TransactionManager -> TransactionOperationEnum [style=dashed, arrowhead=open];
// Invisible nodes for layout
"ArrayList<Customer>" [shape=plaintext, label=""];
"ArrayList<InventoryPiece>" [shape=plaintext, label=""];
"ArrayList<Transaction>" [shape=plaintext, label=""];
RuntimeException [shape=plaintext, label=""];
}
// Manager to List relationships
InventoryManager -> InventoryList [arrowhead=diamond, label="INVENTORY"];
CustomerManager -> CustomerList [arrowhead=diamond, label="CUSTOMERS"];
TransactionManager -> TransactionList [arrowhead=diamond, label="TRANSACTIONS"];
// List contains relationships
InventoryList -> InventoryPiece [arrowhead=diamond, style=dashed, label="contains"];
CustomerList -> Customer [arrowhead=diamond, style=dashed, label="contains"];
TransactionList -> Transaction [arrowhead=diamond, style=dashed, label="contains"];
// Manager relationships
DataRepository -> InventoryManager [arrowhead=open, style=dashed, label="uses"];
DataRepository -> CustomerManager [arrowhead=open, style=dashed, label="uses"];
DataRepository -> TransactionManager [arrowhead=open, style=dashed, label="uses"];
TransactionManager -> TransactionOperationEnum [arrowhead=open, style=dashed, label="uses"];
CustomerManager -> InvalidRecordDataException [arrowhead=open, style=dashed, label="throws"];
// Transaction relationships
TransactionManager -> Customer [arrowhead=open, style=dashed, label="uses"];
TransactionManager -> InventoryList [arrowhead=open, style=dashed, label="uses"];
}

BIN
uml/classdiagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

View File

@@ -1,504 +1,438 @@
<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="2236pt" height="1112pt" viewBox="0.00 0.00 2235.82 1112.4">
<g id="graph0" class="graph" transform="translate(-341.9763189164946,1433.4115071391775) scale(1.7411011265922518)" data-name="InventoryManagementSystem">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1570pt" height="1510pt" viewBox="0.00 0.00 1569.81 1510.00">
<g id="graph0" class="graph" transform="translate(4,1506) scale(1)" data-name="InventoryManagementSystem">
<polygon fill="white" stroke="none" points="-4,4 -4,-1108.4 2231.82,-1108.4 2231.82,4 -4,4"/>
<!-- Address -->
<g id="node1" class="node" pointer-events="visible" data-name="Address">
<polygon fill="none" stroke="black" points="448.75,-0.5 448.75,-216.5 579.54,-216.5 579.54,-0.5 448.75,-0.5"/>
<text text-anchor="middle" x="514.14" y="-203.5" font-family="Arial" font-size="10.00">Address</text>
<polyline fill="none" stroke="black" points="448.75,-196.5 579.54,-196.5"/>
<text text-anchor="start" x="456.75" y="-183.5" font-family="Arial" font-size="10.00">+ street: String</text>
<text text-anchor="start" x="456.75" y="-171.5" font-family="Arial" font-size="10.00">+ city: String</text>
<text text-anchor="start" x="456.75" y="-159.5" font-family="Arial" font-size="10.00">+ state: String</text>
<text text-anchor="start" x="456.75" y="-147.5" font-family="Arial" font-size="10.00">+ zip: String</text>
<polyline fill="none" stroke="black" points="448.75,-140.5 579.54,-140.5"/>
<text text-anchor="start" x="456.75" y="-127.5" font-family="Arial" font-size="10.00">+ getStreet(): String</text>
<text text-anchor="start" x="456.75" y="-115.5" font-family="Arial" font-size="10.00">+ setStreet(String): void</text>
<text text-anchor="start" x="456.75" y="-103.5" font-family="Arial" font-size="10.00">+ getCity(): String</text>
<text text-anchor="start" x="456.75" y="-91.5" font-family="Arial" font-size="10.00">+ setCity(String): void</text>
<text text-anchor="start" x="456.75" y="-79.5" font-family="Arial" font-size="10.00">+ getState(): String</text>
<text text-anchor="start" x="456.75" y="-67.5" font-family="Arial" font-size="10.00">+ setState(String): void</text>
<text text-anchor="start" x="456.75" y="-55.5" font-family="Arial" font-size="10.00">+ getZip(): String</text>
<text text-anchor="start" x="456.75" y="-43.5" font-family="Arial" font-size="10.00">+ setZip(String): void</text>
<text text-anchor="start" x="456.75" y="-31.5" font-family="Arial" font-size="10.00">+ hashCode(): int</text>
<text text-anchor="start" x="456.75" y="-19.5" font-family="Arial" font-size="10.00">+ equals(Object): boolean</text>
<text text-anchor="start" x="456.75" y="-7.5" font-family="Arial" font-size="10.00">+ toString(): String</text>
</g>
<!-- Customer -->
<g id="node2" class="node" pointer-events="visible" data-name="Customer">
<polygon fill="none" stroke="black" points="316.25,-264.3 316.25,-552.3 512.04,-552.3 512.04,-264.3 316.25,-264.3"/>
<text text-anchor="middle" x="414.14" y="-539.3" font-family="Arial" font-size="10.00">Customer</text>
<polyline fill="none" stroke="black" points="316.25,-532.3 512.04,-532.3"/>
<text text-anchor="start" x="324.25" y="-519.3" font-family="Arial" font-size="10.00"># id: String</text>
<text text-anchor="start" x="324.25" y="-507.3" font-family="Arial" font-size="10.00"># updated: ZonedDateTime</text>
<text text-anchor="start" x="324.25" y="-495.3" font-family="Arial" font-size="10.00">- phone: String</text>
<text text-anchor="start" x="324.25" y="-483.3" font-family="Arial" font-size="10.00">- mailing: Address</text>
<text text-anchor="start" x="324.25" y="-471.3" font-family="Arial" font-size="10.00">- email: String</text>
<text text-anchor="start" x="324.25" y="-459.3" font-family="Arial" font-size="10.00">- nameFirst: String</text>
<text text-anchor="start" x="324.25" y="-447.3" font-family="Arial" font-size="10.00">- nameLast: String</text>
<polyline fill="none" stroke="black" points="316.25,-440.3 512.04,-440.3"/>
<text text-anchor="start" x="324.25" y="-427.3" font-family="Arial" font-size="10.00">+ Customer()</text>
<text text-anchor="start" x="324.25" y="-415.3" font-family="Arial" font-size="10.00">+ Customer(String, String, String, String)</text>
<text text-anchor="start" x="324.25" y="-403.3" font-family="Arial" font-size="10.00">+ getId(): String</text>
<text text-anchor="start" x="324.25" y="-391.3" font-family="Arial" font-size="10.00">+ setId(String): void</text>
<text text-anchor="start" x="324.25" y="-379.3" font-family="Arial" font-size="10.00">+ getPhone(): String</text>
<text text-anchor="start" x="324.25" y="-367.3" font-family="Arial" font-size="10.00">+ setPhone(String): void</text>
<text text-anchor="start" x="324.25" y="-355.3" font-family="Arial" font-size="10.00">+ getMailing(): Address</text>
<text text-anchor="start" x="324.25" y="-343.3" font-family="Arial" font-size="10.00">+ setMailing(Address): void</text>
<text text-anchor="start" x="324.25" y="-331.3" font-family="Arial" font-size="10.00">+ getEmail(): String</text>
<text text-anchor="start" x="324.25" y="-319.3" font-family="Arial" font-size="10.00">+ setEmail(String): void</text>
<text text-anchor="start" x="324.25" y="-307.3" font-family="Arial" font-size="10.00">+ getNameFirst(): String</text>
<text text-anchor="start" x="324.25" y="-295.3" font-family="Arial" font-size="10.00">+ setNameFirst(String): void</text>
<text text-anchor="start" x="324.25" y="-283.3" font-family="Arial" font-size="10.00">+ getNameLast(): String</text>
<text text-anchor="start" x="324.25" y="-271.3" font-family="Arial" font-size="10.00">+ setNameLast(String): void</text>
</g>
<!-- Customer&#45;&gt;Address -->
<g id="edge12" class="edge" data-name="Customer-&gt;Address">
<path fill="none" stroke="black" d="M462.09,-264.51C466.49,-251.41 470.91,-238.26 475.21,-225.44"/>
<polygon fill="black" stroke="black" points="478.32,-216.18 479.4,-227.09 476.73,-220.92 475.14,-225.66 475.14,-225.66 475.14,-225.66 476.73,-220.92 470.87,-224.23 478.32,-216.18 478.32,-216.18"/>
<text text-anchor="middle" x="484.4" y="-237.7" font-family="Arial" font-size="9.00">mailing</text>
</g>
<polygon fill="white" stroke="none" points="-4,4 -4,-1506 1565.81,-1506 1565.81,4 -4,4" style=""/>
<!-- InventoryPiece -->
<g id="node3" class="node" pointer-events="visible" data-name="InventoryPiece">
<g id="node1" class="node" pointer-events="visible" data-name="InventoryPiece">
<polygon fill="none" stroke="black" points="1870.25,-600.1 1870.25,-924.1 2046.04,-924.1 2046.04,-600.1 1870.25,-600.1"/>
<text text-anchor="start" x="1878.25" y="-911.1" font-family="Arial" font-size="10.00">«abstract»</text>
<text text-anchor="middle" x="1958.14" y="-899.1" font-family="Arial" font-size="10.00">InventoryPiece</text>
<polyline fill="none" stroke="black" points="1870.25,-892.1 2046.04,-892.1"/>
<text text-anchor="start" x="1878.25" y="-879.1" font-family="Arial" font-size="10.00">+ id: String</text>
<text text-anchor="start" x="1878.25" y="-867.1" font-family="Arial" font-size="10.00">+ price: float</text>
<text text-anchor="start" x="1878.25" y="-855.1" font-family="Arial" font-size="10.00">+ created: ZonedDateTime</text>
<text text-anchor="start" x="1878.25" y="-843.1" font-family="Arial" font-size="10.00">+ title: String</text>
<text text-anchor="start" x="1878.25" y="-831.1" font-family="Arial" font-size="10.00">+ description: String</text>
<text text-anchor="start" x="1878.25" y="-819.1" font-family="Arial" font-size="10.00">+ Author: String</text>
<text text-anchor="start" x="1878.25" y="-807.1" font-family="Arial" font-size="10.00">- iventoryType: InventoryType</text>
<polyline fill="none" stroke="black" points="1870.25,-800.1 2046.04,-800.1"/>
<text text-anchor="start" x="1878.25" y="-787.1" font-family="Arial" font-size="10.00">+ InventoryPiece()</text>
<text text-anchor="start" x="1878.25" y="-775.1" font-family="Arial" font-size="10.00">+ InventoryPiece(InventoryType)</text>
<text text-anchor="start" x="1878.25" y="-763.1" font-family="Arial" font-size="10.00">+ isArt(InventoryPiece): Boolean</text>
<text text-anchor="start" x="1878.25" y="-751.1" font-family="Arial" font-size="10.00">+ getType(): String</text>
<text text-anchor="start" x="1878.25" y="-739.1" font-family="Arial" font-size="10.00">+ getId(): String</text>
<text text-anchor="start" x="1878.25" y="-727.1" font-family="Arial" font-size="10.00">+ setId(String): void</text>
<text text-anchor="start" x="1878.25" y="-715.1" font-family="Arial" font-size="10.00">+ getPrice(): float</text>
<text text-anchor="start" x="1878.25" y="-703.1" font-family="Arial" font-size="10.00">+ setPrice(float): void</text>
<text text-anchor="start" x="1878.25" y="-691.1" font-family="Arial" font-size="10.00">+ getCreated(): ZonedDateTime</text>
<text text-anchor="start" x="1878.25" y="-679.1" font-family="Arial" font-size="10.00">+ setCreated(ZonedDateTime): void</text>
<text text-anchor="start" x="1878.25" y="-667.1" font-family="Arial" font-size="10.00">+ getTitle(): String</text>
<text text-anchor="start" x="1878.25" y="-655.1" font-family="Arial" font-size="10.00">+ setTitle(String): void</text>
<text text-anchor="start" x="1878.25" y="-643.1" font-family="Arial" font-size="10.00">+ getDescription(): String</text>
<text text-anchor="start" x="1878.25" y="-631.1" font-family="Arial" font-size="10.00">+ setDescription(String): void</text>
<text text-anchor="start" x="1878.25" y="-619.1" font-family="Arial" font-size="10.00">+ getAuthor(): String</text>
<text text-anchor="start" x="1878.25" y="-607.1" font-family="Arial" font-size="10.00">+ setAuthor(String): void</text>
<polygon fill="lightblue" stroke="black" points="233.94,-84.3 233.94,-384.3 409.73,-384.3 409.73,-84.3 233.94,-84.3" style=""/>
<text text-anchor="middle" x="321.83" y="-371.3" font-family="Arial" font-size="10.00" style="">InventoryPiece</text>
<text text-anchor="middle" x="321.83" y="-359.3" font-family="Arial" font-size="10.00" style="">(abstract)</text>
<polyline fill="none" stroke="black" points="233.94,-352.3 409.73,-352.3" style=""/>
<text text-anchor="middle" x="321.83" y="-339.3" font-family="Arial" font-size="10.00" style="">+ id: String</text>
<text text-anchor="middle" x="321.83" y="-327.3" font-family="Arial" font-size="10.00" style="">+ price: float</text>
<text text-anchor="middle" x="321.83" y="-315.3" font-family="Arial" font-size="10.00" style="">+ created: ZonedDateTime</text>
<text text-anchor="middle" x="321.83" y="-303.3" font-family="Arial" font-size="10.00" style="">+ title: String</text>
<text text-anchor="middle" x="321.83" y="-291.3" font-family="Arial" font-size="10.00" style="">+ description: String</text>
<text text-anchor="middle" x="321.83" y="-279.3" font-family="Arial" font-size="10.00" style="">+ Author: String</text>
<text text-anchor="middle" x="321.83" y="-267.3" font-family="Arial" font-size="10.00" style="">- iventoryType: InventoryType</text>
<polyline fill="none" stroke="black" points="233.94,-260.3 409.73,-260.3" style=""/>
<text text-anchor="middle" x="321.83" y="-247.3" font-family="Arial" font-size="10.00" style="">+ getId(): String</text>
<text text-anchor="middle" x="321.83" y="-235.3" font-family="Arial" font-size="10.00" style="">+ setId(String): void</text>
<text text-anchor="middle" x="321.83" y="-223.3" font-family="Arial" font-size="10.00" style="">+ getPrice(): float</text>
<text text-anchor="middle" x="321.83" y="-211.3" font-family="Arial" font-size="10.00" style="">+ setPrice(float): void</text>
<text text-anchor="middle" x="321.83" y="-199.3" font-family="Arial" font-size="10.00" style="">+ getCreated(): ZonedDateTime</text>
<text text-anchor="middle" x="321.83" y="-187.3" font-family="Arial" font-size="10.00" style="">+ setCreated(ZonedDateTime): void</text>
<text text-anchor="middle" x="321.83" y="-175.3" font-family="Arial" font-size="10.00" style="">+ getTitle(): String</text>
<text text-anchor="middle" x="321.83" y="-163.3" font-family="Arial" font-size="10.00" style="">+ setTitle(String): void</text>
<text text-anchor="middle" x="321.83" y="-151.3" font-family="Arial" font-size="10.00" style="">+ getDescription(): String</text>
<text text-anchor="middle" x="321.83" y="-139.3" font-family="Arial" font-size="10.00" style="">+ setDescription(String): void</text>
<text text-anchor="middle" x="321.83" y="-127.3" font-family="Arial" font-size="10.00" style="">+ getAuthor(): String</text>
<text text-anchor="middle" x="321.83" y="-115.3" font-family="Arial" font-size="10.00" style="">+ setAuthor(String): void</text>
<text text-anchor="middle" x="321.83" y="-103.3" font-family="Arial" font-size="10.00" style="">+ isArt(InventoryPiece): Boolean</text>
<text text-anchor="middle" x="321.83" y="-91.3" font-family="Arial" font-size="10.00" style="">+ getType(): String</text>
</g>
<!-- InventoryType -->
<g id="node9" class="node" pointer-events="visible" data-name="InventoryType">
<g id="node6" class="node" pointer-events="visible" data-name="InventoryType">
<polygon fill="none" stroke="black" points="1916.79,-364.3 1916.79,-452.3 1999.49,-452.3 1999.49,-364.3 1916.79,-364.3"/>
<text text-anchor="start" x="1924.79" y="-439.3" font-family="Arial" font-size="10.00">«enumeration»</text>
<text text-anchor="middle" x="1958.14" y="-427.3" font-family="Arial" font-size="10.00">InventoryType</text>
<polyline fill="none" stroke="black" points="1916.79,-420.3 1999.49,-420.3"/>
<text text-anchor="start" x="1924.79" y="-407.3" font-family="Arial" font-size="10.00">PAINTING</text>
<text text-anchor="start" x="1924.79" y="-395.3" font-family="Arial" font-size="10.00">DRAWING</text>
<text text-anchor="start" x="1924.79" y="-383.3" font-family="Arial" font-size="10.00">PRINT</text>
<text text-anchor="start" x="1924.79" y="-371.3" font-family="Arial" font-size="10.00">SCULPTURE</text>
<polygon fill="lightyellow" stroke="black" points="282.15,-0.5 282.15,-36.5 361.52,-36.5 361.52,-0.5 282.15,-0.5" style=""/>
<text text-anchor="middle" x="321.83" y="-15.5" font-family="Arial" font-size="10.00" style="">InventoryType</text>
</g>
<!-- InventoryPiece&#45;&gt;InventoryType -->
<g id="edge18" class="edge" data-name="InventoryPiece-&gt;InventoryType">
<g id="edge5" class="edge" data-name="InventoryPiece-&gt;InventoryType">
<path fill="none" stroke="black" d="M1958.14,-600.13C1958.14,-550.14 1958.14,-498.53 1958.14,-461.6"/>
<polygon fill="black" stroke="black" points="1958.14,-452.07 1962.64,-462.07 1958.14,-457.07 1958.14,-462.07 1958.14,-462.07 1958.14,-462.07 1958.14,-457.07 1953.64,-462.07 1958.14,-452.07 1958.14,-452.07"/>
<text text-anchor="middle" x="1983.9" y="-573.5" font-family="Arial" font-size="9.00">iventoryType</text>
</g>
<!-- Transaction -->
<g id="node4" class="node" pointer-events="visible" data-name="Transaction">
<polygon fill="none" stroke="black" points="436.85,-660.1 436.85,-864.1 625.43,-864.1 625.43,-660.1 436.85,-660.1"/>
<text text-anchor="middle" x="531.14" y="-851.1" font-family="Arial" font-size="10.00">Transaction</text>
<polyline fill="none" stroke="black" points="436.85,-844.1 625.43,-844.1"/>
<text text-anchor="start" x="444.85" y="-831.1" font-family="Arial" font-size="10.00">- id: String</text>
<text text-anchor="start" x="444.85" y="-819.1" font-family="Arial" font-size="10.00">- created: ZonedDateTime</text>
<text text-anchor="start" x="444.85" y="-807.1" font-family="Arial" font-size="10.00">- completed: ZonedDateTime</text>
<text text-anchor="start" x="444.85" y="-795.1" font-family="Arial" font-size="10.00">- customerId: String</text>
<text text-anchor="start" x="444.85" y="-783.1" font-family="Arial" font-size="10.00">- shipToAddress: Address</text>
<text text-anchor="start" x="444.85" y="-771.1" font-family="Arial" font-size="10.00">- customerInventoryList: InventoryList</text>
<text text-anchor="start" x="444.85" y="-759.1" font-family="Arial" font-size="10.00">- attributes: JsonArray</text>
<polyline fill="none" stroke="black" points="436.85,-752.1 625.43,-752.1"/>
<text text-anchor="start" x="444.85" y="-739.1" font-family="Arial" font-size="10.00">+ Transaction()</text>
<text text-anchor="start" x="444.85" y="-727.1" font-family="Arial" font-size="10.00">+ getId(): String</text>
<text text-anchor="start" x="444.85" y="-715.1" font-family="Arial" font-size="10.00">+ setId(String): void</text>
<text text-anchor="start" x="444.85" y="-703.1" font-family="Arial" font-size="10.00">+ getCreated(): ZonedDateTime</text>
<text text-anchor="start" x="444.85" y="-691.1" font-family="Arial" font-size="10.00">+ setCreated(ZonedDateTime): void</text>
<text text-anchor="start" x="444.85" y="-679.1" font-family="Arial" font-size="10.00">+ getCompleted(): ZonedDateTime</text>
<text text-anchor="start" x="444.85" y="-667.1" font-family="Arial" font-size="10.00">+ setCompleted(ZonedDateTime): void</text>
</g>
<!-- Transaction&#45;&gt;Address -->
<g id="edge13" class="edge" data-name="Transaction-&gt;Address">
<path fill="none" stroke="black" d="M529.86,-660.12C528.4,-559.63 525.63,-401.03 521.14,-263.8 520.74,-251.52 520.26,-238.69 519.74,-225.91"/>
<polygon fill="black" stroke="black" points="519.33,-216.15 524.24,-225.95 519.54,-221.14 519.75,-226.14 519.75,-226.14 519.75,-226.14 519.54,-221.14 515.25,-226.33 519.33,-216.15 519.33,-216.15"/>
<text text-anchor="middle" x="558.16" y="-405.6" font-family="Arial" font-size="9.00">shipToAddress</text>
</g>
<!-- InventoryList -->
<g id="node12" class="node" pointer-events="visible" data-name="InventoryList">
<polygon fill="none" stroke="black" points="655.16,-388.3 655.16,-428.3 743.13,-428.3 743.13,-388.3 655.16,-388.3"/>
<text text-anchor="middle" x="699.14" y="-415.3" font-family="Arial" font-size="10.00">InventoryList</text>
<polyline fill="none" stroke="black" points="655.16,-408.3 743.13,-408.3"/>
<text text-anchor="start" x="663.16" y="-395.3" font-family="Arial" font-size="10.00">+ InventoryList()</text>
</g>
<!-- Transaction&#45;&gt;InventoryList -->
<g id="edge14" class="edge" data-name="Transaction-&gt;InventoryList">
<path fill="none" stroke="black" d="M579.28,-660.29C615.74,-583.96 663.28,-484.4 685.97,-436.88"/>
<polygon fill="black" stroke="black" points="690.17,-428.09 689.92,-439.06 688.01,-432.61 685.86,-437.12 685.86,-437.12 685.86,-437.12 688.01,-432.61 681.8,-435.18 690.17,-428.09 690.17,-428.09"/>
<text text-anchor="middle" x="665.16" y="-573.5" font-family="Arial" font-size="9.00">customerInventoryList</text>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M321.83,-84.52C321.83,-70.14 321.83,-56.97 321.83,-46.29" style=""/>
<polygon fill="black" stroke="black" points="321.83,-36.5 326.33,-46.5 321.83,-41.5 321.83,-46.5 321.83,-46.5 321.83,-46.5 321.83,-41.5 317.33,-46.5 321.83,-36.5 321.83,-36.5" style=""/>
<text text-anchor="middle" x="331.34" y="-57.7" font-family="Arial" font-size="9.00" style="">uses</text>
</g>
<!-- Drawing -->
<g id="node5" class="node" pointer-events="visible" data-name="Drawing">
<g id="node2" class="node" pointer-events="visible" data-name="Drawing">
<polygon fill="none" stroke="black" points="1715.31,-995.9 1715.31,-1079.9 1814.98,-1079.9 1814.98,-995.9 1715.31,-995.9"/>
<text text-anchor="middle" x="1765.14" y="-1066.9" font-family="Arial" font-size="10.00">Drawing</text>
<polyline fill="none" stroke="black" points="1715.31,-1059.9 1814.98,-1059.9"/>
<text text-anchor="start" x="1723.31" y="-1046.9" font-family="Arial" font-size="10.00">+ style: String</text>
<text text-anchor="start" x="1723.31" y="-1034.9" font-family="Arial" font-size="10.00">+ technique: String</text>
<text text-anchor="start" x="1723.31" y="-1022.9" font-family="Arial" font-size="10.00">+ category: String</text>
<polyline fill="none" stroke="black" points="1715.31,-1015.9 1814.98,-1015.9"/>
<text text-anchor="start" x="1723.31" y="-1002.9" font-family="Arial" font-size="10.00">+ Drawing()</text>
<polygon fill="lightgreen" stroke="black" points="0,-510.1 0,-594.1 99.67,-594.1 99.67,-510.1 0,-510.1" style=""/>
<text text-anchor="middle" x="49.83" y="-581.1" font-family="Arial" font-size="10.00" style="">Drawing</text>
<polyline fill="none" stroke="black" points="0,-574.1 99.67,-574.1" style=""/>
<text text-anchor="middle" x="49.83" y="-561.1" font-family="Arial" font-size="10.00" style="">+ style: String</text>
<text text-anchor="middle" x="49.83" y="-549.1" font-family="Arial" font-size="10.00" style="">+ technique: String</text>
<text text-anchor="middle" x="49.83" y="-537.1" font-family="Arial" font-size="10.00" style="">+ category: String</text>
<polyline fill="none" stroke="black" points="0,-530.1 99.67,-530.1" style=""/>
<text text-anchor="middle" x="49.83" y="-517.1" font-family="Arial" font-size="10.00" style="">+ Drawing()</text>
</g>
<!-- Drawing&#45;&gt;InventoryPiece -->
<g id="edge1" class="edge" data-name="Drawing-&gt;InventoryPiece">
<path fill="none" stroke="black" d="M1794.04,-995.91C1812.79,-969.3 1838.4,-932.97 1863.81,-896.93"/>
<polygon fill="none" stroke="black" points="1866.49,-899.2 1869.39,-889.01 1860.77,-895.17 1866.49,-899.2"/>
<text text-anchor="middle" x="1843.9" y="-945.3" font-family="Arial" font-size="9.00">extends</text>
<path fill="none" stroke="black" d="M65.55,-510.25C75.88,-486.12 90.81,-455.68 108.83,-431.6 142.09,-387.15 186.28,-344.53 225.78,-310.43" style=""/>
<polygon fill="none" stroke="black" points="227.66,-313.43 232.98,-304.27 223.11,-308.11 227.66,-313.43" style=""/>
<text text-anchor="middle" x="144.59" y="-405.5" font-family="Arial" font-size="9.00" style="">extends</text>
</g>
<!-- Painting -->
<g id="node6" class="node" pointer-events="visible" data-name="Painting">
<g id="node3" class="node" pointer-events="visible" data-name="Painting">
<polygon fill="none" stroke="black" points="1832.56,-983.9 1832.56,-1091.9 1929.72,-1091.9 1929.72,-983.9 1832.56,-983.9"/>
<text text-anchor="middle" x="1881.14" y="-1078.9" font-family="Arial" font-size="10.00">Painting</text>
<polyline fill="none" stroke="black" points="1832.56,-1071.9 1929.72,-1071.9"/>
<text text-anchor="start" x="1840.56" y="-1058.9" font-family="Arial" font-size="10.00">- height: int</text>
<text text-anchor="start" x="1840.56" y="-1046.9" font-family="Arial" font-size="10.00">- width: int</text>
<text text-anchor="start" x="1840.56" y="-1034.9" font-family="Arial" font-size="10.00">- style: String</text>
<text text-anchor="start" x="1840.56" y="-1022.9" font-family="Arial" font-size="10.00">- technique: String</text>
<text text-anchor="start" x="1840.56" y="-1010.9" font-family="Arial" font-size="10.00">- category: String</text>
<polyline fill="none" stroke="black" points="1832.56,-1003.9 1929.72,-1003.9"/>
<text text-anchor="start" x="1840.56" y="-990.9" font-family="Arial" font-size="10.00">+ Painting()</text>
<polygon fill="lightgreen" stroke="black" points="118,-498.1 118,-606.1 217.67,-606.1 217.67,-498.1 118,-498.1" style=""/>
<text text-anchor="middle" x="167.83" y="-593.1" font-family="Arial" font-size="10.00" style="">Painting</text>
<polyline fill="none" stroke="black" points="118,-586.1 217.67,-586.1" style=""/>
<text text-anchor="middle" x="167.83" y="-573.1" font-family="Arial" font-size="10.00" style="">+ height: int</text>
<text text-anchor="middle" x="167.83" y="-561.1" font-family="Arial" font-size="10.00" style="">+ width: int</text>
<text text-anchor="middle" x="167.83" y="-549.1" font-family="Arial" font-size="10.00" style="">+ style: String</text>
<text text-anchor="middle" x="167.83" y="-537.1" font-family="Arial" font-size="10.00" style="">+ technique: String</text>
<text text-anchor="middle" x="167.83" y="-525.1" font-family="Arial" font-size="10.00" style="">+ category: String</text>
<polyline fill="none" stroke="black" points="118,-518.1 217.67,-518.1" style=""/>
<text text-anchor="middle" x="167.83" y="-505.1" font-family="Arial" font-size="10.00" style="">+ Painting()</text>
</g>
<!-- Painting&#45;&gt;InventoryPiece -->
<g id="edge2" class="edge" data-name="Painting-&gt;InventoryPiece">
<path fill="none" stroke="black" d="M1895.99,-984.11C1900.11,-969.44 1904.83,-952.66 1909.78,-935.06"/>
<polygon fill="none" stroke="black" points="1913.14,-936.03 1912.48,-925.46 1906.41,-934.14 1913.14,-936.03"/>
<text text-anchor="middle" x="1921.9" y="-945.3" font-family="Arial" font-size="9.00">extends</text>
<path fill="none" stroke="black" d="M193.61,-498.24C207.72,-469.31 226.03,-431.77 244.37,-394.15" style=""/>
<polygon fill="none" stroke="black" points="247.38,-395.95 248.62,-385.43 241.09,-392.89 247.38,-395.95" style=""/>
<text text-anchor="middle" x="251.59" y="-405.5" font-family="Arial" font-size="9.00" style="">extends</text>
</g>
<!-- Print -->
<g id="node7" class="node" pointer-events="visible" data-name="Print">
<g id="node4" class="node" pointer-events="visible" data-name="Print">
<polygon fill="none" stroke="black" points="1948.19,-971.9 1948.19,-1103.9 2120.1,-1103.9 2120.1,-971.9 1948.19,-971.9"/>
<text text-anchor="middle" x="2034.14" y="-1090.9" font-family="Arial" font-size="10.00">Print</text>
<polyline fill="none" stroke="black" points="1948.19,-1083.9 2120.1,-1083.9"/>
<text text-anchor="start" x="1956.19" y="-1070.9" font-family="Arial" font-size="10.00">- openEditionType: String</text>
<text text-anchor="start" x="1956.19" y="-1058.9" font-family="Arial" font-size="10.00">- category: String</text>
<polyline fill="none" stroke="black" points="1948.19,-1051.9 2120.1,-1051.9"/>
<text text-anchor="start" x="1956.19" y="-1038.9" font-family="Arial" font-size="10.00">+ Print()</text>
<text text-anchor="start" x="1956.19" y="-1026.9" font-family="Arial" font-size="10.00">+ Print(String, String)</text>
<text text-anchor="start" x="1956.19" y="-1014.9" font-family="Arial" font-size="10.00">+ getOpenEditionType(): String</text>
<text text-anchor="start" x="1956.19" y="-1002.9" font-family="Arial" font-size="10.00">+ setOpenEditionType(String): void</text>
<text text-anchor="start" x="1956.19" y="-990.9" font-family="Arial" font-size="10.00">+ getCategory(): String</text>
<text text-anchor="start" x="1956.19" y="-978.9" font-family="Arial" font-size="10.00">+ setCategory(String): void</text>
<polygon fill="lightgreen" stroke="black" points="235.88,-486.1 235.88,-618.1 407.79,-618.1 407.79,-486.1 235.88,-486.1" style=""/>
<text text-anchor="middle" x="321.83" y="-605.1" font-family="Arial" font-size="10.00" style="">Print</text>
<polyline fill="none" stroke="black" points="235.88,-598.1 407.79,-598.1" style=""/>
<text text-anchor="middle" x="321.83" y="-585.1" font-family="Arial" font-size="10.00" style="">+ openEditionType: String</text>
<text text-anchor="middle" x="321.83" y="-573.1" font-family="Arial" font-size="10.00" style="">+ category: String</text>
<polyline fill="none" stroke="black" points="235.88,-566.1 407.79,-566.1" style=""/>
<text text-anchor="middle" x="321.83" y="-553.1" font-family="Arial" font-size="10.00" style="">+ Print()</text>
<text text-anchor="middle" x="321.83" y="-541.1" font-family="Arial" font-size="10.00" style="">+ Print(String, String)</text>
<text text-anchor="middle" x="321.83" y="-529.1" font-family="Arial" font-size="10.00" style="">+ getOpenEditionType(): String</text>
<text text-anchor="middle" x="321.83" y="-517.1" font-family="Arial" font-size="10.00" style="">+ setOpenEditionType(String): void</text>
<text text-anchor="middle" x="321.83" y="-505.1" font-family="Arial" font-size="10.00" style="">+ getCategory(): String</text>
<text text-anchor="middle" x="321.83" y="-493.1" font-family="Arial" font-size="10.00" style="">+ setCategory(String): void</text>
</g>
<!-- Print&#45;&gt;InventoryPiece -->
<g id="edge3" class="edge" data-name="Print-&gt;InventoryPiece">
<path fill="none" stroke="black" d="M2016.13,-972.01C2012.93,-960.46 2009.45,-947.95 2005.86,-935"/>
<polygon fill="none" stroke="black" points="2009.26,-934.18 2003.21,-925.48 2002.52,-936.05 2009.26,-934.18"/>
<text text-anchor="middle" x="2025.9" y="-945.3" font-family="Arial" font-size="9.00">extends</text>
<path fill="none" stroke="black" d="M321.83,-486.43C321.83,-459.88 321.83,-427.84 321.83,-395.67" style=""/>
<polygon fill="none" stroke="black" points="325.33,-395.81 321.83,-385.81 318.33,-395.81 325.33,-395.81" style=""/>
<text text-anchor="middle" x="337.59" y="-405.5" font-family="Arial" font-size="9.00" style="">extends</text>
</g>
<!-- Sculpture -->
<g id="node8" class="node" pointer-events="visible" data-name="Sculpture">
<g id="node5" class="node" pointer-events="visible" data-name="Sculpture">
<polygon fill="none" stroke="black" points="2138.47,-1001.9 2138.47,-1073.9 2227.82,-1073.9 2227.82,-1001.9 2138.47,-1001.9"/>
<text text-anchor="middle" x="2183.14" y="-1060.9" font-family="Arial" font-size="10.00">Sculpture</text>
<polyline fill="none" stroke="black" points="2138.47,-1053.9 2227.82,-1053.9"/>
<text text-anchor="start" x="2146.47" y="-1040.9" font-family="Arial" font-size="10.00">- material: String</text>
<text text-anchor="start" x="2146.47" y="-1028.9" font-family="Arial" font-size="10.00">- weight: float</text>
<polyline fill="none" stroke="black" points="2138.47,-1021.9 2227.82,-1021.9"/>
<text text-anchor="start" x="2146.47" y="-1008.9" font-family="Arial" font-size="10.00">+ Sculpture()</text>
<polygon fill="lightgreen" stroke="black" points="425.9,-516.1 425.9,-588.1 517.77,-588.1 517.77,-516.1 425.9,-516.1" style=""/>
<text text-anchor="middle" x="471.83" y="-575.1" font-family="Arial" font-size="10.00" style="">Sculpture</text>
<polyline fill="none" stroke="black" points="425.9,-568.1 517.77,-568.1" style=""/>
<text text-anchor="middle" x="471.83" y="-555.1" font-family="Arial" font-size="10.00" style="">+ material: String</text>
<text text-anchor="middle" x="471.83" y="-543.1" font-family="Arial" font-size="10.00" style="">+ weight: float</text>
<polyline fill="none" stroke="black" points="425.9,-536.1 517.77,-536.1" style=""/>
<text text-anchor="middle" x="471.83" y="-523.1" font-family="Arial" font-size="10.00" style="">+ Sculpture()</text>
</g>
<!-- Sculpture&#45;&gt;InventoryPiece -->
<g id="edge4" class="edge" data-name="Sculpture-&gt;InventoryPiece">
<path fill="none" stroke="black" d="M2154.42,-1001.94C2128.76,-970.72 2089.69,-923.18 2053.15,-878.71"/>
<polygon fill="none" stroke="black" points="2055.89,-876.54 2046.84,-871.04 2050.49,-880.98 2055.89,-876.54"/>
<text text-anchor="middle" x="2126.9" y="-945.3" font-family="Arial" font-size="9.00">extends</text>
<path fill="none" stroke="black" d="M456.01,-516.24C445.11,-492.36 430.24,-460 416.83,-431.6 411.09,-419.44 405.12,-406.88 399.09,-394.26" style=""/>
<polygon fill="none" stroke="black" points="402.37,-393.01 394.89,-385.5 396.05,-396.03 402.37,-393.01" style=""/>
<text text-anchor="middle" x="422.59" y="-405.5" font-family="Arial" font-size="9.00" style="">extends</text>
</g>
<!-- TransactionOperationEnum -->
<g id="node10" class="node" pointer-events="visible" data-name="TransactionOperationEnum">
<g id="node7" class="node" pointer-events="visible" data-name="TransactionOperationEnum">
<polygon fill="none" stroke="black" points="0,-358.3 0,-458.3 138.29,-458.3 138.29,-358.3 0,-358.3"/>
<text text-anchor="start" x="8" y="-445.3" font-family="Arial" font-size="10.00">«enumeration»</text>
<text text-anchor="middle" x="69.14" y="-433.3" font-family="Arial" font-size="10.00">TransactionOperationEnum</text>
<polyline fill="none" stroke="black" points="0,-426.3 138.29,-426.3"/>
<text text-anchor="start" x="8" y="-413.3" font-family="Arial" font-size="10.00">Completed</text>
<text text-anchor="start" x="8" y="-401.3" font-family="Arial" font-size="10.00">Draft</text>
<text text-anchor="start" x="8" y="-389.3" font-family="Arial" font-size="10.00">Pricing</text>
<text text-anchor="start" x="8" y="-377.3" font-family="Arial" font-size="10.00">Removed</text>
<text text-anchor="start" x="8" y="-365.3" font-family="Arial" font-size="10.00">Shipping</text>
<polygon fill="lightyellow" stroke="black" points="701.69,-1069.7 701.69,-1105.7 839.98,-1105.7 839.98,-1069.7 701.69,-1069.7" style=""/>
<text text-anchor="middle" x="770.83" y="-1084.7" font-family="Arial" font-size="10.00" style="">TransactionOperationEnum</text>
</g>
<!-- Customer -->
<g id="node8" class="node" pointer-events="visible" data-name="Customer">
<polygon fill="lightcyan" stroke="black" points="805.94,-719.9 805.94,-1007.9 1001.73,-1007.9 1001.73,-719.9 805.94,-719.9" style=""/>
<text text-anchor="middle" x="903.83" y="-994.9" font-family="Arial" font-size="10.00" style="">Customer</text>
<polyline fill="none" stroke="black" points="805.94,-987.9 1001.73,-987.9" style=""/>
<text text-anchor="middle" x="903.83" y="-974.9" font-family="Arial" font-size="10.00" style=""># id: String</text>
<text text-anchor="middle" x="903.83" y="-962.9" font-family="Arial" font-size="10.00" style=""># updated: ZonedDateTime</text>
<text text-anchor="middle" x="903.83" y="-950.9" font-family="Arial" font-size="10.00" style="">- phone: String</text>
<text text-anchor="middle" x="903.83" y="-938.9" font-family="Arial" font-size="10.00" style="">- mailing: Address</text>
<text text-anchor="middle" x="903.83" y="-926.9" font-family="Arial" font-size="10.00" style="">- email: String</text>
<text text-anchor="middle" x="903.83" y="-914.9" font-family="Arial" font-size="10.00" style="">- nameFirst: String</text>
<text text-anchor="middle" x="903.83" y="-902.9" font-family="Arial" font-size="10.00" style="">- nameLast: String</text>
<polyline fill="none" stroke="black" points="805.94,-895.9 1001.73,-895.9" style=""/>
<text text-anchor="middle" x="903.83" y="-882.9" font-family="Arial" font-size="10.00" style="">+ Customer()</text>
<text text-anchor="middle" x="903.83" y="-870.9" font-family="Arial" font-size="10.00" style="">+ Customer(String, String, String, String)</text>
<text text-anchor="middle" x="903.83" y="-858.9" font-family="Arial" font-size="10.00" style="">+ getEmail(): String</text>
<text text-anchor="middle" x="903.83" y="-846.9" font-family="Arial" font-size="10.00" style="">+ getId(): String</text>
<text text-anchor="middle" x="903.83" y="-834.9" font-family="Arial" font-size="10.00" style="">+ setId(String): void</text>
<text text-anchor="middle" x="903.83" y="-822.9" font-family="Arial" font-size="10.00" style="">+ getPhone(): String</text>
<text text-anchor="middle" x="903.83" y="-810.9" font-family="Arial" font-size="10.00" style="">+ setPhone(String): void</text>
<text text-anchor="middle" x="903.83" y="-798.9" font-family="Arial" font-size="10.00" style="">+ getMailing(): Address</text>
<text text-anchor="middle" x="903.83" y="-786.9" font-family="Arial" font-size="10.00" style="">+ setMailing(Address): void</text>
<text text-anchor="middle" x="903.83" y="-774.9" font-family="Arial" font-size="10.00" style="">+ setEmail(String): void</text>
<text text-anchor="middle" x="903.83" y="-762.9" font-family="Arial" font-size="10.00" style="">+ getNameFirst(): String</text>
<text text-anchor="middle" x="903.83" y="-750.9" font-family="Arial" font-size="10.00" style="">+ setNameFirst(String): void</text>
<text text-anchor="middle" x="903.83" y="-738.9" font-family="Arial" font-size="10.00" style="">+ getNameLast(): String</text>
<text text-anchor="middle" x="903.83" y="-726.9" font-family="Arial" font-size="10.00" style="">+ setNameLast(String): void</text>
</g>
<!-- Address -->
<g id="node9" class="node" pointer-events="visible" data-name="Address">
<polygon fill="white" stroke="black" points="651.27,-432.1 651.27,-672.1 840.4,-672.1 840.4,-432.1 651.27,-432.1" style=""/>
<text text-anchor="middle" x="745.83" y="-659.1" font-family="Arial" font-size="10.00" style="">Address</text>
<polyline fill="none" stroke="black" points="651.27,-652.1 840.4,-652.1" style=""/>
<text text-anchor="middle" x="745.83" y="-639.1" font-family="Arial" font-size="10.00" style="">- street: String</text>
<text text-anchor="middle" x="745.83" y="-627.1" font-family="Arial" font-size="10.00" style="">- city: String</text>
<text text-anchor="middle" x="745.83" y="-615.1" font-family="Arial" font-size="10.00" style="">- state: String</text>
<text text-anchor="middle" x="745.83" y="-603.1" font-family="Arial" font-size="10.00" style="">- zip: String</text>
<polyline fill="none" stroke="black" points="651.27,-596.1 840.4,-596.1" style=""/>
<text text-anchor="middle" x="745.83" y="-583.1" font-family="Arial" font-size="10.00" style="">+ Address()</text>
<text text-anchor="middle" x="745.83" y="-571.1" font-family="Arial" font-size="10.00" style="">+ Address(String, String, String, String)</text>
<text text-anchor="middle" x="745.83" y="-559.1" font-family="Arial" font-size="10.00" style="">+ getStreet(): String</text>
<text text-anchor="middle" x="745.83" y="-547.1" font-family="Arial" font-size="10.00" style="">+ setStreet(String): void</text>
<text text-anchor="middle" x="745.83" y="-535.1" font-family="Arial" font-size="10.00" style="">+ getCity(): String</text>
<text text-anchor="middle" x="745.83" y="-523.1" font-family="Arial" font-size="10.00" style="">+ setCity(String): void</text>
<text text-anchor="middle" x="745.83" y="-511.1" font-family="Arial" font-size="10.00" style="">+ getState(): String</text>
<text text-anchor="middle" x="745.83" y="-499.1" font-family="Arial" font-size="10.00" style="">+ setState(String): void</text>
<text text-anchor="middle" x="745.83" y="-487.1" font-family="Arial" font-size="10.00" style="">+ getZip(): String</text>
<text text-anchor="middle" x="745.83" y="-475.1" font-family="Arial" font-size="10.00" style="">+ setZip(String): void</text>
<text text-anchor="middle" x="745.83" y="-463.1" font-family="Arial" font-size="10.00" style="">+ hashCode(): int</text>
<text text-anchor="middle" x="745.83" y="-451.1" font-family="Arial" font-size="10.00" style="">+ equals(Object): boolean</text>
<text text-anchor="middle" x="745.83" y="-439.1" font-family="Arial" font-size="10.00" style="">+ toString(): String</text>
</g>
<!-- Customer&#45;&gt;Address -->
<g id="edge6" class="edge" data-name="Customer-&gt;Address">
<path fill="none" stroke="black" d="M831.08,-720.24C824.62,-707.59 818.11,-694.82 811.72,-682.29" style=""/>
<polygon fill="black" stroke="black" points="811.84,-682.51 805.55,-678.99 806.38,-671.82 812.67,-675.35 811.84,-682.51" style=""/>
<text text-anchor="middle" x="827.09" y="-693.3" font-family="Arial" font-size="9.00" style="">has</text>
</g>
<!-- Transaction -->
<g id="node10" class="node" pointer-events="visible" data-name="Transaction">
<polygon fill="lightcyan" stroke="black" points="599.54,-761.9 599.54,-965.9 788.12,-965.9 788.12,-761.9 599.54,-761.9" style=""/>
<text text-anchor="middle" x="693.83" y="-952.9" font-family="Arial" font-size="10.00" style="">Transaction</text>
<polyline fill="none" stroke="black" points="599.54,-945.9 788.12,-945.9" style=""/>
<text text-anchor="middle" x="693.83" y="-932.9" font-family="Arial" font-size="10.00" style="">- id: String</text>
<text text-anchor="middle" x="693.83" y="-920.9" font-family="Arial" font-size="10.00" style="">- created: ZonedDateTime</text>
<text text-anchor="middle" x="693.83" y="-908.9" font-family="Arial" font-size="10.00" style="">- completed: ZonedDateTime</text>
<text text-anchor="middle" x="693.83" y="-896.9" font-family="Arial" font-size="10.00" style="">- customerId: String</text>
<text text-anchor="middle" x="693.83" y="-884.9" font-family="Arial" font-size="10.00" style="">- shipToAddress: Address</text>
<text text-anchor="middle" x="693.83" y="-872.9" font-family="Arial" font-size="10.00" style="">- customerInventoryList: InventoryList</text>
<text text-anchor="middle" x="693.83" y="-860.9" font-family="Arial" font-size="10.00" style="">- attributes: JsonArray</text>
<polyline fill="none" stroke="black" points="599.54,-853.9 788.12,-853.9" style=""/>
<text text-anchor="middle" x="693.83" y="-840.9" font-family="Arial" font-size="10.00" style="">+ Transaction()</text>
<text text-anchor="middle" x="693.83" y="-828.9" font-family="Arial" font-size="10.00" style="">+ getId(): String</text>
<text text-anchor="middle" x="693.83" y="-816.9" font-family="Arial" font-size="10.00" style="">+ setId(String): void</text>
<text text-anchor="middle" x="693.83" y="-804.9" font-family="Arial" font-size="10.00" style="">+ getCreated(): ZonedDateTime</text>
<text text-anchor="middle" x="693.83" y="-792.9" font-family="Arial" font-size="10.00" style="">+ setCreated(ZonedDateTime): void</text>
<text text-anchor="middle" x="693.83" y="-780.9" font-family="Arial" font-size="10.00" style="">+ getCompleted(): ZonedDateTime</text>
<text text-anchor="middle" x="693.83" y="-768.9" font-family="Arial" font-size="10.00" style="">+ setCompleted(ZonedDateTime): void</text>
</g>
<!-- Transaction&#45;&gt;Address -->
<g id="edge7" class="edge" data-name="Transaction-&gt;Address">
<path fill="none" stroke="black" d="M710.72,-762.32C715.02,-736.67 719.71,-708.74 724.21,-681.9" style=""/>
<polygon fill="black" stroke="black" points="725.87,-672.06 728.65,-682.67 725.04,-676.99 724.21,-681.92 724.21,-681.92 724.21,-681.92 725.04,-676.99 719.77,-681.18 725.87,-672.06 725.87,-672.06" style=""/>
<text text-anchor="middle" x="750.85" y="-693.3" font-family="Arial" font-size="9.00" style="">shipToAddress</text>
</g>
<!-- InventoryList -->
<g id="node11" class="node" pointer-events="visible" data-name="InventoryList">
<polygon fill="wheat" stroke="black" points="535.49,-534.1 535.49,-570.1 608.18,-570.1 608.18,-534.1 535.49,-534.1" style=""/>
<text text-anchor="middle" x="571.83" y="-549.1" font-family="Arial" font-size="10.00" style="">InventoryList</text>
</g>
<!-- Transaction&#45;&gt;InventoryList -->
<g id="edge8" class="edge" data-name="Transaction-&gt;InventoryList">
<path fill="none" stroke="black" d="M652.99,-762.2C644.92,-742.09 636.54,-721.09 628.8,-701.4 612.02,-658.74 593.01,-608.96 581.75,-579.29" style=""/>
<polygon fill="black" stroke="black" points="578.24,-570.04 585.99,-577.79 580.01,-574.71 581.78,-579.39 581.78,-579.39 581.78,-579.39 580.01,-574.71 577.58,-580.98 578.24,-570.04 578.24,-570.04" style=""/>
<text text-anchor="middle" x="672.85" y="-693.3" font-family="Arial" font-size="9.00" style="">customerInventoryList</text>
</g>
<!-- InventoryList&#45;&gt;InventoryPiece -->
<g id="edge12" class="edge" data-name="InventoryList-&gt;InventoryPiece">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M568,-534.16C561.99,-509.94 548.7,-464.71 526.83,-431.6 497.49,-387.16 456.38,-345.25 418.67,-311.66" style=""/>
<polygon fill="black" stroke="black" points="418.68,-311.67 411.54,-310.71 409.67,-303.74 416.82,-304.7 418.68,-311.67" style=""/>
<text text-anchor="middle" x="530.59" y="-405.5" font-family="Arial" font-size="9.00" style="">contains</text>
</g>
<!-- CustomerList -->
<g id="node11" class="node" pointer-events="visible" data-name="CustomerList">
<g id="node12" class="node" pointer-events="visible" data-name="CustomerList">
<polygon fill="none" stroke="black" points="776.05,-388.3 776.05,-428.3 866.23,-428.3 866.23,-388.3 776.05,-388.3"/>
<text text-anchor="middle" x="821.14" y="-415.3" font-family="Arial" font-size="10.00">CustomerList</text>
<polyline fill="none" stroke="black" points="776.05,-408.3 866.23,-408.3"/>
<text text-anchor="start" x="784.05" y="-395.3" font-family="Arial" font-size="10.00">+ CustomerList()</text>
<polygon fill="wheat" stroke="black" points="1166.38,-1069.7 1166.38,-1105.7 1241.29,-1105.7 1241.29,-1069.7 1166.38,-1069.7" style=""/>
<text text-anchor="middle" x="1203.83" y="-1084.7" font-family="Arial" font-size="10.00" style="">CustomerList</text>
</g>
<!-- ArrayList&lt;Customer&gt; -->
<g id="node22" class="node" pointer-events="visible" data-name="ArrayList&lt;Customer&gt;">
<!-- CustomerList&#45;&gt;Customer -->
<g id="edge13" class="edge" data-name="CustomerList-&gt;Customer">
</g>
<!-- CustomerList&#45;&gt;ArrayList&lt;Customer&gt; -->
<g id="edge5" class="edge" data-name="CustomerList-&gt;ArrayList&lt;Customer&gt;">
<path fill="none" stroke="black" d="M821.14,-388.67C821.14,-338.04 821.14,-197.69 821.14,-137.5"/>
<polygon fill="none" stroke="black" points="824.64,-137.77 821.14,-127.77 817.64,-137.77 824.64,-137.77"/>
<text text-anchor="middle" x="836.9" y="-237.7" font-family="Arial" font-size="9.00">extends</text>
</g>
<!-- ArrayList&lt;InventoryPiece&gt; -->
<g id="node23" class="node" pointer-events="visible" data-name="ArrayList&lt;InventoryPiece&gt;">
</g>
<!-- InventoryList&#45;&gt;ArrayList&lt;InventoryPiece&gt; -->
<g id="edge6" class="edge" data-name="InventoryList-&gt;ArrayList&lt;InventoryPiece&gt;">
<path fill="none" stroke="black" d="M699.14,-388.67C699.14,-338.04 699.14,-197.69 699.14,-137.5"/>
<polygon fill="none" stroke="black" points="702.64,-137.77 699.14,-127.77 695.64,-137.77 702.64,-137.77"/>
<text text-anchor="middle" x="714.9" y="-237.7" font-family="Arial" font-size="9.00">extends</text>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1181.28,-1070.03C1145.38,-1043.48 1072.96,-989.94 1011.11,-944.21" style=""/>
<polygon fill="black" stroke="black" points="1011.32,-944.37 1004.12,-944.02 1001.67,-937.24 1008.87,-937.59 1011.32,-944.37" style=""/>
<text text-anchor="middle" x="1147.59" y="-1029.1" font-family="Arial" font-size="9.00" style="">contains</text>
</g>
<!-- TransactionList -->
<g id="node13" class="node" pointer-events="visible" data-name="TransactionList">
<polygon fill="none" stroke="black" points="156.46,-382.3 156.46,-434.3 297.82,-434.3 297.82,-382.3 156.46,-382.3"/>
<text text-anchor="middle" x="227.14" y="-421.3" font-family="Arial" font-size="10.00">TransactionList</text>
<polyline fill="none" stroke="black" points="156.46,-414.3 297.82,-414.3"/>
<text text-anchor="start" x="164.46" y="-401.3" font-family="Arial" font-size="10.00">+ TransactionList()</text>
<text text-anchor="start" x="164.46" y="-389.3" font-family="Arial" font-size="10.00">+ add(Transaction): boolean</text>
<polygon fill="wheat" stroke="black" points="599.93,-1069.7 599.93,-1105.7 683.74,-1105.7 683.74,-1069.7 599.93,-1069.7" style=""/>
<text text-anchor="middle" x="641.83" y="-1084.7" font-family="Arial" font-size="10.00" style="">TransactionList</text>
</g>
<!-- ArrayList&lt;Transaction&gt; -->
<g id="node24" class="node" pointer-events="visible" data-name="ArrayList&lt;Transaction&gt;">
<!-- TransactionList&#45;&gt;Transaction -->
<g id="edge14" class="edge" data-name="TransactionList-&gt;Transaction">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M645.74,-1070.03C650.52,-1049.67 659.01,-1013.42 667.55,-977" style=""/>
<polygon fill="black" stroke="black" points="667.46,-977.4 664.93,-970.64 670.2,-965.71 672.72,-972.47 667.46,-977.4" style=""/>
<text text-anchor="middle" x="672.59" y="-1029.1" font-family="Arial" font-size="9.00" style="">contains</text>
</g>
<!-- TransactionList&#45;&gt;ArrayList&lt;Transaction&gt; -->
<g id="edge7" class="edge" data-name="TransactionList-&gt;ArrayList&lt;Transaction&gt;">
<!-- InventoryManager -->
<g id="node14" class="node" pointer-events="visible" data-name="InventoryManager">
<path fill="none" stroke="black" d="M227.14,-382.42C227.14,-327.35 227.14,-195.43 227.14,-137.54"/>
<polygon fill="none" stroke="black" points="230.64,-137.88 227.14,-127.88 223.64,-137.88 230.64,-137.88"/>
<text text-anchor="middle" x="242.9" y="-237.7" font-family="Arial" font-size="9.00">extends</text>
<polygon fill="lightpink" stroke="black" points="398.42,-1138.7 398.42,-1190.7 557.25,-1190.7 557.25,-1138.7 398.42,-1138.7" style=""/>
<text text-anchor="middle" x="477.83" y="-1177.7" font-family="Arial" font-size="10.00" style="">InventoryManager</text>
<polyline fill="none" stroke="black" points="398.42,-1170.7 557.25,-1170.7" style=""/>
<text text-anchor="middle" x="477.83" y="-1157.7" font-family="Arial" font-size="10.00" style="">+ INVENTORY: InventoryList</text>
<text text-anchor="middle" x="477.83" y="-1145.7" font-family="Arial" font-size="10.00" style="">- INSTANCE: InventoryManager</text>
<polyline fill="none" stroke="black" points="398.42,-1138.7 557.25,-1138.7" style=""/>
</g>
<!-- InventoryManager&#45;&gt;InventoryList -->
<g id="edge9" class="edge" data-name="InventoryManager-&gt;InventoryList">
<path fill="none" stroke="black" d="M481.24,-1138.88C485.05,-1111.37 491.45,-1065.69 497.33,-1026.4 522.59,-857.61 555.22,-655.35 567.18,-581.69" style=""/>
<polygon fill="black" stroke="black" points="567.18,-581.7 564.19,-575.13 569.1,-569.85 572.09,-576.42 567.18,-581.7" style=""/>
<text text-anchor="middle" x="524.09" y="-1029.1" font-family="Arial" font-size="9.00" style="">INVENTORY</text>
</g>
<!-- CustomerManager -->
<g id="node14" class="node" pointer-events="visible" data-name="CustomerManager">
<g id="node15" class="node" pointer-events="visible" data-name="CustomerManager">
<polygon fill="none" stroke="black" points="861.47,-702.1 861.47,-822.1 1032.82,-822.1 1032.82,-702.1 861.47,-702.1"/>
<text text-anchor="middle" x="947.14" y="-809.1" font-family="Arial" font-size="10.00">CustomerManager</text>
<polyline fill="none" stroke="black" points="861.47,-802.1 1032.82,-802.1"/>
<text text-anchor="start" x="869.47" y="-789.1" font-family="Arial" font-size="10.00">- INSTANCE: CustomerManager</text>
<text text-anchor="start" x="869.47" y="-777.1" font-family="Arial" font-size="10.00">+ CUSTOMERS: CustomerList</text>
<polyline fill="none" stroke="black" points="861.47,-770.1 1032.82,-770.1"/>
<text text-anchor="start" x="869.47" y="-757.1" font-family="Arial" font-size="10.00">+ getInstance(): CustomerManager</text>
<text text-anchor="start" x="869.47" y="-745.1" font-family="Arial" font-size="10.00">+ add(Customer): boolean</text>
<text text-anchor="start" x="869.47" y="-733.1" font-family="Arial" font-size="10.00">- check(Customer): void</text>
<text text-anchor="start" x="869.47" y="-721.1" font-family="Arial" font-size="10.00">+ findById(String): Customer</text>
<text text-anchor="start" x="869.47" y="-709.1" font-family="Arial" font-size="10.00">+ findByEmail(String): Customer</text>
<polygon fill="lightpink" stroke="black" points="945.16,-1239.7 945.16,-1359.7 1116.51,-1359.7 1116.51,-1239.7 945.16,-1239.7" style=""/>
<text text-anchor="middle" x="1030.83" y="-1346.7" font-family="Arial" font-size="10.00" style="">CustomerManager</text>
<polyline fill="none" stroke="black" points="945.16,-1339.7 1116.51,-1339.7" style=""/>
<text text-anchor="middle" x="1030.83" y="-1326.7" font-family="Arial" font-size="10.00" style="">+ CUSTOMERS: CustomerList</text>
<text text-anchor="middle" x="1030.83" y="-1314.7" font-family="Arial" font-size="10.00" style="">- INSTANCE: CustomerManager</text>
<polyline fill="none" stroke="black" points="945.16,-1307.7 1116.51,-1307.7" style=""/>
<text text-anchor="middle" x="1030.83" y="-1294.7" font-family="Arial" font-size="10.00" style="">+ getInstance(): CustomerManager</text>
<text text-anchor="middle" x="1030.83" y="-1282.7" font-family="Arial" font-size="10.00" style="">+ add(Customer): boolean</text>
<text text-anchor="middle" x="1030.83" y="-1270.7" font-family="Arial" font-size="10.00" style="">- check(Customer): void</text>
<text text-anchor="middle" x="1030.83" y="-1258.7" font-family="Arial" font-size="10.00" style="">+ findById(String): Customer</text>
<text text-anchor="middle" x="1030.83" y="-1246.7" font-family="Arial" font-size="10.00" style="">+ findByEmail(String): Customer</text>
</g>
<!-- CustomerManager&#45;&gt;CustomerList -->
<g id="edge15" class="edge" data-name="CustomerManager-&gt;CustomerList">
<g id="edge10" class="edge" data-name="CustomerManager-&gt;CustomerList">
<path fill="none" stroke="black" d="M926.05,-702.22C898.57,-625.48 851.61,-494.37 831.16,-437.26"/>
<polygon fill="black" stroke="black" points="827.88,-428.12 835.49,-436.01 829.57,-432.82 831.25,-437.53 831.25,-437.53 831.25,-437.53 829.57,-432.82 827.02,-439.05 827.88,-428.12 827.88,-428.12"/>
<text text-anchor="middle" x="909.89" y="-573.5" font-family="Arial" font-size="9.00">CUSTOMERS</text>
<path fill="none" stroke="black" d="M1079.25,-1239.92C1113.32,-1198.58 1157.22,-1145.28 1182.78,-1114.26" style=""/>
<polygon fill="black" stroke="black" points="1182.46,-1114.65 1183.19,-1107.47 1190.09,-1105.38 1189.36,-1112.56 1182.46,-1114.65" style=""/>
<text text-anchor="middle" x="1190.58" y="-1162" font-family="Arial" font-size="9.00" style="">CUSTOMERS</text>
</g>
<!-- InvalidRecordDataException -->
<g id="node18" class="node" pointer-events="visible" data-name="InvalidRecordDataException">
<g id="node19" class="node" pointer-events="visible" data-name="InvalidRecordDataException">
<polygon fill="none" stroke="black" points="1406.23,-376.3 1406.23,-440.3 1642.06,-440.3 1642.06,-376.3 1406.23,-376.3"/>
<text text-anchor="middle" x="1524.14" y="-427.3" font-family="Arial" font-size="10.00">InvalidRecordDataException</text>
<polyline fill="none" stroke="black" points="1406.23,-420.3 1642.06,-420.3"/>
<text text-anchor="start" x="1414.23" y="-407.3" font-family="Arial" font-size="10.00">+ InvalidRecordDataException(String)</text>
<text text-anchor="start" x="1414.23" y="-395.3" font-family="Arial" font-size="10.00">+ InvalidRecordDataException(String, Throwable)</text>
<text text-anchor="start" x="1414.23" y="-383.3" font-family="Arial" font-size="10.00">+ InvalidRecordDataException(Throwable)</text>
<polygon fill="tomato" stroke="black" points="912.92,-1055.7 912.92,-1119.7 1148.75,-1119.7 1148.75,-1055.7 912.92,-1055.7" style=""/>
<text text-anchor="middle" x="1030.83" y="-1106.7" font-family="Arial" font-size="10.00" style="">InvalidRecordDataException</text>
<polyline fill="none" stroke="black" points="912.92,-1099.7 1148.75,-1099.7" style=""/>
<polyline fill="none" stroke="black" points="912.92,-1099.7 1148.75,-1099.7" style=""/>
<text text-anchor="middle" x="1030.83" y="-1086.7" font-family="Arial" font-size="10.00" style="">+ InvalidRecordDataException(String)</text>
<text text-anchor="middle" x="1030.83" y="-1074.7" font-family="Arial" font-size="10.00" style="">+ InvalidRecordDataException(String, Throwable)</text>
<text text-anchor="middle" x="1030.83" y="-1062.7" font-family="Arial" font-size="10.00" style="">+ InvalidRecordDataException(Throwable)</text>
</g>
<!-- CustomerManager&#45;&gt;InvalidRecordDataException -->
<g id="edge19" class="edge" data-name="CustomerManager-&gt;InvalidRecordDataException">
<path fill="none" stroke="black" d="M1032.82,-733.46C1127.8,-700.2 1282.68,-638.01 1397.14,-552.8 1437,-523.13 1473.57,-479.24 1497.13,-447.82" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="1502.83,-440.12 1500.5,-450.83 1499.86,-444.14 1496.88,-448.15 1496.88,-448.15 1496.88,-448.15 1499.86,-444.14 1493.27,-445.48 1502.83,-440.12 1502.83,-440.12"/>
<text text-anchor="middle" x="1378.4" y="-573.5" font-family="Arial" font-size="9.00">throws</text>
</g>
<!-- InventoryManager -->
<g id="node15" class="node" pointer-events="visible" data-name="InventoryManager">
<polygon fill="none" stroke="black" points="643.28,-684.1 643.28,-840.1 843,-840.1 843,-684.1 643.28,-684.1"/>
<text text-anchor="middle" x="743.14" y="-827.1" font-family="Arial" font-size="10.00">InventoryManager</text>
<polyline fill="none" stroke="black" points="643.28,-820.1 843,-820.1"/>
<text text-anchor="start" x="651.28" y="-807.1" font-family="Arial" font-size="10.00">- INSTANCE: InventoryManager</text>
<text text-anchor="start" x="651.28" y="-795.1" font-family="Arial" font-size="10.00">+ INVENTORY: InventoryList</text>
<polyline fill="none" stroke="black" points="643.28,-788.1 843,-788.1"/>
<text text-anchor="start" x="651.28" y="-775.1" font-family="Arial" font-size="10.00">+ getInstance(): InventoryManager</text>
<text text-anchor="start" x="651.28" y="-763.1" font-family="Arial" font-size="10.00">+ getArtPieceTypes(): Set</text>
<text text-anchor="start" x="651.28" y="-751.1" font-family="Arial" font-size="10.00">+ add(InventoryPiece): void</text>
<text text-anchor="start" x="651.28" y="-739.1" font-family="Arial" font-size="10.00">+ find(String): InventoryPiece</text>
<text text-anchor="start" x="651.28" y="-727.1" font-family="Arial" font-size="10.00">+ update(InventoryPiece): InventoryPiece</text>
<text text-anchor="start" x="651.28" y="-715.1" font-family="Arial" font-size="10.00">+ save(): void</text>
<text text-anchor="start" x="651.28" y="-703.1" font-family="Arial" font-size="10.00">+ loadAll(): void</text>
<text text-anchor="start" x="651.28" y="-691.1" font-family="Arial" font-size="10.00">+ Remove(InventoryPiece): void</text>
</g>
<!-- InventoryManager&#45;&gt;InventoryList -->
<g id="edge16" class="edge" data-name="InventoryManager-&gt;InventoryList">
<path fill="none" stroke="black" d="M733.54,-684.33C723.85,-606.81 709.38,-491.15 702.73,-437.95"/>
<polygon fill="black" stroke="black" points="701.5,-428.17 707.21,-437.54 702.12,-433.14 702.74,-438.1 702.74,-438.1 702.74,-438.1 702.12,-433.14 698.28,-438.66 701.5,-428.17 701.5,-428.17"/>
<text text-anchor="middle" x="746.4" y="-573.5" font-family="Arial" font-size="9.00">INVENTORY</text>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1030.83,-1239.92C1030.83,-1204.67 1030.83,-1160.73 1030.83,-1129.31" style=""/>
<polygon fill="black" stroke="black" points="1030.83,-1119.58 1035.33,-1129.58 1030.83,-1124.58 1030.83,-1129.58 1030.83,-1129.58 1030.83,-1129.58 1030.83,-1124.58 1026.33,-1129.58 1030.83,-1119.58 1030.83,-1119.58" style=""/>
<text text-anchor="middle" x="1044.09" y="-1162" font-family="Arial" font-size="9.00" style="">throws</text>
</g>
<!-- TransactionManager -->
<g id="node16" class="node" pointer-events="visible" data-name="TransactionManager">
<polygon fill="none" stroke="black" points="76.83,-672.1 76.83,-852.1 405.46,-852.1 405.46,-672.1 76.83,-672.1"/>
<text text-anchor="middle" x="241.14" y="-839.1" font-family="Arial" font-size="10.00">TransactionManager</text>
<polyline fill="none" stroke="black" points="76.83,-832.1 405.46,-832.1"/>
<text text-anchor="start" x="84.83" y="-819.1" font-family="Arial" font-size="10.00">- INSTANCE: TransactionManager</text>
<text text-anchor="start" x="84.83" y="-807.1" font-family="Arial" font-size="10.00">+ TRANSACTIONS: TransactionList</text>
<polyline fill="none" stroke="black" points="76.83,-800.1 405.46,-800.1"/>
<text text-anchor="start" x="84.83" y="-787.1" font-family="Arial" font-size="10.00">+ getInstance(): TransactionManager</text>
<text text-anchor="start" x="84.83" y="-775.1" font-family="Arial" font-size="10.00">+ TransactRequest(Customer, InventoryList, Transaction): Transaction</text>
<text text-anchor="start" x="84.83" y="-763.1" font-family="Arial" font-size="10.00">+ compute(Transaction, TransactionOperationEnum): void</text>
<text text-anchor="start" x="84.83" y="-751.1" font-family="Arial" font-size="10.00">+ compute(Transaction): void</text>
<text text-anchor="start" x="84.83" y="-739.1" font-family="Arial" font-size="10.00">+ complete(Transaction): void</text>
<text text-anchor="start" x="84.83" y="-727.1" font-family="Arial" font-size="10.00">+ findByCustomerEmail(String): TransactionList</text>
<text text-anchor="start" x="84.83" y="-715.1" font-family="Arial" font-size="10.00">+ findByTransactionId(String): TransactionList</text>
<text text-anchor="start" x="84.83" y="-703.1" font-family="Arial" font-size="10.00">+ findByTransactionDate(ZonedDateTime): TransactionList</text>
<text text-anchor="start" x="84.83" y="-691.1" font-family="Arial" font-size="10.00">+ remove(Transaction): void</text>
<text text-anchor="start" x="84.83" y="-679.1" font-family="Arial" font-size="10.00">+ save(): void</text>
</g>
<!-- TransactionManager&#45;&gt;Customer -->
<g id="edge23" class="edge" data-name="TransactionManager-&gt;Customer">
<path fill="none" stroke="black" d="M284.8,-672.33C301.46,-638.45 320.95,-598.81 339.68,-560.73" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="343.91,-552.12 343.53,-563.08 341.7,-556.61 339.5,-561.09 339.5,-561.09 339.5,-561.09 341.7,-556.61 335.46,-559.11 343.91,-552.12 343.91,-552.12"/>
<polygon fill="lightpink" stroke="black" points="575.52,-1209.7 575.52,-1389.7 904.15,-1389.7 904.15,-1209.7 575.52,-1209.7" style=""/>
<text text-anchor="middle" x="739.83" y="-1376.7" font-family="Arial" font-size="10.00" style="">TransactionManager</text>
<polyline fill="none" stroke="black" points="575.52,-1369.7 904.15,-1369.7" style=""/>
<text text-anchor="middle" x="739.83" y="-1356.7" font-family="Arial" font-size="10.00" style="">+ TRANSACTIONS: TransactionList</text>
<text text-anchor="middle" x="739.83" y="-1344.7" font-family="Arial" font-size="10.00" style="">- INSTANCE: TransactionManager</text>
<polyline fill="none" stroke="black" points="575.52,-1337.7 904.15,-1337.7" style=""/>
<text text-anchor="middle" x="739.83" y="-1324.7" font-family="Arial" font-size="10.00" style="">+ getInstance(): TransactionManager</text>
<text text-anchor="middle" x="739.83" y="-1312.7" font-family="Arial" font-size="10.00" style="">+ TransactRequest(Customer, InventoryList, Transaction): Transaction</text>
<text text-anchor="middle" x="739.83" y="-1300.7" font-family="Arial" font-size="10.00" style="">+ compute(Transaction, TransactionOperationEnum): void</text>
<text text-anchor="middle" x="739.83" y="-1288.7" font-family="Arial" font-size="10.00" style="">+ compute(Transaction): void</text>
<text text-anchor="middle" x="739.83" y="-1276.7" font-family="Arial" font-size="10.00" style="">+ complete(Transaction): void</text>
<text text-anchor="middle" x="739.83" y="-1264.7" font-family="Arial" font-size="10.00" style="">+ findByCustomerEmail(String): TransactionList</text>
<text text-anchor="middle" x="739.83" y="-1252.7" font-family="Arial" font-size="10.00" style="">+ findByTransactionId(String): TransactionList</text>
<text text-anchor="middle" x="739.83" y="-1240.7" font-family="Arial" font-size="10.00" style="">+ findByTransactionDate(ZonedDateTime): TransactionList</text>
<text text-anchor="middle" x="739.83" y="-1228.7" font-family="Arial" font-size="10.00" style="">+ remove(Transaction): void</text>
<text text-anchor="middle" x="739.83" y="-1216.7" font-family="Arial" font-size="10.00" style="">+ save(): void</text>
</g>
<!-- TransactionManager&#45;&gt;TransactionOperationEnum -->
<g id="edge24" class="edge" data-name="TransactionManager-&gt;TransactionOperationEnum">
<g id="edge18" class="edge" data-name="TransactionManager-&gt;TransactionOperationEnum">
<path fill="none" stroke="black" d="M197.74,-672.33C166.19,-607.79 124.4,-522.33 97.16,-466.6" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="92.91,-457.92 101.35,-464.92 95.11,-462.41 97.3,-466.9 97.3,-466.9 97.3,-466.9 95.11,-462.41 93.26,-468.88 92.91,-457.92 92.91,-457.92"/>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M752.94,-1209.95C757.97,-1175.82 763.36,-1139.34 766.89,-1115.42" style=""/>
<polygon fill="black" stroke="black" points="768.33,-1105.67 771.32,-1116.22 767.6,-1110.61 766.87,-1115.56 766.87,-1115.56 766.87,-1115.56 767.6,-1110.61 762.42,-1114.9 768.33,-1105.67 768.33,-1105.67" style=""/>
<text text-anchor="middle" x="772.34" y="-1162" font-family="Arial" font-size="9.00" style="">uses</text>
</g>
<!-- TransactionManager&#45;&gt;Customer -->
<g id="edge20" class="edge" data-name="TransactionManager-&gt;Customer">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M802.02,-1210.07C819.25,-1182.31 836.57,-1150.88 848.83,-1120.2 861.75,-1087.87 871.87,-1051.97 879.7,-1017.55" style=""/>
<polygon fill="black" stroke="black" points="881.85,-1007.88 884.07,-1018.62 880.77,-1012.76 879.68,-1017.64 879.68,-1017.64 879.68,-1017.64 880.77,-1012.76 875.29,-1016.67 881.85,-1007.88 881.85,-1007.88" style=""/>
<text text-anchor="middle" x="879.34" y="-1085" font-family="Arial" font-size="9.00" style="">uses</text>
</g>
<!-- TransactionManager&#45;&gt;InventoryList -->
<g id="edge21" class="edge" data-name="TransactionManager-&gt;InventoryList">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M646.35,-1210.01C624.09,-1183.42 603.21,-1152.63 590.83,-1120.2 552.5,-1019.74 565.73,-678.25 570.45,-579.84" style=""/>
<polygon fill="black" stroke="black" points="570.93,-570.08 574.94,-580.29 570.69,-575.07 570.44,-580.07 570.44,-580.07 570.44,-580.07 570.69,-575.07 565.95,-579.84 570.93,-570.08 570.93,-570.08" style=""/>
<text text-anchor="middle" x="583.34" y="-1029.1" font-family="Arial" font-size="9.00" style="">uses</text>
</g>
<!-- TransactionManager&#45;&gt;TransactionList -->
<g id="edge17" class="edge" data-name="TransactionManager-&gt;TransactionList">
<g id="edge11" class="edge" data-name="TransactionManager-&gt;TransactionList">
<path fill="none" stroke="black" d="M237.61,-672.33C234.66,-598.28 230.62,-496.69 228.53,-444.06"/>
<polygon fill="black" stroke="black" points="228.13,-434.21 233.03,-444.03 228.33,-439.21 228.53,-444.21 228.53,-444.21 228.53,-444.21 228.33,-439.21 224.04,-444.38 228.13,-434.21 228.13,-434.21"/>
<text text-anchor="middle" x="269.4" y="-573.5" font-family="Arial" font-size="9.00">TRANSACTIONS</text>
<path fill="none" stroke="black" d="M690.4,-1209.99C687.24,-1203.68 684.18,-1197.37 681.33,-1191.2 669.95,-1166.6 659.04,-1137.73 651.58,-1116.9" style=""/>
<polygon fill="black" stroke="black" points="651.6,-1116.98 645.83,-1112.66 647.6,-1105.67 653.37,-1109.99 651.6,-1116.98" style=""/>
<text text-anchor="middle" x="716.09" y="-1162" font-family="Arial" font-size="9.00" style="">TRANSACTIONS</text>
</g>
<!-- DataRepository -->
<g id="node17" class="node" pointer-events="visible" data-name="DataRepository">
<polygon fill="none" stroke="black" points="623.58,-971.9 623.58,-1103.9 862.71,-1103.9 862.71,-971.9 623.58,-971.9"/>
<text text-anchor="middle" x="743.14" y="-1090.9" font-family="Arial" font-size="10.00">DataRepository</text>
<polyline fill="none" stroke="black" points="623.58,-1083.9 862.71,-1083.9"/>
<text text-anchor="start" x="631.58" y="-1070.9" font-family="Arial" font-size="10.00">- INSTANCE: DataRepository</text>
<polyline fill="none" stroke="black" points="623.58,-1063.9 862.71,-1063.9"/>
<text text-anchor="start" x="631.58" y="-1050.9" font-family="Arial" font-size="10.00">+ getInstance(): DataRepository</text>
<text text-anchor="start" x="631.58" y="-1038.9" font-family="Arial" font-size="10.00">+ generateRandomID(int): String</text>
<text text-anchor="start" x="631.58" y="-1026.9" font-family="Arial" font-size="10.00">+ generateRandom10DigitID(): String</text>
<text text-anchor="start" x="631.58" y="-1014.9" font-family="Arial" font-size="10.00">+ WalkFileSystemTree(InventoryManager): void</text>
<text text-anchor="start" x="631.58" y="-1002.9" font-family="Arial" font-size="10.00">+ WalkFileSystemTree(CustomerManager): void</text>
<text text-anchor="start" x="631.58" y="-990.9" font-family="Arial" font-size="10.00">+ WalkFileSystemTree(TransactionManager): void</text>
<text text-anchor="start" x="631.58" y="-978.9" font-family="Arial" font-size="10.00">+ mapJsonToObjectList(String, Class): List</text>
</g>
<!-- DataRepository&#45;&gt;CustomerManager -->
<g id="edge21" class="edge" data-name="DataRepository-&gt;CustomerManager">
<path fill="none" stroke="black" d="M811.04,-972.18C825.32,-957.16 839.79,-940.81 852.14,-924.6 874.39,-895.4 895.49,-860.56 912.12,-830.72" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="916.92,-822.04 916.02,-832.97 914.5,-826.42 912.08,-830.8 912.08,-830.8 912.08,-830.8 914.5,-826.42 908.14,-828.62 916.92,-822.04 916.92,-822.04"/>
<polygon fill="orange" stroke="black" points="697.37,-1451.5 697.37,-1487.5 782.29,-1487.5 782.29,-1451.5 697.37,-1451.5" style=""/>
<text text-anchor="middle" x="739.83" y="-1466.5" font-family="Arial" font-size="10.00" style="">DataRepository</text>
</g>
<!-- DataRepository&#45;&gt;InventoryManager -->
<g id="edge20" class="edge" data-name="DataRepository-&gt;InventoryManager">
<g id="edge15" class="edge" data-name="DataRepository-&gt;InventoryManager">
<path fill="none" stroke="black" d="M743.14,-972.01C743.14,-935.42 743.14,-889.23 743.14,-849.6" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="743.14,-839.67 747.64,-849.67 743.14,-844.67 743.14,-849.67 743.14,-849.67 743.14,-849.67 743.14,-844.67 738.64,-849.67 743.14,-839.67 743.14,-839.67"/>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M697.51,-1459.03C658.8,-1448.35 602.32,-1427.42 566.83,-1390.2 515.24,-1336.09 492.34,-1248.44 483.19,-1200.22" style=""/>
<polygon fill="black" stroke="black" points="481.44,-1190.56 487.65,-1199.6 482.34,-1195.48 483.23,-1200.4 483.23,-1200.4 483.23,-1200.4 482.34,-1195.48 478.8,-1201.2 481.44,-1190.56 481.44,-1190.56" style=""/>
<text text-anchor="middle" x="611.34" y="-1410.9" font-family="Arial" font-size="9.00" style="">uses</text>
</g>
<!-- DataRepository&#45;&gt;CustomerManager -->
<g id="edge16" class="edge" data-name="DataRepository-&gt;CustomerManager">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M765.24,-1451.51C773.25,-1446.51 782.25,-1441.25 790.83,-1437 842.88,-1411.23 862.08,-1418.43 912.83,-1390.2 925.95,-1382.9 939.22,-1374.28 951.9,-1365.31" style=""/>
<polygon fill="black" stroke="black" points="959.71,-1359.7 954.22,-1369.19 955.65,-1362.62 951.59,-1365.54 951.59,-1365.54 951.59,-1365.54 955.65,-1362.62 948.96,-1361.88 959.71,-1359.7 959.71,-1359.7" style=""/>
<text text-anchor="middle" x="880.34" y="-1410.9" font-family="Arial" font-size="9.00" style="">uses</text>
</g>
<!-- DataRepository&#45;&gt;TransactionManager -->
<g id="edge22" class="edge" data-name="DataRepository-&gt;TransactionManager">
<g id="edge17" class="edge" data-name="DataRepository-&gt;TransactionManager">
<path fill="none" stroke="black" d="M623.76,-1005.76C562.84,-987.09 488.97,-960.03 428.14,-924.6 396.5,-906.17 365.16,-882.07 337.45,-858.13" stroke-dasharray="5,2"/>
<polygon fill="black" stroke="black" points="330.11,-851.72 340.6,-854.91 333.88,-855.01 337.64,-858.3 337.64,-858.3 337.64,-858.3 333.88,-855.01 334.68,-861.69 330.11,-851.72 330.11,-851.72"/>
</g>
<!-- RuntimeException -->
<g id="node25" class="node" pointer-events="visible" data-name="RuntimeException">
</g>
<!-- InvalidRecordDataException&#45;&gt;RuntimeException -->
<g id="edge8" class="edge" data-name="InvalidRecordDataException-&gt;RuntimeException">
<path fill="none" stroke="black" d="M1505.35,-376.55C1469.52,-317.92 1391.98,-191.05 1358.31,-135.95"/>
<polygon fill="none" stroke="black" points="1361.35,-134.22 1353.15,-127.51 1355.38,-137.87 1361.35,-134.22"/>
<text text-anchor="middle" x="1438.9" y="-237.7" font-family="Arial" font-size="9.00">extends</text>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M739.83,-1451.8C739.83,-1438.9 739.83,-1419.9 739.83,-1399.68" style=""/>
<polygon fill="black" stroke="black" points="739.83,-1389.69 744.33,-1399.69 739.83,-1394.69 739.83,-1399.69 739.83,-1399.69 739.83,-1399.69 739.83,-1394.69 735.33,-1399.69 739.83,-1389.69 739.83,-1389.69" style=""/>
<text text-anchor="middle" x="749.34" y="-1410.9" font-family="Arial" font-size="9.00" style="">uses</text>
</g>
<!-- InvalidArtOperationException -->
<g id="node19" class="node" pointer-events="visible" data-name="InvalidArtOperationException">
<g id="node18" class="node" pointer-events="visible" data-name="InvalidArtOperationException">
<polygon fill="none" stroke="black" points="1659.56,-376.3 1659.56,-440.3 1898.72,-440.3 1898.72,-376.3 1659.56,-376.3"/>
<text text-anchor="middle" x="1779.14" y="-427.3" font-family="Arial" font-size="10.00">InvalidArtOperationException</text>
<polyline fill="none" stroke="black" points="1659.56,-420.3 1898.72,-420.3"/>
<text text-anchor="start" x="1667.56" y="-407.3" font-family="Arial" font-size="10.00">+ InvalidArtOperationException(String)</text>
<text text-anchor="start" x="1667.56" y="-395.3" font-family="Arial" font-size="10.00">+ InvalidArtOperationException(String, Throwable)</text>
<text text-anchor="start" x="1667.56" y="-383.3" font-family="Arial" font-size="10.00">+ InvalidArtOperationException(Throwable)</text>
</g>
<!-- InvalidArtOperationException&#45;&gt;RuntimeException -->
<g id="edge9" class="edge" data-name="InvalidArtOperationException-&gt;RuntimeException">
<path fill="none" stroke="black" d="M1757.2,-376.46C1733.71,-345.09 1693.97,-296.55 1651.14,-263.8 1562.8,-196.25 1440.29,-145.6 1379.48,-122.81"/>
<polygon fill="none" stroke="black" points="1380.88,-119.59 1370.28,-119.4 1378.45,-126.16 1380.88,-119.59"/>
<text text-anchor="middle" x="1636.9" y="-237.7" font-family="Arial" font-size="9.00">extends</text>
<polygon fill="tomato" stroke="black" points="800.25,-1437.5 800.25,-1501.5 1039.42,-1501.5 1039.42,-1437.5 800.25,-1437.5" style=""/>
<text text-anchor="middle" x="919.83" y="-1488.5" font-family="Arial" font-size="10.00" style="">InvalidArtOperationException</text>
<polyline fill="none" stroke="black" points="800.25,-1481.5 1039.42,-1481.5" style=""/>
<polyline fill="none" stroke="black" points="800.25,-1481.5 1039.42,-1481.5" style=""/>
<text text-anchor="middle" x="919.83" y="-1468.5" font-family="Arial" font-size="10.00" style="">+ InvalidArtOperationException(String)</text>
<text text-anchor="middle" x="919.83" y="-1456.5" font-family="Arial" font-size="10.00" style="">+ InvalidArtOperationException(String, Throwable)</text>
<text text-anchor="middle" x="919.83" y="-1444.5" font-family="Arial" font-size="10.00" style="">+ InvalidArtOperationException(Throwable)</text>
</g>
<!-- InvalidTransactionException -->
<g id="node20" class="node" pointer-events="visible" data-name="InvalidTransactionException">
<polygon fill="none" stroke="black" points="883.78,-376.3 883.78,-440.3 1118.5,-440.3 1118.5,-376.3 883.78,-376.3"/>
<text text-anchor="middle" x="1001.14" y="-427.3" font-family="Arial" font-size="10.00">InvalidTransactionException</text>
<polyline fill="none" stroke="black" points="883.78,-420.3 1118.5,-420.3"/>
<text text-anchor="start" x="891.78" y="-407.3" font-family="Arial" font-size="10.00">+ InvalidTransactionException(String)</text>
<text text-anchor="start" x="891.78" y="-395.3" font-family="Arial" font-size="10.00">+ InvalidTransactionException(String, Throwable)</text>
<text text-anchor="start" x="891.78" y="-383.3" font-family="Arial" font-size="10.00">+ InvalidTransactionException(Throwable)</text>
</g>
<!-- InvalidTransactionException&#45;&gt;RuntimeException -->
<g id="edge10" class="edge" data-name="InvalidTransactionException-&gt;RuntimeException">
<path fill="none" stroke="black" d="M1024.88,-376.35C1048.94,-345.99 1088.09,-299.2 1127.14,-263.8 1185.22,-211.16 1261.37,-160.16 1305.71,-131.98"/>
<polygon fill="none" stroke="black" points="1307.34,-135.1 1313.93,-126.8 1303.6,-129.18 1307.34,-135.1"/>
<text text-anchor="middle" x="1175.9" y="-237.7" font-family="Arial" font-size="9.00">extends</text>
<polygon fill="tomato" stroke="black" points="1057.48,-1437.5 1057.48,-1501.5 1292.19,-1501.5 1292.19,-1437.5 1057.48,-1437.5" style=""/>
<text text-anchor="middle" x="1174.83" y="-1488.5" font-family="Arial" font-size="10.00" style="">InvalidTransactionException</text>
<polyline fill="none" stroke="black" points="1057.48,-1481.5 1292.19,-1481.5" style=""/>
<polyline fill="none" stroke="black" points="1057.48,-1481.5 1292.19,-1481.5" style=""/>
<text text-anchor="middle" x="1174.83" y="-1468.5" font-family="Arial" font-size="10.00" style="">+ InvalidTransactionException(String)</text>
<text text-anchor="middle" x="1174.83" y="-1456.5" font-family="Arial" font-size="10.00" style="">+ InvalidTransactionException(String, Throwable)</text>
<text text-anchor="middle" x="1174.83" y="-1444.5" font-family="Arial" font-size="10.00" style="">+ InvalidTransactionException(Throwable)</text>
</g>
<!-- InvalidTransOperationException -->
<g id="node21" class="node" pointer-events="visible" data-name="InvalidTransOperationException">
<polygon fill="none" stroke="black" points="1136.17,-376.3 1136.17,-440.3 1388.12,-440.3 1388.12,-376.3 1136.17,-376.3"/>
<text text-anchor="middle" x="1262.14" y="-427.3" font-family="Arial" font-size="10.00">InvalidTransOperationException</text>
<polyline fill="none" stroke="black" points="1136.17,-420.3 1388.12,-420.3"/>
<text text-anchor="start" x="1144.17" y="-407.3" font-family="Arial" font-size="10.00">+ InvalidTransOperationException(String)</text>
<text text-anchor="start" x="1144.17" y="-395.3" font-family="Arial" font-size="10.00">+ InvalidTransOperationException(String, Throwable)</text>
<text text-anchor="start" x="1144.17" y="-383.3" font-family="Arial" font-size="10.00">+ InvalidTransOperationException(Throwable)</text>
</g>
<!-- InvalidTransOperationException&#45;&gt;RuntimeException -->
<g id="edge11" class="edge" data-name="InvalidTransOperationException-&gt;RuntimeException">
<path fill="none" stroke="black" d="M1270.4,-376.55C1286.02,-318.4 1319.67,-193.16 1334.66,-137.34"/>
<polygon fill="none" stroke="black" points="1338.04,-138.25 1337.26,-127.68 1331.28,-136.43 1338.04,-138.25"/>
<text text-anchor="middle" x="1322.9" y="-237.7" font-family="Arial" font-size="9.00">extends</text>
<polygon fill="tomato" stroke="black" points="1309.86,-1437.5 1309.86,-1501.5 1561.81,-1501.5 1561.81,-1437.5 1309.86,-1437.5" style=""/>
<text text-anchor="middle" x="1435.83" y="-1488.5" font-family="Arial" font-size="10.00" style="">InvalidTransOperationException</text>
<polyline fill="none" stroke="black" points="1309.86,-1481.5 1561.81,-1481.5" style=""/>
<polyline fill="none" stroke="black" points="1309.86,-1481.5 1561.81,-1481.5" style=""/>
<text text-anchor="middle" x="1435.83" y="-1468.5" font-family="Arial" font-size="10.00" style="">+ InvalidTransOperationException(String)</text>
<text text-anchor="middle" x="1435.83" y="-1456.5" font-family="Arial" font-size="10.00" style="">+ InvalidTransOperationException(String, Throwable)</text>
<text text-anchor="middle" x="1435.83" y="-1444.5" font-family="Arial" font-size="10.00" style="">+ InvalidTransOperationException(Throwable)</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 38 KiB