diff --git a/build.gradle b/build.gradle index 0c967f8961b2e7a1d9ba9aeaed996b08daf2c793..04460810d6e1f42e6dfc902b30318b6f3fcf8333 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,7 @@ bootRun{ } dependencies { + implementation 'org.jetbrains:annotations:20.1.0' developmentOnly 'org.springframework.boot:spring-boot-devtools' implementation 'org.eclipse.emf:org.eclipse.emf.ecore:2.+' implementation 'org.eclipse.emf:org.eclipse.emf.common:2.+' diff --git a/emf_datamodel/model/iPos_Datamodel.aird b/emf_datamodel/model/iPos_Datamodel.aird index c2d8a267b053507117f88d3bfa14aeedd8396357..e1cba59c8e3f8bf0892133fda2f02c9c295b7f66 100644 --- a/emf_datamodel/model/iPos_Datamodel.aird +++ b/emf_datamodel/model/iPos_Datamodel.aird @@ -5,7 +5,7 @@ <semanticResources>iPos_Datamodel.genmodel</semanticResources> <ownedViews xmi:type="viewpoint:DView" uid="_EpwecAQNEey-kNQ7esRa_g"> <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/> - <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_Et4wgAQNEey-kNQ7esRa_g" name="iPos_Datamodel" repPath="#_Es-xkAQNEey-kNQ7esRa_g" changeId="312793ea-fa37-4cd3-9270-a2f279f61765"> + <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_Et4wgAQNEey-kNQ7esRa_g" name="iPos_Datamodel" repPath="#_Es-xkAQNEey-kNQ7esRa_g" changeId="9e17b80d-28a7-4855-b807-bc54adcf6599"> <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> <target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#/"/> </ownedRepresentationDescriptors> @@ -13,7 +13,7 @@ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> <target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#//OFBiz"/> </ownedRepresentationDescriptors> - <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_FmM9IDx3EeyWNq6fFfWVSw" name="IPosDevKit" repPath="#_FmLvADx3EeyWNq6fFfWVSw" changeId="c29febc3-272a-4523-bfce-a791886b5899"> + <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_FmM9IDx3EeyWNq6fFfWVSw" name="IPosDevKit" repPath="#_FmLvADx3EeyWNq6fFfWVSw" changeId="3f833c36-7dc1-448e-a4b4-5ae7bd5cdb31"> <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> <target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#//IPosDevKit"/> </ownedRepresentationDescriptors> @@ -29,6 +29,10 @@ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> <target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#//OSM"/> </ownedRepresentationDescriptors> + <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_OXo28OMSEeylWPfcS0Eglw" name="IPos_Datamodel_print" repPath="#_OXjXYOMSEeylWPfcS0Eglw" changeId="49f176ef-2209-42aa-a059-8ebc99e8e576"> + <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> + <target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#//IPos_Datamodel_print"/> + </ownedRepresentationDescriptors> </ownedViews> </viewpoint:DAnalysis> <diagram:DSemanticDiagram uid="_Es-xkAQNEey-kNQ7esRa_g"> @@ -45,7 +49,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_OVFUQgQNEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_OVBp4QQNEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OVBp4gQNEey-kNQ7esRa_g" x="342" y="174" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OVBp4gQNEey-kNQ7esRa_g" x="390" y="174" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_hS0UIAQOEey-kNQ7esRa_g" type="2003" element="_hSvboAQOEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_hS0UIwQOEey-kNQ7esRa_g" type="5007"/> @@ -58,7 +62,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_hS07MgQOEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_hS0UIQQOEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hS0UIgQOEey-kNQ7esRa_g" x="480" y="30" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hS0UIgQOEey-kNQ7esRa_g" x="507" y="30" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_Pg1TsAQjEey-kNQ7esRa_g" type="2003" element="_PgvNEAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_Pg16wAQjEey-kNQ7esRa_g" type="5007"/> @@ -75,7 +79,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_Pg16wwQjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_Pg1TsQQjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Pg1TsgQjEey-kNQ7esRa_g" x="672" y="174" width="147" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Pg1TsgQjEey-kNQ7esRa_g" x="630" y="168" width="147" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_beL2gAQjEey-kNQ7esRa_g" type="2003" element="_beGW8AQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_beMdkAQjEey-kNQ7esRa_g" type="5007"/> @@ -84,7 +88,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_beMdkwQjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_beL2gQQjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_beL2ggQjEey-kNQ7esRa_g" x="690" y="420" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_beL2ggQjEey-kNQ7esRa_g" x="684" y="316" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_fodekAQjEey-kNQ7esRa_g" type="2003" element="_foX_AAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_fodekwQjEey-kNQ7esRa_g" type="5007"/> @@ -93,7 +97,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_fodelgQjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_fodekQQjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fodekgQjEey-kNQ7esRa_g" x="690" y="582" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fodekgQjEey-kNQ7esRa_g" x="684" y="449" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_hdV8kAQjEey-kNQ7esRa_g" type="2003" element="_hdQdAAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_hdWjoAQjEey-kNQ7esRa_g" type="5007"/> @@ -102,7 +106,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_hdWjowQjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_hdV8kQQjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hdV8kgQjEey-kNQ7esRa_g" x="957" y="378" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hdV8kgQjEey-kNQ7esRa_g" x="951" y="-72" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_738MEAQjEey-kNQ7esRa_g" type="2003" element="_733TkAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_738MEwQjEey-kNQ7esRa_g" type="5007"/> @@ -123,7 +127,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_738MFgQjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_738MEQQjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_738MEgQjEey-kNQ7esRa_g" x="1332" y="984" width="177" height="112"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_738MEgQjEey-kNQ7esRa_g" x="1138" y="486" width="177" height="112"/> </children> <children xmi:type="notation:Node" xmi:id="_-LbRoAQjEey-kNQ7esRa_g" type="2003" element="_-LVyEAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_-LbRowQjEey-kNQ7esRa_g" type="5007"/> @@ -132,7 +136,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_-LbRpgQjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_-LbRoQQjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-LbRogQjEey-kNQ7esRa_g" x="978" y="624" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-LbRogQjEey-kNQ7esRa_g" x="936" y="185" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_Ecj4gAQkEey-kNQ7esRa_g" type="2003" element="_EcfnEAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_EckfkAQkEey-kNQ7esRa_g" type="5007"/> @@ -149,7 +153,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_EckfkwQkEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_Ecj4gQQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ecj4ggQkEey-kNQ7esRa_g" x="1017" y="990" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ecj4ggQkEey-kNQ7esRa_g" x="844" y="479" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_HfSpsAQkEey-kNQ7esRa_g" type="2003" element="_HfNxMAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_HfSpswQkEey-kNQ7esRa_g" type="5007"/> @@ -170,7 +174,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_HfSptgQkEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_HfSpsQQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HfSpsgQkEey-kNQ7esRa_g" x="1161" y="990" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HfSpsgQkEey-kNQ7esRa_g" x="988" y="479" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_SIv7sAQkEey-kNQ7esRa_g" type="2003" element="_SIp1EAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_SIv7swQkEey-kNQ7esRa_g" type="5007"/> @@ -187,7 +191,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_SIv7tgQkEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_SIv7sQQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SIv7sgQkEey-kNQ7esRa_g" x="252" y="516" width="147" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SIv7sgQkEey-kNQ7esRa_g" x="288" y="383" width="147" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_UOFQgAQkEey-kNQ7esRa_g" type="2003" element="_UN3OEAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_UOFQgwQkEey-kNQ7esRa_g" type="5007"/> @@ -204,7 +208,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_UOFQhgQkEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_UOFQgQQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UOFQggQkEey-kNQ7esRa_g" y="516" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UOFQggQkEey-kNQ7esRa_g" y="306" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_VW89EAQkEey-kNQ7esRa_g" type="2003" element="_VW3dgAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_VW9kIAQkEey-kNQ7esRa_g" type="5007"/> @@ -213,7 +217,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_VW9kIwQkEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_VW89EQQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VW89EgQkEey-kNQ7esRa_g" y="366" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VW89EgQkEey-kNQ7esRa_g" y="156" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_XZkVEAQkEey-kNQ7esRa_g" type="2003" element="_XZe1gAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_XZk8IAQkEey-kNQ7esRa_g" type="5007"/> @@ -234,7 +238,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_XZk8IwQkEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_XZkVEQQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XZkVEgQkEey-kNQ7esRa_g" y="654" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XZkVEgQkEey-kNQ7esRa_g" y="449" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_aKkdFgQkEey-kNQ7esRa_g" type="2003" element="_aKe9gAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_aKlEIAQkEey-kNQ7esRa_g" type="5007"/> @@ -243,7 +247,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_aKlEIwQkEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_aKkdFwQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aKkdGAQkEey-kNQ7esRa_g" x="-210" y="288" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aKkdGAQkEey-kNQ7esRa_g" y="24" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_YB0RsATxEey-kNQ7esRa_g" type="2003" element="_YBru0ATxEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_YB04wATxEey-kNQ7esRa_g" type="5007"/> @@ -268,7 +272,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_YB04wwTxEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_YB0RsQTxEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YB0RsgTxEey-kNQ7esRa_g" x="1188" y="378" width="120" height="109"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YB0RsgTxEey-kNQ7esRa_g" x="1119" y="-77" width="120" height="109"/> </children> <children xmi:type="notation:Node" xmi:id="_0g1BQAT3Eey-kNQ7esRa_g" type="2003" element="_0gtsgAT3Eey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_0g1BQwT3Eey-kNQ7esRa_g" type="5007"/> @@ -281,7 +285,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_0g1oUgT3Eey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_0g1BQQT3Eey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0g1BQgT3Eey-kNQ7esRa_g" x="1110" y="624" width="225" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0g1BQgT3Eey-kNQ7esRa_g" x="1080" y="191" width="225" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_lk5_0AWMEey-kNQ7esRa_g" type="2003" element="_lkw14AWMEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_lk5_0wWMEey-kNQ7esRa_g" type="5007"/> @@ -290,7 +294,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_lk5_1gWMEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_lk5_0QWMEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lk5_0gWMEey-kNQ7esRa_g" x="1188" y="792" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lk5_0gWMEey-kNQ7esRa_g" x="993" y="334" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="__k3HcAWcEey-kNQ7esRa_g" type="2003" element="__kvLoAWcEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="__k3HcwWcEey-kNQ7esRa_g" type="5007"/> @@ -303,7 +307,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="__k3uggWcEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="__k3HcQWcEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="__k3HcgWcEey-kNQ7esRa_g" x="1464" y="-180" width="144" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="__k3HcgWcEey-kNQ7esRa_g" x="1421" y="-553" width="144" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_DsJToAWiEey-kNQ7esRa_g" type="2003" element="_DsBX0AWiEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_DsJTowWiEey-kNQ7esRa_g" type="5007"/> @@ -324,7 +328,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_DsJTpgWiEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_DsJToQWiEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DsJTogWiEey-kNQ7esRa_g" x="1890" y="-18" width="147" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DsJTogWiEey-kNQ7esRa_g" x="1847" y="-391" width="147" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_FeuEgAWiEey-kNQ7esRa_g" type="2003" element="_FemvwAWiEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_FeuEgwWiEey-kNQ7esRa_g" type="5007"/> @@ -337,7 +341,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_FeuEhgWiEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_FeuEgQWiEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FeuEggWiEey-kNQ7esRa_g" x="1656" y="132" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FeuEggWiEey-kNQ7esRa_g" x="1613" y="-241" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_GbdZkAWiEey-kNQ7esRa_g" type="2003" element="_GbXS8AWiEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_GbdZkwWiEey-kNQ7esRa_g" type="5007"/> @@ -350,7 +354,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_GbdZlgWiEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_GbdZkQWiEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GbdZkgWiEey-kNQ7esRa_g" x="1818" y="132" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GbdZkgWiEey-kNQ7esRa_g" x="1775" y="-241" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_NxDRoAWjEey-kNQ7esRa_g" type="2003" element="_Nw8j8AWjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_NxDRowWjEey-kNQ7esRa_g" type="5007"/> @@ -363,7 +367,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_NxDRpgWjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_NxDRoQWjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NxDRogWjEey-kNQ7esRa_g" x="1404" y="-12" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NxDRogWjEey-kNQ7esRa_g" x="1361" y="-408" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_YPBsYAWjEey-kNQ7esRa_g" type="2003" element="_YO6XoAWjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_YPBsYwWjEey-kNQ7esRa_g" type="5007"/> @@ -384,7 +388,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_YPBsZgWjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_YPBsYQWjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YPBsYgWjEey-kNQ7esRa_g" x="1476" y="144" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YPBsYgWjEey-kNQ7esRa_g" x="1433" y="-229" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_s0mCMAWjEey-kNQ7esRa_g" type="2003" element="_s0dfUAWjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_s0mCMwWjEey-kNQ7esRa_g" type="5007"/> @@ -405,7 +409,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_s0mpQgWjEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_s0mCMQWjEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s0mCMgWjEey-kNQ7esRa_g" x="1035" y="-24" width="132" height="106"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s0mCMgWjEey-kNQ7esRa_g" x="1032" y="-390" width="132" height="106"/> </children> <children xmi:type="notation:Node" xmi:id="_lCMqkAZsEey-kNQ7esRa_g" type="2003" element="_lBuJcAZsEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_lCN4sAZsEey-kNQ7esRa_g" type="5007"/> @@ -422,7 +426,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_lCOfwgZsEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_lCNRoAZsEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lCNRoQZsEey-kNQ7esRa_g" x="1542" y="714" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lCNRoQZsEey-kNQ7esRa_g" x="1512" y="456" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_IONsYAZtEey-kNQ7esRa_g" type="2003" element="_IOFwkAZtEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_IONsYwZtEey-kNQ7esRa_g" type="5007"/> @@ -470,7 +474,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_NNRv9gaEEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_NNRv8QaEEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NNRv8gaEEey-kNQ7esRa_g" x="87" y="-96" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NNRv8gaEEey-kNQ7esRa_g" x="186" y="24" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_M0odoAcMEey-kNQ7esRa_g" type="2003" element="_M0fTsAcMEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_M0odowcMEey-kNQ7esRa_g" type="5007"/> @@ -479,7 +483,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_M0odpgcMEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_M0odoQcMEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M0odogcMEey-kNQ7esRa_g" x="1956" y="132" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M0odogcMEey-kNQ7esRa_g" x="1913" y="-241" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_zBjrsAcMEey-kNQ7esRa_g" type="2003" element="_zBZToAcMEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_zBkSwAcMEey-kNQ7esRa_g" type="5007"/> @@ -492,7 +496,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_zBkSwwcMEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_zBjrsQcMEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zBjrsgcMEey-kNQ7esRa_g" x="2118" y="132" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zBjrsgcMEey-kNQ7esRa_g" x="2075" y="-241" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_I-Y58AcOEey-kNQ7esRa_g" type="2003" element="_I-N60AcOEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_I-Y58wcOEey-kNQ7esRa_g" type="5007"/> @@ -505,7 +509,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_I-Y59gcOEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_I-Y58QcOEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_I-Y58gcOEey-kNQ7esRa_g" x="897" y="138" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_I-Y58gcOEey-kNQ7esRa_g" x="894" y="-228" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_K7QPQAcOEey-kNQ7esRa_g" type="2003" element="_K7F3MAcOEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_K7QPQwcOEey-kNQ7esRa_g" type="5007"/> @@ -514,7 +518,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_K7QPRgcOEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_K7QPQQcOEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_K7QPQgcOEey-kNQ7esRa_g" x="1047" y="138" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_K7QPQgcOEey-kNQ7esRa_g" x="1044" y="-228" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_VKA6kAcUEey-kNQ7esRa_g" type="2003" element="_VJ0tUAcUEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_VKA6kwcUEey-kNQ7esRa_g" type="5007"/> @@ -527,7 +531,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_VKA6lgcUEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_VKA6kQcUEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VKA6kgcUEey-kNQ7esRa_g" x="1185" y="138" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VKA6kgcUEey-kNQ7esRa_g" x="1182" y="-228" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_Ml8T0AcsEey-kNQ7esRa_g" type="2003" element="_Mlx7wAcsEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_Ml8T0wcsEey-kNQ7esRa_g" type="5007"/> @@ -548,7 +552,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ml864gcsEey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_Ml8T0QcsEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ml8T0gcsEey-kNQ7esRa_g" x="432" y="572" width="141" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ml8T0gcsEey-kNQ7esRa_g" x="468" y="475" width="141" height="100"/> </children> <children xmi:type="notation:Shape" xmi:id="_KThIwActEey-kNQ7esRa_g" type="Note" fontName="Segoe UI" description="zB Bluetooth-Sensor Referenzpositionen" fillColor="13369343" transparency="0" lineColor="6737151" lineWidth="1"> <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_KThIwQctEey-kNQ7esRa_g" source="specificStyles"> @@ -563,7 +567,7 @@ <styles xmi:type="notation:TextStyle" xmi:id="_KThIwwctEey-kNQ7esRa_g" textAlignment="Center"/> <styles xmi:type="notation:LineTypeStyle" xmi:id="_KThIxActEey-kNQ7esRa_g"/> <element xsi:nil="true"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KThIxQctEey-kNQ7esRa_g" x="1992" y="546"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KThIxQctEey-kNQ7esRa_g" x="2016" y="480"/> </children> <children xmi:type="notation:Shape" xmi:id="_fXJ6oActEey-kNQ7esRa_g" type="Note" fontName="Segoe UI" description="EventFilterConfiguration - Mehrdeutigkeiten: Mehrere Positionssensoren pro Agent. Eine Strategie ist optimizeMeasurementError (Sensordatenfusion). Ein ambigruityParameter ist dann ambiguityToleranceInterval, also wie weit dürfen zwei Sensorwerte zeitlich auseinander liegen für Sensordatenfusion" fillColor="13369343" transparency="0" lineColor="6737151" lineWidth="1"> <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fXJ6oQctEey-kNQ7esRa_g" source="specificStyles"> @@ -631,7 +635,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_D9Zrhgc-Eey-kNQ7esRa_g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_D9ZrgQc-Eey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_D9Zrggc-Eey-kNQ7esRa_g" x="2640" y="484" width="185" height="240"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_D9Zrggc-Eey-kNQ7esRa_g" x="2724" y="-299" width="185" height="356"/> </children> <children xmi:type="notation:Node" xmi:id="_KIxxkBFjEeydeasO1RaQEg" type="2003" element="_KHc74BFjEeydeasO1RaQEg"> <children xmi:type="notation:Node" xmi:id="_KI2DABFjEeydeasO1RaQEg" type="5007"/> @@ -713,7 +717,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_Q9TKoixEEeyc2bacnWuMrg"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_Q9NrESxEEeyc2bacnWuMrg" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q9NrEixEEeyc2bacnWuMrg" x="1536" y="564" width="171" height="75"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q9NrEixEEeyc2bacnWuMrg" x="1506" y="306" width="171" height="75"/> </children> <children xmi:type="notation:Node" xmi:id="_ipaesCxSEeyc2bacnWuMrg" type="2003" element="_ipG8sCxSEeyc2bacnWuMrg"> <children xmi:type="notation:Node" xmi:id="_ipbFwCxSEeyc2bacnWuMrg" type="5007"/> @@ -755,7 +759,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_-3jvg5SJEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_-3jIcZSJEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-3jIcpSJEeyJ0bON1VCj7g" x="1877" y="954" width="190" height="142"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-3jIcpSJEeyJ0bON1VCj7g" x="1477" y="642" width="190" height="142"/> </children> <children xmi:type="notation:Node" xmi:id="_swdx1JSKEeyJ0bON1VCj7g" type="2003" element="_swMsEJSKEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_swdx15SKEeyJ0bON1VCj7g" type="5007"/> @@ -815,18 +819,18 @@ </edges> <edges xmi:type="notation:Edge" xmi:id="_jdZ6YAQkEey-kNQ7esRa_g" type="4001" element="_jdJbsAQkEey-kNQ7esRa_g" source="_VW89EAQkEey-kNQ7esRa_g" target="_aKkdFgQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_jdZ6ZAQkEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jdZ6ZQQkEey-kNQ7esRa_g" x="6" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jdZ6ZQQkEey-kNQ7esRa_g" x="-10" y="-10"/> </children> <children xmi:type="notation:Node" xmi:id="_jdZ6ZgQkEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jdZ6ZwQkEey-kNQ7esRa_g" x="70" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jdZ6ZwQkEey-kNQ7esRa_g" x="44" y="-59"/> </children> <children xmi:type="notation:Node" xmi:id="_jdZ6aAQkEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jdZ6aQQkEey-kNQ7esRa_g" x="27" y="-17"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jdZ6aQQkEey-kNQ7esRa_g" x="22" y="21"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_jdZ6YQQkEey-kNQ7esRa_g" routing="Tree"/> <styles xmi:type="notation:FontStyle" xmi:id="_jdZ6YgQkEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jdZ6YwQkEey-kNQ7esRa_g" points="[0, 0, 160, 39]$[0, -102, 160, -63]$[-174, -102, -14, -63]$[-174, -78, -14, -39]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jdahcAQkEey-kNQ7esRa_g" id="(0.22033898305084745,0.02040816326530612)"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jdZ6YwQkEey-kNQ7esRa_g" points="[0, -51, 0, 93]$[0, -75, 0, 69]$[-63, -75, -63, 69]$[-63, -85, -63, 59]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jdahcAQkEey-kNQ7esRa_g" id="(0.4491525423728814,0.21428571428571427)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jdahcQQkEey-kNQ7esRa_g" id="(0.9830508474576272,0.3979591836734694)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_s-PXcAQkEey-kNQ7esRa_g" type="4001" element="_s-J3-AQkEey-kNQ7esRa_g" source="_Pg1TsAQjEey-kNQ7esRa_g" target="_hS0UIAQOEey-kNQ7esRa_g"> @@ -847,77 +851,61 @@ </edges> <edges xmi:type="notation:Edge" xmi:id="_-D87MAQkEey-kNQ7esRa_g" type="4001" element="_-DqnUAQkEey-kNQ7esRa_g" source="_OVBp4AQNEey-kNQ7esRa_g" target="_Pg1TsAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_-D87NAQkEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-D87NQQkEey-kNQ7esRa_g" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-D87NQQkEey-kNQ7esRa_g" x="-3" y="-10"/> </children> <children xmi:type="notation:Node" xmi:id="_-D87NgQkEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-D87NwQkEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-D87NwQkEey-kNQ7esRa_g" x="-5" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_-D87OAQkEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-D87OQQkEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-D87OQQkEey-kNQ7esRa_g" x="-5" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_-D87MQQkEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_-D87MgQkEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-D87MwQkEey-kNQ7esRa_g" points="[0, 0, -212, 0]$[212, 0, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-D87MwQkEey-kNQ7esRa_g" points="[0, -6, -122, 0]$[122, -6, 0, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-D9iQAQkEey-kNQ7esRa_g" id="(1.0,0.12244897959183673)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-D9iQQQkEey-kNQ7esRa_g" id="(0.0,0.12244897959183673)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_OlUbwAQlEey-kNQ7esRa_g" type="4001" element="_OlBg0AQlEey-kNQ7esRa_g" source="_beL2gAQjEey-kNQ7esRa_g" target="_fodekAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_OlUbxAQlEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OlUbxQQlEey-kNQ7esRa_g" x="-2" y="-6"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OlUbxQQlEey-kNQ7esRa_g" y="50"/> </children> <children xmi:type="notation:Node" xmi:id="_OlUbxgQlEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OlUbxwQlEey-kNQ7esRa_g" x="-6" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OlUbxwQlEey-kNQ7esRa_g" x="10"/> </children> <children xmi:type="notation:Node" xmi:id="_OlVC0AQlEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OlVC0QQlEey-kNQ7esRa_g" x="-36" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OlVC0QQlEey-kNQ7esRa_g" x="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_OlUbwQQlEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_OlUbwgQlEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OlUbwwQlEey-kNQ7esRa_g" points="[0, 0, 0, -64]$[0, 64, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OlUbwwQlEey-kNQ7esRa_g" points="[0, 0, 0, -35]$[0, 35, 0, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OlVC0gQlEey-kNQ7esRa_g" id="(0.5338983050847458,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OlVC0wQlEey-kNQ7esRa_g" id="(0.5338983050847458,0.0)"/> </edges> - <edges xmi:type="notation:Edge" xmi:id="_S3n-cAQlEey-kNQ7esRa_g" type="4001" element="_S3W4sAQlEey-kNQ7esRa_g" source="_beL2gAQjEey-kNQ7esRa_g" target="_hdV8kAQjEey-kNQ7esRa_g"> - <children xmi:type="notation:Node" xmi:id="_S3n-dAQlEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_S3n-dQQlEey-kNQ7esRa_g" x="10" y="-10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_S3olgAQlEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_S3olgQQlEey-kNQ7esRa_g" x="47" y="10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_S3olggQlEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_S3olgwQlEey-kNQ7esRa_g" y="10"/> - </children> - <styles xmi:type="notation:ConnectorStyle" xmi:id="_S3n-cQQlEey-kNQ7esRa_g" routing="Rectilinear"/> - <styles xmi:type="notation:FontStyle" xmi:id="_S3n-cgQlEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_S3n-cwQlEey-kNQ7esRa_g" points="[0, 12, -197, 66]$[149, 12, -48, 66]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_S3pMkAQlEey-kNQ7esRa_g" id="(1.0,0.12244897959183673)"/> - <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_S3pMkQQlEey-kNQ7esRa_g" id="(0.4067796610169492,0.0)"/> - </edges> <edges xmi:type="notation:Edge" xmi:id="_i57kcAQlEey-kNQ7esRa_g" type="4001" element="_i5qetgQlEey-kNQ7esRa_g" source="_UOFQgAQkEey-kNQ7esRa_g" target="_XZkVEAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_i57kdAQlEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i57kdQQlEey-kNQ7esRa_g" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i57kdQQlEey-kNQ7esRa_g" y="-39"/> </children> <children xmi:type="notation:Node" xmi:id="_i57kdgQlEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i57kdwQlEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i57kdwQlEey-kNQ7esRa_g" x="12" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_i57keAQlEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i57keQQlEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i57keQQlEey-kNQ7esRa_g" x="-18" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_i57kcQQlEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_i57kcgQlEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_i57kcwQlEey-kNQ7esRa_g" points="[0, 0, 0, -40]$[0, 40, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_i57kcwQlEey-kNQ7esRa_g" points="[0, 0, 0, -45]$[0, 45, 0, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_i58LgAQlEey-kNQ7esRa_g" id="(0.5,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_i58LgQQlEey-kNQ7esRa_g" id="(0.5,0.0)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_j8yvoAQlEey-kNQ7esRa_g" type="4001" element="_j8d_gAQlEey-kNQ7esRa_g" source="_VW89EAQkEey-kNQ7esRa_g" target="_UOFQgAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_j8yvpAQlEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_j8yvpQQlEey-kNQ7esRa_g" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_j8yvpQQlEey-kNQ7esRa_g" x="-7" y="-30"/> </children> <children xmi:type="notation:Node" xmi:id="_j8yvpgQlEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_j8yvpwQlEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_j8yvpwQlEey-kNQ7esRa_g" x="-5" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_j8yvqAQlEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_j8yvqQQlEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_j8yvqQQlEey-kNQ7esRa_g" x="-43" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_j8yvoQQlEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_j8yvogQlEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> @@ -927,17 +915,17 @@ </edges> <edges xmi:type="notation:Edge" xmi:id="_t9tkgAQxEey-kNQ7esRa_g" type="4001" element="_t9fiEwQxEey-kNQ7esRa_g" source="_SIv7sAQkEey-kNQ7esRa_g" target="_beL2gAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_t9uLkAQxEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t9uLkQQxEey-kNQ7esRa_g" x="1" y="3"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t9uLkQQxEey-kNQ7esRa_g" x="-43" y="-30"/> </children> <children xmi:type="notation:Node" xmi:id="_t9uLkgQxEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t9uLkwQxEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t9uLkwQxEey-kNQ7esRa_g" x="-26" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_t9uLlAQxEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t9uLlQQxEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t9uLlQQxEey-kNQ7esRa_g" x="-4" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_t9tkgQQxEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_t9tkggQxEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_t9tkgwQxEey-kNQ7esRa_g" points="[0, 0, -293, 65]$[146, 0, -147, 65]$[146, -65, -147, 0]$[293, -65, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_t9tkgwQxEey-kNQ7esRa_g" points="[0, 0, -251, 36]$[110, 0, -141, 36]$[110, -36, -141, 0]$[251, -36, 0, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t9uLlgQxEey-kNQ7esRa_g" id="(1.0,0.12244897959183673)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t9uLlwQxEey-kNQ7esRa_g" id="(0.0,0.4387755102040816)"/> </edges> @@ -1023,17 +1011,17 @@ </edges> <edges xmi:type="notation:Edge" xmi:id="_cxxe0AWjEey-kNQ7esRa_g" type="4001" element="_cxcusAWjEey-kNQ7esRa_g" source="_NxDRoAWjEey-kNQ7esRa_g" target="_YPBsYAWjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_cxyF4AWjEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cxyF4QWjEey-kNQ7esRa_g" x="-21" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cxyF4QWjEey-kNQ7esRa_g" x="-10" y="-10"/> </children> <children xmi:type="notation:Node" xmi:id="_cxyF4gWjEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cxyF4wWjEey-kNQ7esRa_g" x="-14" y="-2"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cxyF4wWjEey-kNQ7esRa_g" x="14" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_cxyF5AWjEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cxyF5QWjEey-kNQ7esRa_g" x="-24" y="22"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cxyF5QWjEey-kNQ7esRa_g" x="-21" y="22"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_cxxe0QWjEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_cxxe0gWjEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cxxe0wWjEey-kNQ7esRa_g" points="[0, 0, -65, -58]$[0, 14, -65, -44]$[65, 14, 0, -44]$[65, 58, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cxxe0wWjEey-kNQ7esRa_g" points="[0, 0, -65, -81]$[0, 37, -65, -44]$[65, 37, 0, -44]$[65, 81, 0, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cxyF5gWjEey-kNQ7esRa_g" id="(0.559322033898305,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cxyF5wWjEey-kNQ7esRa_g" id="(0.5,0.0)"/> </edges> @@ -1087,33 +1075,33 @@ </edges> <edges xmi:type="notation:Edge" xmi:id="_SeUy0AaEEey-kNQ7esRa_g" type="4001" element="_SeKa9gaEEey-kNQ7esRa_g" source="_NNRv8AaEEey-kNQ7esRa_g" target="_OVBp4AQNEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_SeUy1AaEEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SeUy1QaEEey-kNQ7esRa_g" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SeUy1QaEEey-kNQ7esRa_g" x="-99" y="-9"/> </children> <children xmi:type="notation:Node" xmi:id="_SeUy1gaEEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SeUy1waEEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SeUy1waEEey-kNQ7esRa_g" x="-35" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_SeUy2AaEEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SeUy2QaEEey-kNQ7esRa_g" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SeUy2QaEEey-kNQ7esRa_g" x="-26" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_SeUy0QaEEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_SeUy0gaEEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SeUy0waEEey-kNQ7esRa_g" points="[0, 0, -191, -257]$[191, 0, 0, -257]$[191, 257, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SeUy0waEEey-kNQ7esRa_g" points="[0, 0, -140, -137]$[140, 0, 0, -137]$[140, 137, 0, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SeVZ4AaEEey-kNQ7esRa_g" id="(1.0,0.1326530612244898)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SeVZ4QaEEey-kNQ7esRa_g" id="(0.4576271186440678,0.0)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_fEPKcAaEEey-kNQ7esRa_g" type="4001" element="_fEHOygaEEey-kNQ7esRa_g" source="_NNRv8AaEEey-kNQ7esRa_g" target="_VW89EAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_fEPKdAaEEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fEPKdQaEEey-kNQ7esRa_g" x="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fEPKdQaEEey-kNQ7esRa_g" x="26" y="14"/> </children> <children xmi:type="notation:Node" xmi:id="_fEPKdgaEEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fEPKdwaEEey-kNQ7esRa_g" x="82" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fEPKdwaEEey-kNQ7esRa_g" x="-31" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_fEPxgAaEEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fEPxgQaEEey-kNQ7esRa_g" x="-1" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fEPxgQaEEey-kNQ7esRa_g" x="-96" y="84"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_fEPKcQaEEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_fEPKcgaEEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fEPKcwaEEey-kNQ7esRa_g" points="[-63, -48, 28, -412]$[-96, -48, -5, -412]$[-96, 172, -5, -192]$[-91, 172, 0, -192]$[-91, 364, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fEPKcwaEEey-kNQ7esRa_g" points="[-3, 0, 187, -34]$[-3, 84, 187, 50]$[-131, 84, 59, 50]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fEPxggaEEey-kNQ7esRa_g" id="(0.5338983050847458,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fEPxgwaEEey-kNQ7esRa_g" id="(0.5,0.0)"/> </edges> @@ -1229,68 +1217,21 @@ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HJKKxgcbEey-kNQ7esRa_g" id="(0.5,0.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HJKKxwcbEey-kNQ7esRa_g" id="(0.8851063829787233,0.05128205128205128)"/> </edges> - <edges xmi:type="notation:Edge" xmi:id="_eXoJkAcoEey-kNQ7esRa_g" type="4001" element="_eXVOvgcoEey-kNQ7esRa_g" source="_YB0RsATxEey-kNQ7esRa_g" target="_hdV8kAQjEey-kNQ7esRa_g"> - <children xmi:type="notation:Node" xmi:id="_eXoJlAcoEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eXoJlQcoEey-kNQ7esRa_g" y="-10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_eXoJlgcoEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eXoJlwcoEey-kNQ7esRa_g" y="10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_eXoJmAcoEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eXoJmQcoEey-kNQ7esRa_g" y="10"/> - </children> - <styles xmi:type="notation:ConnectorStyle" xmi:id="_eXoJkQcoEey-kNQ7esRa_g" routing="Tree"/> - <styles xmi:type="notation:FontStyle" xmi:id="_eXoJkgcoEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eXoJkwcoEey-kNQ7esRa_g" points="[0, 100, 172, 58]$[0, 109, 172, 67]$[-171, 109, 1, 67]$[-171, 91, 1, 49]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eXowoAcoEey-kNQ7esRa_g" id="(0.0,0.06542056074766354)"/> - </edges> <edges xmi:type="notation:Edge" xmi:id="_oMShkAcoEey-kNQ7esRa_g" type="4001" element="_X6rBlgQlEey-kNQ7esRa_g" source="_fodekAQjEey-kNQ7esRa_g" target="_-LbRoAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_oMShlAcoEey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oMShlQcoEey-kNQ7esRa_g" x="10" y="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oMShlQcoEey-kNQ7esRa_g" x="-29" y="-49"/> </children> <children xmi:type="notation:Node" xmi:id="_oMShlgcoEey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oMShlwcoEey-kNQ7esRa_g" x="21" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oMShlwcoEey-kNQ7esRa_g" x="-10" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_oMShmAcoEey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oMShmQcoEey-kNQ7esRa_g" x="-69" y="-7"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oMShmQcoEey-kNQ7esRa_g" x="6"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_oMShkQcoEey-kNQ7esRa_g" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_oMShkgcoEey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oMShkwcoEey-kNQ7esRa_g" points="[59, 41, -229, 48]$[229, 41, -59, 48]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oMShkwcoEey-kNQ7esRa_g" points="[54, -49, -198, 264]$[54, -77, -198, 236]$[157, -77, -95, 236]$[157, -263, -95, 50]$[193, -263, -59, 50]"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oMTIoQcoEey-kNQ7esRa_g" id="(0.5,0.0)"/> </edges> - <edges xmi:type="notation:Edge" xmi:id="_JkaXUAc-Eey-kNQ7esRa_g" type="4001" element="_JkOxSgc-Eey-kNQ7esRa_g" source="_IONsYAZtEey-kNQ7esRa_g" target="_D9ZrgAc-Eey-kNQ7esRa_g"> - <children xmi:type="notation:Node" xmi:id="_JkaXVAc-Eey-kNQ7esRa_g" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JkaXVQc-Eey-kNQ7esRa_g" x="7" y="-9"/> - </children> - <children xmi:type="notation:Node" xmi:id="_JkaXVgc-Eey-kNQ7esRa_g" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JkaXVwc-Eey-kNQ7esRa_g" x="20" y="10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_JkaXWAc-Eey-kNQ7esRa_g" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JkaXWQc-Eey-kNQ7esRa_g" x="3" y="9"/> - </children> - <styles xmi:type="notation:ConnectorStyle" xmi:id="_JkaXUQc-Eey-kNQ7esRa_g" routing="Rectilinear"/> - <styles xmi:type="notation:FontStyle" xmi:id="_JkaXUgc-Eey-kNQ7esRa_g" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JkaXUwc-Eey-kNQ7esRa_g" points="[74, 0, -9, -101]$[74, 45, -9, -56]$[83, 45, 0, -56]$[83, 61, 0, -40]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JkaXWgc-Eey-kNQ7esRa_g" id="(0.4340425531914894,1.0)"/> - <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JkaXWwc-Eey-kNQ7esRa_g" id="(0.5196506550218342,0.1696234031589832)"/> - </edges> - <edges xmi:type="notation:Edge" xmi:id="_pBGXIBFDEeydeasO1RaQEg" type="4001" element="_92h2_gccEey-kNQ7esRa_g" source="_lCMqkAZsEey-kNQ7esRa_g" target="_beL2gAQjEey-kNQ7esRa_g"> - <children xmi:type="notation:Node" xmi:id="_pBVAoBFDEeydeasO1RaQEg" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pBVAoRFDEeydeasO1RaQEg" y="-10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_pBWOwBFDEeydeasO1RaQEg" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pBWOwRFDEeydeasO1RaQEg" y="10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_pBbHQBFDEeydeasO1RaQEg" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pBbHQRFDEeydeasO1RaQEg" y="10"/> - </children> - <styles xmi:type="notation:ConnectorStyle" xmi:id="_pBGXIRFDEeydeasO1RaQEg" routing="Rectilinear"/> - <styles xmi:type="notation:FontStyle" xmi:id="_pBGXIhFDEeydeasO1RaQEg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pBGXIxFDEeydeasO1RaQEg" points="[0, 0, 738, 235]$[-154, 0, 584, 235]$[-154, -237, 584, -2]$[-734, -237, 4, -2]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pBmGYBFDEeydeasO1RaQEg" id="(0.0,0.1326530612244898)"/> - <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pBmtcBFDEeydeasO1RaQEg" id="(0.9661016949152542,0.7346938775510204)"/> - </edges> <edges xmi:type="notation:Edge" xmi:id="_omOJEBrzEeyPOIo-WqURQQ" type="4001" element="_ollP6RrzEeyPOIo-WqURQQ" source="_738MEAQjEey-kNQ7esRa_g" target="_lk5_0AWMEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_omTooBrzEeyPOIo-WqURQQ" type="6001"> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_omTooRrzEeyPOIo-WqURQQ" y="-10"/> @@ -1309,145 +1250,129 @@ </edges> <edges xmi:type="notation:Edge" xmi:id="_r_Uy4BrzEeyPOIo-WqURQQ" type="4001" element="_r-z1gBrzEeyPOIo-WqURQQ" source="_fodekAQjEey-kNQ7esRa_g" target="_lk5_0AWMEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_r_Uy5BrzEeyPOIo-WqURQQ" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r_Uy5RrzEeyPOIo-WqURQQ" x="-13" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r_Uy5RrzEeyPOIo-WqURQQ" x="-6" y="-49"/> </children> <children xmi:type="notation:Node" xmi:id="_r_Uy5hrzEeyPOIo-WqURQQ" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r_Uy5xrzEeyPOIo-WqURQQ" x="14"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r_Uy5xrzEeyPOIo-WqURQQ" x="20" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_r_Uy6BrzEeyPOIo-WqURQQ" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r_Uy6RrzEeyPOIo-WqURQQ" x="-3" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r_Uy6RrzEeyPOIo-WqURQQ" x="-28" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_r_Uy4RrzEeyPOIo-WqURQQ" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_r_Uy4hrzEeyPOIo-WqURQQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_r_Uy4xrzEeyPOIo-WqURQQ" points="[-60, 49, -440, -161]$[-60, 180, -440, -30]$[380, 180, 0, -30]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_r_Uy4xrzEeyPOIo-WqURQQ" points="[0, -42, -191, 73]$[92, -42, -99, 73]$[92, -67, -99, 48]$[191, -67, 0, 48]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_r_VZ8BrzEeyPOIo-WqURQQ" id="(1.0,0.5)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_r_VZ8RrzEeyPOIo-WqURQQ" id="(0.0,0.5)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_t33o4BrzEeyPOIo-WqURQQ" type="4001" element="_t3gckhrzEeyPOIo-WqURQQ" source="_fodekAQjEey-kNQ7esRa_g" target="_SIv7sAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_t33o5BrzEeyPOIo-WqURQQ" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t33o5RrzEeyPOIo-WqURQQ" x="-1" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t33o5RrzEeyPOIo-WqURQQ" x="-157" y="-9"/> </children> <children xmi:type="notation:Node" xmi:id="_t33o5hrzEeyPOIo-WqURQQ" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t33o5xrzEeyPOIo-WqURQQ" x="50" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t33o5xrzEeyPOIo-WqURQQ" x="292" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_t33o6BrzEeyPOIo-WqURQQ" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t33o6RrzEeyPOIo-WqURQQ" x="27"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t33o6RrzEeyPOIo-WqURQQ" x="-9"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_t33o4RrzEeyPOIo-WqURQQ" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_t33o4hrzEeyPOIo-WqURQQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_t33o4xrzEeyPOIo-WqURQQ" points="[36, 38, 329, 79]$[36, 90, 329, 131]$[-383, 90, -90, 131]$[-383, -28, -90, 13]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_t33o4xrzEeyPOIo-WqURQQ" points="[36, 38, 287, 79]$[36, 71, 287, 112]$[-341, 71, -90, 112]$[-341, -28, -90, 13]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t34P8BrzEeyPOIo-WqURQQ" id="(0.0,0.6122448979591837)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t34P8RrzEeyPOIo-WqURQQ" id="(1.0,0.8673469387755102)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_ajy4sBsKEeyPOIo-WqURQQ" type="4001" element="_ajhzHRsKEeyPOIo-WqURQQ" source="_NNRv8AaEEey-kNQ7esRa_g" target="_Ml8T0AcsEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_ajy4tBsKEeyPOIo-WqURQQ" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ajy4tRsKEeyPOIo-WqURQQ" x="-212" y="33"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ajy4tRsKEeyPOIo-WqURQQ" x="-175" y="-28"/> </children> <children xmi:type="notation:Node" xmi:id="_ajy4thsKEeyPOIo-WqURQQ" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ajy4txsKEeyPOIo-WqURQQ" x="61" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ajy4txsKEeyPOIo-WqURQQ" x="-78" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_ajy4uBsKEeyPOIo-WqURQQ" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ajy4uRsKEeyPOIo-WqURQQ" x="-71" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ajy4uRsKEeyPOIo-WqURQQ" x="-114"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_ajy4sRsKEeyPOIo-WqURQQ" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_ajy4shsKEeyPOIo-WqURQQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ajy4sxsKEeyPOIo-WqURQQ" points="[19, -48, -297, -618]$[54, -48, -262, -618]$[54, 677, -262, 107]$[316, 677, 0, 107]$[316, 668, 0, 98]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ajy4sxsKEeyPOIo-WqURQQ" points="[-22, 0, -275, -353]$[-22, 400, -275, 47]$[183, 400, -70, 47]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ajy4uhsKEeyPOIo-WqURQQ" id="(0.8389830508474576,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ajy4uxsKEeyPOIo-WqURQQ" id="(0.5035971223021583,0.0)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_9UCkgBsKEeyPOIo-WqURQQ" type="4001" element="_9TmfrBsKEeyPOIo-WqURQQ" source="_NNRv8AaEEey-kNQ7esRa_g" target="_SIv7sAQkEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_9UDLkBsKEeyPOIo-WqURQQ" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9UDLkRsKEeyPOIo-WqURQQ" x="-99" y="-20"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9UDLkRsKEeyPOIo-WqURQQ" x="-103" y="8"/> </children> <children xmi:type="notation:Node" xmi:id="_9UDLkhsKEeyPOIo-WqURQQ" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9UDLkxsKEeyPOIo-WqURQQ" x="159" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9UDLkxsKEeyPOIo-WqURQQ" x="9" y="15"/> </children> <children xmi:type="notation:Node" xmi:id="_9UDLlBsKEeyPOIo-WqURQQ" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9UDLlRsKEeyPOIo-WqURQQ" x="4" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9UDLlRsKEeyPOIo-WqURQQ" x="-20" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_9UCkgRsKEeyPOIo-WqURQQ" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_9UCkghsKEeyPOIo-WqURQQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9UCkgxsKEeyPOIo-WqURQQ" points="[43, -68, -95, -582]$[138, -68, 0, -582]$[138, 514, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9UCkgxsKEeyPOIo-WqURQQ" points="[43, -38, -32, -299]$[117, -38, 42, -299]$[117, 261, 42, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9UDLlhsKEeyPOIo-WqURQQ" id="(0.635593220338983,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9UDLlxsKEeyPOIo-WqURQQ" id="(0.3310344827586207,0.0)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_cP774BuCEeyPOIo-WqURQQ" type="4001" element="_cPgeFhuCEeyPOIo-WqURQQ" source="_Pg1TsAQjEey-kNQ7esRa_g" target="_OVBp4AQNEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_cP775BuCEeyPOIo-WqURQQ" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP775RuCEeyPOIo-WqURQQ" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP775RuCEeyPOIo-WqURQQ" x="3" y="-10"/> </children> <children xmi:type="notation:Node" xmi:id="_cP775huCEeyPOIo-WqURQQ" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP775xuCEeyPOIo-WqURQQ" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP775xuCEeyPOIo-WqURQQ" x="6" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_cP776BuCEeyPOIo-WqURQQ" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP776RuCEeyPOIo-WqURQQ" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP776RuCEeyPOIo-WqURQQ" x="5" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_cP774RuCEeyPOIo-WqURQQ" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_cP774huCEeyPOIo-WqURQQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cP774xuCEeyPOIo-WqURQQ" points="[0, 35, 212, 35]$[-212, 35, 0, 35]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cP774xuCEeyPOIo-WqURQQ" points="[0, 35, 122, 29]$[-122, 35, 0, 29]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cP8i8BuCEeyPOIo-WqURQQ" id="(0.0,0.1326530612244898)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cP8i8RuCEeyPOIo-WqURQQ" id="(1.0,0.1326530612244898)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_Q-7IYBuHEeyPOIo-WqURQQ" type="4001" element="_Q-uURhuHEeyPOIo-WqURQQ" source="_Pg1TsAQjEey-kNQ7esRa_g" target="_beL2gAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_Q-7IZBuHEeyPOIo-WqURQQ" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q-7IZRuHEeyPOIo-WqURQQ" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q-7IZRuHEeyPOIo-WqURQQ" x="-1" y="58"/> </children> <children xmi:type="notation:Node" xmi:id="_Q-7IZhuHEeyPOIo-WqURQQ" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q-7IZxuHEeyPOIo-WqURQQ" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q-7IZxuHEeyPOIo-WqURQQ" x="21" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_Q-7IaBuHEeyPOIo-WqURQQ" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q-7IaRuHEeyPOIo-WqURQQ" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q-7IaRuHEeyPOIo-WqURQQ" x="-18" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_Q-7IYRuHEeyPOIo-WqURQQ" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_Q-7IYhuHEeyPOIo-WqURQQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Q-7IYxuHEeyPOIo-WqURQQ" points="[0, 0, 0, -148]$[0, 148, 0, 0]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Q-7IYxuHEeyPOIo-WqURQQ" points="[-6, 0, -42, -50]$[-6, 50, -42, 0]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Q-7IahuHEeyPOIo-WqURQQ" id="(0.503448275862069,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Q-7IaxuHEeyPOIo-WqURQQ" id="(0.4661016949152542,0.0)"/> </edges> <edges xmi:type="notation:Edge" xmi:id="_G-RsUBxXEeyPOIo-WqURQQ" type="4001" element="_G94qwBxXEeyPOIo-WqURQQ" source="_XZkVEAQkEey-kNQ7esRa_g" target="_beL2gAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_G-STYBxXEeyPOIo-WqURQQ" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-STYRxXEeyPOIo-WqURQQ" x="10" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-STYRxXEeyPOIo-WqURQQ" x="-117" y="-13"/> </children> <children xmi:type="notation:Node" xmi:id="_G-STYhxXEeyPOIo-WqURQQ" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-STYxxXEeyPOIo-WqURQQ" x="97" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-STYxxXEeyPOIo-WqURQQ" x="48" y="10"/> </children> <children xmi:type="notation:Node" xmi:id="_G-STZBxXEeyPOIo-WqURQQ" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-STZRxXEeyPOIo-WqURQQ" x="3" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-STZRxXEeyPOIo-WqURQQ" x="-7" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_G-RsURxXEeyPOIo-WqURQQ" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_G-RsUhxXEeyPOIo-WqURQQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_G-RsUxxXEeyPOIo-WqURQQ" points="[31, 50, -572, 272]$[81, 50, -522, 272]$[81, -223, -522, -1]$[603, -223, 0, -1]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_G-RsUxxXEeyPOIo-WqURQQ" points="[31, 50, -566, 171]$[81, 50, -516, 171]$[81, -122, -516, -1]$[597, -122, 0, -1]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_G-S6cBxXEeyPOIo-WqURQQ" id="(0.7372881355932204,0.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_G-S6cRxXEeyPOIo-WqURQQ" id="(0.0,0.12244897959183673)"/> </edges> - <edges xmi:type="notation:Edge" xmi:id="_TlgywCdREey8t_kDLBrwCg" type="4001" element="_cB2dzAWjEey-kNQ7esRa_g" source="_NxDRoAWjEey-kNQ7esRa_g" target="_YB0RsATxEey-kNQ7esRa_g"> - <children xmi:type="notation:Node" xmi:id="_TlmSUCdREey8t_kDLBrwCg" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TlmSUSdREey8t_kDLBrwCg" x="-132" y="-10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_Tlm5YCdREey8t_kDLBrwCg" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Tlm5YSdREey8t_kDLBrwCg" x="-2" y="10"/> - </children> - <children xmi:type="notation:Node" xmi:id="_TlngcCdREey8t_kDLBrwCg" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TlngcSdREey8t_kDLBrwCg" y="128"/> - </children> - <styles xmi:type="notation:ConnectorStyle" xmi:id="_TlgywSdREey8t_kDLBrwCg" routing="Rectilinear"/> - <styles xmi:type="notation:FontStyle" xmi:id="_TlgywidREey8t_kDLBrwCg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TlgywydREey8t_kDLBrwCg" points="[0, 0, 195, -297]$[0, 14, 195, -283]$[-71, 14, 124, -283]$[-71, 346, 124, 49]$[-157, 346, 38, 49]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TlrK0CdREey8t_kDLBrwCg" id="(0.5,1.0)"/> - <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TlrK0SdREey8t_kDLBrwCg" id="(0.6779661016949152,0.04672897196261682)"/> - </edges> <edges xmi:type="notation:Edge" xmi:id="_BMxgQCemEeyTddajI1jY8w" type="4001" element="_RCvPUgcsEey-kNQ7esRa_g" source="_Ml8T0AcsEey-kNQ7esRa_g" target="_beL2gAQjEey-kNQ7esRa_g"> <children xmi:type="notation:Node" xmi:id="_BM41ACemEeyTddajI1jY8w" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BM41ASemEeyTddajI1jY8w" y="-10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BM41ASemEeyTddajI1jY8w" x="-18" y="-41"/> </children> <children xmi:type="notation:Node" xmi:id="_BM6DICemEeyTddajI1jY8w" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BM6DISemEeyTddajI1jY8w" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BM6DISemEeyTddajI1jY8w" x="-11" y="-12"/> </children> <children xmi:type="notation:Node" xmi:id="_BNmmsCemEeyTddajI1jY8w" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BNmmsSemEeyTddajI1jY8w" y="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BNmmsSemEeyTddajI1jY8w" x="1" y="10"/> </children> <styles xmi:type="notation:ConnectorStyle" xmi:id="_BMxgQSemEeyTddajI1jY8w" routing="Rectilinear"/> <styles xmi:type="notation:FontStyle" xmi:id="_BMxgQiemEeyTddajI1jY8w" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BMxgQyemEeyTddajI1jY8w" points="[0, 0, -124, 84]$[60, 0, -64, 84]$[60, -85, -64, -1]$[119, -85, -5, -1]"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BMxgQyemEeyTddajI1jY8w" points="[0, 0, -82, 91]$[24, 0, -58, 91]$[24, -92, -58, -1]$[77, -92, -5, -1]"/> <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BNpqACemEeyTddajI1jY8w" id="(1.0,0.1326530612244898)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BNpqASemEeyTddajI1jY8w" id="(0.0423728813559322,0.826530612244898)"/> </edges> @@ -1467,21 +1392,101 @@ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_r0jg8CxEEeyc2bacnWuMrg" id="(0.6779661016949152,1.0)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_r0jg8SxEEeyc2bacnWuMrg" id="(0.47337278106508873,0.0)"/> </edges> - <edges xmi:type="notation:Edge" xmi:id="_365fUCxSEeyc2bacnWuMrg" type="4001" element="_36hE0CxSEeyc2bacnWuMrg" source="_ipaesCxSEeyc2bacnWuMrg" target="_lCMqkAZsEey-kNQ7esRa_g"> - <children xmi:type="notation:Node" xmi:id="_366GYCxSEeyc2bacnWuMrg" type="6001"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_366GYSxSEeyc2bacnWuMrg" y="-10"/> + <edges xmi:type="notation:Edge" xmi:id="_rXBsgOMUEeylWPfcS0Eglw" type="4001" element="_rWe5_OMUEeylWPfcS0Eglw" source="_YB0RsATxEey-kNQ7esRa_g" target="_hdV8kAQjEey-kNQ7esRa_g"> + <children xmi:type="notation:Node" xmi:id="_rXCTkOMUEeylWPfcS0Eglw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rXCTkeMUEeylWPfcS0Eglw" x="31" y="26"/> + </children> + <children xmi:type="notation:Node" xmi:id="_rXCTkuMUEeylWPfcS0Eglw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rXCTk-MUEeylWPfcS0Eglw" x="76" y="6"/> + </children> + <children xmi:type="notation:Node" xmi:id="_rXCTlOMUEeylWPfcS0Eglw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rXCTleMUEeylWPfcS0Eglw" x="-1" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_rXBsgeMUEeylWPfcS0Eglw" routing="Tree"/> + <styles xmi:type="notation:FontStyle" xmi:id="_rXBsguMUEeylWPfcS0Eglw" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rXBsg-MUEeylWPfcS0Eglw" points="[0, 0, 58, -52]$[0, 113, 58, 61]$[-52, 113, 6, 61]$[-52, 93, 6, 41]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rXCTluMUEeylWPfcS0Eglw" id="(0.0,0.09345794392523364)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rXCTl-MUEeylWPfcS0Eglw" id="(0.9322033898305084,0.5816326530612245)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_IPuHUOjBEeyhBPt9z4CQLw" type="4001" element="_cB2dzAWjEey-kNQ7esRa_g" source="_NxDRoAWjEey-kNQ7esRa_g" target="_YB0RsATxEey-kNQ7esRa_g"> + <children xmi:type="notation:Node" xmi:id="_IPuHVOjBEeyhBPt9z4CQLw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IPuHVejBEeyhBPt9z4CQLw" x="59" y="102"/> + </children> + <children xmi:type="notation:Node" xmi:id="_IPuHVujBEeyhBPt9z4CQLw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IPuHV-jBEeyhBPt9z4CQLw" x="60"/> + </children> + <children xmi:type="notation:Node" xmi:id="_IPuuYOjBEeyhBPt9z4CQLw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IPuuYejBEeyhBPt9z4CQLw" x="-25" y="-10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_IPuHUejBEeyhBPt9z4CQLw" routing="Rectilinear"/> + <styles xmi:type="notation:FontStyle" xmi:id="_IPuHUujBEeyhBPt9z4CQLw" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IPuHU-jBEeyhBPt9z4CQLw" points="[12, 76, 200, -247]$[12, 360, 200, 37]$[-134, 360, 54, 37]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IPuuYujBEeyhBPt9z4CQLw" id="(0.0847457627118644,0.22448979591836735)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IPuuY-jBEeyhBPt9z4CQLw" id="(0.5423728813559322,0.1308411214953271)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_z6Ce4Or1EeyhBPt9z4CQLw" type="4001" element="_S3W4sAQlEey-kNQ7esRa_g" source="_beL2gAQjEey-kNQ7esRa_g" target="_hdV8kAQjEey-kNQ7esRa_g"> + <children xmi:type="notation:Node" xmi:id="_z6DF8Or1EeyhBPt9z4CQLw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6DF8er1EeyhBPt9z4CQLw" x="63" y="-10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_z6DF8ur1EeyhBPt9z4CQLw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6DF8-r1EeyhBPt9z4CQLw" x="19" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_z6DF9Or1EeyhBPt9z4CQLw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6DF9er1EeyhBPt9z4CQLw" x="1" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_z6Ce4er1EeyhBPt9z4CQLw" routing="Rectilinear"/> + <styles xmi:type="notation:FontStyle" xmi:id="_z6Ce4ur1EeyhBPt9z4CQLw" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_z6Ce4-r1EeyhBPt9z4CQLw" points="[0, 0, -175, 341]$[67, 0, -108, 341]$[67, -336, -108, 5]$[149, -336, -26, 5]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z6DF9ur1EeyhBPt9z4CQLw" id="(1.0,0.12244897959183673)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z6DF9-r1EeyhBPt9z4CQLw" id="(0.22033898305084745,0.6020408163265306)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_AnWfAOr2EeyhBPt9z4CQLw" type="4001" element="_92h2_gccEey-kNQ7esRa_g" source="_lCMqkAZsEey-kNQ7esRa_g" target="_beL2gAQjEey-kNQ7esRa_g"> + <children xmi:type="notation:Node" xmi:id="_AnXGEOr2EeyhBPt9z4CQLw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AnXGEer2EeyhBPt9z4CQLw" y="-10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_AnXGEur2EeyhBPt9z4CQLw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AnXGE-r2EeyhBPt9z4CQLw" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_AnXGFOr2EeyhBPt9z4CQLw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AnXGFer2EeyhBPt9z4CQLw" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_AnWfAer2EeyhBPt9z4CQLw" routing="Rectilinear"/> + <styles xmi:type="notation:FontStyle" xmi:id="_AnWfAur2EeyhBPt9z4CQLw" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AnWfA-r2EeyhBPt9z4CQLw" points="[-60, -2, 756, 145]$[-184, -2, 632, 145]$[-184, -147, 632, 0]$[-770, -147, 46, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AnXGFur2EeyhBPt9z4CQLw" id="(0.5084745762711864,0.1836734693877551)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AnXGF-r2EeyhBPt9z4CQLw" id="(0.6101694915254238,0.11224489795918367)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_Emxh8Or2EeyhBPt9z4CQLw" type="4001" element="_36hE0CxSEeyc2bacnWuMrg" source="_ipaesCxSEeyc2bacnWuMrg" target="_lCMqkAZsEey-kNQ7esRa_g"> + <children xmi:type="notation:Node" xmi:id="_EmyJAOr2EeyhBPt9z4CQLw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EmyJAer2EeyhBPt9z4CQLw" x="-97" y="-3"/> + </children> + <children xmi:type="notation:Node" xmi:id="_EmyJAur2EeyhBPt9z4CQLw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EmyJA-r2EeyhBPt9z4CQLw" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_EmyJBOr2EeyhBPt9z4CQLw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EmyJBer2EeyhBPt9z4CQLw" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_Emxh8er2EeyhBPt9z4CQLw" routing="Rectilinear"/> + <styles xmi:type="notation:FontStyle" xmi:id="_Emxh8ur2EeyhBPt9z4CQLw" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Emxh8-r2EeyhBPt9z4CQLw" points="[31, -7, 236, 238]$[31, -245, 236, 0]$[-176, -245, 29, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EmyJBur2EeyhBPt9z4CQLw" id="(0.0,0.07142857142857142)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EmyJB-r2EeyhBPt9z4CQLw" id="(0.7542372881355932,0.20408163265306123)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_YtFeAOr4EeyhBPt9z4CQLw" type="4001" element="_JkOxSgc-Eey-kNQ7esRa_g" source="_IONsYAZtEey-kNQ7esRa_g" target="_pEG-0AaCEey-kNQ7esRa_g"> + <children xmi:type="notation:Node" xmi:id="_YtGFEOr4EeyhBPt9z4CQLw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YtGFEer4EeyhBPt9z4CQLw" y="-10"/> </children> - <children xmi:type="notation:Node" xmi:id="_366GYixSEeyc2bacnWuMrg" type="6002"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_366GYyxSEeyc2bacnWuMrg" y="10"/> + <children xmi:type="notation:Node" xmi:id="_YtGFEur4EeyhBPt9z4CQLw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YtGFE-r4EeyhBPt9z4CQLw" y="10"/> </children> - <children xmi:type="notation:Node" xmi:id="_366GZCxSEeyc2bacnWuMrg" type="6003"> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_366GZSxSEeyc2bacnWuMrg" y="10"/> + <children xmi:type="notation:Node" xmi:id="_YtGFFOr4EeyhBPt9z4CQLw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YtGFFer4EeyhBPt9z4CQLw" y="10"/> </children> - <styles xmi:type="notation:ConnectorStyle" xmi:id="_365fUSxSEeyc2bacnWuMrg" routing="Rectilinear"/> - <styles xmi:type="notation:FontStyle" xmi:id="_365fUixSEeyc2bacnWuMrg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> - <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_365fUyxSEeyc2bacnWuMrg" points="[0, 0, 146, 0]$[-146, 0, 0, 0]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_366GZixSEeyc2bacnWuMrg" id="(0.0,0.07142857142857142)"/> - <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_366GZyxSEeyc2bacnWuMrg" id="(1.0,0.07142857142857142)"/> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_YtFeAer4EeyhBPt9z4CQLw" routing="Rectilinear"/> + <styles xmi:type="notation:FontStyle" xmi:id="_YtFeAur4EeyhBPt9z4CQLw" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YtFeA-r4EeyhBPt9z4CQLw" points="[74, 0, -182, -59]$[74, 45, -182, -14]$[248, 45, -8, -14]$[248, 52, -8, -7]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YtGFFur4EeyhBPt9z4CQLw" id="(0.4340425531914894,1.0)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YtGFF-r4EeyhBPt9z4CQLw" id="(0.4406779661016949,0.07142857142857142)"/> </edges> </data> </ownedAnnotationEntries> @@ -1585,7 +1590,7 @@ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> </ownedElements> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_beGW8AQjEey-kNQ7esRa_g" name="Placing" tooltipText="" outgoingEdges="_OlBg0AQlEey-kNQ7esRa_g _S3W4sAQlEey-kNQ7esRa_g" incomingEdges="_t9fiEwQxEey-kNQ7esRa_g _92h2_gccEey-kNQ7esRa_g _Q-uURhuHEeyPOIo-WqURQQ _G94qwBxXEeyPOIo-WqURQQ _RCvPUgcsEey-kNQ7esRa_g" width="12" height="10"> + <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_beGW8AQjEey-kNQ7esRa_g" name="Placing" tooltipText="" outgoingEdges="_OlBg0AQlEey-kNQ7esRa_g _S3W4sAQlEey-kNQ7esRa_g" incomingEdges="_t9fiEwQxEey-kNQ7esRa_g _Q-uURhuHEeyPOIo-WqURQQ _G94qwBxXEeyPOIo-WqURQQ _RCvPUgcsEey-kNQ7esRa_g _92h2_gccEey-kNQ7esRa_g" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Placing"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Placing"/> <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> @@ -1607,7 +1612,7 @@ </ownedStyle> <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_hdQdAAQjEey-kNQ7esRa_g" name="Orientation" tooltipText="" incomingEdges="_S3W4sAQlEey-kNQ7esRa_g _eXVOvgcoEey-kNQ7esRa_g" width="12" height="10"> + <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_hdQdAAQjEey-kNQ7esRa_g" name="Orientation" tooltipText="" incomingEdges="_rWe5_OMUEeylWPfcS0Eglw _S3W4sAQlEey-kNQ7esRa_g" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Orientation"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Orientation"/> <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> @@ -1891,9 +1896,12 @@ <semanticElements xmi:type="ecore:EReference" href="iPos_Datamodel.ecore#//Placing/orientation"/> <ownedStyle xmi:type="diagram:EdgeStyle" uid="_1P1jwAQwEey-kNQ7esRa_g" description="_oD68EAQwEey-kNQ7esRa_g" routingStyle="manhattan" strokeColor="0,0,0"> <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_1P1jwgQwEey-kNQ7esRa_g" showIcon="false"> + <customFeatures>labelSize</customFeatures> <labelFormat>bold</labelFormat> </centerLabelStyle> - <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_1P1jwQQwEey-kNQ7esRa_g" labelSize="6" showIcon="false" labelColor="39,76,114"/> + <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_1P1jwQQwEey-kNQ7esRa_g" showIcon="false" labelColor="39,76,114"> + <customFeatures>labelSize</customFeatures> + </endLabelStyle> </ownedStyle> <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> </ownedDiagramElements> @@ -1943,7 +1951,7 @@ </ownedStyle> <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_YBru0ATxEey-kNQ7esRa_g" name="Quaternion" tooltipText="" outgoingEdges="_eXVOvgcoEey-kNQ7esRa_g" incomingEdges="_cB2dzAWjEey-kNQ7esRa_g" width="12" height="10"> + <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_YBru0ATxEey-kNQ7esRa_g" name="Quaternion" tooltipText="" outgoingEdges="_rWe5_OMUEeylWPfcS0Eglw" incomingEdges="_cB2dzAWjEey-kNQ7esRa_g" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Quaternion"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Quaternion"/> <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> @@ -2306,7 +2314,7 @@ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> </ownedElements> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_lBuJcAZsEey-kNQ7esRa_g" name="PositionEvent" tooltipText="" outgoingEdges="_92h2_gccEey-kNQ7esRa_g _rz8c8CxEEeyc2bacnWuMrg" incomingEdges="_36hE0CxSEeyc2bacnWuMrg" width="12" height="10"> + <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_lBuJcAZsEey-kNQ7esRa_g" name="PositionEvent" tooltipText="" outgoingEdges="_rz8c8CxEEeyc2bacnWuMrg _92h2_gccEey-kNQ7esRa_g" incomingEdges="_36hE0CxSEeyc2bacnWuMrg" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//PositionEvent"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//PositionEvent"/> <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> @@ -2379,7 +2387,7 @@ </ownedStyle> <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_pD8mwAaCEey-kNQ7esRa_g" name="TrackingTask" tooltipText="" outgoingEdges="_HI0zogcbEey-kNQ7esRa_g" width="12" height="10"> + <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_pD8mwAaCEey-kNQ7esRa_g" name="TrackingTask" tooltipText="" outgoingEdges="_HI0zogcbEey-kNQ7esRa_g" incomingEdges="_JkOxSgc-Eey-kNQ7esRa_g" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//TrackingTask"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//TrackingTask"/> <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> @@ -2616,18 +2624,6 @@ </ownedStyle> <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DEdge" uid="_eXVOvgcoEey-kNQ7esRa_g" sourceNode="_YBru0ATxEey-kNQ7esRa_g" targetNode="_hdQdAAQjEey-kNQ7esRa_g"> - <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Quaternion"/> - <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Quaternion"/> - <ownedStyle xmi:type="diagram:EdgeStyle" uid="_eXV1sAcoEey-kNQ7esRa_g" targetArrow="InputClosedArrow" routingStyle="tree"> - <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> - <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_eXV1sQcoEey-kNQ7esRa_g" showIcon="false"> - <labelFormat>italic</labelFormat> - </beginLabelStyle> - <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_eXV1sgcoEey-kNQ7esRa_g" showIcon="false"/> - </ownedStyle> - <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> - </ownedDiagramElements> <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_Mlx7wAcsEey-kNQ7esRa_g" name="POI" tooltipText="" outgoingEdges="_RCvPUgcsEey-kNQ7esRa_g" incomingEdges="_ajhzHRsKEeyPOIo-WqURQQ" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//POI"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//POI"/> @@ -2677,7 +2673,7 @@ </ownedStyle> <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_D9Ka8Ac-Eey-kNQ7esRa_g" name="EventFilterCondition" tooltipText="" incomingEdges="_JkOxSgc-Eey-kNQ7esRa_g" width="12" height="10"> + <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_D9Ka8Ac-Eey-kNQ7esRa_g" name="EventFilterCondition" tooltipText="" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//EventFilterCondition"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//EventFilterCondition"/> <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> @@ -2776,7 +2772,7 @@ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> </ownedElements> </ownedDiagramElements> - <ownedDiagramElements xmi:type="diagram:DEdge" uid="_JkOxSgc-Eey-kNQ7esRa_g" name="[0..*] eventfiltercondition" sourceNode="_IOFwkAZtEey-kNQ7esRa_g" targetNode="_D9Ka8Ac-Eey-kNQ7esRa_g"> + <ownedDiagramElements xmi:type="diagram:DEdge" uid="_JkOxSgc-Eey-kNQ7esRa_g" name="[0..*] eventfiltercondition" sourceNode="_IOFwkAZtEey-kNQ7esRa_g" targetNode="_pD8mwAaCEey-kNQ7esRa_g"> <target xmi:type="ecore:EReference" href="iPos_Datamodel.ecore#//EventFilterConfiguration/eventfiltercondition"/> <semanticElements xmi:type="ecore:EReference" href="iPos_Datamodel.ecore#//EventFilterConfiguration/eventfiltercondition"/> <ownedStyle xmi:type="diagram:EdgeStyle" uid="_JkOxSwc-Eey-kNQ7esRa_g" routingStyle="manhattan" strokeColor="0,0,0"> @@ -3083,6 +3079,9 @@ <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_-2weQJSJEeyJ0bON1VCj7g" name="MessageReceivedEvent" tooltipText="" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//MessageReceivedEvent"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//MessageReceivedEvent"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_7_EvF5riEeybDM53IXNodQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> </ownedStyle> @@ -3191,6 +3190,18 @@ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EDataType']/@subNodeMappings[name='EC_DataType_InstanceClassName']"/> </ownedElements> </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" uid="_rWe5_OMUEeylWPfcS0Eglw" sourceNode="_YBru0ATxEey-kNQ7esRa_g" targetNode="_hdQdAAQjEey-kNQ7esRa_g"> + <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Quaternion"/> + <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//Quaternion"/> + <ownedStyle xmi:type="diagram:EdgeStyle" uid="_rWe5_eMUEeylWPfcS0Eglw" targetArrow="InputClosedArrow" routingStyle="tree"> + <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> + <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_rWe5_uMUEeylWPfcS0Eglw" showIcon="false"> + <labelFormat>italic</labelFormat> + </beginLabelStyle> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_rWe5_-MUEeylWPfcS0Eglw" showIcon="false"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> + </ownedDiagramElements> <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_EthkIAQNEey-kNQ7esRa_g"/> <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> @@ -3617,7 +3628,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_GFGfojx3EeyWNq6fFfWVSw"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_GFF4lDx3EeyWNq6fFfWVSw" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GFF4lTx3EeyWNq6fFfWVSw" x="183"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GFF4lTx3EeyWNq6fFfWVSw" x="162" y="222"/> </children> <children xmi:type="notation:Node" xmi:id="_GFGfozx3EeyWNq6fFfWVSw" type="2003" element="_GE6SYjx3EeyWNq6fFfWVSw"> <children xmi:type="notation:Node" xmi:id="_GFGfpjx3EeyWNq6fFfWVSw" type="5007"/> @@ -3716,7 +3727,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_TTtt0z8bEeyWNq6fFfWVSw"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_TTtGwT8bEeyWNq6fFfWVSw" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TTtGwj8bEeyWNq6fFfWVSw" x="582" y="168" width="153" height="231"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TTtGwj8bEeyWNq6fFfWVSw" x="2028" y="162" width="153" height="231"/> </children> <children xmi:type="notation:Node" xmi:id="_xTXLgIqVEeyJ0bON1VCj7g" type="2003" element="_xRC3UIqVEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_xUM5AIqVEeyJ0bON1VCj7g" type="5007"/> @@ -3758,7 +3769,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_KODHc4qWEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_KOCgYYqWEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KOCgYoqWEeyJ0bON1VCj7g" x="936" y="354" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KOCgYoqWEeyJ0bON1VCj7g" x="941" y="318" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="__LdHQIqWEeyJ0bON1VCj7g" type="2003" element="__LN2sIqWEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="__LduUYqWEeyJ0bON1VCj7g" type="5007"/> @@ -3767,7 +3778,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="__LduVIqWEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="__LdHQYqWEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="__LduUIqWEeyJ0bON1VCj7g" x="780" y="516" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="__LduUIqWEeyJ0bON1VCj7g" x="785" y="480" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_J70SgIqXEeyJ0bON1VCj7g" type="2003" element="_J7lB8IqXEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_J70Sg4qXEeyJ0bON1VCj7g" type="5007"/> @@ -3780,7 +3791,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_J705koqXEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_J70SgYqXEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J70SgoqXEeyJ0bON1VCj7g" x="936" y="516" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J70SgoqXEeyJ0bON1VCj7g" x="941" y="480" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_aiph4IqXEeyJ0bON1VCj7g" type="2003" element="_aibfcIqXEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_aiph44qXEeyJ0bON1VCj7g" type="5007"/> @@ -3793,7 +3804,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_aiph5oqXEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_aiph4YqXEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aiph4oqXEeyJ0bON1VCj7g" x="1524" y="348" width="144" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aiph4oqXEeyJ0bON1VCj7g" x="1529" y="312" width="144" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="__jFHoIqXEeyJ0bON1VCj7g" type="2003" element="__i1QAIqXEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="__jFHo4qXEeyJ0bON1VCj7g" type="5007"/> @@ -3806,7 +3817,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="__jFHpoqXEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="__jFHoYqXEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="__jFHooqXEeyJ0bON1VCj7g" x="1458" y="522" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="__jFHooqXEeyJ0bON1VCj7g" x="1463" y="486" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_BT_EkIqYEeyJ0bON1VCj7g" type="2003" element="_BTvM8IqYEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_BT_roIqYEeyJ0bON1VCj7g" type="5007"/> @@ -3815,7 +3826,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_BT_ro4qYEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_BT_EkYqYEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BT_EkoqYEeyJ0bON1VCj7g" x="1602" y="522" width="141" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BT_EkoqYEeyJ0bON1VCj7g" x="1607" y="486" width="141" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_5_rUAIqYEeyJ0bON1VCj7g" type="2003" element="_5_cqgIqYEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_5_rUA4qYEeyJ0bON1VCj7g" type="5007"/> @@ -3828,7 +3839,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_5_rUBoqYEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_5_rUAYqYEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5_rUAoqYEeyJ0bON1VCj7g" x="1308" y="522" width="120" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5_rUAoqYEeyJ0bON1VCj7g" x="1313" y="486" width="120" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_F9H9cIqZEeyJ0bON1VCj7g" type="2003" element="_F86iEIqZEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_F9IkgIqZEeyJ0bON1VCj7g" type="5007"/> @@ -3841,7 +3852,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_F9Ikg4qZEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_F9H9cYqZEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F9H9coqZEeyJ0bON1VCj7g" x="1776" y="522" width="138" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F9H9coqZEeyJ0bON1VCj7g" x="1781" y="486" width="138" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_ZNRYcIqZEeyJ0bON1VCj7g" type="2003" element="_ZNDWAIqZEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_ZNRYc4qZEeyJ0bON1VCj7g" type="5007"/> @@ -3854,7 +3865,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_ZNR_goqZEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_ZNRYcYqZEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZNRYcoqZEeyJ0bON1VCj7g" x="1074" y="516" width="174" height="100"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZNRYcoqZEeyJ0bON1VCj7g" x="1079" y="480" width="174" height="100"/> </children> <children xmi:type="notation:Node" xmi:id="_vsQ_J5SLEeyJ0bON1VCj7g" type="2003" element="_vsCVoJSLEeyJ0bON1VCj7g"> <children xmi:type="notation:Node" xmi:id="_vsRmMJSLEeyJ0bON1VCj7g" type="5007"/> @@ -3899,7 +3910,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_vsRmM5SLEeyJ0bON1VCj7g"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_vsQ_KJSLEeyJ0bON1VCj7g" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vsQ_KZSLEeyJ0bON1VCj7g" x="252" y="367" width="213" height="212"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vsQ_KZSLEeyJ0bON1VCj7g" x="2208" y="162" width="213" height="243"/> </children> <styles xmi:type="notation:DiagramStyle" xmi:id="_FmNkMjx3EeyWNq6fFfWVSw"/> <edges xmi:type="notation:Edge" xmi:id="_E5KQ8IqXEeyJ0bON1VCj7g" type="4001" element="_E4rIwIqXEeyJ0bON1VCj7g" source="__LdHQIqWEeyJ0bON1VCj7g" target="_KOCgYIqWEeyJ0bON1VCj7g"> @@ -4075,6 +4086,9 @@ <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_GE5rUjx3EeyWNq6fFfWVSw" name="MonitoringRequest" tooltipText="" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//IPosDevKit/MonitoringRequest"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//IPosDevKit/MonitoringRequest"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_w4NVA1daEeyyocYQuYPGPQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> </ownedStyle> @@ -4235,6 +4249,9 @@ <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_TTCYYD8bEeyWNq6fFfWVSw" name="IposPositionEvent" tooltipText="" width="12" height="10"> <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//IPosDevKit/IposPositionEvent"/> <semanticElements xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//IPosDevKit/IposPositionEvent"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_KV8sMD8cEeyWNq6fFfWVSw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> </ownedStyle> @@ -5780,4 +5797,20 @@ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/> <target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#//OSM"/> </diagram:DSemanticDiagram> + <diagram:DSemanticDiagram uid="_OXjXYOMSEeylWPfcS0Eglw"> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_OaeIgOMSEeylWPfcS0Eglw" source="GMF_DIAGRAMS"> + <data xmi:type="notation:Diagram" xmi:id="_OaeIgeMSEeylWPfcS0Eglw" type="Sirius" element="_OXjXYOMSEeylWPfcS0Eglw" measurementUnit="Pixel"> + <styles xmi:type="notation:DiagramStyle" xmi:id="_OaeIguMSEeylWPfcS0Eglw"/> + </data> + </ownedAnnotationEntries> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_Oaf9sOMSEeylWPfcS0Eglw" source="DANNOTATION_CUSTOMIZATION_KEY"> + <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_OagkwOMSEeylWPfcS0Eglw"/> + </ownedAnnotationEntries> + <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> + <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_OXnBwOMSEeylWPfcS0Eglw"/> + <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> + <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/> + <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/> + <target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#//IPos_Datamodel_print"/> + </diagram:DSemanticDiagram> </xmi:XMI> diff --git a/emf_datamodel/model/iPos_Datamodel.ecore b/emf_datamodel/model/iPos_Datamodel.ecore index e58900e1c4a8e5e91d8ad27e8e16813d56a46c5b..c71f06926d60eeb87f7ce2802ed370f18b82d6a1 100644 --- a/emf_datamodel/model/iPos_Datamodel.ecore +++ b/emf_datamodel/model/iPos_Datamodel.ecore @@ -120,13 +120,13 @@ <eStructuralFeatures xsi:type="ecore:EAttribute" name="sensorId" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="PositionEvent"> - <eStructuralFeatures xsi:type="ecore:EReference" name="placing" lowerBound="1" - eType="#//Placing"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="timeStamp" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String" transient="true"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="lObjectId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> <eStructuralFeatures xsi:type="ecore:EReference" name="zonedescriptors" upperBound="-1" eType="#//ZoneDescriptor"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="placing" lowerBound="1" + eType="#//Placing"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="EventFilterConfiguration"> <eStructuralFeatures xsi:type="ecore:EAttribute" name="positionAmbiguityStrategy" @@ -145,7 +145,7 @@ </eGenericType> </eStructuralFeatures> <eStructuralFeatures xsi:type="ecore:EReference" name="eventfiltercondition" upperBound="-1" - eType="#//EventFilterCondition"/> + eType="#//TrackingTask"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="MonitoringTask"> <eStructuralFeatures xsi:type="ecore:EReference" name="eventfilterconfiguration" @@ -177,7 +177,7 @@ <eStructuralFeatures xsi:type="ecore:EAttribute" name="rss" transient="true"> <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> - <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//IntObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DoubleObject"/> </eGenericType> </eStructuralFeatures> </eClassifiers> @@ -482,4 +482,5 @@ <eStructuralFeatures xsi:type="ecore:EAttribute" name="protocol" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> </eClassifiers> </eSubpackages> + <eSubpackages name="IPos_Datamodel_print" nsURI="dmprint" nsPrefix="dmprint"/> </ecore:EPackage> diff --git a/emf_datamodel/model/iPos_Datamodel.genmodel b/emf_datamodel/model/iPos_Datamodel.genmodel index 0eabcb09ce84e27d1ef4ecaae2585727b32b7b00..d7797a7d1bcc86c58d6ea2e826c9d0f19885601f 100644 --- a/emf_datamodel/model/iPos_Datamodel.genmodel +++ b/emf_datamodel/model/iPos_Datamodel.genmodel @@ -116,10 +116,10 @@ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//Beacon/sensorId"/> </genClasses> <genClasses ecoreClass="iPos_Datamodel.ecore#//PositionEvent"> - <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//PositionEvent/placing"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//PositionEvent/timeStamp"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//PositionEvent/lObjectId"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//PositionEvent/zonedescriptors"/> + <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//PositionEvent/placing"/> </genClasses> <genClasses ecoreClass="iPos_Datamodel.ecore#//EventFilterConfiguration"> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterConfiguration/positionAmbiguityStrategy"/> @@ -388,5 +388,7 @@ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//OSM/OSMMonitoringTarget/protocol"/> </genClasses> </nestedGenPackages> + <nestedGenPackages prefix="IPos_Datamodel_print" disposableProviderFactory="true" + ecorePackage="iPos_Datamodel.ecore#//IPos_Datamodel_print"/> </genPackages> </genmodel:GenModel> diff --git a/init_Industrierobotik.txt b/init_Industrierobotik.txt index c5e6fbd05b77e3b66691dbe9b825c8c78b27de6f..969b1b7c0a18d45c5c21cd9c7c5cafe4bc813bf6 100644 --- a/init_Industrierobotik.txt +++ b/init_Industrierobotik.txt @@ -1,5 +1,5 @@ {"frames": [{"id": "cobot1_door_zone", "space": [{"position": {"refSystemId": "ROOT", "point": {"x": 2.0,"y": 0.0,"z": 0.0}, "accuracy": 0.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "x": 6.0, "y": 4.0, "z":6.0}]}, {"id": "cobot1_window_zone", "space": [{"position": {"refSystemId": "ROOT", "point": {"x": 2.0,"y": 4.0,"z": 0.0}, "accuracy": 0.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "x": 6.0, "y": 4.0, "z":6.0}]}, {"id": "robolab_east", "space": [{"position": {"refSystemId": "ROOT", "point": {"x": 4.0,"y": 2.0,"z": 0.0}, "accuracy": 0.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "x": 4.0, "y": 4.0, "z":4.0}]}, {"id": "robolab_west", "space": [{"position": {"refSystemId": "ROOT", "point": {"x": -4.0,"y": 2.0,"z": 0.0}, "accuracy": 0.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "x": 8.0, "y": 10.0, "z":6.0}]}, {"id": "robolab_armarea", "space": [{"position": {"refSystemId": "CETI_ROBOTARM_CELL", "point": {"x": 0.0,"y": 0.0,"z": 0.0}, "accuracy": 0.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "x": 8.0, "y": 10.0, "z":6.0}]} ]} {"refSystems": [{"id": "ROOT"}, {"id": "CETI_ROOT", "position": {"refSystemId": "ROOT", "point": {"x": 0.5,"y": 0.75,"z": 1.0}, "accuracy": 1.0}, "orientation": {"x": 0.7071067811865477,"y": 0.0,"z": 0.0, "w": 0.7071067811865477}}, {"id": "CETI_ROBOLAB", "position": {"refSystemId": "CETI_ROOT", "point": {"x": 0.2,"y": 0.2,"z": 0.2}, "accuracy": 1.0}, "orientation": {"x": 0.4082481001180531,"y": 0.4082481001180531,"z": 0.4082481001180531, "w": 0.7071067811865477}}, {"id": "CETI_OFFICE", "position": {"refSystemId": "CETI_ROOT", "point": {"x": 2.0,"y": 2.0,"z": 0.0}, "accuracy": 1.0}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0}}, {"id": "TL_TESTHALL", "position": {"refSystemId": "ROOT", "point": {"x": 40.0,"y": 60.0,"z": 0.0}, "accuracy": 1.0}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.21643961393810285, "w": 0.9762960071199334}}, {"id": "CETI_ROBOTARM_CELL", "position": {"refSystemId": "CETI_ROBOLAB", "point": {"x": 0.0,"y": 1.2,"z": 2.2}, "accuracy": 1.0}, "orientation": {"x": 0.2705992818596786,"y": 0.2705992818596786,"z": 0.0, "w": 0.9238795325112868}}]} -{"objectConfigs": [{"agentId": "Employee_1", "sensorId": "UWB_2", "agentType": "HUMAN", "sensorType": "UWB"}, {"agentId": "turtlebot", "sensorId": "UWB_1", "agentType": "ROBOT", "sensorType": "UWB"}, {"agentId": "turtlebot", "sensorId": "98:CD:AC:26:2D:18", "agentType": "ROBOT", "sensorType": "RFID_SCANNER"}, {"agentId": "turtlebot", "sensorId": "handy1", "agentType": "ROBOT", "sensorType": "IMU"}, {"agentId": "tooz_employee", "sensorId": "tooz_employee_uwb", "agentType": "HUMAN", "sensorType": "UWB"}, {"agentId": "TL_TUD-Virtual_AGV", "sensorId": "TL_TUD-Virtual_AGV", "agentType": "Robot", "sensorType": "virtual"}]} +{"objectConfigs": [{"agentId": "Employee_1", "sensorId": "UWB_2", "agentType": "HUMAN", "sensorType": "UWB"}, {"agentId": "turtlebot", "sensorId": "UWB_1", "agentType": "ROBOT", "sensorType": "UWB"}, {"agentId": "turtlebot", "sensorId": "98:CD:AC:26:2D:18", "agentType": "ROBOT", "sensorType": "RFID_SCANNER"}, {"agentId": "turtlebot", "sensorId": "handy1", "agentType": "ROBOT", "sensorType": "IMU"}, {"agentId": "tooz_employee", "sensorId": "tooz_employee_uwb", "agentType": "HUMAN", "sensorType": "UWB"}, {"agentId": "tooz_employee", "sensorId": "tooz_employee_bt", "agentType": "HUMAN", "sensorType": "BT"}, {"agentId": "TL_TUD-Virtual_AGV", "sensorId": "TL_TUD-Virtual_AGV", "agentType": "Robot", "sensorType": "virtual"}, {"agentId": "TL_TUD-1", "sensorId": "TL_TUD-1", "agentType": "Robot", "sensorType": "virtual"}, {"agentId": "TL_TUD-2", "sensorId": "TL_TUD-2", "agentType": "Robot", "sensorType": "virtual"}, {"agentId": "TL_TUD-3", "sensorId": "TL_TUD-3", "agentType": "Robot", "sensorType": "virtual"}, {"agentId": "TL_TUD-4", "sensorId": "TL_TUD-4", "agentType": "Robot", "sensorType": "virtual"}, {"agentId": "TL_TUD-5", "sensorId": "TL_TUD-5", "agentType": "Robot", "sensorType": "virtual"}]} {"pois": [{"id": "UWB_BEACON_1", "description": "Beacon_Position", "data": {"type" : "UWB"}, "position": {"refSystemId": "ROOT", "point": {"x": 3.1,"y": 0.5,"z": 0.0}, "accuracy": 1.0}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0} }, {"id": "UWB_BEACON_2", "description": "Beacon_Position", "data": {"type" : "UWB"}, "position": {"refSystemId": "ROOT", "point": {"x": -0.3,"y": 4.5,"z": 0.0}, "accuracy": 1.0}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0}}, {"id": "83221710", "description": "RFID_TAG", "data": {"type" : "NFC"}, "position": {"refSystemId": "ROOT", "point": {"x": 2.1,"y": 0.4,"z": 0.5}, "accuracy": 0.1}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0} }, {"id": "31762128", "description": "RFID_TAG", "data": {"type" : "NFC"}, "position": {"refSystemId": "ROOT", "point": {"x": 2.2,"y": 3.4,"z": 0.5}, "accuracy": 0.1}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0} }, {"id": "885", "description": "Beacon_Position", "data": {"type" : "UWB"}, "position": {"refSystemId": "ROOT", "point": {"x": 0,"y": 0,"z": 0.97}, "accuracy": 0.01}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0} }, {"id": "2934", "description": "Beacon_Position", "data": {"type" : "UWB"}, "position": {"refSystemId": "ROOT", "point": {"x": 4.24,"y": 1.33,"z": 1.0}, "accuracy": 0.01}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0} }, {"id": "3383", "description": "Beacon_Position", "data": {"type" : "UWB"}, "position": {"refSystemId": "ROOT", "point": {"x": 1.25,"y": 5.89,"z": 1.06}, "accuracy": 0.01}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0} }, {"id": "1107", "description": "Beacon_Position", "data": {"type" : "UWB"}, "position": {"refSystemId": "ROOT", "point": {"x": 4.24,"y": 5.83,"z": 1.05}, "accuracy": 0.01}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0} }]} {"monitoringRequests": [{"frameIds": ["cobot1_door_zone", "cobot1_window_zone"], "monitoringTaskId": "RobolabMonitoringCeti", "refSystemId": "CETI_ROBOTARM_CELL", "serializationType": "protobuf"}, {"frameIds": ["cobot1_door_zone", "cobot1_window_zone"], "monitoringTaskId": "AGVViewer_VDA5050", "refSystemId": "ROOT", "serializationType": "json"}]} \ No newline at end of file diff --git a/src/main/java/ipos/project/CustomLoggingFilter.java b/src/main/java/ipos/project/CustomLoggingFilter.java index e587e5d112aa72c997ddc83e8a4e45321e99c4f6..d3ff6af081244c55f2894828415cd761744b9d4e 100644 --- a/src/main/java/ipos/project/CustomLoggingFilter.java +++ b/src/main/java/ipos/project/CustomLoggingFilter.java @@ -27,11 +27,11 @@ public class CustomLoggingFilter extends Filter<ILoggingEvent> { } else if (event.getMessage().contains("OP:")){ return FilterReply.DENY; } else if (event.getMessage().contains("TOOZ:")){ - return FilterReply.DENY; - } else if (event.getMessage().contains("VDA5050:")){ return FilterReply.ACCEPT; + } else if (event.getMessage().contains("VDA5050:")){ + return FilterReply.DENY; } else if (event.getMessage().contains("OSM:")){ - return FilterReply.ACCEPT; + return FilterReply.DENY; }else if (event.getMessage().contains("SHELL:")){ return FilterReply.ACCEPT; } else { diff --git a/src/main/java/ipos/project/DataModellntegration/VDA5050Processor/api/MqttRequestHandler.java b/src/main/java/ipos/project/DataModellntegration/VDA5050Processor/api/MqttRequestHandler.java index 1abe06f13cac15f0ef956b4d4af8fef54011a4ca..6f124e36152f04877cc9c4b228b79d07889a6b91 100644 --- a/src/main/java/ipos/project/DataModellntegration/VDA5050Processor/api/MqttRequestHandler.java +++ b/src/main/java/ipos/project/DataModellntegration/VDA5050Processor/api/MqttRequestHandler.java @@ -50,6 +50,7 @@ public class MqttRequestHandler implements Handler { // TODO: Zwischen JSON und Protobuf unterscheiden können //SimpleScene.IposConfigWrapper iposConfigWrapper = ProtoJsonMap.fromJson(message.toString(), SimpleScene.IposConfigWrapper.class); VDA5050.AgvState agvState = ProtoJsonMap.fromJson(message.toString(), VDA5050.AgvState.class); + // VDA5050.AgvState agvState_proto = ProtoJsonMap.fromJson(line, VDA5050.AgvState.class); // IposMonitoringRequest monReqProto = IposMonitoringRequest.parseFrom(message.getPayload()); processAgvState(agvState); } catch (InvalidProtocolBufferException e) { diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/Bluetooth.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/Bluetooth.java index d1f98e44798dcced0ecef5717251fb3dd3fa4984..5e7793c96575870014ffe8ccf3a65a4004987740 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/Bluetooth.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/Bluetooth.java @@ -31,7 +31,7 @@ public interface Bluetooth extends Beacon { * @model transient="true" * @generated */ - Map<String, Integer> getRss(); + Map<String, Double> getRss(); /** * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.Bluetooth#getRss <em>Rss</em>}' attribute. @@ -41,6 +41,6 @@ public interface Bluetooth extends Beacon { * @see #getRss() * @generated */ - void setRss(Map<String, Integer> value); + void setRss(Map<String, Double> value); } // Bluetooth diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterConfiguration.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterConfiguration.java index 23300598f997de738c874155d4a111a8eb859c05..b71e0b91a85585528c74fc6c0292e1c4aa48a871 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterConfiguration.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterConfiguration.java @@ -96,7 +96,7 @@ public interface EventFilterConfiguration extends EObject { /** * Returns the value of the '<em><b>Eventfiltercondition</b></em>' reference list. - * The list contents are of type {@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition}. + * The list contents are of type {@link ipos.project.DataModellntegration.iPos_Datamodel.TrackingTask}. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @return the value of the '<em>Eventfiltercondition</em>' reference list. @@ -104,6 +104,6 @@ public interface EventFilterConfiguration extends EObject { * @model * @generated */ - EList<EventFilterCondition> getEventfiltercondition(); + EList<TrackingTask> getEventfiltercondition(); } // EventFilterConfiguration diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/IPos_DatamodelPackage.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/IPos_DatamodelPackage.java index e25b6fcdada8adc5dcf7452101c0c58ac01a091c..e1910169e79d970768419868191e223748374193 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/IPos_DatamodelPackage.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/IPos_DatamodelPackage.java @@ -1345,40 +1345,40 @@ public interface IPos_DatamodelPackage extends EPackage { int POSITION_EVENT = 25; /** - * The feature id for the '<em><b>Placing</b></em>' reference. + * The feature id for the '<em><b>Time Stamp</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int POSITION_EVENT__PLACING = 0; + int POSITION_EVENT__TIME_STAMP = 0; /** - * The feature id for the '<em><b>Time Stamp</b></em>' attribute. + * The feature id for the '<em><b>LObject Id</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int POSITION_EVENT__TIME_STAMP = 1; + int POSITION_EVENT__LOBJECT_ID = 1; /** - * The feature id for the '<em><b>LObject Id</b></em>' attribute. + * The feature id for the '<em><b>Zonedescriptors</b></em>' reference list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int POSITION_EVENT__LOBJECT_ID = 2; + int POSITION_EVENT__ZONEDESCRIPTORS = 2; /** - * The feature id for the '<em><b>Zonedescriptors</b></em>' reference list. + * The feature id for the '<em><b>Placing</b></em>' reference. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int POSITION_EVENT__ZONEDESCRIPTORS = 3; + int POSITION_EVENT__PLACING = 3; /** * The number of structural features of the '<em>Position Event</em>' class. diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java index 90dc7f097288237be9c2ab3437dc889edb24a74c..ab6af1cfa47b712f7b5d9ece5883050dd9625a8d 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java @@ -15,10 +15,10 @@ import org.eclipse.emf.ecore.EObject; * The following features are supported: * </p> * <ul> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getPlacing <em>Placing</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getTimeStamp <em>Time Stamp</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getLObjectId <em>LObject Id</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getZonedescriptors <em>Zonedescriptors</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getPlacing <em>Placing</em>}</li> * </ul> * * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getPositionEvent() diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/BluetoothImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/BluetoothImpl.java index 5e060bca1a9a05d5d5f4252d813294656384d40f..73493a86dd0de43c7127602275456d9cd501c70b 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/BluetoothImpl.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/BluetoothImpl.java @@ -35,7 +35,7 @@ public class BluetoothImpl extends BeaconImpl implements Bluetooth { * @generated * @ordered */ - protected Map<String, Integer> rss; + protected Map<String, Double> rss; /** * <!-- begin-user-doc --> @@ -61,7 +61,7 @@ public class BluetoothImpl extends BeaconImpl implements Bluetooth { * <!-- end-user-doc --> * @generated */ - public Map<String, Integer> getRss() { + public Map<String, Double> getRss() { return rss; } @@ -70,8 +70,8 @@ public class BluetoothImpl extends BeaconImpl implements Bluetooth { * <!-- end-user-doc --> * @generated */ - public void setRss(Map<String, Integer> newRss) { - Map<String, Integer> oldRss = rss; + public void setRss(Map<String, Double> newRss) { + Map<String, Double> oldRss = rss; rss = newRss; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, IPos_DatamodelPackage.BLUETOOTH__RSS, oldRss, rss)); @@ -101,7 +101,7 @@ public class BluetoothImpl extends BeaconImpl implements Bluetooth { public void eSet(int featureID, Object newValue) { switch (featureID) { case IPos_DatamodelPackage.BLUETOOTH__RSS: - setRss((Map<String, Integer>) newValue); + setRss((Map<String, Double>) newValue); return; } super.eSet(featureID, newValue); @@ -116,7 +116,7 @@ public class BluetoothImpl extends BeaconImpl implements Bluetooth { public void eUnset(int featureID) { switch (featureID) { case IPos_DatamodelPackage.BLUETOOTH__RSS: - setRss((Map<String, Integer>) null); + setRss((Map<String, Double>) null); return; } super.eUnset(featureID); diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConfigurationImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConfigurationImpl.java index dff71e1af62b26c8a9a39ac1c68b592eda5cfd68..5c97820d652304ddc106f6343bb5f4110cdcf726 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConfigurationImpl.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConfigurationImpl.java @@ -2,10 +2,10 @@ */ package ipos.project.DataModellntegration.iPos_Datamodel.impl; -import ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition; import ipos.project.DataModellntegration.iPos_Datamodel.EventFilterConfiguration; import ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage; +import ipos.project.DataModellntegration.iPos_Datamodel.TrackingTask; import java.util.Collection; import java.util.Map; @@ -86,7 +86,7 @@ public class EventFilterConfigurationImpl extends MinimalEObjectImpl.Container i * @generated * @ordered */ - protected EList<EventFilterCondition> eventfiltercondition; + protected EList<TrackingTask> eventfiltercondition; /** * <!-- begin-user-doc --> @@ -181,9 +181,9 @@ public class EventFilterConfigurationImpl extends MinimalEObjectImpl.Container i * <!-- end-user-doc --> * @generated */ - public EList<EventFilterCondition> getEventfiltercondition() { + public EList<TrackingTask> getEventfiltercondition() { if (eventfiltercondition == null) { - eventfiltercondition = new EObjectResolvingEList<EventFilterCondition>(EventFilterCondition.class, this, + eventfiltercondition = new EObjectResolvingEList<TrackingTask>(TrackingTask.class, this, IPos_DatamodelPackage.EVENT_FILTER_CONFIGURATION__EVENTFILTERCONDITION); } return eventfiltercondition; @@ -229,7 +229,7 @@ public class EventFilterConfigurationImpl extends MinimalEObjectImpl.Container i return; case IPos_DatamodelPackage.EVENT_FILTER_CONFIGURATION__EVENTFILTERCONDITION: getEventfiltercondition().clear(); - getEventfiltercondition().addAll((Collection<? extends EventFilterCondition>) newValue); + getEventfiltercondition().addAll((Collection<? extends TrackingTask>) newValue); return; } super.eSet(featureID, newValue); diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/IPos_DatamodelPackageImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/IPos_DatamodelPackageImpl.java index a6473c7b9202d8178ab748edfd6e14bb45b3cfd0..7d86cc238dcfe5bc3f7d31cce5a65029c457fe1a 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/IPos_DatamodelPackageImpl.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/IPos_DatamodelPackageImpl.java @@ -1211,7 +1211,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data * @generated */ public EReference getPositionEvent_Placing() { - return (EReference) positionEventEClass.getEStructuralFeatures().get(0); + return (EReference) positionEventEClass.getEStructuralFeatures().get(3); } /** @@ -1220,7 +1220,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data * @generated */ public EAttribute getPositionEvent_TimeStamp() { - return (EAttribute) positionEventEClass.getEStructuralFeatures().get(1); + return (EAttribute) positionEventEClass.getEStructuralFeatures().get(0); } /** @@ -1229,7 +1229,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data * @generated */ public EAttribute getPositionEvent_LObjectId() { - return (EAttribute) positionEventEClass.getEStructuralFeatures().get(2); + return (EAttribute) positionEventEClass.getEStructuralFeatures().get(1); } /** @@ -1238,7 +1238,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data * @generated */ public EReference getPositionEvent_Zonedescriptors() { - return (EReference) positionEventEClass.getEStructuralFeatures().get(3); + return (EReference) positionEventEClass.getEStructuralFeatures().get(2); } /** @@ -1903,10 +1903,10 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data createEAttribute(beaconEClass, BEACON__SENSOR_ID); positionEventEClass = createEClass(POSITION_EVENT); - createEReference(positionEventEClass, POSITION_EVENT__PLACING); createEAttribute(positionEventEClass, POSITION_EVENT__TIME_STAMP); createEAttribute(positionEventEClass, POSITION_EVENT__LOBJECT_ID); createEReference(positionEventEClass, POSITION_EVENT__ZONEDESCRIPTORS); + createEReference(positionEventEClass, POSITION_EVENT__PLACING); eventFilterConfigurationEClass = createEClass(EVENT_FILTER_CONFIGURATION); createEAttribute(eventFilterConfigurationEClass, EVENT_FILTER_CONFIGURATION__POSITION_AMBIGUITY_STRATEGY); @@ -2253,9 +2253,6 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data initEClass(positionEventEClass, PositionEvent.class, "PositionEvent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEReference(getPositionEvent_Placing(), this.getPlacing(), null, "placing", null, 1, 1, PositionEvent.class, - !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, - IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getPositionEvent_TimeStamp(), theXMLTypePackage.getString(), "timeStamp", null, 0, 1, PositionEvent.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); @@ -2265,6 +2262,9 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data initEReference(getPositionEvent_Zonedescriptors(), this.getZoneDescriptor(), null, "zonedescriptors", null, 0, -1, PositionEvent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getPositionEvent_Placing(), this.getPlacing(), null, "placing", null, 1, 1, PositionEvent.class, + !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(eventFilterConfigurationEClass, EventFilterConfiguration.class, "EventFilterConfiguration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); @@ -2287,7 +2287,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data initEAttribute(getEventFilterConfiguration_FilterCriteria(), g1, "filterCriteria", null, 0, 1, EventFilterConfiguration.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEReference(getEventFilterConfiguration_Eventfiltercondition(), this.getEventFilterCondition(), null, + initEReference(getEventFilterConfiguration_Eventfiltercondition(), this.getTrackingTask(), null, "eventfiltercondition", null, 0, -1, EventFilterConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); @@ -2335,7 +2335,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data g1 = createEGenericType(ecorePackage.getEMap()); g2 = createEGenericType(ecorePackage.getEString()); g1.getETypeArguments().add(g2); - g2 = createEGenericType(theXMLTypePackage.getIntObject()); + g2 = createEGenericType(theXMLTypePackage.getDoubleObject()); g1.getETypeArguments().add(g2); initEAttribute(getBluetooth_Rss(), g1, "rss", null, 0, 1, Bluetooth.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java index f3304f492d83224e13d93629095923775e3c9767..c900e0efacc0a952ce17df3781324dae5eba0ee3 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java @@ -29,25 +29,15 @@ import org.eclipse.emf.ecore.util.EObjectResolvingEList; * The following features are implemented: * </p> * <ul> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.PositionEventImpl#getPlacing <em>Placing</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.PositionEventImpl#getTimeStamp <em>Time Stamp</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.PositionEventImpl#getLObjectId <em>LObject Id</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.PositionEventImpl#getZonedescriptors <em>Zonedescriptors</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.PositionEventImpl#getPlacing <em>Placing</em>}</li> * </ul> * * @generated */ public class PositionEventImpl extends MinimalEObjectImpl.Container implements PositionEvent { - /** - * The cached value of the '{@link #getPlacing() <em>Placing</em>}' reference. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getPlacing() - * @generated - * @ordered - */ - protected Placing placing; - /** * The default value of the '{@link #getTimeStamp() <em>Time Stamp</em>}' attribute. * <!-- begin-user-doc --> @@ -98,6 +88,16 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P */ protected EList<ZoneDescriptor> zonedescriptors; + /** + * The cached value of the '{@link #getPlacing() <em>Placing</em>}' reference. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getPlacing() + * @generated + * @ordered + */ + protected Placing placing; + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -222,16 +222,16 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case IPos_DatamodelPackage.POSITION_EVENT__PLACING: - if (resolve) - return getPlacing(); - return basicGetPlacing(); case IPos_DatamodelPackage.POSITION_EVENT__TIME_STAMP: return getTimeStamp(); case IPos_DatamodelPackage.POSITION_EVENT__LOBJECT_ID: return getLObjectId(); case IPos_DatamodelPackage.POSITION_EVENT__ZONEDESCRIPTORS: return getZonedescriptors(); + case IPos_DatamodelPackage.POSITION_EVENT__PLACING: + if (resolve) + return getPlacing(); + return basicGetPlacing(); } return super.eGet(featureID, resolve, coreType); } @@ -245,9 +245,6 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case IPos_DatamodelPackage.POSITION_EVENT__PLACING: - setPlacing((Placing) newValue); - return; case IPos_DatamodelPackage.POSITION_EVENT__TIME_STAMP: setTimeStamp((String) newValue); return; @@ -258,6 +255,9 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P getZonedescriptors().clear(); getZonedescriptors().addAll((Collection<? extends ZoneDescriptor>) newValue); return; + case IPos_DatamodelPackage.POSITION_EVENT__PLACING: + setPlacing((Placing) newValue); + return; } super.eSet(featureID, newValue); } @@ -270,9 +270,6 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P @Override public void eUnset(int featureID) { switch (featureID) { - case IPos_DatamodelPackage.POSITION_EVENT__PLACING: - setPlacing((Placing) null); - return; case IPos_DatamodelPackage.POSITION_EVENT__TIME_STAMP: setTimeStamp(TIME_STAMP_EDEFAULT); return; @@ -282,6 +279,9 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P case IPos_DatamodelPackage.POSITION_EVENT__ZONEDESCRIPTORS: getZonedescriptors().clear(); return; + case IPos_DatamodelPackage.POSITION_EVENT__PLACING: + setPlacing((Placing) null); + return; } super.eUnset(featureID); } @@ -294,14 +294,14 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P @Override public boolean eIsSet(int featureID) { switch (featureID) { - case IPos_DatamodelPackage.POSITION_EVENT__PLACING: - return placing != null; case IPos_DatamodelPackage.POSITION_EVENT__TIME_STAMP: return TIME_STAMP_EDEFAULT == null ? timeStamp != null : !TIME_STAMP_EDEFAULT.equals(timeStamp); case IPos_DatamodelPackage.POSITION_EVENT__LOBJECT_ID: return LOBJECT_ID_EDEFAULT == null ? lObjectId != null : !LOBJECT_ID_EDEFAULT.equals(lObjectId); case IPos_DatamodelPackage.POSITION_EVENT__ZONEDESCRIPTORS: return zonedescriptors != null && !zonedescriptors.isEmpty(); + case IPos_DatamodelPackage.POSITION_EVENT__PLACING: + return placing != null; } return super.eIsSet(featureID); } diff --git a/src/main/java/ipos/project/MainApp.java b/src/main/java/ipos/project/MainApp.java index 7e0f566992bfc948dd90d467750ed2a0b076a014..afc4e06806beac18915cf318692c2b2038a71099 100644 --- a/src/main/java/ipos/project/MainApp.java +++ b/src/main/java/ipos/project/MainApp.java @@ -38,7 +38,7 @@ public class MainApp { public static final String COMMAND_OP = "oppl testdata"; public static final String COMMAND_OP_EVTS = "opevts testdata"; public static final String COMMAND_SDF = "sdf testdata"; - public static final String COMMAND_TOOZ_TARGET = "tooz setMonitoringTarget"; + public static final String COMMAND_TOOZ_TARGET = "tooz setLocalAgent"; public static final String COMMAND_TOOZ = "tooz testdata"; public static final String COMMAND_VDA5050 = "testdata VDA5050"; public static final String COMMAND_EXIT = "exit"; diff --git a/src/main/java/ipos/project/SensorValueIntegration/GenericSensorValueProcessor.java b/src/main/java/ipos/project/SensorValueIntegration/GenericSensorValueProcessor.java index 94cb651a61e2afe793b23829b5a7e6526bf407ec..6521457779b52175d6fb0a5310eef41f056cb19c 100644 --- a/src/main/java/ipos/project/SensorValueIntegration/GenericSensorValueProcessor.java +++ b/src/main/java/ipos/project/SensorValueIntegration/GenericSensorValueProcessor.java @@ -3,6 +3,9 @@ package ipos.project.SensorValueIntegration; import com.google.protobuf.InvalidProtocolBufferException; import ipos.models.GenericSensor; import ipos.models.SimpleScene.IposPosition; +import ipos.project.DataModellntegration.iPos_Datamodel.Beacon; +import ipos.project.DataModellntegration.iPos_Datamodel.Bluetooth; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosBTEvent; import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosUWBEvent; import ipos.project.DataModellntegration.iPos_Datamodel.UWB; import ipos.project.SensorValueIntegration.Service.GenericSensorTransformer; @@ -55,6 +58,24 @@ public class GenericSensorValueProcessor { } } + public static void receiveMessage(Beacon beaconRawdataEvent, String monitoringTaskId, String serializationType, String agentId, String agentType) { + if (beaconRawdataEvent instanceof UWB){ + GenericSensorValueProcessor.receiveMessage((UWB) beaconRawdataEvent, monitoringTaskId, serializationType, agentId, agentType); + } else if(beaconRawdataEvent instanceof Bluetooth){ + GenericSensorValueProcessor.receiveMessage((Bluetooth) beaconRawdataEvent, monitoringTaskId, serializationType, agentId, agentType); + } else{ + LOG.error("Rawdata could not be forwarded as position sensor technology could not be determined."); + } + } + + public static void receiveMessage(Bluetooth btRawdataEvent, String monitoringTaskId, String serializationType, String agentId, String agentType) { + IPosBTEvent iPosBTEvent_internal = GenericSensorTransformer.bt_internal2IPosRawdata(btRawdataEvent, agentId, agentType); + GenericSensor.IPosBTEvent iPosBTEvent_proto = GenericSensorTransformer.bt_IPosRawdata2proto(iPosBTEvent_internal); + GenericSensor.IPosRawdataEventWrapper iPosRawdataEventWrapper_proto = GenericSensorTransformer.bt_wrapIntoRawdataEventWrapper(iPosBTEvent_proto); + logging_tooz(iPosBTEvent_proto, monitoringTaskId, serializationType); + OtherUtility.publishRespectingSerializationType(monitoringTaskId, serializationType, iPosRawdataEventWrapper_proto); + } + public static void receiveMessage(UWB beaconRawdataEvent, String monitoringTaskId, String serializationType, String agentId, String agentType) { IPosUWBEvent iPosUWBEvent_internal = GenericSensorTransformer.uwb_internal2IPosRawdata(beaconRawdataEvent, agentId, agentType); GenericSensor.IPosUWBEvent iPosUWBEvent_proto = GenericSensorTransformer.uwb_IPosRawdata2proto(iPosUWBEvent_internal); @@ -63,7 +84,7 @@ public class GenericSensorValueProcessor { OtherUtility.publishRespectingSerializationType(monitoringTaskId, serializationType, iPosRawdataEventWrapper_proto); } - private static void logging_tooz(GenericSensor.IPosUWBEvent event_proto, String monitoringTaskId, String serializationType) { + private static void logging_tooz(com.google.protobuf.AbstractMessage event_proto, String monitoringTaskId, String serializationType) { LOG.info("TOOZ: Publishing " + event_proto.getClass().getName() + " on topic " + monitoringTaskId + " with serialization type " + serializationType); LOG.info("TOOZ: "); } diff --git a/src/main/java/ipos/project/SensorValueIntegration/Service/GenericSensorTransformer.java b/src/main/java/ipos/project/SensorValueIntegration/Service/GenericSensorTransformer.java index 5c9dbd7bf471b26856215930298d3c5d204764cc..49d027329b688dab1dd368578e95a82a3da48936 100644 --- a/src/main/java/ipos/project/SensorValueIntegration/Service/GenericSensorTransformer.java +++ b/src/main/java/ipos/project/SensorValueIntegration/Service/GenericSensorTransformer.java @@ -4,6 +4,7 @@ import com.google.protobuf.ProtocolStringList; import ipos.models.GenericSensor; import ipos.models.SimpleScene; import ipos.project.DataModellntegration.iPos_Datamodel.*; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosBTEvent; import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosUWBEvent; import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosDevKitFactory; import ipos.project.Functionality.DataServices; @@ -99,12 +100,10 @@ public class GenericSensorTransformer { } public static UWB uwb_GSensor2Internal(GenericSensor.UWBRawDataEvent proto_uwbRawDataEvent) { - UWB internal_uwbRawDataEvent = modelFactory.createUWB(); - internal_uwbRawDataEvent.setTimeStamp(proto_uwbRawDataEvent.getTimestamp()); - internal_uwbRawDataEvent.setDistances(convertToStringToDoubleMap(proto_uwbRawDataEvent.getDistancesMap())); - internal_uwbRawDataEvent.setType(proto_uwbRawDataEvent.getType()); - internal_uwbRawDataEvent.setSensorId(proto_uwbRawDataEvent.getSensorId()); - return internal_uwbRawDataEvent; + UWB internal_btRawDataEvent = modelFactory.createUWB(); + // UWB adds nothing to Beacon, so all we do here is using the function for the transformation of the Beacon-specific properties + internal_btRawDataEvent = beacon_GSensor2Internal(internal_btRawDataEvent, proto_uwbRawDataEvent.getTimestamp(), proto_uwbRawDataEvent.getSensorId(), proto_uwbRawDataEvent.getDistancesMap(), proto_uwbRawDataEvent.getType()); + return internal_btRawDataEvent; } private static Map<String, Double> convertToStringToDoubleMap(Map<String, String> distancesMap) throws NumberFormatException { @@ -129,7 +128,19 @@ public class GenericSensorTransformer { return iPosUWBEvent; } - private static Map<String, String> beaconDistances_internal2GSensor(Map<String, Double> distances) { + public static IPosBTEvent bt_internal2IPosRawdata(Bluetooth btRawdataEvent, String agentId, String agentType) { + IPosBTEvent iPosBTEvent = devKitFactory.createIPosBTEvent(); + iPosBTEvent.setAgentId(agentId); + iPosBTEvent.setSensorId(btRawdataEvent.getSensorId()); + iPosBTEvent.setAgentType(agentType); + iPosBTEvent.setSensorType(btRawdataEvent.getType()); + iPosBTEvent.setTimeStamp(btRawdataEvent.getTimeStamp()); + iPosBTEvent.setDistances(btRawdataEvent.getDistances()); + iPosBTEvent.setRss(btRawdataEvent.getRss()); + return iPosBTEvent; + } + + private static Map<String, String> beaconRawdataMap_internal2GSensor(Map<String, Double> distances) { HashMap<String, String> distancesGSensor = new HashMap<>(); for (Map.Entry<String, Double> distanceEntry : distances.entrySet()){ distancesGSensor.put(distanceEntry.getKey(), String.valueOf(distanceEntry.getValue().doubleValue())); @@ -144,15 +155,48 @@ public class GenericSensorTransformer { protoIPosUWBEvent.setAgentType(iPosUWBEvent_internal.getAgentType()); protoIPosUWBEvent.setSensorType(iPosUWBEvent_internal.getSensorType()); protoIPosUWBEvent.setTimeStamp(iPosUWBEvent_internal.getTimeStamp()); - protoIPosUWBEvent.putAllDistances(beaconDistances_internal2GSensor(iPosUWBEvent_internal.getDistances())); + protoIPosUWBEvent.putAllDistances(beaconRawdataMap_internal2GSensor(iPosUWBEvent_internal.getDistances())); return protoIPosUWBEvent.build(); } + public static GenericSensor.IPosBTEvent bt_IPosRawdata2proto(IPosBTEvent iPosBTEvent_internal) { + GenericSensor.IPosBTEvent.Builder protoIPosBTEvent = GenericSensor.IPosBTEvent.newBuilder(); + protoIPosBTEvent.setAgentId(iPosBTEvent_internal.getAgentId()); + protoIPosBTEvent.setSensorId(iPosBTEvent_internal.getSensorId()); + protoIPosBTEvent.setAgentType(iPosBTEvent_internal.getAgentType()); + protoIPosBTEvent.setSensorType(iPosBTEvent_internal.getSensorType()); + protoIPosBTEvent.setTimeStamp(iPosBTEvent_internal.getTimeStamp()); + protoIPosBTEvent.putAllDistances(beaconRawdataMap_internal2GSensor(iPosBTEvent_internal.getDistances())); + protoIPosBTEvent.putAllRss(beaconRawdataMap_internal2GSensor(iPosBTEvent_internal.getRss())); + return protoIPosBTEvent.build(); + } + public static GenericSensor.IPosRawdataEventWrapper uwb_wrapIntoRawdataEventWrapper(GenericSensor.IPosUWBEvent iPosUWBEvent_proto) { GenericSensor.IPosRawdataEventWrapper.Builder iPosRawdataEventWrapper_proto = GenericSensor.IPosRawdataEventWrapper.newBuilder(); iPosRawdataEventWrapper_proto.addIPosUWBEvent(iPosUWBEvent_proto); return iPosRawdataEventWrapper_proto.build(); } + + public static GenericSensor.IPosRawdataEventWrapper bt_wrapIntoRawdataEventWrapper(GenericSensor.IPosBTEvent iPosBTEvent_proto) { + GenericSensor.IPosRawdataEventWrapper.Builder iPosRawdataEventWrapper_proto = GenericSensor.IPosRawdataEventWrapper.newBuilder(); + iPosRawdataEventWrapper_proto.addIPosBTEvent(iPosBTEvent_proto); + return iPosRawdataEventWrapper_proto.build(); + } + + public static Bluetooth bt_GSensor2Internal(GenericSensor.BluetoothRawDataEvent proto_bluetoothRawDataEvent) { + Bluetooth internal_btRawDataEvent = modelFactory.createBluetooth(); + internal_btRawDataEvent = beacon_GSensor2Internal(internal_btRawDataEvent, proto_bluetoothRawDataEvent.getTimestamp(), proto_bluetoothRawDataEvent.getSensorId(), proto_bluetoothRawDataEvent.getDistancesMap(), proto_bluetoothRawDataEvent.getType()); + internal_btRawDataEvent.setRss(convertToStringToDoubleMap(proto_bluetoothRawDataEvent.getRssMap())); + return internal_btRawDataEvent; + } + + private static <T extends Beacon> T beacon_GSensor2Internal(T internal_beaconRawDataEvent, String timestamp, String sensorId, Map<String, String> distances, String type){ + internal_beaconRawDataEvent.setTimeStamp(timestamp); + internal_beaconRawDataEvent.setDistances(convertToStringToDoubleMap(distances)); + internal_beaconRawDataEvent.setType(type); + internal_beaconRawDataEvent.setSensorId(sensorId); + return internal_beaconRawDataEvent; + } } diff --git a/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java b/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java index 3fbf313eb9b92e32a4fb473c87b720cc0ed58480..e6f492767b20970cce26e36031d0ab7b833b2b01 100644 --- a/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java +++ b/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java @@ -4,10 +4,7 @@ import com.google.protobuf.InvalidProtocolBufferException; import ipos.models.GenericSensor; import ipos.models.GenericSensor.SensorPositionEvent; import ipos.models.GenericSensor.SensorEventWrapper; -import ipos.project.DataModellntegration.iPos_Datamodel.IMU; -import ipos.project.DataModellntegration.iPos_Datamodel.NFC; -import ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent; -import ipos.project.DataModellntegration.iPos_Datamodel.UWB; +import ipos.project.DataModellntegration.iPos_Datamodel.*; import ipos.project.SensorValueIntegration.Service.GenericSensorTransformer; import ipos.project.UseCaseController.PositionMonitoring; import ipos.project.config.mqtt.Handler; @@ -59,7 +56,7 @@ public class MqttPositionHandler implements Handler { LOG.info("IposSensorEventWrapper received: \n" + iposSensorEventWrapper.toString()); // Annahme: iposSensorEventWrapper enthält für leere Felder leere Listen und nicht null - + processBluetoothEvents(iposSensorEventWrapper.getBluetoothRawDataEventList()); processPositionEvents(iposSensorEventWrapper.getSensorPositionEventList()); processNFCRawdataEvents(iposSensorEventWrapper.getNfcRawDataEventList()); processIMURawdataEvents(iposSensorEventWrapper.getImuRawDataEventList()); @@ -67,6 +64,19 @@ public class MqttPositionHandler implements Handler { // this.jmsTemplate.convertAndSend("/request123", monReqInternal); // submit request to the internal broker } + private static void processBluetoothEvents(List<GenericSensor.BluetoothRawDataEvent> bluetoothRawDataEventList) { + for ( GenericSensor.BluetoothRawDataEvent proto_bluetoothRawDataEvent : bluetoothRawDataEventList){ + Bluetooth btEvent_beacon; + try { + btEvent_beacon = GenericSensorTransformer.bt_GSensor2Internal(proto_bluetoothRawDataEvent); + }catch(NumberFormatException e){ + LOG.info("Warning: Received BT-rawdata that contained ill-formatted distance or rss information"); + continue; + } + PositionMonitoring.receiveMessage((Beacon) btEvent_beacon); + } + } + private static void processUWBRawdataEvents(List<GenericSensor.UWBRawDataEvent> uwbRawDataEventList) { for (GenericSensor.UWBRawDataEvent proto_uwbRawDataEvent : uwbRawDataEventList){ UWB internal_uwbRawDataEvent; diff --git a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java index 815540076adc061ab06b1d25c2509007df6c3c4f..a885091d32e2fdd0a92e26703f5c3210bf5512a2 100644 --- a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java +++ b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java @@ -63,6 +63,13 @@ public class PositionMonitoring { } } + public static void receiveMessage (Beacon beaconRawDataEvent){ + // currently we only filter rawdata on beacon-level. Position calculation is performed on the level of the specific beacon technology (e.g., UWB) + // calculateAndProcessPosition(uwbRawDataEvent); + List<BeaconFilteringResult> beaconFilteringResults = filterRawdata(beaconRawDataEvent); + processBeaconFilteringResults(beaconFilteringResults); + } + public static void receiveMessage (UWB uwbRawDataEvent){ calculateAndProcessPosition(uwbRawDataEvent); List<BeaconFilteringResult> beaconFilteringResults = filterRawdata((Beacon) uwbRawDataEvent); @@ -73,6 +80,8 @@ public class PositionMonitoring { Optional<PositionEvent> optionalPositionEvent = Optional.empty(); try { optionalPositionEvent = Triangulation.update(uwbRawDataEvent); + // optionalPositionEvent = PositionCalculation.updateUWBPositionFromDistances(uwbRawDataEvent); + // = PositionCalculation.updateBTDistancesFromRSS( } catch (ParseException e) { e.printStackTrace(); } @@ -99,12 +108,12 @@ public class PositionMonitoring { LocalizableObject lObject = PositionMonitoring.getLObjectByIdOrNull(beaconFilteringResult.getBeaconRawdataEvent().getSensorId()); if (null == lObject || null == lObject.getAgent()) { - LOG.error("Internal UWB-Rawdata could not be transformed into IPosUWBEvent " + + LOG.error("Internal Beacon-Rawdata Event could not be transformed into IPos Rawdata-Event " + "No LocalizableObject with the provided sensor-id could be found, or no agent " + "is associated to the LocalizableObject that has been found."); return; } - GenericSensorValueProcessor.receiveMessage((UWB) beaconFilteringResult.getBeaconRawdataEvent(), beaconFilteringResult.getMonitoringTaskId(), eFilter.getSerializationType(), lObject.getAgent().getId(), lObject.getAgent().getAgentType()); + GenericSensorValueProcessor.receiveMessage(beaconFilteringResult.getBeaconRawdataEvent(), beaconFilteringResult.getMonitoringTaskId(), eFilter.getSerializationType(), lObject.getAgent().getId(), lObject.getAgent().getAgentType()); } } @@ -337,7 +346,7 @@ public class PositionMonitoring { eventFilter eFilter = Objects.requireNonNull(getEventFilterByIdOrNull(msgRcvFilteringResult.getMonitoringTaskId()), "unknown monitoring-task-id: " + msgRcvFilteringResult.getMonitoringTaskId()); Set<String> zoneIdsThatEFilterIsInterestedIn = eFilter.getFilterConditionConfig().getPositionConditionCells().keySet(); for (String zoneId : zoneIdsThatEFilterIsInterestedIn){ - List<String> idsOfAgentsCurrentlyInZone = zonePopulation.get(zoneId); + List<String> idsOfAgentsCurrentlyInZone = Optional.ofNullable(zonePopulation.get(zoneId)).orElse(new LinkedList<>()); // Is the AGV that the Message originated from known to be currently located in that zone? if(idsOfAgentsCurrentlyInZone.contains(msgRcvFilteringResult.getMessageReceivedEvent().getAgentId())){ ZoneDescriptor zoneDescriptor = modelFactory.createZoneDescriptor(); @@ -657,10 +666,7 @@ public class PositionMonitoring { } private static boolean isLocatedInsideZone(String zoneId, String agentId) { - List<String> agentsInsideZone = zonePopulation.get(zoneId); - if (null == agentsInsideZone) { - return false; - } + List<String> agentsInsideZone = Optional.ofNullable(zonePopulation.get(zoneId)).orElse(new LinkedList<>()); return agentsInsideZone.contains(agentId); } diff --git a/src/main/java/ipos/project/iposextension/osm/OSM.java b/src/main/java/ipos/project/iposextension/osm/OSM.java index 8dfc82a619c518a2a022312f42bb4d468d1e2796..84de78034cb783d277dbdb0936f5106689ab1817 100644 --- a/src/main/java/ipos/project/iposextension/osm/OSM.java +++ b/src/main/java/ipos/project/iposextension/osm/OSM.java @@ -24,6 +24,10 @@ public class OSM { public static final String OSM_MONREQ = "{\"monitoringRequests\": [{\"properties\": [\"%s\"], \"monitoringTaskId\": \"%s\", \"refSystemId\": \"ROOT\", \"serializationType\": \"json\"}]}"; public static final String TOPIC_OSM_ENVIRONMENT = "OSM_ENVIRONMENT"; private static org.apache.logging.log4j.Logger LOG = LogManager.getLogger(); + static private OSMExt osmExt = new OSMExt(); + public static final String OSM_WAYPOINT_OSMOBJECT = "{ \"agentId\":\"waypoint%s\", \"agentType\":\"\", \"publisher\":\"main\", \"position\":{ \"refSystemId\":\"ROOT\", \"point\":{ \"x\":%s, \"y\":%s, \"z\":0 } }, \"time\":\"2022-04-14T09:41:20+00:00\" }"; + //public static final String OSM_WAYPOINT_OSMOBJECT = "{ \"waypoints\": [ { \"agentId\":\"waypoint%s\", \"agentType\":\"\", \"publisher\":\"main\", \"position\":{ \"refSystemId\":\"ROOT\", \"point\":{ \"x\":%s, \"y\":%s, \"z\":0 } }, \"time\":\"2022-04-14T09:41:20+00:00\" } ] }"; + // public static final String OSM_WAYPOINT_OSMOBJECT = "{ \"id\": \"waypoint%s\", \"sensorId\": \"\", \"type\": \"\", \"sensorType\": \"\", \"position\": { \"refSystemId\": \"ROOT\", \"point\": { \"x\": %s, \"y\": %s, \"z\": 0 }, \"accuracy\": 1 }, \"orientation\": { \"x\": 0, \"y\": 0, \"z\": 0, \"w\": 0 }, \"lastPosUpdate\": \"2021-09-14T09:41:20+00:00\" }"; @Autowired public OSM(ExternalPubServiceImpl mqttService){ @@ -31,10 +35,9 @@ public class OSM { OSMIPosMonitoringWrapperMqtt.setMqttService(mqttService); OSMExtInputMqtt.setMqttService(mqttService); OSMExtOutputMqtt.setMqttService(mqttService); + osmExt.initOSM_drawWaypoints(); } - static private OSMExt osmExt = new OSMExt(); - public static void handleOSMObject(OSMObject osmObject) { osmExt.handleOSMObject(osmObject); } diff --git a/src/main/java/ipos/project/iposextension/osm/OSMExt.java b/src/main/java/ipos/project/iposextension/osm/OSMExt.java index b382267e27043130b1187ed38950bb96589b76f1..f51a486c73aa8fc3c0c5cfd7ce72c36ec118a5ee 100644 --- a/src/main/java/ipos/project/iposextension/osm/OSMExt.java +++ b/src/main/java/ipos/project/iposextension/osm/OSMExt.java @@ -9,16 +9,72 @@ import ipos.project.devkit.iposext.IPosArguments; import ipos.project.devkit.iposext.IPosExtension; import ipos.project.devkit.utility.ProtoJsonMap; import org.apache.logging.log4j.LogManager; +import org.jetbrains.annotations.Nullable; -import static ipos.project.iposextension.tooz.Tooz.TOOZ_MONITORINGTASKID; +import java.util.Objects; public class OSMExt extends IPosExtension { public static final String TOPIC_OSM_EXT = "AGVViewer_VDA5050"; public static final String TOPIC_OSM_EXT_OUTPUT = "ipos/client/position"; + public static final String TOPIC_OSM_EXT_OUT_SET_WAYPOINT = "ipos/client/waypoint"; public static final String SERIALIZATION_TYPE_OSM_EXT = "json"; private static org.apache.logging.log4j.Logger LOG = LogManager.getLogger(); + void initOSM_drawWaypoints() { + createAndTransmitWaypointToOSMApp("1",18, 10); + createAndTransmitWaypointToOSMApp("2",6, 3.12f); + createAndTransmitWaypointToOSMApp("3",14, 3.12f); + createAndTransmitWaypointToOSMApp("4",14, 16.92f); + createAndTransmitWaypointToOSMApp("5",6, 16.92f); + createAndTransmitWaypointToOSMApp("6",2, 10); + } + + private void createAndTransmitWaypointToOSMApp(String waypointId, float x, float y) { + try { + //OSMObject waypointAsOSMObject = createWaypointAsOSMObject(waypointId, x, y); + //OSMExtOutputMqtt.transmitOSMObject(waypointAsOSMObject, TOPIC_OSM_EXT_OUT_SET_WAYPOINT, SERIALIZATION_TYPE_OSM_EXT); + ipos.models.OSM.OSMWaypoint waypoint_proto = createWaypoint_proto(waypointId, x, y); + OSMExtOutputMqtt.transmitOSMOutput(waypoint_proto, TOPIC_OSM_EXT_OUT_SET_WAYPOINT, SERIALIZATION_TYPE_OSM_EXT); + }catch(NullPointerException e){ + LOG.warn("Warning: Could not initialize OSM-app with waypoint. Id of the waypoint that could not be initialized: " + waypointId); + } + } + + private ipos.models.OSM.OSMWaypoint createWaypoint_proto(String waypointId, float x, float y) { + String waypointAsJSONString = String.format(OSM.OSM_WAYPOINT_OSMOBJECT, waypointId, String.valueOf(x), String.valueOf(y)); + ipos.models.OSM.OSMWaypoint waypoint_proto = Objects.requireNonNull(parseIntoProtoWaypointOrNull(waypointAsJSONString)); + return waypoint_proto; + } + + private ipos.models.OSM.OSMWaypoint parseIntoProtoWaypointOrNull(String wrappedWaypointAsJSONString) { + try { + return ProtoJsonMap.fromJson(wrappedWaypointAsJSONString, ipos.models.OSM.OSMWaypoint.class); + } catch (InvalidProtocolBufferException e) { + e.printStackTrace(); + return null; + } + } + + /* + private OSMObject createWaypointAsOSMObject(String waypointId, float x, float y) { + String waypointAsJSONString = String.format(OSM.OSM_WAYPOINT_OSMOBJECT, waypointId, String.valueOf(x), String.valueOf(y)); + SimpleScene.IposObject waypointAsOsmObjectProto = Objects.requireNonNull(parseIntoProtoObjectOrNull(waypointAsJSONString)); + OSMObject waypointAsOSMObject = OSMTrans.posEv_proto2OSMObject(waypointAsOsmObjectProto) ; + return waypointAsOSMObject; + } + */ + @Nullable + private SimpleScene.IposObject parseIntoProtoObjectOrNull(String waypointAsJSONString) { + try { + return ProtoJsonMap.fromJson(waypointAsJSONString, SimpleScene.IposObject.class); + } catch (InvalidProtocolBufferException e) { + e.printStackTrace(); + return null; + } + } + + @Override public void handlePositionEvent(IposPositionEvent posEvent) {} diff --git a/src/main/java/ipos/project/iposextension/osm/OSMExtOutputMqtt.java b/src/main/java/ipos/project/iposextension/osm/OSMExtOutputMqtt.java index ee4da3dac617b1570438e4bf4d6843883ea0aa62..99a4f963dd113467c3b948a309925d8c41566256 100644 --- a/src/main/java/ipos/project/iposextension/osm/OSMExtOutputMqtt.java +++ b/src/main/java/ipos/project/iposextension/osm/OSMExtOutputMqtt.java @@ -1,5 +1,6 @@ package ipos.project.iposextension.osm; +import com.google.protobuf.AbstractMessageLite; import ipos.models.OSM; import ipos.project.DataModellntegration.iPos_Datamodel.OSM.OSMObject; import ipos.project.config.mqtt.Handler; @@ -19,7 +20,11 @@ public class OSMExtOutputMqtt implements Handler { OSMExtOutputMqtt.mqttService = mqttService; } - @Override + public static void transmitOSMOutput(AbstractMessageLite osmOutput, String topic, String serializationType) { + OtherUtility.publishRespectingSerializationType(topic, serializationType, osmOutput); + } + + @Override public void handle(MqttMessage message) {} public static void transmitOSMObject(OSMObject osmObject, String topic, String serializationType){ diff --git a/src/main/java/ipos/project/iposextension/tooz/Tooz.java b/src/main/java/ipos/project/iposextension/tooz/Tooz.java index a0bcbd285eef7dc051138ac96b1c2029604049d6..49025e7bc380eab90aa71b33fda71779e652793d 100644 --- a/src/main/java/ipos/project/iposextension/tooz/Tooz.java +++ b/src/main/java/ipos/project/iposextension/tooz/Tooz.java @@ -1,5 +1,7 @@ package ipos.project.iposextension.tooz; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosBTEvent; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosBeaconEvent; import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosUWBEvent; import ipos.project.DataModellntegration.iPos_Datamodel.Tooz.DistantEntity; import ipos.project.DataModellntegration.iPos_Datamodel.Tooz.MonitoringTarget; @@ -25,10 +27,29 @@ public class Tooz { // public static final String TOPIC_TOOZ_EXT = "TOOZ_TEST_MONITORING"; public static final String TOPIC_TOOZ_ENVIRONMENT = "TOOZ_ENVIRONMENT"; public static final String TOPIC_TOOZ_EXT_OUTPUT = "TOOZ_EXT_OUTPUT"; + public static final String STOMP_BLUETOOTH_NAME = "IPOS_IPS"; public static final String SERIALIZATION_TYPE_JSON = "json"; + public static final String TOOZ_SERVICE_APPLICATION_DESTINATION_PREFIX = "/medical_ar_app"; + public static final String TOOZ_SERVICE_GLASS_ID = "/id_of_the_tooz_glass_the_service_should_send_information_to"; // see de.tu.dresden.swt.medical.ar.service.controller.PublicWebSocketMessagesController.glassChannelMessage + public static final String TOOZ_STOMP_URI = "ws://localhost:8000/medical_ar-websocket"; // see C:\Users\Admin\Promotion\IPos\ar-support-in-medical-environments\Service\src\test\java\testutility\WSTest.java private static ToozFactory toozFactory = ToozFactory.eINSTANCE; private Timer timer; + + /** + * This IPos extension manages for certain monitoring targets (so called local agents) a list of distant entities, + * including their respective distance from the local agent, based on + * rawdata information that is provided to this extension by the IPos-FW. Repeatedly, after a + * regular interval, for each local agent the nearest distant entity is determined. The id of this entity is + * provided to the Tooz backend service. + * + * ToozIPosRawdataMqtt.handleIPosUWBEvent(...): rawdata handling, distances are updated + * ToozExtInputMqtt.handleToozExtInput(...): new local agents are registered + * Tooz.updateToozBackend(...): for each local agent the closest distant entity is determined. Tooz backend service is updated + * ToozExtOutputStomp.transmitDistantEntity(...) Tooz Backend service is updated + * + * @param mqttService + */ @Autowired public Tooz(ExternalPubServiceImpl mqttService) { toozExt.setMqttService(mqttService); @@ -52,9 +73,17 @@ public class Tooz { static private ToozExt toozExt = new ToozExt(); - public static void handleIPosUWBEvent(IPosUWBEvent iPosUWBEvent_internal) { + public static void handleIPosBTEvent(IPosBTEvent iPosBTEvent){ + handleIPosBeaconEvent((IPosBeaconEvent) iPosBTEvent); + } + + public static void handleIPosUWBEvent(IPosUWBEvent iPosUWBEvent) { + handleIPosBeaconEvent((IPosBeaconEvent) iPosUWBEvent); + } + + public static void handleIPosBeaconEvent(IPosBeaconEvent iPosBeaconEvent){ try { - toozExt.handleRawdataEvent(iPosUWBEvent_internal); + toozExt.handleRawdataEvent(iPosBeaconEvent); } catch (RuntimeException e) { LOG.info(e.getMessage()); } @@ -67,21 +96,27 @@ public class Tooz { } } + /** + * This function configures the IPos-IPS to receive and forward location information concerning + * a monitoring target (i.e., a position sensor with a particular ID). Location information + * may be the distances of the monitoring target from particular distant entities. + * @param monitoringTarget_internal + */ public static void handleMonitoringTarget(MonitoringTarget monitoringTarget_internal) { LOG.info("TOOZ: Attempting to configure IPos-IPS for monitoring the location of the sensor with id " + monitoringTarget_internal.getTargetSensorId()); IPosArguments.IPosConfigData toozConf = new ToozArgs.ToozConf(monitoringTarget_internal); toozExt.configureIpos(toozConf); - ToozMonitoringTarget newlyRegisteredTarget = new ToozMonitoringTarget(monitoringTarget_internal.getTargetSensorId()); + ToozLocalAgent newlyRegisteredTarget = new ToozLocalAgent(monitoringTarget_internal.getTargetSensorId()); toozExt.getAllCurrentlyMonitoredTargets().add(newlyRegisteredTarget); } public static void updateToozBackend() { LOG.info("TOOZ: Updating tooz-backend"); - List<ToozMonitoringTarget> allCurrentlyMonitoredTargets = toozExt.getAllCurrentlyMonitoredTargets(); + List<ToozLocalAgent> allCurrentlyMonitoredTargets = toozExt.getAllCurrentlyMonitoredTargets(); allCurrentlyMonitoredTargets.stream().forEach(monitoredTarget -> updateToozBackendForTarget(monitoredTarget)); } - private static void updateToozBackendForTarget(ToozMonitoringTarget monitoredTarget) { + private static void updateToozBackendForTarget(ToozLocalAgent monitoredTarget) { if (!monitoredTarget.hasChangedSinceLastUpdate()){ return; } @@ -93,12 +128,13 @@ public class Tooz { Map.Entry<String, Double> nearestDistantEntity = sortedDistances.get(0); DistantEntity distantEntity = createDistantEntityFromMonitoredTarget(monitoredTarget, nearestDistantEntity); LOG.info("TOOZ: The closest distant entity of monitoring target " + monitoredTarget.getTargetSensorId() + " has changed. Id of closest entity: " + distantEntity.getDistantEntityId() + "; distance of closest entity: " + distantEntity.getDistance() + "; all known distances for this monitoring target: " + monitoredTarget.getCopyOfDistances().values()); - ToozExtOutputMqtt.transmitDistantEntity(distantEntity, TOPIC_TOOZ_EXT_OUTPUT, SERIALIZATION_TYPE_JSON); + //ToozExtOutputMqtt.transmitDistantEntity(distantEntity, TOPIC_TOOZ_EXT_OUTPUT, SERIALIZATION_TYPE_JSON); + ToozExtOutputStomp.transmitDistantEntity(distantEntity, TOPIC_TOOZ_EXT_OUTPUT); monitoredTarget.setHasChangedSinceLastUpdate(false); // Tooz-backend has been updated and is up-to-date now, so we regard the monitoredTarget as not having changed since last update return; } - private static DistantEntity createDistantEntityFromMonitoredTarget(ToozMonitoringTarget monitoredTarget, Map.Entry<String, Double> nearestDistantEntity) { + private static DistantEntity createDistantEntityFromMonitoredTarget(ToozLocalAgent monitoredTarget, Map.Entry<String, Double> nearestDistantEntity) { DistantEntity distantEntity = toozFactory.createDistantEntity(); distantEntity.setLocalSensorId(monitoredTarget.getTargetSensorId()); distantEntity.setLocalAgentId(monitoredTarget.getLocalAgentId()); @@ -110,7 +146,7 @@ public class Tooz { return distantEntity; } - private static List<Map.Entry<String, Double>> extractSortedDistances(ToozMonitoringTarget monitoredTarget) { + private static List<Map.Entry<String, Double>> extractSortedDistances(ToozLocalAgent monitoredTarget) { List<Map.Entry<String, Double>> toBeSortedDistancesList = new LinkedList<>(); toBeSortedDistancesList.addAll(monitoredTarget.getCopyOfDistances().entrySet()); Collections.sort(toBeSortedDistancesList, (e1, e2) -> e1.getValue().compareTo(e2.getValue())); diff --git a/src/main/java/ipos/project/iposextension/tooz/ToozExt.java b/src/main/java/ipos/project/iposextension/tooz/ToozExt.java index 18ab3870904b23ee5f9aee9da82df403d6861df3..453858b356e8c9f8f23ab746683b9b53163c43e1 100644 --- a/src/main/java/ipos/project/iposextension/tooz/ToozExt.java +++ b/src/main/java/ipos/project/iposextension/tooz/ToozExt.java @@ -2,29 +2,35 @@ package ipos.project.iposextension.tooz; import com.google.protobuf.InvalidProtocolBufferException; import ipos.models.SimpleScene; -import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosRawdataEvent; -import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosUWBEvent; -import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IposPositionEvent; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.*; import ipos.project.DataModellntegration.iPos_Datamodel.Tooz.MonitoringTarget; import ipos.project.devkit.iposext.IPosArguments; import ipos.project.devkit.iposext.IPosExtension; import ipos.project.devkit.utility.ProtoJsonMap; +import ipos.project.iposextension.tooz.websocket.WebSocketService; import org.apache.logging.log4j.LogManager; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import static ipos.project.iposextension.tooz.Tooz.TOOZ_MONITORINGTASKID; public class ToozExt extends IPosExtension { private static org.apache.logging.log4j.Logger LOG = LogManager.getLogger(); - protected List<ToozMonitoringTarget> getAllCurrentlyMonitoredTargets() { + public ToozExt() { + initStomp(); + } + + private WebSocketService webSocketService; + + protected List<ToozLocalAgent> getAllCurrentlyMonitoredTargets() { return allCurrentlyMonitoredTargets; } - private List<ToozMonitoringTarget> allCurrentlyMonitoredTargets = new LinkedList<>(); + private List<ToozLocalAgent> allCurrentlyMonitoredTargets = new LinkedList<>(); @Override public void handlePositionEvent(IposPositionEvent posEvent) {} @@ -36,8 +42,22 @@ public class ToozExt extends IPosExtension { public void handleRawdataEvent(IPosRawdataEvent iPosRawdataEvent) { if (iPosRawdataEvent instanceof IPosUWBEvent){ IPosUWBEvent iPosUWBEvent = (IPosUWBEvent) iPosRawdataEvent; - handleIPosUWBEvent(iPosUWBEvent); + handleIPosBeaconEvent((IPosBeaconEvent) iPosUWBEvent); } + if (iPosRawdataEvent instanceof IPosBTEvent){ + IPosBTEvent iPosBTEvent = (IPosBTEvent) iPosRawdataEvent; + if (null == iPosBTEvent.getDistances() && null != iPosBTEvent.getRss()) { + iPosBTEvent.setDistances(translateRssToDistances(iPosBTEvent)); + + } + + handleIPosBeaconEvent((IPosBeaconEvent) iPosBTEvent); + } + } + + private Map<String, Double> translateRssToDistances(IPosBTEvent iPosBTEvent) { + // currently rss is incorrectly translated into distances by creating a copy + return iPosBTEvent.getRss(); } @Override @@ -57,21 +77,49 @@ public class ToozExt extends IPosExtension { } } - protected void handleIPosUWBEvent(IPosUWBEvent iPosUWBEvent) { - LOG.info("TOOZ: Attempting to handle UWB rawdata event"); - ToozMonitoringTarget toozMonitoringTarget = fetchMonitoringTarget(iPosUWBEvent); - toozMonitoringTarget.addOrUpdateDistances(iPosUWBEvent.getDistances()); - toozMonitoringTarget.setLocalAgentId(iPosUWBEvent.getAgentId()); - toozMonitoringTarget.setTimestamp(iPosUWBEvent.getTimeStamp()); // the time when the distances to the distant entities have been updated the previous time - LOG.info("TOOZ: ToozExt received rawdata event: UWB. Monitoring target (sensorId): " + iPosUWBEvent.getSensorId() + ", agent: " + iPosUWBEvent.getAgentId() + ", timestamp: " + iPosUWBEvent.getTimeStamp()); + protected void handleIPosBeaconEvent(IPosBeaconEvent iPosBeaconEvent) { + LOG.info("TOOZ: Attempting to handle IPosBeaconEvent (class: " + iPosBeaconEvent.getClass().getName()); + ToozLocalAgent toozLocalAgent = fetchMonitoringTarget(iPosBeaconEvent); + toozLocalAgent.addOrUpdateDistances(iPosBeaconEvent.getDistances()); + toozLocalAgent.setLocalAgentId(iPosBeaconEvent.getAgentId()); + toozLocalAgent.setTimestamp(iPosBeaconEvent.getTimeStamp()); // the time when the distances to the distant entities have been updated the previous time + LOG.info("TOOZ: ToozExt received rawdata event: " + iPosBeaconEvent.getClass().getName() + + ". Monitoring target (sensorId): " + iPosBeaconEvent.getSensorId() + + ", agent: " + iPosBeaconEvent.getAgentId() + ", timestamp: " + + iPosBeaconEvent.getTimeStamp()); } - private ToozMonitoringTarget fetchMonitoringTarget(IPosUWBEvent iPosUWBEvent) { + private ToozLocalAgent fetchMonitoringTarget(IPosBeaconEvent iPosUWBEvent) { String targetSensorId = iPosUWBEvent.getSensorId(); - ToozMonitoringTarget monitoringTarget = allCurrentlyMonitoredTargets.stream().filter( + ToozLocalAgent localAgent = allCurrentlyMonitoredTargets.stream().filter( monTarget -> monTarget.getTargetSensorId().equals(targetSensorId)) .findFirst(). orElseThrow(() -> new RuntimeException("Warning: ToozExt received rawdata from a position sensor that no MonitoringTarget was defined for")); - return monitoringTarget; + return localAgent; } + + public void initStomp(){ + webSocketService = new WebSocketService(); + ToozExtOutputStomp.setToozExt(this); + LOG.info("Tooz-extension of IPos-FW is attempting to connect to STOMP broker with URI " + Tooz.TOOZ_STOMP_URI + " ( ws://ip:port/endpoint )"); + webSocketService.reconnectWebSocket(Tooz.TOOZ_STOMP_URI, 1000); + } + public void requestPatientInfoFromServiceForGlasses(String _destination, String _patientId) { + try { + Objects.requireNonNull(webSocketService); + String patientId = Objects.requireNonNull(_patientId); + String destination = Objects.requireNonNull(_destination); + _requestPatientInfoFromServiceForGlasses(destination, patientId); + } catch (NullPointerException e) { + LOG.info("Warning: Could not request patient information from tooz-backend for glasses. Possible reasons: (1) STOMP was not propertly initialized, (2) patient id was null."); + } + } + + private void _requestPatientInfoFromServiceForGlasses(String destination, String patientId){ + LOG.info("Tooz-extension of IPos-FW requests the tooz backend service to publish relevant information for distant agent with id " + patientId + " to the tooz smart glasses with id: " + Tooz.TOOZ_SERVICE_GLASS_ID + ". Destination prefix of the backend service: " + Tooz.TOOZ_SERVICE_APPLICATION_DESTINATION_PREFIX); + LOG.info("Resulting destination of the tooz backend service: " + destination); + webSocketService.requestPatientInfoFromServiceForGlasses(destination, patientId); + } + + } diff --git a/src/main/java/ipos/project/iposextension/tooz/ToozExtOutputStomp.java b/src/main/java/ipos/project/iposextension/tooz/ToozExtOutputStomp.java new file mode 100644 index 0000000000000000000000000000000000000000..65e6693626d8192b2e5b36c8cf16d7258a3a8b86 --- /dev/null +++ b/src/main/java/ipos/project/iposextension/tooz/ToozExtOutputStomp.java @@ -0,0 +1,50 @@ +package ipos.project.iposextension.tooz; + +import ipos.project.DataModellntegration.iPos_Datamodel.Tooz.DistantEntity; +import org.apache.logging.log4j.LogManager; + +import java.util.Objects; +// import de.tu.dresden.swt.medical.ar.toozer_app_java.websocket.WebSocketService.StompSessionHandler; + + + +// webSocketService.setBluetoothName(Tooz.IPOS_IPS); + +public class ToozExtOutputStomp { + + private static org.apache.logging.log4j.Logger LOG = LogManager.getLogger(); + + static private ToozExt toozExt; + + /** + * The web-socket-client to handle stomp-messages. + */ + // private final ___StompSessionClient stompSessionClient = new ___StompSessionClient(new StompSessionHandler()); + + static void setToozExt(ToozExt _toozExt){ + toozExt = Objects.requireNonNull(_toozExt); + } + + static void transmitDistantEntity(DistantEntity _distantEntity, String _topicToozExtOutput) { + try { + Objects.requireNonNull(toozExt); + DistantEntity distantEntity = Objects.requireNonNull(_distantEntity); + String topicToozExtOutput = Objects.requireNonNull(_topicToozExtOutput); + _transmitDistantEntity(distantEntity, topicToozExtOutput); + }catch(NullPointerException e){ + LOG.info("Warning: Could not transmit information on distant entity to tooz-backend. Possible reasons: (1) STOMP was not propertly initialized, (2) distant entity or topic was null."); + } + } + + static void _transmitDistantEntity(DistantEntity distantEntity, String topicToozExtOutput) { + String destination = Tooz.TOOZ_SERVICE_APPLICATION_DESTINATION_PREFIX + Tooz.TOOZ_SERVICE_GLASS_ID; + String stompMessageContent = distantEntity.getDistantEntityId(); //patientId, see ipos.project.iposextension.tooz.Tooz.createDistantEntityFromMonitoredTarget + LOG.info("TOOZ: Attempting to transmit STOMP message containing distant entity ID " + stompMessageContent + " to destination " + destination); + toozExt.requestPatientInfoFromServiceForGlasses(destination, stompMessageContent); + + // Message patientIdMessage = new Message(MessageType.PATIENT_ID, stompMessageContent); + // ToozController.sendMessageToService(destination, patientIdMessage); + //webSocketService.getPatientWithBeaconId(distantEntity.getDistantEntityId()) + + } +} diff --git a/src/main/java/ipos/project/iposextension/tooz/ToozIPosRawdataMqtt.java b/src/main/java/ipos/project/iposextension/tooz/ToozIPosRawdataMqtt.java index d840150244e9725bc16bd8041e129d1224dc550b..5fc8257ff8a0e23d77aa7f4e63bac879c5bdbe1a 100644 --- a/src/main/java/ipos/project/iposextension/tooz/ToozIPosRawdataMqtt.java +++ b/src/main/java/ipos/project/iposextension/tooz/ToozIPosRawdataMqtt.java @@ -2,6 +2,7 @@ package ipos.project.iposextension.tooz; import com.google.protobuf.InvalidProtocolBufferException; import ipos.models.GenericSensor; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosBTEvent; import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosUWBEvent; import ipos.project.config.mqtt.Handler; import ipos.project.config.mqtt.MqttListener; @@ -36,11 +37,18 @@ public class ToozIPosRawdataMqtt implements Handler { try { GenericSensor.IPosRawdataEventWrapper iPosRawdataEventWrapper = ProtoJsonMap.fromJson(jsonMsg, GenericSensor.IPosRawdataEventWrapper.class); iPosRawdataEventWrapper.getIPosUWBEventList().stream().forEach(iPosUWBEvent -> this.handleIPosUWBEvent(iPosUWBEvent)); + iPosRawdataEventWrapper.getIPosBTEventList().stream().forEach(iPosBTEvent -> this.handleIPosBTEvent(iPosBTEvent)); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } } + private void handleIPosBTEvent(GenericSensor.IPosBTEvent iPosBTEvent_proto) { + IPosBTEvent iPosBTEvent_internal = ToozTrans.bt_proto2IPosRawdata(iPosBTEvent_proto); + LOG.info("TOOZ: BTEvent was transformed into internal data format: " + iPosBTEvent_internal.toString()); + Tooz.handleIPosBTEvent(iPosBTEvent_internal); + } + private void handleIPosUWBEvent(GenericSensor.IPosUWBEvent iPosUWBEvent_proto) { IPosUWBEvent iPosUWBEvent_internal = ToozTrans.uwb_proto2IPosRawdata(iPosUWBEvent_proto); LOG.info("TOOZ: UWBEvent was transformed into internal data format: " + iPosUWBEvent_internal.toString()); diff --git a/src/main/java/ipos/project/iposextension/tooz/ToozMonitoringTarget.java b/src/main/java/ipos/project/iposextension/tooz/ToozLocalAgent.java similarity index 90% rename from src/main/java/ipos/project/iposextension/tooz/ToozMonitoringTarget.java rename to src/main/java/ipos/project/iposextension/tooz/ToozLocalAgent.java index b2c3b6ffeb20c73452fe4deea952f1940b7c67f4..b17454c589db2cb3b6486b470361b7eaa7c2a1d1 100644 --- a/src/main/java/ipos/project/iposextension/tooz/ToozMonitoringTarget.java +++ b/src/main/java/ipos/project/iposextension/tooz/ToozLocalAgent.java @@ -3,9 +3,9 @@ package ipos.project.iposextension.tooz; import java.util.HashMap; import java.util.Map; -public class ToozMonitoringTarget { +public class ToozLocalAgent { - public ToozMonitoringTarget(String targetSensorId) { + public ToozLocalAgent(String targetSensorId) { this.targetSensorId = targetSensorId; this.targetData = new HashMap<>(); this.localAgentId = ""; @@ -26,7 +26,7 @@ public class ToozMonitoringTarget { private String timestamp; // the time when the distances to the distant entities have been updated the previous time /** - * Returns true if this instance of ToozMonitoringTarget has to be regarded as having changed since the last + * Returns true if this instance of ToozLocalAgent has to be regarded as having changed since the last * update of the Tooz-backend, and false otherwise. * @return */ @@ -35,7 +35,7 @@ public class ToozMonitoringTarget { } /** - * Sets the boolean value that defines whether this instance of ToozMonitoringTarget has to be + * Sets the boolean value that defines whether this instance of ToozLocalAgent has to be * regarde as having changed since last update of the Tooz-backend * @param hasChanged */ diff --git a/src/main/java/ipos/project/iposextension/tooz/ToozTrans.java b/src/main/java/ipos/project/iposextension/tooz/ToozTrans.java index 13d2c11db5b34804dee90074646cc6ffa3fe77c0..84160f3ca63aba111a54b83b495debf3fa91b82c 100644 --- a/src/main/java/ipos/project/iposextension/tooz/ToozTrans.java +++ b/src/main/java/ipos/project/iposextension/tooz/ToozTrans.java @@ -2,6 +2,8 @@ package ipos.project.iposextension.tooz; import ipos.models.GenericSensor; import ipos.models.Tooz; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosBTEvent; +import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosBeaconEvent; import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosDevKitFactory; import ipos.project.DataModellntegration.iPos_Datamodel.IPosDevKit.IPosUWBEvent; import ipos.project.DataModellntegration.iPos_Datamodel.Tooz.DistantEntity; @@ -18,16 +20,27 @@ public class ToozTrans { public static IPosUWBEvent uwb_proto2IPosRawdata(GenericSensor.IPosUWBEvent iPosUWBEvent_proto) { IPosUWBEvent iPosUWBEvent_internal = devKitFactory.createIPosUWBEvent(); - iPosUWBEvent_internal.setAgentId(iPosUWBEvent_proto.getAgentId()); - iPosUWBEvent_internal.setSensorId(iPosUWBEvent_proto.getSensorId()); - iPosUWBEvent_internal.setAgentType(iPosUWBEvent_proto.getAgentType()); - iPosUWBEvent_internal.setSensorType(iPosUWBEvent_proto.getSensorType()); - iPosUWBEvent_internal.setTimeStamp(iPosUWBEvent_proto.getTimeStamp()); - iPosUWBEvent_internal.setDistances(beaconDistances_String2Double(iPosUWBEvent_proto.getDistancesMap())); - return iPosUWBEvent_internal; + return ToozTrans.beacon_proto2IPosRawdata(iPosUWBEvent_internal, iPosUWBEvent_proto.getAgentId(), iPosUWBEvent_proto.getSensorId(), iPosUWBEvent_proto.getAgentType(), iPosUWBEvent_proto.getSensorType(), iPosUWBEvent_proto.getTimeStamp(), iPosUWBEvent_proto.getDistancesMap()); } - private static Map<String, Double> beaconDistances_String2Double(Map<String, String> distances) { + public static IPosBTEvent bt_proto2IPosRawdata(GenericSensor.IPosBTEvent iPosBTEvent_proto) { + IPosBTEvent iPosBTEvent_internal = devKitFactory.createIPosBTEvent(); + iPosBTEvent_internal = ToozTrans.beacon_proto2IPosRawdata(iPosBTEvent_internal, iPosBTEvent_proto.getAgentId(), iPosBTEvent_proto.getSensorId(), iPosBTEvent_proto.getAgentType(), iPosBTEvent_proto.getSensorType(), iPosBTEvent_proto.getTimeStamp(), iPosBTEvent_proto.getDistancesMap()); + iPosBTEvent_internal.setRss(Map_String2Double(iPosBTEvent_proto.getRssMap())); + return iPosBTEvent_internal; + } + + private static <T extends IPosBeaconEvent> T beacon_proto2IPosRawdata(T iPosBeaconEvent_internal, String agentId, String sensorId, String agentType, String sensorType, String timeStamp, java.util.Map<String, String> distancesMap) { + iPosBeaconEvent_internal.setAgentId(agentId); + iPosBeaconEvent_internal.setSensorId(sensorId); + iPosBeaconEvent_internal.setAgentType(agentType); + iPosBeaconEvent_internal.setSensorType(sensorType); + iPosBeaconEvent_internal.setTimeStamp(timeStamp); + iPosBeaconEvent_internal.setDistances(Map_String2Double(distancesMap)); + return iPosBeaconEvent_internal; + } + + private static Map<String, Double> Map_String2Double(Map<String, String> distances) { HashMap<String, Double> distancesDouble = new HashMap<>(); for (Map.Entry<String, String> distanceEntry : distances.entrySet()){ distancesDouble.put(distanceEntry.getKey(), Double.valueOf(distanceEntry.getValue())); @@ -51,4 +64,5 @@ public class ToozTrans { distantEntity_proto.putAllEntityData(distantEntity_internal.getEntityData()); return distantEntity_proto.build(); } + } diff --git a/src/main/java/ipos/project/iposextension/tooz/websocket/Message.java b/src/main/java/ipos/project/iposextension/tooz/websocket/Message.java new file mode 100644 index 0000000000000000000000000000000000000000..fdb87ca23f5ac61afd1abbc12f5161f38808d23e --- /dev/null +++ b/src/main/java/ipos/project/iposextension/tooz/websocket/Message.java @@ -0,0 +1,95 @@ +package ipos.project.iposextension.tooz.websocket; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +/** + * Defined format for a message to send or receive with the {@link StompSessionClient}. + */ +public class Message { + + /** + * Type of the message. + */ + private MessageType messageType; + + /** + * Message-content as a {@link List} of {@link String}. + * Every list-item represents a singe page to show on the glasses. + * If the message will be used as command, only one item needs to be in the {@link List}. + */ + private List<String> content; + + /** + * Defines a default-message. + * Use this constructor only for initialisation while a reflection-process. + * The default {@link MessageType} is {@link MessageType#UNDEFINED}. + */ + private Message() { + this(MessageType.UNDEFINED); + } + + /** + * Creates an empty message with a {@link MessageType}. + * + * @param messageType type for the message + */ + public Message(final @NotNull MessageType messageType) { + setMessageType(messageType); + setContent(new ArrayList<>()); + } + + /** + * Creates a message. + * @param messageType type for the message. + * @param message a message as an item in the message-content + */ + public Message(final @NotNull MessageType messageType, final @NotNull String message) { + this(messageType); + addInformationToContent(message); + } + + /** + * Sets the {@link MessageType}. + * + * @param messageType new type for the message. + */ + private void setMessageType(final @NotNull MessageType messageType) { + this.messageType = messageType; + } + + /** + * Gives the {@link MessageType} of the message. + * + * @return the {@link MessageType} of the message. + */ + public MessageType getMessageType() { + return messageType; + } + + /** + * Adds a new item to the message-content. + * @param information content for the new item in the message-content. + */ + public void addInformationToContent(final @NotNull String information) { + content.add(information); + } + + /** + * Sets a {@link List} with {@link String}s as new content for the message. + * @param content a {@link List} of {@link String} as new content for the message. + */ + private void setContent(final @NotNull List<String> content) { + this.content = content; + } + + /** + * Gives the complete content of the message as {@link List} of {@link String}. + * @return the complete content of the message. + */ + public List<String> getContent() { + return content; + } +} diff --git a/src/main/java/ipos/project/iposextension/tooz/websocket/MessageType.java b/src/main/java/ipos/project/iposextension/tooz/websocket/MessageType.java new file mode 100644 index 0000000000000000000000000000000000000000..ef7c13e5cfc46fb52c9dc44882625d052867d091 --- /dev/null +++ b/src/main/java/ipos/project/iposextension/tooz/websocket/MessageType.java @@ -0,0 +1,54 @@ +package ipos.project.iposextension.tooz.websocket; + +/** + * Types of message they can be send to the medical-ar-service. + */ +public enum MessageType { + + /** + * Defines a message with a patient-id in the message-content. + */ + PATIENT_ID, + + /** + * Defines a emergency-message. + */ + EMERGENCY, + + /** + * Defines a broadcast-message. Broadcasts are send to all clients. + */ + BROADCAST, + + /** + * Defines a message with beacon-information. + */ + BEACON, + + /** + * Defines a button-pressed event-message. + */ + BUTTON_PRESSED, + + + /** + * Defines a massage with content to display in the toozer-apps head. + */ + DISPLAY_HEAD, + + /** + * Defines a message with content to display in the toozer-apps text-container. + */ + DISPLAY_TEXT, + + + /** + * Defines a test-message. + */ + TEST, + + /** + * Defines a undefined message. These messages should not be processed. + */ + UNDEFINED +} diff --git a/src/main/java/ipos/project/iposextension/tooz/websocket/StompSessionClient.java b/src/main/java/ipos/project/iposextension/tooz/websocket/StompSessionClient.java new file mode 100644 index 0000000000000000000000000000000000000000..95a54e709d75c7413c75278f885d9f76ae66ad02 --- /dev/null +++ b/src/main/java/ipos/project/iposextension/tooz/websocket/StompSessionClient.java @@ -0,0 +1,311 @@ +package ipos.project.iposextension.tooz.websocket; + +import org.apache.logging.log4j.LogManager; +import org.jetbrains.annotations.NotNull; +import org.springframework.messaging.converter.MappingJackson2MessageConverter; +import org.springframework.messaging.simp.stomp.StompSession; +import org.springframework.messaging.simp.stomp.StompSessionHandlerAdapter; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; +import org.springframework.web.socket.messaging.WebSocketStompClient; +import org.springframework.web.socket.sockjs.client.SockJsClient; +import org.springframework.web.socket.sockjs.client.Transport; +import org.springframework.web.socket.sockjs.client.WebSocketTransport; + +import java.util.*; +import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * <p> + * A client to connect with a web-socket to the medical-ar-service. + * This client creates a stomp-session within the web-socket to handle all messages and events. + * </p> + * <p> + * Currently there is no authentication supported. + * </p> + */ +public class StompSessionClient { + private static org.apache.logging.log4j.Logger LOG = LogManager.getLogger(); + // Atomic structures and semaphores to handling internal threading. + private final AtomicBoolean disconnect = new AtomicBoolean(true); + private final Semaphore connectionMutex = new Semaphore(1); + + /** + * Map with stomp-subscriptions. + */ + private final Map<String, StompSession.Subscription> subscriptions = new HashMap<>(); + + /** + * The web-socket to connect to the medical-ar-service. + */ + private volatile StompSession webSocketSession; + + /** + * The stomp-session. + */ + private final StompSessionHandlerAdapter sessionHandler; + + /** + * Creates a client to connect with a web-socket to a service. + * + * @param sessionHandler handler to manage stomp-messages as events. + */ + StompSessionClient(final @NotNull StompSessionHandlerAdapter sessionHandler) { + this.sessionHandler = sessionHandler; + } + + /** + * Connects to a given destination with a given timeout. + * + * @param uri the destination to connect with. + * @param waitMillis the timeout to wait for a response. + */ + private void connect(final @NotNull String uri, final long waitMillis) { + new Thread(new ConnectWebSocket(uri, createWebSocketStompClient(), waitMillis)).start(); + } + + /** + * Disconnects the client from the destination. + */ + void disconnect() { + new Thread(new DisconnectWebSocket()).start(); + } + + /** + * Disconnects the client first from the current destination + * and try to reconnect to the given destination with a timeout. + * + * @param uri the destination to reconnect with. + * @param waitMillis the timeout to wait for a response. + */ + void reconnect(final @NotNull String uri, final long waitMillis) { + disconnect(); + connect(uri, waitMillis); + } + + /** + * Gives the connection-state of the client. + * + * @return {@code true}, if the client is currently connected to a destination. + */ + boolean isConnected() { + return webSocketSession.isConnected(); + } + + /** + * Subscribe to a new destination, if the client is connected. It's a threaded function and + * blocks the semaphore while working. + * + * @param destination the new destination to subscribe. + */ + void subscribe(final @NotNull String destination) { + new Thread(() -> { + try { + connectionMutex.acquire(); + + if (webSocketSession != null && webSocketSession.isConnected() && !subscriptions.containsKey(destination)) { + LOG.info("subscribe to: %s", destination); + subscriptions.put(destination, webSocketSession.subscribe(destination, sessionHandler)); + } + } catch (InterruptedException e) { + LOG.info(e); + } catch (Exception e) { + LOG.info(e); + } finally { + connectionMutex.release(); + } + }).start(); + } + + /** + * Unsubscribe from a subscribed stomp-destination. It's a threaded function and + * blocks the semaphore while working. + * + * @param destination the destination to unsubscribe. + */ + void unsubscribe(final @NotNull String destination) { + new Thread(() -> { + try { + connectionMutex.acquire(); + + if (webSocketSession != null && webSocketSession.isConnected() && subscriptions.containsKey(destination)) { + LOG.info("unsubscribe to: %s", destination); + Objects.requireNonNull(subscriptions.remove(destination)).unsubscribe(); + } + } catch (InterruptedException e) { + LOG.info(e); + } catch (Exception e) { + LOG.info(e); + } finally { + connectionMutex.release(); + } + }).start(); + } + + /** + * Subscription-state for a given stomp-destination. + * + * @param destination the destination to check its subscription-state. + * @return {@code true}, if the destination has been subscribed. + */ + boolean hasSubscribedToDestination(final String destination) { + return subscriptions.containsKey(destination); + } + + /** + * Sends a message to a given stomp-destination. + * The destination should be supported by the service connected with. + * It's a threaded function and blocks the semaphore while working. + * + * @param destination the destination to send a message. + * @param message the message to send. + * The concrete class of the message-object should be supported by the service connected with. + */ + void sendMessage(final @NotNull String destination, final @NotNull Object message) { + new Thread(() -> { + try { + connectionMutex.acquire(); + + if (webSocketSession != null && webSocketSession.isConnected()) { + webSocketSession.send(destination, message); + LOG.info("send message '%s' to '%s'", message.toString(), destination); + } + } catch (InterruptedException e) { + LOG.info(e); + } catch (Exception e) { + LOG.info(e); + } finally { + connectionMutex.release(); + } + }).start(); + } + + /** + * Helper-function to create a web-socket client with an underlying stomp-session. + * @return a web-socket-client wit underlying stomp-session. + */ + private WebSocketStompClient createWebSocketStompClient() { + final StandardWebSocketClient client = new StandardWebSocketClient(); + + final List<Transport> transports = new ArrayList<>(1); + transports.add(new WebSocketTransport(client)); + + final SockJsClient sockJsClient = new SockJsClient(transports); + + final WebSocketStompClient webSocketStompClient = new WebSocketStompClient(sockJsClient); + webSocketStompClient.setMessageConverter(new MappingJackson2MessageConverter()); + + return webSocketStompClient; + } + + /** + * Inner class to create a web-socket-connection to handle stomp-messages. + */ + private class ConnectWebSocket implements Runnable { + + /** + * The destination to connect with. + */ + final private String uri; + + /** + * The web-socket-client to connect wit a service. + */ + final private WebSocketStompClient webSocketStompClient; + + /** + * Timeout for the connection-response. + */ + final private long waitMillis; + + /** + * Creates a web-socket with a given stomp-client. + * @param uri the destination to connect with. + * @param webSocketStompClient the stomp-client to handle stomp-messages. + * @param waitMillis the timeout for the connection-response. + */ + ConnectWebSocket(final String uri, final WebSocketStompClient webSocketStompClient, + final long waitMillis) { + this.uri = uri; + this.webSocketStompClient = webSocketStompClient; + this.waitMillis = waitMillis; + } + + /** + * Start the connection with the destination and listen for stomp-messages to handle them. + * This function should be run in a thread and blocks the semaphore while the connection-process. + * The connection-process restarts every time a timeout exists. + */ + public void run() { + try { + connectionMutex.acquire(); + disconnect.set(false); + + final AtomicBoolean isNotConnected = new AtomicBoolean(true); + + do { + if (disconnect.get()) { + LOG.info("disconnect occurred -> stop self"); + break; + } + + try { + webSocketSession = webSocketStompClient.connect(uri, sessionHandler).get(); + } catch (ResourceAccessException e) { + LOG.info("can not connect to: %s", uri); + } catch (Exception e) { + LOG.info(e); + } + + if (webSocketSession == null || !webSocketSession.isConnected()) { + LOG.info("not connected -> retry connect in %s seconds", 0.001f * waitMillis); + + try { + Thread.sleep(waitMillis); + } catch (InterruptedException e) { + LOG.info("thread has been interrupted -> stop self"); + break; + } + } else { + isNotConnected.set(false); + } + } while (isNotConnected.get()); + } catch (InterruptedException e) { + LOG.info(e); + } finally { + connectionMutex.release(); + } + } + } + + /** + * Disconnects the client from the destination. + * This function should be run in a thread and blocks the semaphore while the disconnection-process. + */ + private class DisconnectWebSocket implements Runnable { + + public void run() { + try { + disconnect.set(true); + connectionMutex.acquire(); + + if (webSocketSession != null) { + if (webSocketSession.isConnected()) { + subscriptions.forEach((k, v) -> v.unsubscribe()); + webSocketSession.disconnect(); + } + + subscriptions.clear(); + webSocketSession = null; + } + } catch (InterruptedException e) { + LOG.info(e); + } catch (Exception e) { + LOG.info(e); + } finally { + connectionMutex.release(); + } + } + } +} diff --git a/src/main/java/ipos/project/iposextension/tooz/websocket/ToozController.java b/src/main/java/ipos/project/iposextension/tooz/websocket/ToozController.java new file mode 100644 index 0000000000000000000000000000000000000000..d8d45002b2833a77d82bdc301325278483b25e4a --- /dev/null +++ b/src/main/java/ipos/project/iposextension/tooz/websocket/ToozController.java @@ -0,0 +1,22 @@ +package ipos.project.iposextension.tooz.websocket; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Controller; + +@Controller +public class ToozController { + + @Autowired + private static SimpMessagingTemplate template; + + //@Autowired + //public ToozController(SimpMessagingTemplate template){ + //this.template = template; + //} + + public static void sendMessageToService(String destination, Message message){ + template.convertAndSend(destination, message); + } + +} diff --git a/src/main/java/ipos/project/iposextension/tooz/websocket/WebSocketConfiguration.java b/src/main/java/ipos/project/iposextension/tooz/websocket/WebSocketConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..4ce95392b2a443ae2f20918b04bcf7975a18c98f --- /dev/null +++ b/src/main/java/ipos/project/iposextension/tooz/websocket/WebSocketConfiguration.java @@ -0,0 +1,48 @@ +package ipos.project.iposextension.tooz.websocket; + +import org.apache.logging.log4j.LogManager; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; + +/** + * Simple configuration to use WebSockets as server/de.tu.dresden.swt.medical.ar.service. + */ +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer { + private static org.apache.logging.log4j.Logger LOG = LogManager.getLogger(); + + /** + * Configures the MessageBroker-registry. + * + * @param config {@link MessageBrokerRegistry} to become configured + */ + @Override + public void configureMessageBroker(final MessageBrokerRegistry config) { + // their service receives messages + //config.enableSimpleBroker("/medical_ar_app") + // .setTaskScheduler(new DefaultManagedTaskScheduler()) + // .setHeartbeatValue(new long[]{0, 0}); + //config.enableStompBrokerRelay("destprefixes"); + // ipos-fw receives nothing... + // config.setApplicationDestinationPrefixes("/medical_ar_app"); + + // LOG.debug("Simple STOMP-broker enabled."); + } + + /** + * Configures the STOMP-endpoint. + * + * @param registry {@link StompEndpointRegistry} to create endpoint for STOMP-messages + */ + @Override + public void registerStompEndpoints(final StompEndpointRegistry registry) { + registry.addEndpoint("/iposfw_stomp_endpoint").setAllowedOrigins("*").withSockJS(); + + LOG.debug("Endpoints registered."); + } +} diff --git a/src/main/java/ipos/project/iposextension/tooz/websocket/WebSocketService.java b/src/main/java/ipos/project/iposextension/tooz/websocket/WebSocketService.java new file mode 100644 index 0000000000000000000000000000000000000000..60b89388ebf16e76df7f2411e437d63cd9a2e85a --- /dev/null +++ b/src/main/java/ipos/project/iposextension/tooz/websocket/WebSocketService.java @@ -0,0 +1,245 @@ +package ipos.project.iposextension.tooz.websocket; + +import ipos.project.iposextension.tooz.Tooz; +import org.apache.logging.log4j.LogManager; +import org.jetbrains.annotations.NotNull; +import org.springframework.messaging.simp.stomp.*; + +import java.lang.reflect.Type; + + + +/** + * A background-android-service to handle the web-socket-connection with an underlying stomp-connection. + */ +public class WebSocketService { + + private static org.apache.logging.log4j.Logger LOG = LogManager.getLogger(); + + /** + * The web-socket-client to handle stomp-messages. + */ + private final StompSessionClient stompSessionClient = new StompSessionClient(new StompSessionHandler()); + + + /** + * Name of the bluetooth-device. + */ + private String bluetoothName = "glass_default"; + + /** + * The destination for the service to connect with. + */ + private String ownDestination = null; + + /** + * Sets the bluetooth-device-name to the background-service + * It is used to identify the android-device at the medical-ar-service. + * + * @param bluetoothName + */ + public void setBluetoothName(final @NotNull String bluetoothName) { + if (ownDestination != null) + return; + + this.bluetoothName = bluetoothName; + ownDestination = "/medical_ar_app/" + bluetoothName; + } + + /** + * Gives the connection-state of the internal web-socket-connection. + * + * @return {@code true}, if a connection is established. + */ + public boolean isConnected() { + return stompSessionClient.isConnected(); + } + + /** + * Reconnects the internal web-socket-client wit a given destination and timeout. + * Before the new connection will be created, the current connection will be destroyed. + * + * @param uri the new destination to connect with. + * @param waitMillis timeout for the connection-response. + */ + public void reconnectWebSocket(final @NotNull String uri, final long waitMillis) { + stompSessionClient.reconnect(uri, waitMillis); + } + + public void requestPatientInfoFromServiceForGlasses(String destination, String patientId){ + final Message message = new Message(MessageType.PATIENT_ID, patientId); + + stompSessionClient.sendMessage(destination, + message); + } + + /** + * Sends a message to the service to get patient-information. + * + * @param patientId the patient-id of the patient to get the information about. + */ + public void getPatient(final @NotNull String patientId) { + final Message message = new Message(MessageType.PATIENT_ID, patientId); + + stompSessionClient.sendMessage(ownDestination, + message); + } + + /** + * Sends a message to the service to get patient-information with a beacon-id. + * + * @param beackonId the beacon-id of the patient to get the information about. + */ + public void getPatientWithBeaconId(final @NotNull String beackonId) { + final Message message = new Message(MessageType.BEACON, beackonId); + + stompSessionClient.sendMessage(ownDestination, + message); + } + + /** + * Sends a message to the service wit a button-pressed-event. + */ + public void buttonPressed() { + stompSessionClient.sendMessage(ownDestination, + new Message(MessageType.BUTTON_PRESSED)); + } + + /** + * Subscribes to a given stomp-destination. + * + * @param channelName the name of the stomp-destination to connect with. + */ + public void subscribeToChannel(final @NotNull String channelName) { + stompSessionClient.subscribe(channelName); + } + + /** + * Unsubscribe from a given stomp-destination. + * + * @param channelName the name of the stomp-destination to disconnect from. + */ + public void unsubscribeToChannel(final @NotNull String channelName) { + stompSessionClient.unsubscribe(channelName); + } + + /** + * An internal event-handling-class to handle events from a stomp-connection. + */ + private class StompSessionHandler extends StompSessionHandlerAdapter { + + // Mutex for thread-handling. + private final Object mutex = new Object(); + + /** + * OnAfterConnected-event-handle. Gets called after a stomp-connection has been established. + * Subscribes to the broadcast-destination and an id-destination to get only messages for a single android-device. + * Forwards the exception to all connected {@linkk WebSocketEventListener} as an OnConnectionEvent. + * + * @param session the session that has been created. + * @param connectedHeaders the connection-header send from the connected service. + */ + @Override + public void afterConnected(final StompSession session, final StompHeaders connectedHeaders) { + synchronized (mutex) { + LOG.info("session started: ID -> %s ", session.getSessionId()); + + stompSessionClient.subscribe("/broadcast"); + stompSessionClient.subscribe(String.format("/glass/%s", bluetoothName)); + + // webSocketEventListeners.forEach(listener -> listener.onConnectionEvent(true)); + } + } + + /** + * OnException-event-handle. Gets called if an exception has been thrown. + * Forwards the exception to all connected {@linkk WebSocketEventListener} as an OnErrorEvent. + * + * @param session the session where the exception has been thrown. + * @param command the stomp-command where the exception has been thrown. + * @param headers the stomp-header where the exception has been thrown. + * @param payload the stomp-message-content where the exception has been thrown. + * @param exception the exception that has been thrown. + */ + @Override + public void handleException(final StompSession session, final StompCommand command, + final StompHeaders headers, final byte[] payload, + final Throwable exception) { + //webSocketEventListeners.forEach(listener -> listener.onErrorEvent(exception)); + } + + /** + * Sets the {@link Type} of the messages that should be handled by the stomp-client. + * Currently the {@link Type} is {@link Message}. + * The {@link StompHeaders} can be used to differentiate between types of messages in the future. + * + * @param headers the stomp-header to differentiate between types of messages. + * @return the {@link Type} of the message to reflect. + */ + @Override + @NotNull + public Type getPayloadType(final StompHeaders headers) { + return Message.class; + } + + /** + * <p> + * OnHandleMessage-event-handle. Gets called after a message has been received. + * Only messages to a subscribed stomp-destination will be processed. + * Forwards the {@link Message} to all connected {@linkk WebSocketEventListener} as an OnMessageReceivedEvent. + * </p> + * + * <p> + * Creates the payload with reflection based on the result of the {@link StompSessionHandler#getPayloadType} function. + * If you're change this function, you need to include these changes here. + * </p> + * + * @param headers the stomp-header to differentiate between types of messages. + * @param payload the reflected message-content from the received frame. + */ + @Override + public void handleFrame(final StompHeaders headers, final Object payload) { + synchronized (mutex) { + final Message message = (Message) payload; + final String destination = headers.getDestination(); + + if (destination != null && stompSessionClient.hasSubscribedToDestination(destination)) { + // webSocketEventListeners.forEach( + // listener -> listener.onMessageReceivedEvent(message)); + } + } + } + + /** + * <p> + * OnHandleSendError-event-handler. Gets called every time an exception while sending a message has been thrown. + * </p> + * + * <P> + * If a connection has been lost this function forwards the {@link Exception} to all connected + * {@linkk WebSocketEventListener} as an OnConnectionEvent and OnDisconnectOccurredEvent. + * </P> + * + * <p> + * In any other cases this function forwards the {@link Exception} to all connected + * {@linkk WebSocketEventListener} as an OnErrorEvent. + * </p> + * + * @param session the session where the exception has been thrown. + * @param exception the exception that has been thrown. + */ + @Override + public void handleTransportError(final StompSession session, final Throwable exception) { + if (exception instanceof ConnectionLostException) { + LOG.info("connection lost -> create a new one"); + + // webSocketEventListeners.forEach(listener -> listener.onConnectionEvent(false)); + // webSocketEventListeners.forEach(WebSocketEventListener::onDisconnectOccurredEvent); + + return; + } + + //webSocketEventListeners.forEach(listener -> listener.onErrorEvent(exception)); + } + } +} \ No newline at end of file diff --git a/testdata_raw_osm_init.txt b/testdata_raw_osm_init.txt new file mode 100644 index 0000000000000000000000000000000000000000..16ee7724d9b70d8e71dad466d2ad59774e55caae --- /dev/null +++ b/testdata_raw_osm_init.txt @@ -0,0 +1 @@ +{"monitoringTargets" : [{"protocol" : "VDA5050"}]} \ No newline at end of file diff --git a/testdata_raw_tooz.txt b/testdata_raw_tooz.txt index 02cae32071af3507ddffd88d2fec9259cc5ccc22..2d43355a0ef2dfb817d8ab2ded2f07b7f49866c8 100644 --- a/testdata_raw_tooz.txt +++ b/testdata_raw_tooz.txt @@ -1,3 +1,4 @@ +{"bluetoothRawDataEvent" : [{"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_bt", "distances": {"beacon_1" : "2.5", "beacon_2" : "5.5", "beacon_3" : "8.5"}, "type": "BT", "rss": {"beacon_1" : "12.7", "beacon_2" : "15.3", "beacon_3" : "18.7"}}]} {"uwbRawDataEvent" : [ {"timestamp" : "2022-02-02T16:03:20+00:00", "sensorId" : "tooz_employee_uwb", "distances": {"beacon_1" : "2.5", "beacon_2" : "5.5", "beacon_3" : "8.5"}, "type": "UWB"}]} {"uwbRawDataEvent" : [ {"timestamp" : "2022-02-02T16:04:20+00:00", "sensorId" : "tooz_employee_uwb", "distances": {"beacon_1" : "15.0"}, "type": "UWB"}]} {"uwbRawDataEvent" : [ {"timestamp" : "2022-02-02T16:05:20+00:00", "sensorId" : "tooz_employee_uwb", "distances": {"beacon_5" : "1.8"}, "type": "UWB"}]} \ No newline at end of file diff --git a/testdata_raw_tooz_init.txt b/testdata_raw_tooz_init.txt index 0ae4ad5414bc8654860201c21509456778032bdf..48143b48f772541ac5626926f249db7e06626871 100644 --- a/testdata_raw_tooz_init.txt +++ b/testdata_raw_tooz_init.txt @@ -1 +1,2 @@ -{"monitoringTargets" : [{"targetSensorId" : "tooz_employee_uwb" }]} \ No newline at end of file +{"monitoringTargets" : [{"targetSensorId" : "tooz_employee_uwb" }]} +{"monitoringTargets" : [{"targetSensorId" : "tooz_employee_bt" }]} \ No newline at end of file diff --git a/testdata_raw_vda5050.txt b/testdata_raw_vda5050.txt index 94df7e63f7aa411a38fcc79c1244495d0f89a95e..eff1fd29908c7433d0738efe842737dea4c6550d 100644 --- a/testdata_raw_vda5050.txt +++ b/testdata_raw_vda5050.txt @@ -1,3 +1,4 @@ +{"headerId": "4", "timeStamp": "2022-03-30T09:51:41.405124+00:00", "manufacturer": "TL_TUD", "serialNumber": "4", "lastNodeId": "0", "batteryState": {"batteryCharge": "100"}, "errors": [{"errorType": "0", "errorLevel": "WARNING"}], "agvPosition": {"x": 9.4777, "y": 2.1158, "theta": 0.0009999996666689628}, "loads": [{"loadId": "0"}]} {"timeStamp" : "2021-10-14T20:35:33+00:00", "manufacturer" : "TL_TUD", "serialNumber" : "Virtual_AGV"} {"timeStamp" : "2021-10-14T20:35:33+00:00", "manufacturer" : "TL_TUD", "serialNumber" : "Virtual_AGV", "lastNodeId" : "31762128", "batteryState" : {"batteryCharge" : 88.0}, "errors" : [{"errorType" : "83", "errorLevel" : "WARNING"}, {"errorType" : "16", "errorLevel" : "FATAL"}], "loads" : [{"loadId" : "47"}, {"loadId" : "23"}]} {"timeStamp" : "2021-10-14T19:32:20+00:00", "manufacturer" : "TL_TUD", "serialNumber" : "Virtual_AGV", "lastNodeId" : "31762128", "batteryState" : {"batteryCharge" : 86.0}, "errors" : [{"errorType" : "83", "errorLevel" : "WARNING"}, {"errorType" : "16", "errorLevel" : "FATAL"}], "agvPosition" : {"x" : 4.3, "y" : 2.5, "theta" : 1.0}, "loads" : [{"loadId" : "47"}, {"loadId" : "23"}]} \ No newline at end of file