From 66c187b290451d92b0ef11454f9f0419fb0ff79d Mon Sep 17 00:00:00 2001
From: Lukas Karsch <lk224@hdm-stuttgart.de>
Date: Wed, 5 Apr 2023 16:53:47 +0200
Subject: [PATCH] update class diagram, update vulnerable dependency (Log4J)

---
 UML/TastyPages_Use-case.drawio | 351 +++++++++++++++++++++++++--------
 pom.xml                        |   2 +-
 2 files changed, 267 insertions(+), 86 deletions(-)

diff --git a/UML/TastyPages_Use-case.drawio b/UML/TastyPages_Use-case.drawio
index 95d6080..c00f789 100644
--- a/UML/TastyPages_Use-case.drawio
+++ b/UML/TastyPages_Use-case.drawio
@@ -1,4 +1,4 @@
-<mxfile host="app.diagrams.net" modified="2023-04-03T18:44:07.166Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36" etag="Y5yfEpCD9BEnEEo5dWZr" version="21.1.2" type="device" pages="2">
+<mxfile host="app.diagrams.net" modified="2023-04-05T14:51:18.814Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36" etag="Pt7S3uBRAIMbVok3Ld99" version="21.1.4" type="device" pages="2">
   <diagram name="Seite-1" id="guNTSU0fiwR1g74g93dq">
     <mxGraphModel dx="1434" dy="1623" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
       <root>
@@ -311,63 +311,63 @@
     </mxGraphModel>
   </diagram>
   <diagram id="IOxpQtQOinXd_60UH0zV" name="Seite-2">
-    <mxGraphModel dx="2193" dy="569" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
+    <mxGraphModel dx="2272" dy="1395" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
       <root>
         <mxCell id="0" />
         <mxCell id="1" parent="0" />
-        <mxCell id="4rBL8TMRcDE2g0Xyakx7-3" value="package : recipes" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-20" y="44" width="1040" height="740" as="geometry" />
+        <mxCell id="4rBL8TMRcDE2g0Xyakx7-3" value="package : recipes" style="swimlane;whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
+          <mxGeometry x="-20" y="44" width="1170" height="740" as="geometry" />
         </mxCell>
         <mxCell id="khY43H2GbW4oralui55t-5" value="RecipeEditor" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="260" y="40" width="200" height="86" as="geometry" />
+          <mxGeometry x="310" y="40" width="200" height="52" as="geometry" />
         </mxCell>
-        <mxCell id="khY43H2GbW4oralui55t-6" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-5" vertex="1">
+        <mxCell id="khY43H2GbW4oralui55t-8" value="+ create() : Recipe" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-5" vertex="1">
           <mxGeometry y="26" width="200" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="khY43H2GbW4oralui55t-7" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="khY43H2GbW4oralui55t-5" vertex="1">
-          <mxGeometry y="52" width="200" height="8" as="geometry" />
+        <mxCell id="khY43H2GbW4oralui55t-9" value="Singleton : RecipeManager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
+          <mxGeometry x="20" y="40" width="220" height="190" as="geometry" />
         </mxCell>
-        <mxCell id="khY43H2GbW4oralui55t-8" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-5" vertex="1">
-          <mxGeometry y="60" width="200" height="26" as="geometry" />
-        </mxCell>
-        <mxCell id="khY43H2GbW4oralui55t-9" value="Singleton : RecipeManager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="20" y="40" width="220" height="164" as="geometry" />
-        </mxCell>
-        <mxCell id="khY43H2GbW4oralui55t-10" value="- recipes : ArrayList&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-9" vertex="1">
+        <mxCell id="khY43H2GbW4oralui55t-10" value="- recipes : List&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-9" vertex="1">
           <mxGeometry y="26" width="220" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-38" value="- categories : Categories" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="khY43H2GbW4oralui55t-9">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-38" value="- categories : Categories" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-9" vertex="1">
           <mxGeometry y="52" width="220" height="26" as="geometry" />
         </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-9" value="- ingredients : IngredientList" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-9" vertex="1">
+          <mxGeometry y="78" width="220" height="26" as="geometry" />
+        </mxCell>
         <mxCell id="khY43H2GbW4oralui55t-11" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="khY43H2GbW4oralui55t-9" vertex="1">
-          <mxGeometry y="78" width="220" height="8" as="geometry" />
+          <mxGeometry y="104" width="220" height="8" as="geometry" />
         </mxCell>
         <mxCell id="khY43H2GbW4oralui55t-12" value="+ addRecipe() : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-9" vertex="1">
-          <mxGeometry y="86" width="220" height="26" as="geometry" />
+          <mxGeometry y="112" width="220" height="26" as="geometry" />
         </mxCell>
         <mxCell id="lNXn1_JIS0mlgrxrveIr-12" value="+ deleteRecipe (int i) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-9" vertex="1">
-          <mxGeometry y="112" width="220" height="26" as="geometry" />
+          <mxGeometry y="138" width="220" height="26" as="geometry" />
         </mxCell>
         <mxCell id="lNXn1_JIS0mlgrxrveIr-13" value="+ editRecipe (int i) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="khY43H2GbW4oralui55t-9" vertex="1">
-          <mxGeometry y="138" width="220" height="26" as="geometry" />
+          <mxGeometry y="164" width="220" height="26" as="geometry" />
         </mxCell>
         <mxCell id="1PDsnecl4zy3zphxMVey-1" value="RecipeSearch" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="380" y="140" width="300" height="130" as="geometry" />
+          <mxGeometry x="860" y="40" width="300" height="154" as="geometry" />
         </mxCell>
-        <mxCell id="1PDsnecl4zy3zphxMVey-2" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="1PDsnecl4zy3zphxMVey-1" vertex="1">
+        <mxCell id="ev62EXm1IyDULqRkRese-26" value="- recipesToSearch : List&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="1PDsnecl4zy3zphxMVey-1">
           <mxGeometry y="26" width="300" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="1PDsnecl4zy3zphxMVey-3" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="1PDsnecl4zy3zphxMVey-1" vertex="1">
+        <mxCell id="ev62EXm1IyDULqRkRese-27" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="1PDsnecl4zy3zphxMVey-1">
           <mxGeometry y="52" width="300" height="8" as="geometry" />
         </mxCell>
-        <mxCell id="1PDsnecl4zy3zphxMVey-4" value="+ searchByQuery(String query) : ArrayList&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="1PDsnecl4zy3zphxMVey-1" vertex="1">
-          <mxGeometry y="60" width="300" height="26" as="geometry" />
+        <mxCell id="ev62EXm1IyDULqRkRese-28" value="&lt;i&gt;Constructor:&lt;/i&gt;&lt;br&gt;+ RecipeSearch(List&amp;lt;Recipe&amp;gt; recipesToSearch)&amp;nbsp;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="1PDsnecl4zy3zphxMVey-1">
+          <mxGeometry y="60" width="300" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="1PDsnecl4zy3zphxMVey-4" value="+ searchByQuery(String query) : List&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="1PDsnecl4zy3zphxMVey-1" vertex="1">
+          <mxGeometry y="100" width="300" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-3" value="+ searchByCategory(ArrayList&amp;lt;Category&amp;gt;) : ArrayList&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="1PDsnecl4zy3zphxMVey-1">
-          <mxGeometry y="86" width="300" height="44" as="geometry" />
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-3" value="+ searchByCategory(List&amp;lt;Category&amp;gt;) : List&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="1PDsnecl4zy3zphxMVey-1" vertex="1">
+          <mxGeometry y="126" width="300" height="28" as="geometry" />
         </mxCell>
         <mxCell id="4db8lyx7makHAff3xmPV-1" value="Category" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="750" y="190" width="245" height="100" as="geometry" />
+          <mxGeometry x="670" y="216" width="245" height="100" as="geometry" />
         </mxCell>
         <mxCell id="4db8lyx7makHAff3xmPV-2" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4db8lyx7makHAff3xmPV-1" vertex="1">
           <mxGeometry y="26" width="245" height="26" as="geometry" />
@@ -378,10 +378,10 @@
         <mxCell id="4db8lyx7makHAff3xmPV-4" value="overrides:&lt;br&gt;+ equals(Object o) : boolean" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4db8lyx7makHAff3xmPV-1" vertex="1">
           <mxGeometry y="60" width="245" height="40" as="geometry" />
         </mxCell>
-        <mxCell id="4db8lyx7makHAff3xmPV-5" value="Categories" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="750" y="40" width="245" height="112" as="geometry" />
+        <mxCell id="4db8lyx7makHAff3xmPV-5" value="Singleton : Categories" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
+          <mxGeometry x="585" y="40" width="245" height="112" as="geometry" />
         </mxCell>
-        <mxCell id="4db8lyx7makHAff3xmPV-6" value="- categories : ArrayList&amp;lt;Category&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4db8lyx7makHAff3xmPV-5" vertex="1">
+        <mxCell id="4db8lyx7makHAff3xmPV-6" value="- allCategories : Set&amp;lt;Category&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4db8lyx7makHAff3xmPV-5" vertex="1">
           <mxGeometry y="26" width="245" height="26" as="geometry" />
         </mxCell>
         <mxCell id="4db8lyx7makHAff3xmPV-7" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="4db8lyx7makHAff3xmPV-5" vertex="1">
@@ -390,43 +390,65 @@
         <mxCell id="4db8lyx7makHAff3xmPV-8" value="+ registerCategory(String name) : boolean" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4db8lyx7makHAff3xmPV-5" vertex="1">
           <mxGeometry y="60" width="245" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-1" value="+ getAllCategories() : ArrayList&amp;lt;Category&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="4db8lyx7makHAff3xmPV-5">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-1" value="+ getAllCategories() : Set&amp;lt;Category&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4db8lyx7makHAff3xmPV-5" vertex="1">
           <mxGeometry y="86" width="245" height="26" as="geometry" />
         </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.633;entryY=0.998;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="90y9bFiBt-Dw9IB2Oaka-1" target="ev62EXm1IyDULqRkRese-6">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-36" value="extends" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="ev62EXm1IyDULqRkRese-35">
+          <mxGeometry x="0.5375" y="2" relative="1" as="geometry">
+            <mxPoint as="offset" />
+          </mxGeometry>
+        </mxCell>
         <mxCell id="90y9bFiBt-Dw9IB2Oaka-1" value="Recipe &lt;span style=&quot;font-weight: normal;&quot;&gt;extends RecipeComponent&lt;/span&gt;" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="300" y="430" width="270" height="184" as="geometry">
+          <mxGeometry x="315" y="502" width="270" height="206" as="geometry">
             <mxRectangle x="20" y="150" width="80" height="30" as="alternateBounds" />
           </mxGeometry>
         </mxCell>
         <mxCell id="90y9bFiBt-Dw9IB2Oaka-2" value="- ingredients: HashMap&amp;lt;RecipeComponent, Integer&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="90y9bFiBt-Dw9IB2Oaka-1" vertex="1">
           <mxGeometry y="26" width="270" height="34" as="geometry" />
         </mxCell>
-        <mxCell id="Cg_uZv0A1mTYIWKAJ-0d-2" value="- name : String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="90y9bFiBt-Dw9IB2Oaka-1" vertex="1">
-          <mxGeometry y="60" width="270" height="26" as="geometry" />
+        <mxCell id="ev62EXm1IyDULqRkRese-2" value="- description : String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="90y9bFiBt-Dw9IB2Oaka-1">
+          <mxGeometry y="60" width="270" height="24" as="geometry" />
         </mxCell>
         <mxCell id="Cg_uZv0A1mTYIWKAJ-0d-3" value="- preparation : ArrayList&amp;lt;String&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="90y9bFiBt-Dw9IB2Oaka-1" vertex="1">
-          <mxGeometry y="86" width="270" height="24" as="geometry" />
+          <mxGeometry y="84" width="270" height="24" as="geometry" />
         </mxCell>
         <mxCell id="Cg_uZv0A1mTYIWKAJ-0d-4" value="- categories : Set&amp;lt;Category&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="90y9bFiBt-Dw9IB2Oaka-1" vertex="1">
-          <mxGeometry y="110" width="270" height="26" as="geometry" />
+          <mxGeometry y="108" width="270" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-4" value="- preparationTimeMins : Integer" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="90y9bFiBt-Dw9IB2Oaka-1" vertex="1">
+          <mxGeometry y="134" width="270" height="24" as="geometry" />
+        </mxCell>
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-37" value="- categories : Set&amp;lt;Category&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="90y9bFiBt-Dw9IB2Oaka-1" vertex="1">
+          <mxGeometry y="158" width="270" height="24" as="geometry" />
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-1" value="- created : Date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="90y9bFiBt-Dw9IB2Oaka-1">
+          <mxGeometry y="182" width="270" height="24" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-4" value="- preparationTimeMins : Integer" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="90y9bFiBt-Dw9IB2Oaka-1">
-          <mxGeometry y="136" width="270" height="24" as="geometry" />
+        <mxCell id="ev62EXm1IyDULqRkRese-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.261;entryY=1.102;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1.004;exitY=0.41;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="4LD2Q_2ablrLRUKtAQnm-8" target="ev62EXm1IyDULqRkRese-6">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="430" y="416" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="330" y="467" />
+              <mxPoint x="430" y="467" />
+            </Array>
+          </mxGeometry>
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-37" value="- categories : ArrayList&amp;lt;Category&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="90y9bFiBt-Dw9IB2Oaka-1">
-          <mxGeometry y="160" width="270" height="24" as="geometry" />
+        <mxCell id="ev62EXm1IyDULqRkRese-34" value="extends" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="ev62EXm1IyDULqRkRese-33">
+          <mxGeometry x="-0.5103" relative="1" as="geometry">
+            <mxPoint x="62" y="-6" as="offset" />
+          </mxGeometry>
         </mxCell>
         <mxCell id="4LD2Q_2ablrLRUKtAQnm-8" value="Ingredient&lt;span style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;extends RecipeComponent&lt;/span&gt;" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="10" y="430" width="270" height="78" as="geometry" />
+          <mxGeometry x="20" y="446" width="270" height="52" as="geometry" />
         </mxCell>
-        <mxCell id="4LD2Q_2ablrLRUKtAQnm-11" value="- name : String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4LD2Q_2ablrLRUKtAQnm-8" vertex="1">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-25" value="- unit : Measurement" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4LD2Q_2ablrLRUKtAQnm-8" vertex="1">
           <mxGeometry y="26" width="270" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-25" value="- unit : Measurement" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="4LD2Q_2ablrLRUKtAQnm-8">
-          <mxGeometry y="52" width="270" height="26" as="geometry" />
-        </mxCell>
         <mxCell id="WwHfsR9ecwNkWHZ6sJ4B-4" value="&amp;lt;&amp;lt;enum&amp;gt;&amp;gt;&lt;br&gt;&lt;b&gt;Measurement&lt;/b&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="30" y="560" width="140" height="142" as="geometry" />
+          <mxGeometry x="55" y="566" width="140" height="142" as="geometry" />
         </mxCell>
         <mxCell id="WwHfsR9ecwNkWHZ6sJ4B-5" value="PIECE" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="WwHfsR9ecwNkWHZ6sJ4B-4" vertex="1">
           <mxGeometry y="26" width="140" height="26" as="geometry" />
@@ -441,7 +463,7 @@
           <mxGeometry y="110" width="140" height="32" as="geometry" />
         </mxCell>
         <mxCell id="4LD2Q_2ablrLRUKtAQnm-1" value="&amp;lt;&amp;lt;enum&amp;gt;&amp;gt;&lt;br&gt;&lt;b&gt;Nutriton&lt;/b&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="860" y="510" width="140" height="202" as="geometry" />
+          <mxGeometry x="730" y="506" width="140" height="202" as="geometry" />
         </mxCell>
         <mxCell id="4LD2Q_2ablrLRUKtAQnm-2" value="CALORIES" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4LD2Q_2ablrLRUKtAQnm-1" vertex="1">
           <mxGeometry y="26" width="140" height="26" as="geometry" />
@@ -462,7 +484,7 @@
           <mxGeometry y="172" width="140" height="30" as="geometry" />
         </mxCell>
         <mxCell id="4LD2Q_2ablrLRUKtAQnm-12" value="NutritionTable" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
-          <mxGeometry x="740" y="370" width="260" height="100" as="geometry" />
+          <mxGeometry x="710" y="346" width="260" height="100" as="geometry" />
         </mxCell>
         <mxCell id="4LD2Q_2ablrLRUKtAQnm-13" value="- table : HashMap&amp;lt;Nutrition, Double&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4LD2Q_2ablrLRUKtAQnm-12" vertex="1">
           <mxGeometry y="26" width="260" height="26" as="geometry" />
@@ -473,56 +495,173 @@
         <mxCell id="4LD2Q_2ablrLRUKtAQnm-15" value="+ getNutritionForRecipe (Recipe recipe) : NutritionTable" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4LD2Q_2ablrLRUKtAQnm-12" vertex="1">
           <mxGeometry y="60" width="260" height="40" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-17" value="&amp;lt;&amp;lt;abstract&amp;gt;&amp;gt;&lt;br&gt;&lt;b&gt;RecipeComponent&lt;/b&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="4rBL8TMRcDE2g0Xyakx7-3">
-          <mxGeometry x="40" y="282" width="190" height="52" as="geometry" />
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-17" value="&amp;lt;&amp;lt;abstract&amp;gt;&amp;gt;&lt;br&gt;&lt;b&gt;RecipeComponent&lt;/b&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
+          <mxGeometry x="380" y="331" width="190" height="78" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-18" value="- nutritionTable : NutritionTable" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="BmttCFs_K1xAuYzUHSLz-17">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-18" value="- nutritionTable : NutritionTable" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="BmttCFs_K1xAuYzUHSLz-17" vertex="1">
           <mxGeometry y="26" width="190" height="26" as="geometry" />
         </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-6" value="- name : String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="BmttCFs_K1xAuYzUHSLz-17">
+          <mxGeometry y="52" width="190" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-11" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0.442;exitY=0.985;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.611;entryY=-0.021;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="BmttCFs_K1xAuYzUHSLz-25" target="WwHfsR9ecwNkWHZ6sJ4B-4">
+          <mxGeometry width="160" relative="1" as="geometry">
+            <mxPoint x="138.17999999999984" y="486.004" as="sourcePoint" />
+            <mxPoint x="140" y="556" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-12" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0.441;exitY=1.067;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.439;entryY=0.005;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="BmttCFs_K1xAuYzUHSLz-1" target="4db8lyx7makHAff3xmPV-1">
+          <mxGeometry width="160" relative="1" as="geometry">
+            <mxPoint x="860" y="186" as="sourcePoint" />
+            <mxPoint x="1020" y="186" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-13" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0.325;exitY=1.102;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.46;entryY=0.002;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="4LD2Q_2ablrLRUKtAQnm-15" target="4LD2Q_2ablrLRUKtAQnm-1">
+          <mxGeometry width="160" relative="1" as="geometry">
+            <mxPoint x="665" y="532" as="sourcePoint" />
+            <mxPoint x="825" y="532" as="targetPoint" />
+            <Array as="points" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-18" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=0.425;exitY=1.069;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.093;entryY=0.019;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="lNXn1_JIS0mlgrxrveIr-13" target="90y9bFiBt-Dw9IB2Oaka-1">
+          <mxGeometry x="-0.8176" relative="1" as="geometry">
+            <mxPoint x="320" y="216" as="sourcePoint" />
+            <mxPoint x="340" y="426" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="114" y="266" />
+              <mxPoint x="340" y="266" />
+            </Array>
+            <mxPoint as="offset" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-19" value="0..*" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="ev62EXm1IyDULqRkRese-18">
+          <mxGeometry x="0.8861" y="-2" relative="1" as="geometry">
+            <mxPoint as="offset" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-22" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.007;entryY=-0.075;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="BmttCFs_K1xAuYzUHSLz-18" target="4LD2Q_2ablrLRUKtAQnm-15">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="540" y="376" as="sourcePoint" />
+            <mxPoint x="700" y="376" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-23" value="1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="ev62EXm1IyDULqRkRese-22">
+          <mxGeometry x="0.898" relative="1" as="geometry">
+            <mxPoint as="offset" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-5" value="Singleton : IngredientList" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="4rBL8TMRcDE2g0Xyakx7-3" vertex="1">
+          <mxGeometry x="20" y="276" width="210" height="100" as="geometry" />
+        </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-6" value="- ingredients : List&amp;lt;Ingredient&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="qvnAXoucquyjZ7kPEuXb-5" vertex="1">
+          <mxGeometry y="26" width="210" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-7" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="qvnAXoucquyjZ7kPEuXb-5" vertex="1">
+          <mxGeometry y="52" width="210" height="8" as="geometry" />
+        </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-13" value="+ create(String name, Measurement unit) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="qvnAXoucquyjZ7kPEuXb-5" vertex="1">
+          <mxGeometry y="60" width="210" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-30" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=0.108;exitY=1.027;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.113;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="lNXn1_JIS0mlgrxrveIr-13" target="qvnAXoucquyjZ7kPEuXb-5">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="20" y="266" as="sourcePoint" />
+            <mxPoint x="180" y="266" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-31" value="" style="endArrow=diamondThin;endFill=0;endSize=24;html=1;rounded=0;entryX=0.254;entryY=1.103;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.198;exitY=-0.028;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="4LD2Q_2ablrLRUKtAQnm-8" target="qvnAXoucquyjZ7kPEuXb-13">
+          <mxGeometry width="160" relative="1" as="geometry">
+            <mxPoint x="-80" y="426" as="sourcePoint" />
+            <mxPoint x="80" y="426" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-40" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=0.45;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="lNXn1_JIS0mlgrxrveIr-12" target="khY43H2GbW4oralui55t-8">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="230" y="186" as="sourcePoint" />
+            <mxPoint x="400" y="136" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-41" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=1.006;exitY=-0.077;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.02;entryY=0.615;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="4rBL8TMRcDE2g0Xyakx7-3" source="qvnAXoucquyjZ7kPEuXb-9" target="4db8lyx7makHAff3xmPV-8">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="270" y="126" as="sourcePoint" />
+            <mxPoint x="430" y="126" as="targetPoint" />
+            <Array as="points" />
+          </mxGeometry>
+        </mxCell>
         <mxCell id="XnVSaR7xRqF0c78tSIC_-1" value="package : shoppingList" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="50" y="880" width="730" height="160" as="geometry" />
+          <mxGeometry x="1280" y="-280" width="300" height="220" as="geometry" />
         </mxCell>
-        <mxCell id="XnVSaR7xRqF0c78tSIC_-2" value="Singleton :ShoppingList" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-1" vertex="1">
-          <mxGeometry x="20" y="40" width="160" height="86" as="geometry" />
+        <mxCell id="XnVSaR7xRqF0c78tSIC_-2" value="Singleton :ShoppingList" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="XnVSaR7xRqF0c78tSIC_-1" vertex="1">
+          <mxGeometry x="30" y="40" width="240" height="164" as="geometry" />
         </mxCell>
-        <mxCell id="XnVSaR7xRqF0c78tSIC_-3" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
-          <mxGeometry y="26" width="160" height="26" as="geometry" />
+        <mxCell id="XnVSaR7xRqF0c78tSIC_-3" value="- shoppingList : Map&amp;lt;Ingredient, Boolean&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
+          <mxGeometry y="26" width="240" height="26" as="geometry" />
         </mxCell>
         <mxCell id="XnVSaR7xRqF0c78tSIC_-4" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
-          <mxGeometry y="52" width="160" height="8" as="geometry" />
+          <mxGeometry y="52" width="240" height="8" as="geometry" />
+        </mxCell>
+        <mxCell id="XnVSaR7xRqF0c78tSIC_-5" value="+ clear() : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
+          <mxGeometry y="60" width="240" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-10" value="+ markDone(Ingredient i) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
+          <mxGeometry y="86" width="240" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="XnVSaR7xRqF0c78tSIC_-5" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
-          <mxGeometry y="60" width="160" height="26" as="geometry" />
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-11" value="+ markUndone(Ingredient i) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
+          <mxGeometry y="112" width="240" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-12" value="+ get() : HashMap&amp;lt;Ingredient, Boolean&amp;gt;&amp;nbsp;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XnVSaR7xRqF0c78tSIC_-2" vertex="1">
+          <mxGeometry y="138" width="240" height="26" as="geometry" />
         </mxCell>
         <mxCell id="xz0VCGe2YetrdaeYra_O-1" value="package : mealPlan" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="50" y="1070" width="730" height="200" as="geometry" />
+          <mxGeometry x="1250" y="414" width="620" height="250" as="geometry" />
+        </mxCell>
+        <mxCell id="xz0VCGe2YetrdaeYra_O-2" value="Sngleton : MealPlan" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="xz0VCGe2YetrdaeYra_O-1" vertex="1">
+          <mxGeometry x="20" y="39" width="180" height="190" as="geometry" />
         </mxCell>
-        <mxCell id="xz0VCGe2YetrdaeYra_O-2" value="Sngleton : MealPlan" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="xz0VCGe2YetrdaeYra_O-1" vertex="1">
-          <mxGeometry x="20" y="39" width="160" height="86" as="geometry" />
+        <mxCell id="xz0VCGe2YetrdaeYra_O-3" value="- mealPlan : Recipe[7]" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xz0VCGe2YetrdaeYra_O-2" vertex="1">
+          <mxGeometry y="26" width="180" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="xz0VCGe2YetrdaeYra_O-3" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xz0VCGe2YetrdaeYra_O-2" vertex="1">
-          <mxGeometry y="26" width="160" height="26" as="geometry" />
+        <mxCell id="ev62EXm1IyDULqRkRese-4" value="- weekNutrition : NutritionTable" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="xz0VCGe2YetrdaeYra_O-2">
+          <mxGeometry y="52" width="180" height="26" as="geometry" />
         </mxCell>
         <mxCell id="xz0VCGe2YetrdaeYra_O-4" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="xz0VCGe2YetrdaeYra_O-2" vertex="1">
-          <mxGeometry y="52" width="160" height="8" as="geometry" />
+          <mxGeometry y="78" width="180" height="8" as="geometry" />
         </mxCell>
-        <mxCell id="xz0VCGe2YetrdaeYra_O-5" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xz0VCGe2YetrdaeYra_O-2" vertex="1">
-          <mxGeometry y="60" width="160" height="26" as="geometry" />
+        <mxCell id="xz0VCGe2YetrdaeYra_O-5" value="+ add(Recipe r, int day)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xz0VCGe2YetrdaeYra_O-2" vertex="1">
+          <mxGeometry y="86" width="180" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-3" value="+ clear(int day) : Recipe" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="xz0VCGe2YetrdaeYra_O-2">
+          <mxGeometry y="112" width="180" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="qvnAXoucquyjZ7kPEuXb-14" value="+ reset() : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xz0VCGe2YetrdaeYra_O-2" vertex="1">
+          <mxGeometry y="138" width="180" height="26" as="geometry" />
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-5" value="+ get() : MealPlan" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="xz0VCGe2YetrdaeYra_O-2">
+          <mxGeometry y="164" width="180" height="26" as="geometry" />
         </mxCell>
         <mxCell id="lNXn1_JIS0mlgrxrveIr-1" value="NutritionCalculator" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="xz0VCGe2YetrdaeYra_O-1" vertex="1">
-          <mxGeometry x="210" y="39" width="160" height="86" as="geometry" />
+          <mxGeometry x="300" y="39" width="280" height="52" as="geometry" />
         </mxCell>
-        <mxCell id="lNXn1_JIS0mlgrxrveIr-2" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-1" vertex="1">
-          <mxGeometry y="26" width="160" height="26" as="geometry" />
+        <mxCell id="lNXn1_JIS0mlgrxrveIr-4" value="+ calculateWeek(MealPlan plan) : NutritionTable" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-1" vertex="1">
+          <mxGeometry y="26" width="280" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="lNXn1_JIS0mlgrxrveIr-3" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="lNXn1_JIS0mlgrxrveIr-1" vertex="1">
-          <mxGeometry y="52" width="160" height="8" as="geometry" />
+        <mxCell id="ev62EXm1IyDULqRkRese-38" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="xz0VCGe2YetrdaeYra_O-1" source="ev62EXm1IyDULqRkRese-4" target="lNXn1_JIS0mlgrxrveIr-4">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="260" y="156" as="sourcePoint" />
+            <mxPoint x="420" y="156" as="targetPoint" />
+          </mxGeometry>
         </mxCell>
-        <mxCell id="lNXn1_JIS0mlgrxrveIr-4" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-1" vertex="1">
-          <mxGeometry y="60" width="160" height="26" as="geometry" />
+        <mxCell id="lNXn1_JIS0mlgrxrveIr-5" value="Singleton : App" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
+          <mxGeometry x="1232" y="50" width="420" height="294" as="geometry" />
         </mxCell>
-        <mxCell id="lNXn1_JIS0mlgrxrveIr-5" value="Singleton : App" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="1230" y="50" width="420" height="294" as="geometry" />
+        <mxCell id="ev62EXm1IyDULqRkRese-39" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=0.278;entryY=1.138;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="lNXn1_JIS0mlgrxrveIr-5" target="qvnAXoucquyjZ7kPEuXb-12">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="98" as="sourcePoint" />
+            <mxPoint x="258" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="98" y="-63" />
+              <mxPoint x="145" y="-63" />
+            </Array>
+          </mxGeometry>
         </mxCell>
         <mxCell id="lNXn1_JIS0mlgrxrveIr-6" value="- recipeManager : RecipeManager" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-5" vertex="1">
           <mxGeometry y="26" width="420" height="26" as="geometry" />
@@ -539,7 +678,7 @@
         <mxCell id="h23uL9lWt6JHxaophjVK-3" value="- lastSearchResults : ArrayList&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-5" vertex="1">
           <mxGeometry y="130" width="420" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-15" value="- fileManager : FileManager" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="lNXn1_JIS0mlgrxrveIr-5">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-15" value="- fileManager : FileManager" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-5" vertex="1">
           <mxGeometry y="156" width="420" height="26" as="geometry" />
         </mxCell>
         <mxCell id="lNXn1_JIS0mlgrxrveIr-7" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="lNXn1_JIS0mlgrxrveIr-5" vertex="1">
@@ -554,24 +693,66 @@
         <mxCell id="h23uL9lWt6JHxaophjVK-4" value="+ search(lastSearchResults, Category category) : ArrayList&amp;lt;Recipe&amp;gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-5" vertex="1">
           <mxGeometry y="242" width="420" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-9" value="+ save(this) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="lNXn1_JIS0mlgrxrveIr-5">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-9" value="+ save(this) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="lNXn1_JIS0mlgrxrveIr-5" vertex="1">
           <mxGeometry y="268" width="420" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-11" value="FileManager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
-          <mxGeometry x="1710" y="50" width="360" height="112" as="geometry" />
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-11" value="FileManager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="1770" y="50" width="360" height="112" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-12" value="- savePath : Path" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="BmttCFs_K1xAuYzUHSLz-11">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-12" value="- savePath : Path" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="BmttCFs_K1xAuYzUHSLz-11" vertex="1">
           <mxGeometry y="26" width="360" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-13" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="BmttCFs_K1xAuYzUHSLz-11">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-13" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="BmttCFs_K1xAuYzUHSLz-11" vertex="1">
           <mxGeometry y="52" width="360" height="8" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-14" value="+ deserializeFromFile() : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="BmttCFs_K1xAuYzUHSLz-11">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-14" value="+ deserializeFromFile() : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="BmttCFs_K1xAuYzUHSLz-11" vertex="1">
           <mxGeometry y="60" width="360" height="26" as="geometry" />
         </mxCell>
-        <mxCell id="BmttCFs_K1xAuYzUHSLz-16" value="+ serializeToFile(App app) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="BmttCFs_K1xAuYzUHSLz-11">
+        <mxCell id="BmttCFs_K1xAuYzUHSLz-16" value="+ serializeToFile(App app) : void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="BmttCFs_K1xAuYzUHSLz-11" vertex="1">
           <mxGeometry y="86" width="360" height="26" as="geometry" />
         </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-32" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=1;entryY=0.11;entryDx=0;entryDy=0;entryPerimeter=0;exitX=-0.004;exitY=0.051;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="h23uL9lWt6JHxaophjVK-1" target="1PDsnecl4zy3zphxMVey-1">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="1210" y="160" as="sourcePoint" />
+            <mxPoint x="1360" y="140" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="1190" y="155" />
+              <mxPoint x="1190" y="100" />
+              <mxPoint x="1160" y="100" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-37" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.305;exitY=0.969;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="BmttCFs_K1xAuYzUHSLz-9" target="xz0VCGe2YetrdaeYra_O-2">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="1310" y="370" as="sourcePoint" />
+            <mxPoint x="1470" y="370" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-42" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.417;entryY=-0.007;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="lNXn1_JIS0mlgrxrveIr-6" target="khY43H2GbW4oralui55t-9">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="650" y="-50" as="sourcePoint" />
+            <mxPoint x="100" y="20" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="1210" y="89" />
+              <mxPoint x="1210" y="20" />
+              <mxPoint x="92" y="20" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-43" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.417;entryY=1.115;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="BmttCFs_K1xAuYzUHSLz-15" target="BmttCFs_K1xAuYzUHSLz-16">
+          <mxGeometry x="-1" y="3" relative="1" as="geometry">
+            <mxPoint x="1690" y="220" as="sourcePoint" />
+            <mxPoint x="1850" y="220" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="1920" y="219" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="ev62EXm1IyDULqRkRese-44" value="1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="ev62EXm1IyDULqRkRese-43">
+          <mxGeometry x="0.7682" y="-1" relative="1" as="geometry">
+            <mxPoint y="-10" as="offset" />
+          </mxGeometry>
+        </mxCell>
       </root>
     </mxGraphModel>
   </diagram>
diff --git a/pom.xml b/pom.xml
index bb92687..eacd70f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,7 @@
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-core</artifactId>
-            <version>2.16.0</version>
+            <version>2.17.1</version>
         </dependency>
 
     </dependencies>
-- 
GitLab