aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGunther6070 <haydenhartman10@yahoo.com>2025-04-14 20:56:32 -0400
committerGunther6070 <haydenhartman10@yahoo.com>2025-04-14 20:56:32 -0400
commit49250e60cf168ae9c5aab0e589a68b4c6c2bf800 (patch)
tree5abfc6044b2e851d537c43a914f921a1fe153768
parent82240d78bbabc6b08115906810157d1dc2c8ac95 (diff)
downloadJellySolutions-49250e60cf168ae9c5aab0e589a68b4c6c2bf800.tar.gz
JellySolutions-49250e60cf168ae9c5aab0e589a68b4c6c2bf800.tar.bz2
JellySolutions-49250e60cf168ae9c5aab0e589a68b4c6c2bf800.zip
Updated uml and Model tier in design doc
-rw-r--r--docs/DesignDoc.md12
-rw-r--r--docs/u-fund.drawio.pngbin363762 -> 360143 bytes
-rw-r--r--docs/u-fund.drawio.xml71
3 files changed, 40 insertions, 43 deletions
diff --git a/docs/DesignDoc.md b/docs/DesignDoc.md
index 0aaaa4b..41f519a 100644
--- a/docs/DesignDoc.md
+++ b/docs/DesignDoc.md
@@ -94,7 +94,6 @@ Users are able to login to the Ufund, either as a manager or helper. They can cr
- AS a Developer I want api keys to be removed when expired SO THAT hundreds of expired keys do not pile up.
- As a user I want to put in my password so that my account is secure.
- AS a user I WANT to see a simple signup page SO THAT I can easily create an account without confusion.
- -
### Enhancements
@@ -223,9 +222,9 @@ Controllers
- UserController: Handles http requests to interact with users, calling to the userService
Services
- - authService: Handles logging in and out, as well as authenticating users when they try and visit pages.
- - cupboardService: Handles all logic dealing with needs, verifying inputs and throwing errors.
- - userService: Handles all logic dealing with users, verifying inputs and throwing errors.
+ - AuthService: Handles logging in and out, as well as authenticating users when they try and visit pages.
+ - CupboardService: Handles all logic dealing with needs, verifying inputs and throwing errors.
+ - UserService: Handles all logic dealing with users, verifying inputs and throwing errors.
> _**[Sprint 4]** Provide a summary of this tier of your architecture. This
> section will follow the same instructions that are given for the View
@@ -242,7 +241,10 @@ Requests are sent from the view tier and handled by controllers. For example, wh
> _**[Sprint 1]** List the classes supporting this tier and provide a description of there purpose._
-The Model Tier contains the classes responsible for handling and serving Need data. In the model subsection is our Need.java, which handles the Need class itself and provides helper functions to get and set Need data. The persistence subjection handles stored data, using Data Access Objects (DAOs). The Controller section connects the two previous ones, handling the transfer of Needs to persistent storage.
+Models
+ - Need: A need contains information pertaining to donating, such as a goal and current donations, as well as additional information to provide specifics for each need
+ - User: A user represents a single account on our website, containing info like a username and a hashed password as well as other fields for specifics
+ - UserAuth: A user auth is created whenever a user logs into the website, associating a username to a key. UserAuths are used to verify if a user has access to a CRUD operation
> _**[Sprint 2, 3 & 4]** Provide a summary of this tier of your architecture. This
> section will follow the same instructions that are given for the View
diff --git a/docs/u-fund.drawio.png b/docs/u-fund.drawio.png
index e4a156a..b9655f1 100644
--- a/docs/u-fund.drawio.png
+++ b/docs/u-fund.drawio.png
Binary files differ
diff --git a/docs/u-fund.drawio.xml b/docs/u-fund.drawio.xml
index 8df8497..4095262 100644
--- a/docs/u-fund.drawio.xml
+++ b/docs/u-fund.drawio.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.2.2 Chrome/134.0.6998.178 Electron/35.1.2 Safari/537.36" version="26.2.2">
<diagram id="WOSjVCChJG0uuKkKcy1j" name="Page-1">
- <mxGraphModel dx="3443" dy="1448" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0">
+ <mxGraphModel dx="3154" dy="1238" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
@@ -12,22 +12,22 @@
<mxGeometry x="-1337" y="930" width="285" height="190" as="geometry" />
</mxCell>
<mxCell id="node12" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;CupboardController&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ CupboardController(CupboardService, AuthService): &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ createNeed(Map&amp;lt;String, Object&amp;gt;, String): ResponseEntity&amp;lt;Object&amp;gt;&lt;br/&gt;+ deleteNeed(int, String): ResponseEntity&amp;lt;Object&amp;gt;&lt;br/&gt;- of(Object[]): Object[]&lt;br/&gt;+ getNeed(int): ResponseEntity&amp;lt;Object&amp;gt;&lt;br/&gt;+ checkoutNeeds(List&amp;lt;Map&amp;lt;String, Integer&amp;gt;&amp;gt;, String): ResponseEntity&amp;lt;Object&amp;gt;&lt;br/&gt;+ searchNeeds(String): ResponseEntity&amp;lt;Object&amp;gt;&lt;br/&gt;+ updateNeed(Need, int, String): ResponseEntity&amp;lt;Object&amp;gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt; needs: ResponseEntity&amp;lt;Object&amp;gt;&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
- <mxGeometry x="-1771" y="395" width="492" height="235" as="geometry" />
+ <mxGeometry x="-1771" y="395" width="501" height="235" as="geometry" />
</mxCell>
<mxCell id="node17" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;interface&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;CupboardDAO&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ deleteNeed(int): boolean&lt;br/&gt;+ getNeed(int): Need&lt;br/&gt;+ addNeed(Need): Need&lt;br/&gt;+ updateNeed(Need): Need&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt; needs: Need[]&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
- <mxGeometry x="-676" y="440" width="192" height="142" as="geometry" />
+ <mxGeometry x="-620" y="440" width="192" height="142" as="geometry" />
</mxCell>
<mxCell id="node2" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;CupboardFileDAO&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ CupboardFileDAO(String, ObjectMapper): &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- needs: Map&amp;lt;Integer, Need&amp;gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getNeed(int): Need&lt;br/&gt;+ addNeed(Need): Need&lt;br/&gt;- save(): void&lt;br/&gt;+ deleteNeed(int): boolean&lt;br/&gt;- load(): void&lt;br/&gt;- nextId(): int&lt;br/&gt;+ updateNeed(Need): Need&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt; needs: Need[]&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
- <mxGeometry x="-342" y="383" width="286" height="267" as="geometry" />
+ <mxGeometry x="-342" y="377.5" width="286" height="267" as="geometry" />
</mxCell>
<mxCell id="node16" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;CupboardService&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ CupboardService(AuthService, CupboardDAO): &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ checkoutNeed(int, double, String): void&lt;br/&gt;+ createNeed(String, String, String, double, GoalType, boolean, String): Need&lt;br/&gt;+ getNeed(int): Need&lt;br/&gt;+ deleteNeed(int): boolean&lt;br/&gt;+ searchNeeds(String): Need[]&lt;br/&gt;+ updateNeed(Need, int): Need&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt; needs: Need[]&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
- <mxGeometry x="-1185" y="406" width="415" height="210" as="geometry" />
+ <mxGeometry x="-1185" y="406" width="485" height="210" as="geometry" />
</mxCell>
<mxCell id="node19" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;GoalType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ GoalType(): &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ valueOf(String): GoalType&lt;br/&gt;+ values(): GoalType[]&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
- <mxGeometry x="-598" y="-180" width="193" height="136" as="geometry" />
+ <mxGeometry x="-660" y="-120" width="193" height="136" as="geometry" />
</mxCell>
<mxCell id="node9" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Need&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ Need(String, String, String, double, GoalType, boolean, String): &lt;br/&gt;+ Need(Need): &lt;br/&gt;+ Need(String, String, String, int, double, GoalType, boolean, String): &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- name: String&lt;br/&gt;- type: GoalType&lt;br/&gt;- current: double&lt;br/&gt;- id: int&lt;br/&gt;- maxGoal: double&lt;br/&gt;- filterAttributes: String[]&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ toString(): String&lt;br/&gt;+ incrementCurrent(double): void&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt; name: String&lt;br/&gt; id: int&lt;br/&gt; ID: int&lt;br/&gt; type: GoalType&lt;br/&gt; current: double&lt;br/&gt; maxGoal: double&lt;br/&gt; filterAttributes: String[]&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
- <mxGeometry x="-1173.5" y="-130" width="392" height="309" as="geometry" />
+ <mxGeometry x="-1138.5" y="-130" width="392" height="309" as="geometry" />
</mxCell>
<mxCell id="node10" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;User&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ User(String, int, List&amp;lt;Integer&amp;gt;, UserType): &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- type: UserType&lt;br/&gt;- username: String&lt;br/&gt;- basket: List&amp;lt;Integer&amp;gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ addToBasket(Need): void&lt;br/&gt;+ withoutPasswordHash(): User&lt;br/&gt;+ verifyPassword(String): boolean&lt;br/&gt;+ create(String, String): User&lt;br/&gt;+ removeBasketNeed(Integer): void&lt;br/&gt;+ toString(): String&lt;br/&gt;+ copyPassword(User): void&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt; type: UserType&lt;br/&gt; basket: Integer[]&lt;br/&gt; username: String&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-272" y="1640" width="293" height="320" as="geometry" />
@@ -54,7 +54,7 @@
<mxGeometry x="-1326" y="1549" width="289" height="166" as="geometry" />
</mxCell>
<mxCell id="node18" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;UserType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ UserType(): &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ valueOf(String): UserType&lt;br/&gt;+ values(): UserType[]&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
- <mxGeometry x="120" y="1750" width="194" height="139.5" as="geometry" />
+ <mxGeometry x="140" y="1730.25" width="194" height="139.5" as="geometry" />
</mxCell>
<mxCell id="edge8" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1.000;exitY=0.331;exitDx=0;exitDy=0;entryX=0.000;entryY=0.399;entryDx=0;entryDy=0;" parent="1" source="node5" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
@@ -93,7 +93,7 @@
<mxCell id="label88" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge14" vertex="1" connectable="0">
<mxGeometry x="-1230" y="1520" as="geometry" />
</mxCell>
- <mxCell id="edge18" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0.342;entryY=0.000;entryDx=0;entryDy=0;" parent="1" source="node12" target="node13" edge="1">
+ <mxCell id="edge18" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;entryX=0.342;entryY=0.000;entryDx=0;entryDy=0;" parent="1" source="node12" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1525" y="885" />
@@ -116,36 +116,34 @@
<mxGeometry x="-1270" y="502" as="geometry" />
</mxCell>
<mxCell id="label106" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge17" vertex="1" connectable="0">
- <mxGeometry x="-1217" y="502" as="geometry" />
+ <mxGeometry x="-1210" y="520" as="geometry" />
</mxCell>
- <mxCell id="edge0" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;exitX=0.000;exitY=0.500;exitDx=0;exitDy=0;entryX=1.000;entryY=0.500;entryDx=0;entryDy=0;" parent="1" source="node2" target="node17" edge="1">
+ <mxCell id="edge0" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;exitX=0.000;exitY=0.500;exitDx=0;exitDy=0;" parent="1" source="node2" target="node17" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
- <mxCell id="edge5" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.576;entryY=1.000;entryDx=0;entryDy=0;" parent="1" source="node2" target="node9" edge="1">
+ <mxCell id="edge5" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="node2" target="node9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-199" y="293" />
- <mxPoint x="-948" y="293" />
+ <mxPoint x="-844" y="293" />
+ <mxPoint x="-844" y="179" />
</Array>
</mxGeometry>
</mxCell>
- <mxCell id="edge19" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThin;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.552;exitY=0.000;exitDx=0;exitDy=0;entryX=1.000;entryY=0.500;entryDx=0;entryDy=0;jumpStyle=none;startFill=1;" parent="1" source="node2" target="node9" edge="1">
+ <mxCell id="edge19" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThin;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.552;exitY=0.000;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;jumpStyle=none;startFill=1;" parent="1" source="node2" target="node9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
- <mxPoint x="-184" y="25" />
- <mxPoint x="-510" y="25" />
+ <mxPoint x="-184" y="102" />
+ <mxPoint x="-220" y="102" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label114" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge19" vertex="1" connectable="0">
- <mxGeometry x="-170" y="360" as="geometry" />
+ <mxGeometry x="-170" y="350" as="geometry" />
</mxCell>
- <mxCell id="label118" value="*" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge19" vertex="1" connectable="0">
- <mxGeometry x="-777" y="-40" as="geometry" />
- </mxCell>
- <mxCell id="edge22" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0.500;entryY=0.000;entryDx=0;entryDy=0;" parent="1" source="node16" target="node13" edge="1">
+ <mxCell id="edge22" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;entryX=0.500;entryY=0.000;entryDx=0;entryDy=0;" parent="1" source="node16" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-978" y="773" />
@@ -165,10 +163,10 @@
</mxGeometry>
</mxCell>
<mxCell id="label90" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge15" vertex="1" connectable="0">
- <mxGeometry x="-760" y="511" as="geometry" />
+ <mxGeometry x="-700" y="511" as="geometry" />
</mxCell>
<mxCell id="label94" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge15" vertex="1" connectable="0">
- <mxGeometry x="-703" y="491" as="geometry" />
+ <mxGeometry x="-630" y="480" as="geometry" />
</mxCell>
<mxCell id="edge23" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;" parent="1" source="node16" target="node9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
@@ -180,22 +178,20 @@
<Array as="points" />
</mxGeometry>
</mxCell>
- <mxCell id="edge24" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.998;exitY=0.533;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="node10" target="node18" edge="1">
+ <mxCell id="edge24" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;" parent="1" source="node10" target="node18" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
- <Array as="points">
- <mxPoint x="80" y="1816" />
- <mxPoint x="80" y="1820" />
- </Array>
- <mxPoint x="110" y="1823" as="targetPoint" />
+ <Array as="points" />
+ <mxPoint x="60" y="1710" as="sourcePoint" />
+ <mxPoint x="110" y="1770" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="label144" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge24" vertex="1" connectable="0">
- <mxGeometry x="30" y="1820" as="geometry" />
+ <mxGeometry x="30" y="1800" as="geometry" />
</mxCell>
<mxCell id="label148" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge24" vertex="1" connectable="0">
- <mxGeometry x="100" y="1790" as="geometry" />
+ <mxGeometry x="120" y="1770" as="geometry" />
</mxCell>
- <mxCell id="edge21" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0;entryY=0.596;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="node3" target="node14" edge="1">
+ <mxCell id="edge21" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThin;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0;entryY=0.596;entryDx=0;entryDy=0;entryPerimeter=0;startFill=1;" parent="1" source="node3" target="node14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-457" y="1117" />
@@ -209,18 +205,17 @@
<mxGeometry x="-456" y="1091" as="geometry" />
</mxCell>
<mxCell id="label130" value="*" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge21" vertex="1" connectable="0">
- <mxGeometry x="-251" y="1103" as="geometry" />
+ <mxGeometry x="-251" y="1120" as="geometry" />
</mxCell>
<mxCell id="edge2" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;exitX=0.000;exitY=0.500;exitDx=0;exitDy=0;entryX=1.000;entryY=0.500;entryDx=0;entryDy=0;jumpStyle=none;" parent="1" source="node3" target="node1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
- <mxCell id="edge7" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.987;exitY=0.000;exitDx=0;exitDy=0;entryX=0.000;entryY=0.741;entryDx=0;entryDy=0;" parent="1" source="node11" target="node13" edge="1">
+ <mxCell id="edge7" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.987;exitY=0.000;exitDx=0;exitDy=0;" parent="1" source="node11" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
- <mxPoint x="-1521" y="1070" />
- <mxPoint x="-1337" y="1070" />
+ <mxPoint x="-1521" y="1052" />
</Array>
</mxGeometry>
</mxCell>
@@ -244,7 +239,7 @@
<mxCell id="label82" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge13" vertex="1" connectable="0">
<mxGeometry x="-1363" y="1636" as="geometry" />
</mxCell>
- <mxCell id="edge6" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0.005;entryY=0.466;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="node0" target="node10" edge="1">
+ <mxCell id="edge6" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThin;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0.005;entryY=0.466;entryDx=0;entryDy=0;entryPerimeter=0;startFill=1;" parent="1" source="node0" target="node10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-456" y="1790" />
@@ -266,7 +261,7 @@
<Array as="points" />
</mxGeometry>
</mxCell>
- <mxCell id="edge12" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.536;entryY=1.000;entryDx=0;entryDy=0;" parent="1" source="node8" target="node16" edge="1">
+ <mxCell id="edge12" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;" parent="1" source="node8" target="node16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1181" y="1286" />