diff --git a/emf_datamodel/model/iPos_Datamodel.aird b/emf_datamodel/model/iPos_Datamodel.aird index 55362c17d0464878c33f2097976edbef106f5262..316130742973cb9cec583c8de700e73a2024fb63 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="5569e7d7-fe6b-48dc-bf7a-f5d6518a0e6d"> + <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_Et4wgAQNEey-kNQ7esRa_g" name="iPos_Datamodel" repPath="#_Es-xkAQNEey-kNQ7esRa_g" changeId="7b20d861-655d-4af4-b3fa-1e1f6d288005"> <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> @@ -723,10 +723,6 @@ <styles xmi:type="notation:FontStyle" xmi:id="_iWqJIR_NEeyaJIyxidrtuQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/> <layoutConstraint xmi:type="notation:Location" xmi:id="_iWqJIh_NEeyaJIyxidrtuQ"/> </children> - <children xmi:type="notation:Node" xmi:id="_uoVVkCHPEeynrdmghnL28w" type="3010" element="_umtk8CHPEeynrdmghnL28w"> - <styles xmi:type="notation:FontStyle" xmi:id="_uoVVkSHPEeynrdmghnL28w" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Location" xmi:id="_uoVVkiHPEeynrdmghnL28w"/> - </children> <styles xmi:type="notation:SortingStyle" xmi:id="_D9ZrhQc-Eey-kNQ7esRa_g"/> <styles xmi:type="notation:FilteringStyle" xmi:id="_D9Zrhgc-Eey-kNQ7esRa_g"/> </children> @@ -744,7 +740,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_KI4fQhFjEeydeasO1RaQEg"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_KIxxkRFjEeydeasO1RaQEg" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KIxxkhFjEeydeasO1RaQEg" x="2165" y="751" width="140" height="50"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KIxxkhFjEeydeasO1RaQEg" x="2165" y="751" width="160" height="116"/> </children> <children xmi:type="notation:Node" xmi:id="_1eTRIBFjEeydeasO1RaQEg" type="2003" element="_1d2lMBFjEeydeasO1RaQEg"> <children xmi:type="notation:Node" xmi:id="_1eTRIxFjEeydeasO1RaQEg" type="5007"/> @@ -770,7 +766,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_RzzHExFkEeydeasO1RaQEg"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_RzygARFkEeydeasO1RaQEg" fontName="Segoe UI" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RzygAhFkEeydeasO1RaQEg" x="2910" y="751" width="140" height="50"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RzygAhFkEeydeasO1RaQEg" x="2910" y="751" width="171" height="104"/> </children> <children xmi:type="notation:Node" xmi:id="_bpQwUBFkEeydeasO1RaQEg" type="2003" element="_bo-ccBFkEeydeasO1RaQEg"> <children xmi:type="notation:Node" xmi:id="_bpQwUxFkEeydeasO1RaQEg" type="5007"/> @@ -818,6 +814,10 @@ <children xmi:type="notation:Node" xmi:id="_ipaesCxSEeyc2bacnWuMrg" type="2003" element="_ipG8sCxSEeyc2bacnWuMrg"> <children xmi:type="notation:Node" xmi:id="_ipbFwCxSEeyc2bacnWuMrg" type="5007"/> <children xmi:type="notation:Node" xmi:id="_ipbFwSxSEeyc2bacnWuMrg" type="7004"> + <children xmi:type="notation:Node" xmi:id="_WEJAsDC6Eeys5_IXgF_hBA" type="3010" element="_WDgukDC6Eeys5_IXgF_hBA"> + <styles xmi:type="notation:FontStyle" xmi:id="_WEJAsTC6Eeys5_IXgF_hBA" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_WEJAsjC6Eeys5_IXgF_hBA"/> + </children> <styles xmi:type="notation:SortingStyle" xmi:id="_ipbFwixSEeyc2bacnWuMrg"/> <styles xmi:type="notation:FilteringStyle" xmi:id="_ipbFwyxSEeyc2bacnWuMrg"/> </children> @@ -2383,9 +2383,9 @@ <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> <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']"/> - <ownedElements xmi:type="diagram:DNodeListElement" uid="_J-iocBofEeymN8Dd3OTV4g" name="frameId : String" tooltipText=""> - <target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//MonitoringRequest/frameId"/> - <semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//MonitoringRequest/frameId"/> + <ownedElements xmi:type="diagram:DNodeListElement" uid="_J-iocBofEeymN8Dd3OTV4g" name="frameIds : StringList" tooltipText=""> + <target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//MonitoringRequest/frameIds"/> + <semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//MonitoringRequest/frameIds"/> <ownedStyle xmi:type="diagram:BundledImage" uid="_RXMRARofEeymN8Dd3OTV4g" labelAlignment="LEFT"> <description xmi:type="style:BundledImageDescription" 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']/@style"/> </ownedStyle> @@ -2896,7 +2896,7 @@ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> <arrangeConstraints>KEEP_SIZE</arrangeConstraints> <arrangeConstraints>KEEP_RATIO</arrangeConstraints> - <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yc1iBSHPEeynrdmghnL28w" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> + <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_TIvV4jASEeys5_IXgF_hBA" 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> <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']"/> @@ -2956,10 +2956,10 @@ </ownedStyle> <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> - <ownedElements xmi:type="diagram:DNodeListElement" uid="_1GZ5EBFkEeydeasO1RaQEg" name="positionConditionCell : FloatArray3d" tooltipText=""> - <target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCell"/> - <semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCell"/> - <ownedStyle xmi:type="diagram:BundledImage" uid="_7MoQfhFkEeydeasO1RaQEg" labelAlignment="LEFT"> + <ownedElements xmi:type="diagram:DNodeListElement" uid="_1GZ5EBFkEeydeasO1RaQEg" name="positionConditionCells : EMap" tooltipText=""> + <target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCells"/> + <semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCells"/> + <ownedStyle xmi:type="diagram:BundledImage" uid="_TI5G5jASEeys5_IXgF_hBA" labelAlignment="LEFT"> <description xmi:type="style:BundledImageDescription" 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']/@style"/> </ownedStyle> <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']"/> @@ -2980,14 +2980,6 @@ </ownedStyle> <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> - <ownedElements xmi:type="diagram:DNodeListElement" uid="_umtk8CHPEeynrdmghnL28w" name="positionConditionCellId : String" tooltipText=""> - <target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCellId"/> - <semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCellId"/> - <ownedStyle xmi:type="diagram:BundledImage" uid="_yc8PpCHPEeynrdmghnL28w" labelAlignment="LEFT"> - <description xmi:type="style:BundledImageDescription" 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']/@style"/> - </ownedStyle> - <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"> <target xmi:type="ecore:EReference" href="iPos_Datamodel.ecore#//EventFilterConfiguration/eventfiltercondition"/> @@ -3266,10 +3258,18 @@ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> <arrangeConstraints>KEEP_SIZE</arrangeConstraints> <arrangeConstraints>KEEP_RATIO</arrangeConstraints> - <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_ipHjwCxSEeyc2bacnWuMrg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> + <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_XJ9ZRTC6Eeys5_IXgF_hBA" 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> <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']"/> + <ownedElements xmi:type="diagram:DNodeListElement" uid="_WDgukDC6Eeys5_IXgF_hBA" name="trackingTaskId : String" tooltipText=""> + <target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//DataStorageQueryResponse/trackingTaskId"/> + <semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//DataStorageQueryResponse/trackingTaskId"/> + <ownedStyle xmi:type="diagram:BundledImage" uid="_XKDf5DC6Eeys5_IXgF_hBA" labelAlignment="LEFT"> + <description xmi:type="style:BundledImageDescription" 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']/@style"/> + </ownedStyle> + <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="_36hE0CxSEeyc2bacnWuMrg" name="[0..*] positionEvents" sourceNode="_ipG8sCxSEeyc2bacnWuMrg" targetNode="_lBuJcAZsEey-kNQ7esRa_g"> <target xmi:type="ecore:EReference" href="iPos_Datamodel.ecore#//DataStorageQueryResponse/positionEvents"/> diff --git a/emf_datamodel/model/iPos_Datamodel.ecore b/emf_datamodel/model/iPos_Datamodel.ecore index a72eb3ba2732ca66e7fd3828b35e51b14bd4de98..c834487019636d3d3b5aaea94463fe7a3550d14b 100644 --- a/emf_datamodel/model/iPos_Datamodel.ecore +++ b/emf_datamodel/model/iPos_Datamodel.ecore @@ -130,7 +130,7 @@ </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="TrackingRequest"/> <eClassifiers xsi:type="ecore:EClass" name="MonitoringRequest"> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="frameId" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="frameIds" eType="#//StringList"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="delta" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Float"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="updateFrequency" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Float"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="#//StringList"/> @@ -238,12 +238,15 @@ transient="true"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="filterStructure" eType="#//BooleanList" transient="true"/> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="positionConditionCell" - eType="#//FloatArray3d"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="positionConditionCells" + transient="true"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/> + <eTypeArguments eClassifier="#//FloatArray3d"/> + </eGenericType> + </eStructuralFeatures> <eStructuralFeatures xsi:type="ecore:EAttribute" name="idCondition" eType="#//StringList"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="categoryCondition" eType="#//StringList"/> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="positionConditionCellId" - eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/> </eClassifiers> <eClassifiers xsi:type="ecore:EDataType" name="StringList" instanceClassName="java.util.List<java.lang.String>"/> <eClassifiers xsi:type="ecore:EDataType" name="StringArray" instanceClassName="java.util.ArrayList<java.lang.String[]>"/> @@ -257,5 +260,6 @@ <eClassifiers xsi:type="ecore:EClass" name="DataStorageQueryResponse"> <eStructuralFeatures xsi:type="ecore:EReference" name="positionEvents" upperBound="-1" eType="#//PositionEvent"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="trackingTaskId" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/> </eClassifiers> </ecore:EPackage> diff --git a/emf_datamodel/model/iPos_Datamodel.genmodel b/emf_datamodel/model/iPos_Datamodel.genmodel index 848cdc75b141b0a7f768b9122e8a03839d3ef357..1176dbeb40201997d86b0dfdb13c5472df367bd4 100644 --- a/emf_datamodel/model/iPos_Datamodel.genmodel +++ b/emf_datamodel/model/iPos_Datamodel.genmodel @@ -120,7 +120,7 @@ </genClasses> <genClasses ecoreClass="iPos_Datamodel.ecore#//TrackingRequest"/> <genClasses ecoreClass="iPos_Datamodel.ecore#//MonitoringRequest"> - <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//MonitoringRequest/frameId"/> + <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//MonitoringRequest/frameIds"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//MonitoringRequest/delta"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//MonitoringRequest/updateFrequency"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//MonitoringRequest/type"/> @@ -183,10 +183,9 @@ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/positionDelta"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/sensorIdCondition"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/filterStructure"/> - <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCell"/> + <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCells"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/idCondition"/> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/categoryCondition"/> - <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//EventFilterCondition/positionConditionCellId"/> </genClasses> <genClasses ecoreClass="iPos_Datamodel.ecore#//ZoneDescriptor"> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//ZoneDescriptor/zoneId"/> @@ -194,6 +193,7 @@ </genClasses> <genClasses ecoreClass="iPos_Datamodel.ecore#//DataStorageQueryResponse"> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//DataStorageQueryResponse/positionEvents"/> + <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//DataStorageQueryResponse/trackingTaskId"/> </genClasses> </genPackages> </genmodel:GenModel> diff --git a/init_Industrierobotik.txt b/init_Industrierobotik.txt index 7dee9f96e547d9983e36b50b7a8d37e69eeb3bd7..84a0f0e71754bc39bd2b05a46d048eb120d38eea 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": 4.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": 4.0, "y": 4.0, "z":6.0}]} ]} +{"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": 4.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": 4.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": 8.0, "y": 10.0, "z":6.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}]} ]} {"refSystems": [{"id": "ROOT"}, {"id": "CETI_ROOT", "position": {"refSystemId": "ROOT", "point": {"x": 3.05,"y": 2.08,"z": 0.0}, "accuracy": 1.0}, "orientation": {"x": 0.0,"y": 0.0,"z": 0.0, "w": 0.0}}]} -{"objectConfigs": [{"agentId": "Employee1", "sensorId": "UWB_1", "agentType": "HUMAN", "sensorType": "UWB"}, {"agentId": "Employee2", "sensorId": "UWB_2", "agentType": "HUMAN", "sensorType": "UWB"}, {"agentId": "Turtlebot", "sensorId": "98:CD:AC:26:2D:18", "agentType": "ROBOT", "sensorType": "RFID_SCANNER"}]} +{"objectConfigs": [{"agentId": "turtlebot", "sensorId": "UWB_1", "agentType": "ROBOT", "sensorType": "UWB"}, {"agentId": "turtlebot", "sensorId": "UWB_2", "agentType": "ROBOT", "sensorType": "UWB"}, {"agentId": "turtlebot", "sensorId": "98:CD:AC:26:2D:18", "agentType": "ROBOT", "sensorType": "RFID_SCANNER"}]} {"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} }]} -{"monitoringRequests": [{"frameId": "cobot1_door_zone", "monitoringTaskId": "Human_at_Door_Side", "serializationType": "protobuf"}, {"frameId": "cobot1_window_zone", "monitoringTaskId": "Human_at_Window_Side", "serializationType": "protobuf"}]} \ No newline at end of file +{"monitoringRequests": [{"frameIds": ["cobot1_door_zone", "cobot1_window_zone"], "monitoringTaskId": "RobolabMonitoringCeti", "serializationType": "protobuf"}, {"frameIds": ["cobot1_door_zone", "cobot1_window_zone", "robolab_east", "robolab_west"], "monitoringTaskId": "RobolabMonitoringFrontend", "serializationType": "json"}]} \ No newline at end of file diff --git a/init_Sensordatenfusion.txt b/init_Sensordatenfusion.txt index 889f82a0f9b15b738bcaacc88a23ccab33059bfa..12a97a98e641d6a4759b957df7892d8819a1e193 100644 --- a/init_Sensordatenfusion.txt +++ b/init_Sensordatenfusion.txt @@ -2,4 +2,4 @@ {"refSystems": [{"id": "ROOT"}]} {"objectConfigs": [{"agentId": "turtlebot", "sensorId": "UWB_1", "agentType": "HUMAN", "sensorType": "UWB"}, {"agentId": "turtlebot", "sensorId": "98:CD:AC:26:2D:18", "agentType": "ROBOT", "sensorType": "RFID_SCANNER"}]} {"pois": [{"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} }]} -{"monitoringRequests": [{"frameId": "robolab", "monitoringTaskId": "robolab_topic", "serializationType": "json"}]} \ No newline at end of file +{"monitoringRequests": [{"frameId": "robolab", "monitoringTaskId": "ipos/client/position", "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 483fcfd3eea85d66d6df2c19ccfd309165407d2a..826a31fc8bb5cefc9967011f5a85637f760a9070 100644 --- a/src/main/java/ipos/project/CustomLoggingFilter.java +++ b/src/main/java/ipos/project/CustomLoggingFilter.java @@ -11,8 +11,12 @@ public class CustomLoggingFilter extends Filter<ILoggingEvent> { if (event.getMessage().contains("Eventfilter:")) { return FilterReply.DENY; } else if (event.getMessage().contains("SDF:")) { - return FilterReply.ACCEPT; - }else { + return FilterReply.DENY; + } else if (event.getMessage().contains("INDFRO:")){ + return FilterReply.ACCEPT; + } else if (event.getMessage().contains("INDFRO-DEBUG:")){ + return FilterReply.DENY; + } else { return FilterReply.DENY; } diff --git a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java index 113ed3cca299106babb7c17c83cdd40d2f396169..2246adc6dcd1566a6175f9de6d14b23dda7789b4 100644 --- a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java +++ b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java @@ -6,11 +6,14 @@ import ipos.project.DataModellntegration.SimpleSceneIntegration.api.MqttRequestH import ipos.project.DataModellntegration.SimpleSceneIntegration.service.SimpleSceneTransformer; import ipos.project.DataModellntegration.SimpleSceneIntegration.service.impl.ExternalPubServiceImpl; import ipos.project.DataModellntegration.iPos_Datamodel.DataStorageQueryResponse; +import ipos.project.DataModellntegration.iPos_Datamodel.Point3D; import ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent; +import ipos.project.DataModellntegration.iPos_Datamodel.ZoneDescriptor; import ipos.project.UseCaseController.Administration; import ipos.project.UseCaseController.PositionMonitoring; import ipos.project.mapper.ProtoJsonMap; import org.apache.logging.log4j.LogManager; +import org.eclipse.emf.common.util.EList; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -36,7 +39,11 @@ public class SimpleSceneIntegration { public static void init(String path_to_init_data_file){ Administration.initialize(); // clears WorldModel - File initFile = new File(path_to_init_data_file); + handleMessageFile(path_to_init_data_file); + } + + public static void handleMessageFile(String path_to_message_file) { + File initFile = new File(path_to_message_file); try { for (String line : readLines(initFile)) { SimpleScene.IposConfigWrapper iposConfigWrapper = ProtoJsonMap.fromJson(line, SimpleScene.IposConfigWrapper.class); @@ -82,36 +89,67 @@ public class SimpleSceneIntegration { } }*/ - public static void receiveMessage(DataStorageQueryResponse dsQueryResponse, String trackingTaskId){ - // TODO (tracking): implement function receiveMessage(DataStorageQueryResponse dsQueryResponse, String trackingTaskId) - // serialization type wird noch benötigt + public static void receiveMessage(DataStorageQueryResponse dsQueryResponse, String trackingTaskId, String serializationType){ + SimpleScene.IposQueryResponse queryResponse_proto = SimpleSceneTransformer.queryResp_Internal2SScene(dsQueryResponse, trackingTaskId); + MqttMessage mqttMessage = mqttService.createMqttMsg(queryResponse_proto, 0, false); + LOG.info("INDFRO: Publishing DataStorageQueryResponse on topic " + trackingTaskId + ": " + ProtoJsonMap.toJson(queryResponse_proto) + "; serializationType: " + serializationType); + publishRespectingSerializationType(trackingTaskId, serializationType, ProtoJsonMap.toJson(queryResponse_proto), mqttMessage); } public static void receiveMessage(PositionEvent positionEvent, String monitoringTaskId, String notificationType, String serializationType) { //String jsonPos = ProtoJsonMap.toJson(positionEvent); // we can translate a class into a string using several methods: 1) `.toString()` 2) `JsonFormat` in `ProtoJsonMap` if (positionEvent != null) { - // TODO (Tracking): The following transformer-call has to copy the zoneDescriptors of PositionEvent into the IposPositionEvent - SimpleScene.IposPositionEvent posEvent_proto = SimpleSceneTransformer.posEvent_internal2Proto(positionEvent, notificationType); + + // verwenden: DataServices.create-Methoden verwenden. Für ZoneDeskriptoren neue create-Funktionen schreiben + // PositionEvent posEvent_copy = duplicatePositionEvent(positionEvent); + SimpleScene.IposPositionEvent posEvent_proto = SimpleSceneTransformer.posEvent_internal2Proto(scale_position_frontend_app(positionEvent, 15), notificationType); MqttMessage mqttMessage = mqttService.createMqttMsg(posEvent_proto, 0, false); logging_sdf(monitoringTaskId, serializationType, posEvent_proto); + logging_indfro(positionEvent, monitoringTaskId, serializationType); - // publishes protobuf over MQTT - if (PositionMonitoring.PROTOBUF_SERIALIZATION_TYPE.equals(serializationType)){ - mqttService.publish(monitoringTaskId, mqttMessage); - LOG.info("publishing protobuf mqttMessage. JSON-representation:" + ProtoJsonMap.toJson(posEvent_proto) + " on topic: " + monitoringTaskId); - } - - // publishes JSON over MQTT - if (PositionMonitoring.JSON_SERIALIZATION_TYPE.equals(serializationType)){ - mqttService.publish(monitoringTaskId, ProtoJsonMap.toJson(posEvent_proto), 0, false); - LOG.info("publishing JSON mqttMessage:" + ProtoJsonMap.toJson(posEvent_proto) + " on topic: " + monitoringTaskId); - } + publishRespectingSerializationType(monitoringTaskId, serializationType, ProtoJsonMap.toJson(posEvent_proto), mqttMessage); }else{ LOG.warn("Warning: SimpleScene: Received empty PositionEvent"); } } + private static void logging_indfro(PositionEvent positionEvent, String monitoringTaskId, String serializationType) { + LOG.info("INDFRO: Publishing PositionEvent on topic " + monitoringTaskId + ": ZoneDescriptors:" + logZoneDescr(positionEvent.getZonedescriptors()) + "; serializationType: " + serializationType); + } + + private static String logZoneDescr(EList<ZoneDescriptor> zonedescriptors) { + String logString = ""; + for (ZoneDescriptor zoneDescriptor : zonedescriptors){ + logString += "zoneId: " + zoneDescriptor.getZoneId() + "; "; + logString += "notificationType: " + zoneDescriptor.getNotificationType() + " "; + } + logString += "_______"; + return logString; + } + + private static void publishRespectingSerializationType(String topic, String serializationType, String jsonString, MqttMessage mqttMessage) { + // publishes protobuf over MQTT + if (PositionMonitoring.PROTOBUF_SERIALIZATION_TYPE.equals(serializationType)){ + mqttService.publish(topic, mqttMessage); + LOG.info("publishing protobuf mqttMessage. JSON-representation:" + jsonString + " on topic: " + topic); + } + + // publishes JSON over MQTT + if (PositionMonitoring.JSON_SERIALIZATION_TYPE.equals(serializationType)){ + mqttService.publish(topic, jsonString, 0, false); + LOG.info("publishing JSON mqttMessage:" + jsonString + " on topic: " + topic); + } + } + + private static PositionEvent scale_position_frontend_app(PositionEvent internalPositionEvent, int factor) { + Point3D point = (Point3D) internalPositionEvent.getPlacing().getPosition().getPoint(); + point.setX(factor*point.getX()); + point.setY(factor*point.getY()); + point.setZ(factor*point.getZ()); + return internalPositionEvent; + } + private static void logging_sdf(String monitoringTaskId, String serializationType, SimpleScene.IposPositionEvent posEvent_proto) { for (SimpleScene.IposObject obj : posEvent_proto.getObjectList()){ String agentId = obj.getId(); @@ -119,7 +157,7 @@ public class SimpleSceneIntegration { String sensorType = obj.getSensorType(); String timestamp = obj.getLastPosUpdate(); String topic = monitoringTaskId; - LOG.info("SDF: Publishing: sensorType: " + sensorType + " timestamp: " + timestamp + " sensorId: " + sensorId + " agentId: " + agentId + " serializationType: " + serializationType); + LOG.info("SDF: Publishing: sensorType: " + sensorType + "; timestamp: " + timestamp + "; sensorId: " + sensorId + "; agentId: " + agentId + "; topic: " + monitoringTaskId + "; serializationType: " + serializationType); LOG.info("SDF: "); LOG.info("SDF: "); LOG.info("SDF: "); diff --git a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/api/MqttRequestHandler.java b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/api/MqttRequestHandler.java index 77879d8e1ba46b12e198ecc964e3b6bf8366d644..ab246f46386b5e79de2515e0ecf1b97dbcfab871 100644 --- a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/api/MqttRequestHandler.java +++ b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/api/MqttRequestHandler.java @@ -51,11 +51,20 @@ public class MqttRequestHandler implements Handler { processFrameConfigs(iposConfigWrapper.getFramesList()); // should be done not before refSystem-processing, as it might require one of the processed refSystems processObjectConfigs(iposConfigWrapper.getObjectConfigsList()); processPois(iposConfigWrapper.getPoisList()); - // TODO (tracking): processQueryRequest has to be implemented + processQueryRequest(iposConfigWrapper.getQueryRequestsList()); // this.jmsTemplate.convertAndSend("/request123", monReqInternal); // submit request to the internal broker } + private static void processQueryRequest(List<SimpleScene.IposQueryRequest> queryRequestsList) { + for (SimpleScene.IposQueryRequest proto_qReq : queryRequestsList){ + DataStorageQueryRequest internal_qReq = SimpleSceneTransformer.queryReq_SScene2Internal(proto_qReq); + LOG.info("INDFRO:"); + LOG.info("INDFRO: Received QueryRequest for trackingTaskId " + internal_qReq.getTrackingTaskId()); + PositionMonitoring.receiveMessage(internal_qReq); + } + } + /* private SimpleScene.IposConfigWrapper replaceNullByEmptyList(SimpleScene.IposConfigWrapper configWrapper) { SimpleScene.IposConfigWrapper.Builder configWrapper_NoNull = SimpleScene.IposConfigWrapper.newBuilder(); diff --git a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/service/SimpleSceneTransformer.java b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/service/SimpleSceneTransformer.java index 28a37a3748ba9a9151c16d0b453402a59c816751..9454e3304bda9a133ccc0f0a04f1e7a2dba31f23 100644 --- a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/service/SimpleSceneTransformer.java +++ b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/service/SimpleSceneTransformer.java @@ -5,8 +5,10 @@ import ipos.project.DataModellntegration.iPos_Datamodel.*; import com.google.protobuf.ProtocolStringList; import ipos.project.UseCaseController.PositionMonitoring; import org.apache.logging.log4j.LogManager; +import org.eclipse.emf.common.util.EList; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; public class SimpleSceneTransformer { @@ -15,7 +17,8 @@ public class SimpleSceneTransformer { public static MonitoringRequest monReq_SScene2Internal(SimpleScene.IposMonitoringRequest monReqProto){ MonitoringRequest monReqInt = modelFactory.createMonitoringRequest(); - monReqInt.setFrameId(monReqProto.getFrameId()); + monReqInt.setFrameIds(new LinkedList<>()); + monReqInt.getFrameIds().addAll(monReqProto.getFrameIdsList()); monReqInt.setDelta(monReqProto.getDelta()); monReqInt.setUpdateFrequency(monReqProto.getUpdateFrequency()); monReqInt.setType(toJavaStringList(monReqProto.getTypeList())); @@ -42,6 +45,13 @@ public class SimpleSceneTransformer { } public static SimpleScene.IposPositionEvent posEvent_internal2Proto(PositionEvent internalPosEvent, String notificationType){ + SimpleScene.IposObject.Builder protoIposObject = constructProtoIposObjectFromPosEvent(internalPosEvent); + if (protoIposObject == null) return null; + SimpleScene.IposPositionEvent.Builder protoIposPosEvent = transformIntoProtoIposPosEvent(notificationType, protoIposObject); + return protoIposPosEvent.build(); + } + + private static SimpleScene.IposObject.Builder constructProtoIposObjectFromPosEvent(PositionEvent internalPosEvent) { LocalizableObject lObject = PositionMonitoring.getLObjectByIdOrNull(internalPosEvent.getLObjectId()); if (null == lObject || null == lObject.getAgent()) { LOG.error("Internal-PositionEvent could not be transformed into protobuf-format. " + @@ -52,9 +62,20 @@ public class SimpleSceneTransformer { SimpleScene.IposPoint3D.Builder protoPoint3D = transformIntoProtoPoint3D(internalPosEvent); SimpleScene.IposPosition.Builder protoIposPosition = transformIntoProtoIposPosition(internalPosEvent, protoPoint3D); SimpleScene.IposSimpleOrientation.Builder protoOrientation = transformIntoProtoOrientation(internalPosEvent); - SimpleScene.IposObject.Builder protoIposObject = transformIntoProtoObject(internalPosEvent, lObject, protoIposPosition, protoOrientation); - SimpleScene.IposPositionEvent.Builder protoIposPosEvent = transformIntoProtoIposPosEvent(notificationType, protoIposObject); - return protoIposPosEvent.build(); + List<SimpleScene.IposZoneDescriptor.Builder> zoneDescriptors = transformIntoProtoZoneDescriptorList(internalPosEvent); + SimpleScene.IposObject.Builder protoIposObject = transformIntoProtoObject(internalPosEvent, lObject, protoIposPosition, protoOrientation, zoneDescriptors); + return protoIposObject; + } + + private static List<SimpleScene.IposZoneDescriptor.Builder> transformIntoProtoZoneDescriptorList(PositionEvent internalPosEvent) { + List<SimpleScene.IposZoneDescriptor.Builder> zoneDescriptorList = new LinkedList<>(); + for ( ZoneDescriptor zoneDescriptor_internal : internalPosEvent.getZonedescriptors()){ + SimpleScene.IposZoneDescriptor.Builder protoIposZoneDescriptor = SimpleScene.IposZoneDescriptor.newBuilder(); + protoIposZoneDescriptor.setZoneId(zoneDescriptor_internal.getZoneId()); + protoIposZoneDescriptor.setNotificationType(zoneDescriptor_internal.getNotificationType()); + zoneDescriptorList.add(protoIposZoneDescriptor); + } + return zoneDescriptorList; } private static SimpleScene.IposPositionEvent.Builder transformIntoProtoIposPosEvent(String notificationType, SimpleScene.IposObject.Builder protoIposObject) { @@ -66,9 +87,12 @@ public class SimpleSceneTransformer { return protoIposPosEvent; } - private static SimpleScene.IposObject.Builder transformIntoProtoObject(PositionEvent internalPosEvent, LocalizableObject lObject, SimpleScene.IposPosition.Builder protoIposPosition, SimpleScene.IposSimpleOrientation.Builder protoOrientation) { + private static SimpleScene.IposObject.Builder transformIntoProtoObject(PositionEvent internalPosEvent, LocalizableObject lObject, SimpleScene.IposPosition.Builder protoIposPosition, SimpleScene.IposSimpleOrientation.Builder protoOrientation, List<SimpleScene.IposZoneDescriptor.Builder> zoneDescriptors) { SimpleScene.IposObject.Builder protoIposObject = SimpleScene.IposObject.newBuilder(); protoIposObject.setSensorId(lObject.getId()).setSensorType(lObject.getSensorType()).setId(lObject.getAgent().getId()).setType(lObject.getAgent().getAgentType()).setOrientation(protoOrientation).setPosition(protoIposPosition).setLastPosUpdate(internalPosEvent.getTimeStamp()); + for (SimpleScene.IposZoneDescriptor.Builder zoneDescriptor : zoneDescriptors){ + protoIposObject.addZoneDescriptors(zoneDescriptor); // getZoneDescriptorsBuilderList().addAll(zoneDescriptors); + } return protoIposObject; } @@ -189,4 +213,31 @@ public class SimpleSceneTransformer { poi.setPlacing(placing_SScene2Internal(poi_proto.getPosition(), poi_proto.getOrientation())); return poi; } + + public static DataStorageQueryRequest queryReq_SScene2Internal(SimpleScene.IposQueryRequest proto_qReq) { + DataStorageQueryRequest internal_queryReq = modelFactory.createDataStorageQueryRequest(); + internal_queryReq.setTrackingTaskId(proto_qReq.getTrackingTaskId()); + return internal_queryReq; + } + + public static SimpleScene.IposQueryResponse queryResp_Internal2SScene(DataStorageQueryResponse dsQueryResponse, String trackingTaskId) { + SimpleScene.IposQueryResponse.Builder iposQueryResponse = SimpleScene.IposQueryResponse.newBuilder(); + iposQueryResponse.setTrackingTaskId(dsQueryResponse.getTrackingTaskId()); + List<SimpleScene.IposObject.Builder> iposObjects = transformIntoProtoObjectList(dsQueryResponse.getPositionEvents()); + for ( SimpleScene.IposObject.Builder iposObject : iposObjects){ + iposQueryResponse.addObjects(iposObject); + } + return iposQueryResponse.build(); + + } + + private static List<SimpleScene.IposObject.Builder> transformIntoProtoObjectList(EList<PositionEvent> positionEvents) { + List<SimpleScene.IposObject.Builder> iposObjectList = new LinkedList<>(); + for (PositionEvent posEvent : positionEvents){ + SimpleScene.IposObject.Builder protoIposObject = constructProtoIposObjectFromPosEvent(posEvent); + if (protoIposObject == null) continue; + iposObjectList.add(protoIposObject); + } + return iposObjectList; + } } diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/DataStorageQueryResponse.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/DataStorageQueryResponse.java index d917237958783d822c56a62c7f8740d10228cfad..f2adfc0843c4444f89b92fb5a0ceb4994b7343df 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/DataStorageQueryResponse.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/DataStorageQueryResponse.java @@ -16,6 +16,7 @@ import org.eclipse.emf.ecore.EObject; * </p> * <ul> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.DataStorageQueryResponse#getPositionEvents <em>Position Events</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.DataStorageQueryResponse#getTrackingTaskId <em>Tracking Task Id</em>}</li> * </ul> * * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getDataStorageQueryResponse() @@ -35,4 +36,26 @@ public interface DataStorageQueryResponse extends EObject { */ EList<PositionEvent> getPositionEvents(); + /** + * Returns the value of the '<em><b>Tracking Task Id</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the value of the '<em>Tracking Task Id</em>' attribute. + * @see #setTrackingTaskId(String) + * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getDataStorageQueryResponse_TrackingTaskId() + * @model dataType="org.eclipse.emf.ecore.xml.type.String" + * @generated + */ + String getTrackingTaskId(); + + /** + * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.DataStorageQueryResponse#getTrackingTaskId <em>Tracking Task Id</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param value the new value of the '<em>Tracking Task Id</em>' attribute. + * @see #getTrackingTaskId() + * @generated + */ + void setTrackingTaskId(String value); + } // DataStorageQueryResponse diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterCondition.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterCondition.java index 46e45613301030759a01d78e3f3c833a210b1422..7785da018e6c69997787db9a419dc74a68a4b930 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterCondition.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/EventFilterCondition.java @@ -5,6 +5,7 @@ package ipos.project.DataModellntegration.iPos_Datamodel; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.eclipse.emf.ecore.EObject; /** @@ -23,10 +24,9 @@ import org.eclipse.emf.ecore.EObject; * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionDelta <em>Position Delta</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getSensorIdCondition <em>Sensor Id Condition</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getFilterStructure <em>Filter Structure</em>}</li> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCell <em>Position Condition Cell</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCells <em>Position Condition Cells</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getIdCondition <em>Id Condition</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getCategoryCondition <em>Category Condition</em>}</li> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCellId <em>Position Condition Cell Id</em>}</li> * </ul> * * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getEventFilterCondition() @@ -189,26 +189,26 @@ public interface EventFilterCondition extends EObject { void setFilterStructure(boolean[] value); /** - * Returns the value of the '<em><b>Position Condition Cell</b></em>' attribute. + * Returns the value of the '<em><b>Position Condition Cells</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @return the value of the '<em>Position Condition Cell</em>' attribute. - * @see #setPositionConditionCell(ArrayList) - * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getEventFilterCondition_PositionConditionCell() - * @model dataType="ipos.project.DataModellntegration.iPos_Datamodel.FloatArray3d" + * @return the value of the '<em>Position Condition Cells</em>' attribute. + * @see #setPositionConditionCells(Map) + * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getEventFilterCondition_PositionConditionCells() + * @model transient="true" * @generated */ - ArrayList<Float[][]> getPositionConditionCell(); + Map<String, ArrayList<Float[][]>> getPositionConditionCells(); /** - * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCell <em>Position Condition Cell</em>}' attribute. + * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCells <em>Position Condition Cells</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @param value the new value of the '<em>Position Condition Cell</em>' attribute. - * @see #getPositionConditionCell() + * @param value the new value of the '<em>Position Condition Cells</em>' attribute. + * @see #getPositionConditionCells() * @generated */ - void setPositionConditionCell(ArrayList<Float[][]> value); + void setPositionConditionCells(Map<String, ArrayList<Float[][]>> value); /** * Returns the value of the '<em><b>Id Condition</b></em>' attribute. @@ -254,26 +254,4 @@ public interface EventFilterCondition extends EObject { */ void setCategoryCondition(List<String> value); - /** - * Returns the value of the '<em><b>Position Condition Cell Id</b></em>' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @return the value of the '<em>Position Condition Cell Id</em>' attribute. - * @see #setPositionConditionCellId(String) - * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getEventFilterCondition_PositionConditionCellId() - * @model dataType="org.eclipse.emf.ecore.xml.type.String" - * @generated - */ - String getPositionConditionCellId(); - - /** - * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCellId <em>Position Condition Cell Id</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @param value the new value of the '<em>Position Condition Cell Id</em>' attribute. - * @see #getPositionConditionCellId() - * @generated - */ - void setPositionConditionCellId(String value); - } // EventFilterCondition 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 53140b07ab1fd8bfc2885eb35758d088847b4a1e..81553df565c81b4b2dba729d1450d7d642f2d0df 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 @@ -1437,13 +1437,13 @@ public interface IPos_DatamodelPackage extends EPackage { int MONITORING_REQUEST = 27; /** - * The feature id for the '<em><b>Frame Id</b></em>' attribute. + * The feature id for the '<em><b>Frame Ids</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int MONITORING_REQUEST__FRAME_ID = 0; + int MONITORING_REQUEST__FRAME_IDS = 0; /** * The feature id for the '<em><b>Delta</b></em>' attribute. @@ -2417,13 +2417,13 @@ public interface IPos_DatamodelPackage extends EPackage { int EVENT_FILTER_CONDITION__FILTER_STRUCTURE = 6; /** - * The feature id for the '<em><b>Position Condition Cell</b></em>' attribute. + * The feature id for the '<em><b>Position Condition Cells</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL = 7; + int EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS = 7; /** * The feature id for the '<em><b>Id Condition</b></em>' attribute. @@ -2443,15 +2443,6 @@ public interface IPos_DatamodelPackage extends EPackage { */ int EVENT_FILTER_CONDITION__CATEGORY_CONDITION = 9; - /** - * The feature id for the '<em><b>Position Condition Cell Id</b></em>' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - * @ordered - */ - int EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID = 10; - /** * The number of structural features of the '<em>Event Filter Condition</em>' class. * <!-- begin-user-doc --> @@ -2459,7 +2450,7 @@ public interface IPos_DatamodelPackage extends EPackage { * @generated * @ordered */ - int EVENT_FILTER_CONDITION_FEATURE_COUNT = 11; + int EVENT_FILTER_CONDITION_FEATURE_COUNT = 10; /** * The number of operations of the '<em>Event Filter Condition</em>' class. @@ -2535,6 +2526,15 @@ public interface IPos_DatamodelPackage extends EPackage { */ int DATA_STORAGE_QUERY_RESPONSE__POSITION_EVENTS = 0; + /** + * The feature id for the '<em><b>Tracking Task Id</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID = 1; + /** * The number of structural features of the '<em>Data Storage Query Response</em>' class. * <!-- begin-user-doc --> @@ -2542,7 +2542,7 @@ public interface IPos_DatamodelPackage extends EPackage { * @generated * @ordered */ - int DATA_STORAGE_QUERY_RESPONSE_FEATURE_COUNT = 1; + int DATA_STORAGE_QUERY_RESPONSE_FEATURE_COUNT = 2; /** * The number of operations of the '<em>Data Storage Query Response</em>' class. @@ -3485,15 +3485,15 @@ public interface IPos_DatamodelPackage extends EPackage { EClass getMonitoringRequest(); /** - * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameId <em>Frame Id</em>}'. + * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameIds <em>Frame Ids</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @return the meta object for the attribute '<em>Frame Id</em>'. - * @see ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameId() + * @return the meta object for the attribute '<em>Frame Ids</em>'. + * @see ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameIds() * @see #getMonitoringRequest() * @generated */ - EAttribute getMonitoringRequest_FrameId(); + EAttribute getMonitoringRequest_FrameIds(); /** * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getDelta <em>Delta</em>}'. @@ -4051,15 +4051,15 @@ public interface IPos_DatamodelPackage extends EPackage { EAttribute getEventFilterCondition_FilterStructure(); /** - * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCell <em>Position Condition Cell</em>}'. + * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCells <em>Position Condition Cells</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @return the meta object for the attribute '<em>Position Condition Cell</em>'. - * @see ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCell() + * @return the meta object for the attribute '<em>Position Condition Cells</em>'. + * @see ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCells() * @see #getEventFilterCondition() * @generated */ - EAttribute getEventFilterCondition_PositionConditionCell(); + EAttribute getEventFilterCondition_PositionConditionCells(); /** * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getIdCondition <em>Id Condition</em>}'. @@ -4083,17 +4083,6 @@ public interface IPos_DatamodelPackage extends EPackage { */ EAttribute getEventFilterCondition_CategoryCondition(); - /** - * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCellId <em>Position Condition Cell Id</em>}'. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @return the meta object for the attribute '<em>Position Condition Cell Id</em>'. - * @see ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition#getPositionConditionCellId() - * @see #getEventFilterCondition() - * @generated - */ - EAttribute getEventFilterCondition_PositionConditionCellId(); - /** * Returns the meta object for class '{@link ipos.project.DataModellntegration.iPos_Datamodel.ZoneDescriptor <em>Zone Descriptor</em>}'. * <!-- begin-user-doc --> @@ -4147,6 +4136,17 @@ public interface IPos_DatamodelPackage extends EPackage { */ EReference getDataStorageQueryResponse_PositionEvents(); + /** + * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.DataStorageQueryResponse#getTrackingTaskId <em>Tracking Task Id</em>}'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the attribute '<em>Tracking Task Id</em>'. + * @see ipos.project.DataModellntegration.iPos_Datamodel.DataStorageQueryResponse#getTrackingTaskId() + * @see #getDataStorageQueryResponse() + * @generated + */ + EAttribute getDataStorageQueryResponse_TrackingTaskId(); + /** * Returns the meta object for data type '{@link java.util.List <em>String List</em>}'. * <!-- begin-user-doc --> @@ -4942,12 +4942,12 @@ public interface IPos_DatamodelPackage extends EPackage { EClass MONITORING_REQUEST = eINSTANCE.getMonitoringRequest(); /** - * The meta object literal for the '<em><b>Frame Id</b></em>' attribute feature. + * The meta object literal for the '<em><b>Frame Ids</b></em>' attribute feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ - EAttribute MONITORING_REQUEST__FRAME_ID = eINSTANCE.getMonitoringRequest_FrameId(); + EAttribute MONITORING_REQUEST__FRAME_IDS = eINSTANCE.getMonitoringRequest_FrameIds(); /** * The meta object literal for the '<em><b>Delta</b></em>' attribute feature. @@ -5403,13 +5403,13 @@ public interface IPos_DatamodelPackage extends EPackage { EAttribute EVENT_FILTER_CONDITION__FILTER_STRUCTURE = eINSTANCE.getEventFilterCondition_FilterStructure(); /** - * The meta object literal for the '<em><b>Position Condition Cell</b></em>' attribute feature. + * The meta object literal for the '<em><b>Position Condition Cells</b></em>' attribute feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ - EAttribute EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL = eINSTANCE - .getEventFilterCondition_PositionConditionCell(); + EAttribute EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS = eINSTANCE + .getEventFilterCondition_PositionConditionCells(); /** * The meta object literal for the '<em><b>Id Condition</b></em>' attribute feature. @@ -5427,15 +5427,6 @@ public interface IPos_DatamodelPackage extends EPackage { */ EAttribute EVENT_FILTER_CONDITION__CATEGORY_CONDITION = eINSTANCE.getEventFilterCondition_CategoryCondition(); - /** - * The meta object literal for the '<em><b>Position Condition Cell Id</b></em>' attribute feature. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - EAttribute EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID = eINSTANCE - .getEventFilterCondition_PositionConditionCellId(); - /** * The meta object literal for the '{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.ZoneDescriptorImpl <em>Zone Descriptor</em>}' class. * <!-- begin-user-doc --> @@ -5481,6 +5472,15 @@ public interface IPos_DatamodelPackage extends EPackage { EReference DATA_STORAGE_QUERY_RESPONSE__POSITION_EVENTS = eINSTANCE .getDataStorageQueryResponse_PositionEvents(); + /** + * The meta object literal for the '<em><b>Tracking Task Id</b></em>' attribute feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EAttribute DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID = eINSTANCE + .getDataStorageQueryResponse_TrackingTaskId(); + /** * The meta object literal for the '<em>String List</em>' data type. * <!-- begin-user-doc --> diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/MonitoringRequest.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/MonitoringRequest.java index e240a189693b6e738ca63d0b44d222b517970866..4c3f7df316a59d61681c2b302753e45d24a87e40 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/MonitoringRequest.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/MonitoringRequest.java @@ -15,7 +15,7 @@ import org.eclipse.emf.ecore.EObject; * The following features are supported: * </p> * <ul> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameId <em>Frame Id</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameIds <em>Frame Ids</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getDelta <em>Delta</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getUpdateFrequency <em>Update Frequency</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getType <em>Type</em>}</li> @@ -34,26 +34,26 @@ import org.eclipse.emf.ecore.EObject; */ public interface MonitoringRequest extends EObject { /** - * Returns the value of the '<em><b>Frame Id</b></em>' attribute. + * Returns the value of the '<em><b>Frame Ids</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @return the value of the '<em>Frame Id</em>' attribute. - * @see #setFrameId(String) - * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getMonitoringRequest_FrameId() - * @model dataType="org.eclipse.emf.ecore.xml.type.String" + * @return the value of the '<em>Frame Ids</em>' attribute. + * @see #setFrameIds(List) + * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getMonitoringRequest_FrameIds() + * @model dataType="ipos.project.DataModellntegration.iPos_Datamodel.StringList" * @generated */ - String getFrameId(); + List<String> getFrameIds(); /** - * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameId <em>Frame Id</em>}' attribute. + * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest#getFrameIds <em>Frame Ids</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @param value the new value of the '<em>Frame Id</em>' attribute. - * @see #getFrameId() + * @param value the new value of the '<em>Frame Ids</em>' attribute. + * @see #getFrameIds() * @generated */ - void setFrameId(String value); + void setFrameIds(List<String> value); /** * Returns the value of the '<em><b>Delta</b></em>' attribute. diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/DataStorageQueryResponseImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/DataStorageQueryResponseImpl.java index 62f001423a9714e636a51697e29c747d4c2cfbe1..a39f191c3457d962f2dea3d88848841829353e9d 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/DataStorageQueryResponseImpl.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/DataStorageQueryResponseImpl.java @@ -8,10 +8,12 @@ import ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent; import java.util.Collection; +import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; import org.eclipse.emf.ecore.util.EObjectResolvingEList; @@ -25,6 +27,7 @@ import org.eclipse.emf.ecore.util.EObjectResolvingEList; * </p> * <ul> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.DataStorageQueryResponseImpl#getPositionEvents <em>Position Events</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.DataStorageQueryResponseImpl#getTrackingTaskId <em>Tracking Task Id</em>}</li> * </ul> * * @generated @@ -40,6 +43,25 @@ public class DataStorageQueryResponseImpl extends MinimalEObjectImpl.Container i */ protected EList<PositionEvent> positionEvents; + /** + * The default value of the '{@link #getTrackingTaskId() <em>Tracking Task Id</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getTrackingTaskId() + * @generated + * @ordered + */ + protected static final String TRACKING_TASK_ID_EDEFAULT = null; + /** + * The cached value of the '{@link #getTrackingTaskId() <em>Tracking Task Id</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getTrackingTaskId() + * @generated + * @ordered + */ + protected String trackingTaskId = TRACKING_TASK_ID_EDEFAULT; + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -72,6 +94,29 @@ public class DataStorageQueryResponseImpl extends MinimalEObjectImpl.Container i return positionEvents; } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public String getTrackingTaskId() { + return trackingTaskId; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public void setTrackingTaskId(String newTrackingTaskId) { + String oldTrackingTaskId = trackingTaskId; + trackingTaskId = newTrackingTaskId; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID, oldTrackingTaskId, + trackingTaskId)); + } + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -82,6 +127,8 @@ public class DataStorageQueryResponseImpl extends MinimalEObjectImpl.Container i switch (featureID) { case IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__POSITION_EVENTS: return getPositionEvents(); + case IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID: + return getTrackingTaskId(); } return super.eGet(featureID, resolve, coreType); } @@ -99,6 +146,9 @@ public class DataStorageQueryResponseImpl extends MinimalEObjectImpl.Container i getPositionEvents().clear(); getPositionEvents().addAll((Collection<? extends PositionEvent>) newValue); return; + case IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID: + setTrackingTaskId((String) newValue); + return; } super.eSet(featureID, newValue); } @@ -114,6 +164,9 @@ public class DataStorageQueryResponseImpl extends MinimalEObjectImpl.Container i case IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__POSITION_EVENTS: getPositionEvents().clear(); return; + case IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID: + setTrackingTaskId(TRACKING_TASK_ID_EDEFAULT); + return; } super.eUnset(featureID); } @@ -128,8 +181,28 @@ public class DataStorageQueryResponseImpl extends MinimalEObjectImpl.Container i switch (featureID) { case IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__POSITION_EVENTS: return positionEvents != null && !positionEvents.isEmpty(); + case IPos_DatamodelPackage.DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID: + return TRACKING_TASK_ID_EDEFAULT == null ? trackingTaskId != null + : !TRACKING_TASK_ID_EDEFAULT.equals(trackingTaskId); } return super.eIsSet(featureID); } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) + return super.toString(); + + StringBuilder result = new StringBuilder(super.toString()); + result.append(" (trackingTaskId: "); + result.append(trackingTaskId); + result.append(')'); + return result.toString(); + } + } //DataStorageQueryResponseImpl diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConditionImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConditionImpl.java index 7d28c6e1e1fe608c77d104f4114fb6489aca288f..8dee28cba3a855ca9ec063cd9bb7a63f6cbc875b 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConditionImpl.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/EventFilterConditionImpl.java @@ -8,6 +8,7 @@ import ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; @@ -30,10 +31,9 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getPositionDelta <em>Position Delta</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getSensorIdCondition <em>Sensor Id Condition</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getFilterStructure <em>Filter Structure</em>}</li> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getPositionConditionCell <em>Position Condition Cell</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getPositionConditionCells <em>Position Condition Cells</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getIdCondition <em>Id Condition</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getCategoryCondition <em>Category Condition</em>}</li> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.EventFilterConditionImpl#getPositionConditionCellId <em>Position Condition Cell Id</em>}</li> * </ul> * * @generated @@ -180,24 +180,14 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple protected boolean[] filterStructure = FILTER_STRUCTURE_EDEFAULT; /** - * The default value of the '{@link #getPositionConditionCell() <em>Position Condition Cell</em>}' attribute. + * The cached value of the '{@link #getPositionConditionCells() <em>Position Condition Cells</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @see #getPositionConditionCell() + * @see #getPositionConditionCells() * @generated * @ordered */ - protected static final ArrayList<Float[][]> POSITION_CONDITION_CELL_EDEFAULT = null; - - /** - * The cached value of the '{@link #getPositionConditionCell() <em>Position Condition Cell</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getPositionConditionCell() - * @generated - * @ordered - */ - protected ArrayList<Float[][]> positionConditionCell = POSITION_CONDITION_CELL_EDEFAULT; + protected Map<String, ArrayList<Float[][]>> positionConditionCells; /** * The default value of the '{@link #getIdCondition() <em>Id Condition</em>}' attribute. @@ -239,26 +229,6 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple */ protected List<String> categoryCondition = CATEGORY_CONDITION_EDEFAULT; - /** - * The default value of the '{@link #getPositionConditionCellId() <em>Position Condition Cell Id</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getPositionConditionCellId() - * @generated - * @ordered - */ - protected static final String POSITION_CONDITION_CELL_ID_EDEFAULT = null; - - /** - * The cached value of the '{@link #getPositionConditionCellId() <em>Position Condition Cell Id</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getPositionConditionCellId() - * @generated - * @ordered - */ - protected String positionConditionCellId = POSITION_CONDITION_CELL_ID_EDEFAULT; - /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -442,8 +412,8 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple * <!-- end-user-doc --> * @generated */ - public ArrayList<Float[][]> getPositionConditionCell() { - return positionConditionCell; + public Map<String, ArrayList<Float[][]>> getPositionConditionCells() { + return positionConditionCells; } /** @@ -451,13 +421,13 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple * <!-- end-user-doc --> * @generated */ - public void setPositionConditionCell(ArrayList<Float[][]> newPositionConditionCell) { - ArrayList<Float[][]> oldPositionConditionCell = positionConditionCell; - positionConditionCell = newPositionConditionCell; + public void setPositionConditionCells(Map<String, ArrayList<Float[][]>> newPositionConditionCells) { + Map<String, ArrayList<Float[][]>> oldPositionConditionCells = positionConditionCells; + positionConditionCells = newPositionConditionCells; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, - IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL, oldPositionConditionCell, - positionConditionCell)); + IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS, oldPositionConditionCells, + positionConditionCells)); } /** @@ -505,29 +475,6 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple categoryCondition)); } - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public String getPositionConditionCellId() { - return positionConditionCellId; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setPositionConditionCellId(String newPositionConditionCellId) { - String oldPositionConditionCellId = positionConditionCellId; - positionConditionCellId = newPositionConditionCellId; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, - IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID, - oldPositionConditionCellId, positionConditionCellId)); - } - /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -550,14 +497,12 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple return getSensorIdCondition(); case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__FILTER_STRUCTURE: return getFilterStructure(); - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL: - return getPositionConditionCell(); + case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS: + return getPositionConditionCells(); case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__ID_CONDITION: return getIdCondition(); case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__CATEGORY_CONDITION: return getCategoryCondition(); - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID: - return getPositionConditionCellId(); } return super.eGet(featureID, resolve, coreType); } @@ -592,8 +537,8 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__FILTER_STRUCTURE: setFilterStructure((boolean[]) newValue); return; - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL: - setPositionConditionCell((ArrayList<Float[][]>) newValue); + case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS: + setPositionConditionCells((Map<String, ArrayList<Float[][]>>) newValue); return; case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__ID_CONDITION: setIdCondition((List<String>) newValue); @@ -601,9 +546,6 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__CATEGORY_CONDITION: setCategoryCondition((List<String>) newValue); return; - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID: - setPositionConditionCellId((String) newValue); - return; } super.eSet(featureID, newValue); } @@ -637,8 +579,8 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__FILTER_STRUCTURE: setFilterStructure(FILTER_STRUCTURE_EDEFAULT); return; - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL: - setPositionConditionCell(POSITION_CONDITION_CELL_EDEFAULT); + case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS: + setPositionConditionCells((Map<String, ArrayList<Float[][]>>) null); return; case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__ID_CONDITION: setIdCondition(ID_CONDITION_EDEFAULT); @@ -646,9 +588,6 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__CATEGORY_CONDITION: setCategoryCondition(CATEGORY_CONDITION_EDEFAULT); return; - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID: - setPositionConditionCellId(POSITION_CONDITION_CELL_ID_EDEFAULT); - return; } super.eUnset(featureID); } @@ -679,17 +618,13 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__FILTER_STRUCTURE: return FILTER_STRUCTURE_EDEFAULT == null ? filterStructure != null : !FILTER_STRUCTURE_EDEFAULT.equals(filterStructure); - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL: - return POSITION_CONDITION_CELL_EDEFAULT == null ? positionConditionCell != null - : !POSITION_CONDITION_CELL_EDEFAULT.equals(positionConditionCell); + case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS: + return positionConditionCells != null; case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__ID_CONDITION: return ID_CONDITION_EDEFAULT == null ? idCondition != null : !ID_CONDITION_EDEFAULT.equals(idCondition); case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__CATEGORY_CONDITION: return CATEGORY_CONDITION_EDEFAULT == null ? categoryCondition != null : !CATEGORY_CONDITION_EDEFAULT.equals(categoryCondition); - case IPos_DatamodelPackage.EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID: - return POSITION_CONDITION_CELL_ID_EDEFAULT == null ? positionConditionCellId != null - : !POSITION_CONDITION_CELL_ID_EDEFAULT.equals(positionConditionCellId); } return super.eIsSet(featureID); } @@ -719,14 +654,12 @@ public class EventFilterConditionImpl extends MinimalEObjectImpl.Container imple result.append(sensorIdCondition); result.append(", filterStructure: "); result.append(filterStructure); - result.append(", positionConditionCell: "); - result.append(positionConditionCell); + result.append(", positionConditionCells: "); + result.append(positionConditionCells); result.append(", idCondition: "); result.append(idCondition); result.append(", categoryCondition: "); result.append(categoryCondition); - result.append(", positionConditionCellId: "); - result.append(positionConditionCellId); result.append(')'); return result.toString(); } 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 c581d858fb63fb8f8f58f1c77488cfa30083064d..935f3769b7ec9c4cc17a6a1ed87f01437cb4ae6f 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 @@ -1251,7 +1251,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data * <!-- end-user-doc --> * @generated */ - public EAttribute getMonitoringRequest_FrameId() { + public EAttribute getMonitoringRequest_FrameIds() { return (EAttribute) monitoringRequestEClass.getEStructuralFeatures().get(0); } @@ -1728,7 +1728,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data * <!-- end-user-doc --> * @generated */ - public EAttribute getEventFilterCondition_PositionConditionCell() { + public EAttribute getEventFilterCondition_PositionConditionCells() { return (EAttribute) eventFilterConditionEClass.getEStructuralFeatures().get(7); } @@ -1750,15 +1750,6 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data return (EAttribute) eventFilterConditionEClass.getEStructuralFeatures().get(9); } - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public EAttribute getEventFilterCondition_PositionConditionCellId() { - return (EAttribute) eventFilterConditionEClass.getEStructuralFeatures().get(10); - } - /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -1804,6 +1795,15 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data return (EReference) dataStorageQueryResponseEClass.getEStructuralFeatures().get(0); } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public EAttribute getDataStorageQueryResponse_TrackingTaskId() { + return (EAttribute) dataStorageQueryResponseEClass.getEStructuralFeatures().get(1); + } + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -1988,7 +1988,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data trackingRequestEClass = createEClass(TRACKING_REQUEST); monitoringRequestEClass = createEClass(MONITORING_REQUEST); - createEAttribute(monitoringRequestEClass, MONITORING_REQUEST__FRAME_ID); + createEAttribute(monitoringRequestEClass, MONITORING_REQUEST__FRAME_IDS); createEAttribute(monitoringRequestEClass, MONITORING_REQUEST__DELTA); createEAttribute(monitoringRequestEClass, MONITORING_REQUEST__UPDATE_FREQUENCY); createEAttribute(monitoringRequestEClass, MONITORING_REQUEST__TYPE); @@ -2058,10 +2058,9 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__POSITION_DELTA); createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__SENSOR_ID_CONDITION); createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__FILTER_STRUCTURE); - createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL); + createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__POSITION_CONDITION_CELLS); createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__ID_CONDITION); createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__CATEGORY_CONDITION); - createEAttribute(eventFilterConditionEClass, EVENT_FILTER_CONDITION__POSITION_CONDITION_CELL_ID); zoneDescriptorEClass = createEClass(ZONE_DESCRIPTOR); createEAttribute(zoneDescriptorEClass, ZONE_DESCRIPTOR__ZONE_ID); @@ -2069,6 +2068,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data dataStorageQueryResponseEClass = createEClass(DATA_STORAGE_QUERY_RESPONSE); createEReference(dataStorageQueryResponseEClass, DATA_STORAGE_QUERY_RESPONSE__POSITION_EVENTS); + createEAttribute(dataStorageQueryResponseEClass, DATA_STORAGE_QUERY_RESPONSE__TRACKING_TASK_ID); // Create data types stringListEDataType = createEDataType(STRING_LIST); @@ -2351,7 +2351,7 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data initEClass(monitoringRequestEClass, MonitoringRequest.class, "MonitoringRequest", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEAttribute(getMonitoringRequest_FrameId(), theXMLTypePackage.getString(), "frameId", null, 0, 1, + initEAttribute(getMonitoringRequest_FrameIds(), this.getStringList(), "frameIds", null, 0, 1, MonitoringRequest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getMonitoringRequest_Delta(), theXMLTypePackage.getFloat(), "delta", null, 0, 1, @@ -2534,18 +2534,20 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data initEAttribute(getEventFilterCondition_FilterStructure(), this.getBooleanList(), "filterStructure", null, 0, 1, EventFilterCondition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getEventFilterCondition_PositionConditionCell(), this.getFloatArray3d(), "positionConditionCell", - null, 0, 1, EventFilterCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, - !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + g1 = createEGenericType(ecorePackage.getEMap()); + g2 = createEGenericType(theXMLTypePackage.getString()); + g1.getETypeArguments().add(g2); + g2 = createEGenericType(this.getFloatArray3d()); + g1.getETypeArguments().add(g2); + initEAttribute(getEventFilterCondition_PositionConditionCells(), g1, "positionConditionCells", null, 0, 1, + EventFilterCondition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getEventFilterCondition_IdCondition(), this.getStringList(), "idCondition", null, 0, 1, EventFilterCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getEventFilterCondition_CategoryCondition(), this.getStringList(), "categoryCondition", null, 0, 1, EventFilterCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getEventFilterCondition_PositionConditionCellId(), theXMLTypePackage.getString(), - "positionConditionCellId", null, 0, 1, EventFilterCondition.class, !IS_TRANSIENT, !IS_VOLATILE, - IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(zoneDescriptorEClass, ZoneDescriptor.class, "ZoneDescriptor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); @@ -2561,6 +2563,9 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data initEReference(getDataStorageQueryResponse_PositionEvents(), this.getPositionEvent(), null, "positionEvents", null, 0, -1, DataStorageQueryResponse.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getDataStorageQueryResponse_TrackingTaskId(), theXMLTypePackage.getString(), "trackingTaskId", + null, 0, 1, DataStorageQueryResponse.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, + !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); // Initialize data types initEDataType(stringListEDataType, List.class, "StringList", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS, diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/MonitoringRequestImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/MonitoringRequestImpl.java index e05796843ad5e57d8c650d1fb3a20d77851c5946..91feb43d9c4af5bd9b6727fabd713e201005c4c6 100644 --- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/MonitoringRequestImpl.java +++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/MonitoringRequestImpl.java @@ -22,7 +22,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; * The following features are implemented: * </p> * <ul> - * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.MonitoringRequestImpl#getFrameId <em>Frame Id</em>}</li> + * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.MonitoringRequestImpl#getFrameIds <em>Frame Ids</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.MonitoringRequestImpl#getDelta <em>Delta</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.MonitoringRequestImpl#getUpdateFrequency <em>Update Frequency</em>}</li> * <li>{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.MonitoringRequestImpl#getType <em>Type</em>}</li> @@ -39,24 +39,24 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; */ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implements MonitoringRequest { /** - * The default value of the '{@link #getFrameId() <em>Frame Id</em>}' attribute. + * The default value of the '{@link #getFrameIds() <em>Frame Ids</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @see #getFrameId() + * @see #getFrameIds() * @generated * @ordered */ - protected static final String FRAME_ID_EDEFAULT = null; + protected static final List<String> FRAME_IDS_EDEFAULT = null; /** - * The cached value of the '{@link #getFrameId() <em>Frame Id</em>}' attribute. + * The cached value of the '{@link #getFrameIds() <em>Frame Ids</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @see #getFrameId() + * @see #getFrameIds() * @generated * @ordered */ - protected String frameId = FRAME_ID_EDEFAULT; + protected List<String> frameIds = FRAME_IDS_EDEFAULT; /** * The default value of the '{@link #getDelta() <em>Delta</em>}' attribute. @@ -282,8 +282,8 @@ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implemen * <!-- end-user-doc --> * @generated */ - public String getFrameId() { - return frameId; + public List<String> getFrameIds() { + return frameIds; } /** @@ -291,12 +291,12 @@ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implemen * <!-- end-user-doc --> * @generated */ - public void setFrameId(String newFrameId) { - String oldFrameId = frameId; - frameId = newFrameId; + public void setFrameIds(List<String> newFrameIds) { + List<String> oldFrameIds = frameIds; + frameIds = newFrameIds; if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_ID, - oldFrameId, frameId)); + eNotify(new ENotificationImpl(this, Notification.SET, IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_IDS, + oldFrameIds, frameIds)); } /** @@ -531,8 +531,8 @@ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implemen @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_ID: - return getFrameId(); + case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_IDS: + return getFrameIds(); case IPos_DatamodelPackage.MONITORING_REQUEST__DELTA: return getDelta(); case IPos_DatamodelPackage.MONITORING_REQUEST__UPDATE_FREQUENCY: @@ -566,8 +566,8 @@ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implemen @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_ID: - setFrameId((String) newValue); + case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_IDS: + setFrameIds((List<String>) newValue); return; case IPos_DatamodelPackage.MONITORING_REQUEST__DELTA: setDelta((Float) newValue); @@ -611,8 +611,8 @@ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implemen @Override public void eUnset(int featureID) { switch (featureID) { - case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_ID: - setFrameId(FRAME_ID_EDEFAULT); + case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_IDS: + setFrameIds(FRAME_IDS_EDEFAULT); return; case IPos_DatamodelPackage.MONITORING_REQUEST__DELTA: setDelta(DELTA_EDEFAULT); @@ -656,8 +656,8 @@ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implemen @Override public boolean eIsSet(int featureID) { switch (featureID) { - case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_ID: - return FRAME_ID_EDEFAULT == null ? frameId != null : !FRAME_ID_EDEFAULT.equals(frameId); + case IPos_DatamodelPackage.MONITORING_REQUEST__FRAME_IDS: + return FRAME_IDS_EDEFAULT == null ? frameIds != null : !FRAME_IDS_EDEFAULT.equals(frameIds); case IPos_DatamodelPackage.MONITORING_REQUEST__DELTA: return delta != DELTA_EDEFAULT; case IPos_DatamodelPackage.MONITORING_REQUEST__UPDATE_FREQUENCY: @@ -697,8 +697,8 @@ public class MonitoringRequestImpl extends MinimalEObjectImpl.Container implemen return super.toString(); StringBuilder result = new StringBuilder(super.toString()); - result.append(" (frameId: "); - result.append(frameId); + result.append(" (frameIds: "); + result.append(frameIds); result.append(", delta: "); result.append(delta); result.append(", updateFrequency: "); diff --git a/src/main/java/ipos/project/Functionality/DataServices.java b/src/main/java/ipos/project/Functionality/DataServices.java index 67c656493120905aab2a7ac6e9b47be59d5b8cf4..748a6a5e7618db238b2d1ffe6f25f9cc66e17b99 100644 --- a/src/main/java/ipos/project/Functionality/DataServices.java +++ b/src/main/java/ipos/project/Functionality/DataServices.java @@ -97,11 +97,11 @@ public class DataServices { public static void addAgent(Agent agent_input) { for (Agent agent_loaded : wma.getAllAgents()){ if (agent_loaded.getId().equals(agent_input.getId())){ - Agent agent_merged = mergeAgents(agent_loaded, agent_input); - + mergeInputAgentIntoLoadedAgent(agent_loaded, agent_input); + return; // TODO: careful: What about those LObjects that point on the currently existing agent-object? - wma.removeAgent(agent_loaded.getId()); - wma.addAgent(agent_merged); + // wma.removeAgent(agent_loaded.getId()); + // wma.addAgent(agent_merged); } } wma.addAgent(agent_input); @@ -114,12 +114,13 @@ public class DataServices { * @param agent_input * @return */ - private static Agent mergeAgents(Agent agent_loaded, Agent agent_input) { + private static Agent mergeInputAgentIntoLoadedAgent(Agent agent_loaded, Agent agent_input) { List<LocalizableObject> lObjects_loaded = agent_loaded.getLObject(); List<LocalizableObject> lObjects_input = agent_input.getLObject(); for (LocalizableObject lObject_input : lObjects_input){ if (!containsLObjectId(lObjects_loaded, lObject_input.getId())){ lObjects_loaded.add(lObject_input); + LOG.info("Added lObject with id " + lObject_input.getId() + " to agent " + agent_loaded.getId()); } } return agent_loaded; diff --git a/src/main/java/ipos/project/Functionality/eventfilter/FilteringResult.java b/src/main/java/ipos/project/Functionality/eventfilter/FilteringResult.java new file mode 100644 index 0000000000000000000000000000000000000000..9049e3931050d1deef3d0b5f57f8800d9cc49a0c --- /dev/null +++ b/src/main/java/ipos/project/Functionality/eventfilter/FilteringResult.java @@ -0,0 +1,45 @@ +package ipos.project.Functionality.eventfilter; + +import ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent; + +import java.util.List; + +public class FilteringResult { + + public FilteringResult(String monitoringTaskId, PositionEvent posEvent, boolean isBlocking, List<String> matchingPositionConditionCells, List<String> allPositionConditionCells){ + this.monitoringTaskId = monitoringTaskId; + this.posEvent = posEvent; + this.isBlocking = isBlocking; + this.matchingPositionConditionCells = matchingPositionConditionCells; + this.nonMatchingPositionConditionCells = allPositionConditionCells; + this.nonMatchingPositionConditionCells.removeAll(matchingPositionConditionCells); + } + + public String getMonitoringTaskId() { + return monitoringTaskId; + } + + private String monitoringTaskId; + private boolean isBlocking; + private List<String> matchingPositionConditionCells; + private List<String> nonMatchingPositionConditionCells; + + + public PositionEvent getPosEvent() { + return posEvent; + } + + private PositionEvent posEvent; + + public boolean hasBlockedEvent(){ + return this.isBlocking; + } + + public List<String> getMatchingPositionConditionCellIds() { + return this.matchingPositionConditionCells; + } + + public List<String> getNonMatchingPositionConditionCellIds(){ + return this.nonMatchingPositionConditionCells; + } +} diff --git a/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java b/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java index 99732ba87e808f6d2f5a193519bab83f493ecbf4..b599511622e3e5d6dbee81b4aa58049a8dfb09ce 100644 --- a/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java +++ b/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java @@ -9,9 +9,7 @@ import java.sql.Timestamp; import java.lang.Math; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; public class eventFilter { @@ -54,7 +52,7 @@ public class eventFilter { private ArrayList<Float[]> positionCondition; private int timeMinInterval; private float positionDelta; - private ArrayList<Float[][]> positionConditionCell; + private Map<String, ArrayList<Float[][]>> positionConditionCells; // zoneId -> PositionConditionCell private EventFilterCondition filterConditionConfig; public void init(EventFilterCondition conf) { @@ -67,7 +65,7 @@ public class eventFilter { positionCondition = conf.getPositionCondition(); timeMinInterval = conf.getTimeMinInterval(); positionDelta = conf.getPositionDelta(); - positionConditionCell = conf.getPositionConditionCell(); + positionConditionCells = conf.getPositionConditionCells(); this.filterConditionConfig = conf; } @@ -103,22 +101,23 @@ public class eventFilter { } } - public boolean process(PositionEvent event) throws ParseException { + public FilteringResult process(PositionEvent event) throws ParseException { IPos_DatamodelFactory dataModelFactory = IPos_DatamodelFactory.eINSTANCE; LocalizableObject lObject = DataServices.getLObjectByIdOrNull(event.getLObjectId()); boolean flag = false; //false for pass, true for block + List<String> matchingCells = new LinkedList<>(); if (null == event.getPlacing() || null == event.getPlacing().getPosition() || null == event.getPlacing().getPosition().getPoint()){ LOG.info("EventFilter: Warning: Received event with unknown Position. Sensor-id: " + event.getLObjectId()); - return true; + return new FilteringResult(getMonitoringTaskId(), event,true, matchingCells, new ArrayList<>(this.positionConditionCells.keySet())); } if (null == lObject){ LOG.info("EventFilter: Warning: Received event from sensor with unknown sensor-id: " + event.getLObjectId()); - return true; + return new FilteringResult(getMonitoringTaskId(), event,true, matchingCells, new ArrayList<>(this.positionConditionCells.keySet())); } Agent agent = lObject.getAgent(); if (null == agent){ LOG.info("EventFilter: Warning: Received event for sensor-id with unknown agent. Sensor-id: " + lObject.getId()); - return true; + return new FilteringResult(getMonitoringTaskId(), event,true, matchingCells, new ArrayList<>(this.positionConditionCells.keySet())); } LOG.info("Eventfilter: Filter structure: " + filterStructure[0] + ", " + filterStructure[1] + ", " + filterStructure[2] + ", " + filterStructure[3] + ", " + filterStructure[4] + ", " + filterStructure[5] + ", " + filterStructure[6] + ", " + filterStructure[7]); @@ -260,21 +259,36 @@ public class eventFilter { if (filterStructure[8] && !flag) { flag = true; //switch the filter status to block, if the event meet the filter condition, switch to pass Position position = event.getPlacing().getPosition(); - for (int i = 0; i < positionConditionCell.size(); i++) { - if (position.getPoint() instanceof Point3D) { - Point3D cod = (Point3D) position.getPoint(); - if (is_in_cell(cod, positionConditionCell.get(i)[0], positionConditionCell.get(i)[1], positionConditionCell.get(i)[2])) { - flag = false; - } + for (Map.Entry<String, ArrayList<Float[][]>> identifiedCell : positionConditionCells.entrySet()){ + boolean evalResult = evaluatePositionConditionCell(position, identifiedCell.getValue()); + if (!evalResult){ // let the event pass if filter is not blocking for at least one cell + flag = false; + matchingCells.add(identifiedCell.getKey()); } } } LOG.info("Eventfilter: Filter status (positionCondition_cell) " + ": " + flag); + LOG.info("Eventfilter: EventFilter " + getMonitoringTaskId() + " accepted zones " + matchingCells.toString()); + LOG.info("INDFRO-DEBUG: EventFilter " + getMonitoringTaskId() + " accepted zones " + matchingCells.toString()); if (!flag) { last_position_event = event; } - return flag; + FilteringResult filteringResult = new FilteringResult(getMonitoringTaskId(), event, flag, matchingCells, new ArrayList<>(this.positionConditionCells.keySet())); + return filteringResult; + } + + private boolean evaluatePositionConditionCell(Position position, ArrayList<Float[][]> positionConditionCell) { + boolean result = true; + for (int i = 0; i < positionConditionCell.size(); i++) { + if (position.getPoint() instanceof Point3D) { + Point3D cod = (Point3D) position.getPoint(); + if (is_in_cell(cod, positionConditionCell.get(i)[0], positionConditionCell.get(i)[1], positionConditionCell.get(i)[2])) { + result = false; + } + } + } + return result; } public boolean respectsAccuracySdfForPosEvent(PositionEvent posEvent) { diff --git a/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java b/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java index c038fa7b2b1b8c2c29a17fca3eab669b5d9d6454..2406ab20eec590b1c67dc9e3b389413fe13017ce 100644 --- a/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java +++ b/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java @@ -24,17 +24,16 @@ public class readConfig { */ public static boolean readFilterConfigFromMonitoringRequest (MonitoringRequest monReq, EventFilterCondition config){ // TODO: support other criteria than "position_condition_cell" - //float delta_monReq = monReq.getDelta(); - String frameId_monReq = monReq.getFrameId(); - Zone zone_monReq = DataServices.getZoneByIdOrNull(frameId_monReq); - if (null == zone_monReq){ - LOG.warn("MonitoringRequest contained an invalid Zone-id"); - return false; - } config.setFilterStructure(new boolean[] {false, false, false, false, false, false, false, false, true}); - //config.setPositionDelta(delta_monReq); - config.setPositionConditionCell(transformZone2PositionConditionCell(zone_monReq)); - config.setPositionConditionCellId(zone_monReq.getId()); + for (String frameId : monReq.getFrameIds()){ + Zone zone_monReq = DataServices.getZoneByIdOrNull(frameId); + if (null == zone_monReq){ + LOG.warn("MonitoringRequest contained an invalid Zone-id"); + return false; + } + ArrayList<Float[][]> positionConditionCell = transformZone2PositionConditionCell(zone_monReq); + config.getPositionConditionCells().put(frameId, positionConditionCell); + } return true; } @@ -276,7 +275,7 @@ public class readConfig { position_condition_cell.add(cell_c); } filter_structure[8] = true; - config.setPositionConditionCell(position_condition_cell); + config.getPositionConditionCells().put("DefaultZoneId", position_condition_cell); } else { filter_structure[8]=false; diff --git a/src/main/java/ipos/project/MainApp.java b/src/main/java/ipos/project/MainApp.java index 4db309752fb8320c063145523a5a52ba71c6d07e..0dbfb419ab088d98bd80c44e2e72d7267f3d8473 100644 --- a/src/main/java/ipos/project/MainApp.java +++ b/src/main/java/ipos/project/MainApp.java @@ -19,12 +19,16 @@ public class MainApp { public static final String INDUSTRIEROBOTIK_FILE = "./init_Industrierobotik.txt"; public static final String SENSORDATENFUSION_FILE = "./init_Sensordatenfusion.txt"; public static final String TESTRAWDATA_FILE = "./testdata_raw.txt"; + public static final String TESTDATA_INDFRO = "./testdata_raw_indfro.txt"; + public static final String TESTDATA_QUERY = "./testdata_raw_query.txt"; + public static void main(String[] args) throws ParseException { SpringApplication.run(MainApp.class, args); // SimpleSceneIntegration.init(); - // SimpleSceneIntegration.init(INDUSTRIEROBOTIK_FILE); - SimpleSceneIntegration.init(SENSORDATENFUSION_FILE); - GenericSensorValueProcessor.processTestData(TESTRAWDATA_FILE); + SimpleSceneIntegration.init(INDUSTRIEROBOTIK_FILE); + // SimpleSceneIntegration.init(SENSORDATENFUSION_FILE); + GenericSensorValueProcessor.processTestData(TESTDATA_INDFRO); + SimpleSceneIntegration.handleMessageFile(TESTDATA_QUERY); } } diff --git a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java index e6a55e87118b6ad241ea34a3bd227a184702f273..3ca1693fc0340e1f8e6f2e20e8e9dce846ae96da 100644 --- a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java +++ b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java @@ -5,16 +5,17 @@ import ipos.project.DataModellntegration.iPos_Datamodel.*; import ipos.project.Functionality.DataServices; import ipos.project.Functionality.PositionCalculation; import ipos.project.Functionality.SensorDataFusion; +import ipos.project.Functionality.eventfilter.FilteringResult; import ipos.project.Functionality.eventfilter.eventFilter; import ipos.project.Functionality.eventfilter.readConfig; import org.apache.logging.log4j.LogManager; import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; import reactor.util.function.Tuple4; -import reactor.util.function.Tuples; import java.text.ParseException; import java.util.*; +import java.util.stream.Collectors; @Component @@ -32,6 +33,7 @@ public class PositionMonitoring { public static final String PROTOBUF_SERIALIZATION_TYPE = "protobuf"; public static final String JSON_SERIALIZATION_TYPE = "json"; public static final String ACCURACY_FUSION_STRATEGY = "accuracy"; + public static final String TRACKING_SUFFIX = "_tracking"; public static final String TOPIC_DOOR = "Human_at_Door_Side"; public static final String TOPIC_WINDOW = "Human_at_Window_Side"; public static final String ZONE_ID_DOOR = "cobot1_door_zone"; @@ -49,6 +51,15 @@ public class PositionMonitoring { } } + private static eventFilter getEventFilterByIdOrNull(String monitoringTaskId){ + for (eventFilter eFilter : eventFilters){ + if (eFilter.getMonitoringTaskId().equals(monitoringTaskId)){ + return eFilter; + } + } + return null; + } + private static void updateLocalizableObject(PositionEvent positionEvent) { LocalizableObject lObject = DataServices.getLObjectByIdOrNull(positionEvent.getLObjectId()); @@ -58,9 +69,9 @@ public class PositionMonitoring { lObject.setCurrentPlacing(positionEvent.getPlacing()); } - private MonitoringRequest createMonitoringRequest(String frameId, String monitoringTaskId) { + private MonitoringRequest createMonitoringRequest(List<String> frameIds, String monitoringTaskId) { MonitoringRequest monReq = modelFactory.createMonitoringRequest(); - monReq.setFrameId(frameId); + monReq.getFrameIds().addAll(frameIds); monReq.setMonitoringTaskId(monitoringTaskId); return monReq; } @@ -78,13 +89,23 @@ public class PositionMonitoring { LOG.info("Received MonitoringRequest <" + monReq + ">"); eventFilter filter = new eventFilter(monReq); EventFilterCondition config = modelFactory.createEventFilterCondition(); + config.setPositionConditionCells(new HashMap<>()); if (! readConfig.readFilterConfigFromMonitoringRequest(monReq, config)){ return; // monitoringRequest could not be read } filter.init(config); eventFilters.add(filter); - LOG.info("EventFilter was created: " + filter.toString() + "; monitoringTaskId: " + filter.getMonitoringTaskId() + "; zone-id:" + filter.getFilterConditionConfig().getPositionConditionCellId()); - // TODO (tracking): init tracking task + LOG.info("EventFilter was created: " + filter.toString() + "; monitoringTaskId: " + filter.getMonitoringTaskId() + "; zone-ids:" + filter.getFilterConditionConfig().getPositionConditionCells().keySet()); + + /* + * trackingTaskId equals MonitoringTaskId + '_tracking' (which equals the name + * of the topic used for fetching the stored positions) to be able to + * distinguish the monitoring-topic from the tracking-topic. Therefore, the + * data should be stored using the altered name. The DataQueryRequest will also + * contain the suffix, therefore, we change the suffix here automatically. + */ + String trackingTaskId = monReq.getMonitoringTaskId() + PositionMonitoring.TRACKING_SUFFIX; + DataServices.initTrackingTask(trackingTaskId); } private static boolean isDoor = false; @@ -93,47 +114,252 @@ public class PositionMonitoring { private static boolean firstMessage = true; + /** + * It is important to find out which zones should be actually reported to the requester + * (there may be other zones that overlap the ones that tha requester wanted to monitor or track) + * I think, we should make sure that using they key trackingTaskId only those positionEvents should be persisted + * that do actually have been accepted by the associated monitoringRequest (so, whose monitoringRequestId equals + * the trackingTaskId without "_tracking" at the end) + * @param dsQueryRequest + */ public static void receiveMessage(DataStorageQueryRequest dsQueryRequest){ - // monitoringRequest is not necessary, as the name of the response-topic equals trackingTaskId + 'tracking' - // TODO: monitoringRequestId is important to find out which zones should be actually reported to the requester - // (there may be other zones that overlap the ones that tha requester wanted to monitor or track) + if(! dsQueryRequest.getTrackingTaskId().endsWith(PositionMonitoring.TRACKING_SUFFIX)){ + LOG.warn("Can not handle QueryRequest due to unexpected trackingTaskId. " + + "TrackingTaskIds shall end with " + PositionMonitoring.TRACKING_SUFFIX); + return; + } + String trackingTaskId = dsQueryRequest.getTrackingTaskId(); List<PositionEvent> trackedEvents = DataServices.query(dsQueryRequest.getTrackingTaskId()); DataStorageQueryResponse dsQueryResponse = modelFactory.createDataStorageQueryResponse(); dsQueryResponse.getPositionEvents().addAll(trackedEvents); - SimpleSceneIntegration.receiveMessage(dsQueryResponse, dsQueryRequest.getTrackingTaskId()); + dsQueryResponse.setTrackingTaskId(trackingTaskId); + eventFilter eFilter = getEventFilterFromTrackingTaskId(trackingTaskId); + SimpleSceneIntegration.receiveMessage(dsQueryResponse, dsQueryRequest.getTrackingTaskId(), eFilter.getSerializationType()); + } + + private static eventFilter getEventFilterFromTrackingTaskId(String trackingTaskId) { + int lengthMonitoringTaskId = trackingTaskId.length() - PositionMonitoring.TRACKING_SUFFIX.length(); + String monitoringTaskId = trackingTaskId.substring(0, lengthMonitoringTaskId); + eventFilter eFilter = getEventFilterByIdOrNull(monitoringTaskId); + return eFilter; } // @JmsListener(destination = "/PositionEvent", containerFactory = "jmsListenFactory") public static void receiveMessage(PositionEvent posEvent) { // TODO: Update currentPlacing attribute of the affected localizableObject LOG.info("Received <" + posEvent + ">"); - logging_sdf(posEvent); + logging_sdfindfro(posEvent); boolean posEventMeetsSdfAccuracyCondition = SensorDataFusion.isMostAccuratePositionAvailable(posEvent); List<Tuple4<PositionEvent, String, String, String>> entryNotifications = new LinkedList<>(); + List<FilteringResult> filteringResults = new LinkedList<>(); + Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors = new HashMap<>(); for (eventFilter eFilter : eventFilters){ - // TODO (Tracking): inside this loop the zoneDescriptors of the PositionEvent have to be set - try { + try { if (eFilterMayHandlePosEvent(posEvent, posEventMeetsSdfAccuracyCondition, eFilter)){ - applyEfilterToPosEvent(posEvent, entryNotifications, eFilter); + filteringResults.add(applyEfilterToPosEvent(posEvent, entryNotifications, eFilter)); } } catch (ParseException e) { - sendEntryNotifications(entryNotifications); - e.printStackTrace(); + processFilteringResults(posEvent, filteringResults); + e.printStackTrace(); return; } } - sendEntryNotifications(entryNotifications); - // TODO (tracking): after all zoneDescriptors have been added to the positionEvent it has to be persisted using DataServices-class + processFilteringResults(posEvent, filteringResults); + LOG.info("INDFRO-DEBUG: zonePopulation after processing filtering results: " + zonePopulation.toString()); + } + + private static void processFilteringResults(PositionEvent posEvent, List<FilteringResult> filteringResults) { + Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors = translateResultsIntoZoneDescriptors(filteringResults);; + persistPositionEvent(posEvent, eFilterZoneDescriptors); + sendPositionEventToRequesters(posEvent, eFilterZoneDescriptors); + updateZoneAssociations(posEvent, eFilterZoneDescriptors); + } + + /** + * Assumption: The PositionEvent posEvent passed the eventFilter whose results are + * communicated by the zoneDescriptors. + * @param posEvent + * @param eFilterZoneDescriptors + */ + private static void sendPositionEventToRequesters(PositionEvent posEvent, Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors) { + Set<String> sentAlready = sendExitNotifications(posEvent, eFilterZoneDescriptors); + sendOtherMonitoringMessages(posEvent, eFilterZoneDescriptors, sentAlready); + } + + private static void sendOtherMonitoringMessages(PositionEvent posEvent, Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors, Set<String> sentAlready) { + // TODO: This code duplicates sendExitNotifications()-function + Set<String> toBeSent = eFilterZoneDescriptors.keySet().stream().collect(Collectors.toSet()); + toBeSent.removeAll(sentAlready); + for (String monitoringTaskId : toBeSent){ + List<ZoneDescriptor> zoneDescriptorsEFilterResult = eFilterZoneDescriptors.get(monitoringTaskId); + eventFilter eFilter = getEventFilterByIdOrNull(monitoringTaskId); + if (eFilter == null){ + LOG.warn("A monitoringTaskId was passed that is not associated to any known eventFilter"); + continue; + } + PositionEvent posEventCopy = createShallowCopyOfPosEvent(posEvent); + posEventCopy.getZonedescriptors().addAll(zoneDescriptorsEFilterResult); + SimpleSceneIntegration.receiveMessage(posEventCopy, monitoringTaskId, getFirstNotificationTypeOrUndefined(zoneDescriptorsEFilterResult), eFilter.getSerializationType()); + } + } + + private static Set<String> sendExitNotifications(PositionEvent posEvent, Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors) { + // TODO: This code duplicates sendOtherNotifications()-function + Set<String> sentAlready = new HashSet<>(); + for (String monitoringTaskId : eFilterZoneDescriptors.keySet()){ + List<ZoneDescriptor> zoneDescriptorsEFilterResult = eFilterZoneDescriptors.get(monitoringTaskId); + eventFilter eFilter = getEventFilterByIdOrNull(monitoringTaskId); + if (eFilter == null){ + LOG.warn("A monitoringTaskId was passed that is not associated to any known eventFilter"); + continue; + } + if( containsExitNotification(zoneDescriptorsEFilterResult)){ + PositionEvent posEventCopy = createShallowCopyOfPosEvent(posEvent); + posEventCopy.getZonedescriptors().addAll(zoneDescriptorsEFilterResult); + SimpleSceneIntegration.receiveMessage(posEventCopy, monitoringTaskId, getFirstNotificationTypeOrUndefined(zoneDescriptorsEFilterResult), eFilter.getSerializationType()); + sentAlready.add(monitoringTaskId); + } + } + return sentAlready; + } + + private static String getFirstNotificationTypeOrUndefined(List<ZoneDescriptor> zoneDescriptorsEFilterResult) { + String firstNotificationType = PositionMonitoring.UNDEFINED_TYPE; + if (zoneDescriptorsEFilterResult.size() > 0){ + firstNotificationType = zoneDescriptorsEFilterResult.get(0).getNotificationType(); + } + return firstNotificationType; + } + + private static boolean containsExitNotification(List<ZoneDescriptor> zoneDescriptorsEFilterResult) { + for (ZoneDescriptor zoneDescriptor : zoneDescriptorsEFilterResult){ + if (zoneDescriptor.getNotificationType().equals(PositionMonitoring.EXIT_NOTIFICATION_TYPE)){ + return true; + } + } + return false; + } + + private static void persistPositionEvent(PositionEvent posEvent, Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors) { + for (String monitoringTaskId : eFilterZoneDescriptors.keySet()){ + List<ZoneDescriptor> zoneDescriptorsEFilterResult = eFilterZoneDescriptors.get(monitoringTaskId); + PositionEvent posEventCopy = createShallowCopyOfPosEvent(posEvent); + posEventCopy.getZonedescriptors().addAll(zoneDescriptorsEFilterResult); + DataServices.persist(posEventCopy, monitoringTaskId + PositionMonitoring.TRACKING_SUFFIX); + } + } + + /** + * Creates a shallow copy of the posEvent + * @param posEvent + * @return + */ + private static PositionEvent createShallowCopyOfPosEvent(PositionEvent posEvent) { + PositionEvent posEventShallowCopy = modelFactory.createPositionEvent(); + posEventShallowCopy.setPlacing(posEvent.getPlacing()); + posEventShallowCopy.setTimeStamp(posEvent.getTimeStamp()); + posEventShallowCopy.setLObjectId(posEvent.getLObjectId()); + return posEventShallowCopy; + } + + private static void updateZoneAssociations(PositionEvent posEvent, Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors) { + String agentId = DataServices.getAgentForLocalizableObject(posEvent.getLObjectId()).getId(); + for (String monitoringTaskId : eFilterZoneDescriptors.keySet()){ + updateEfilterZoneAssociations(eFilterZoneDescriptors, agentId, monitoringTaskId); + } + + } + + private static void updateEfilterZoneAssociations(Map<String, List<ZoneDescriptor>> eFilterZoneDescriptors, String agentId, String monitoringTaskId) { + List<ZoneDescriptor> zoneDescriptorsEFilterResult = eFilterZoneDescriptors.get(monitoringTaskId); + for (ZoneDescriptor zoneDescriptor : zoneDescriptorsEFilterResult){ + if (zoneDescriptor.getNotificationType().equals(PositionMonitoring.ENTRY_NOTIFICATION_TYPE)){ + LOG.info("INDFRO-DEBUG: Associating agent " + agentId + " with zone " + zoneDescriptor.getZoneId()); + associateAgentWithZone(zoneDescriptor.getZoneId(), agentId); + } + if (zoneDescriptor.getNotificationType().equals(PositionMonitoring.EXIT_NOTIFICATION_TYPE)){ + LOG.info("INDFRO-DEBUG: Disassociating agent " + agentId + " from zone " + zoneDescriptor.getZoneId()); + disassociateAgentFromZone(zoneDescriptor.getZoneId(), agentId); + } + } } - private static void logging_sdf(PositionEvent posEvent) { + /** + * ZoneDescriptors are provided for filteringResults that originated in eventFilters + * that rejected the event only if those ZoneDescriptors communicate an ExitNotification. + * @param filteringResults + * @return + */ + private static Map<String, List<ZoneDescriptor>> translateResultsIntoZoneDescriptors(List<FilteringResult> filteringResults) { + Map<String, List<ZoneDescriptor>> eFilterzoneDescriptors = new HashMap<>(); + for (FilteringResult filteringResult : filteringResults){ + String monitoringTaskId = filteringResult.getMonitoringTaskId(); + List<ZoneDescriptor> zoneDescriptors = toZoneDescriptors(filteringResult); + if (!filteringResult.hasBlockedEvent()) { + eFilterzoneDescriptors.put(monitoringTaskId, zoneDescriptors); + }else{ + if (containsExitNotification(zoneDescriptors)){ + // send monitoring messages and persist even if the filter rejected the event, as it contains an ExitNotification for a monitored zone + eFilterzoneDescriptors.put(monitoringTaskId, zoneDescriptors); + } + } + } + return eFilterzoneDescriptors; + } + + private static List<ZoneDescriptor> toZoneDescriptors(FilteringResult filteringResult) { + List<ZoneDescriptor> zoneDescriptors = new LinkedList<>(); + zoneDescriptors.addAll(calcDescriptorsForMatchingZones(filteringResult)); + zoneDescriptors.addAll(calcDescriptorsForNonMatchingZones(filteringResult)); + return zoneDescriptors; + } + + private static List<ZoneDescriptor> calcDescriptorsForNonMatchingZones(FilteringResult filteringResult) { + List<ZoneDescriptor> zoneDescriptors = new LinkedList<>(); + for (String zoneId : filteringResult.getNonMatchingPositionConditionCellIds()){ + ZoneDescriptor zoneDescriptor = modelFactory.createZoneDescriptor(); + zoneDescriptor.setZoneId(zoneId); + if(isExitNotification(filteringResult, zoneId)){ + zoneDescriptor.setNotificationType(PositionMonitoring.EXIT_NOTIFICATION_TYPE); + zoneDescriptors.add(zoneDescriptor); + } + } + return zoneDescriptors; + } + + private static List<ZoneDescriptor> calcDescriptorsForMatchingZones(FilteringResult filteringResult) { + List<ZoneDescriptor> zoneDescriptors = new LinkedList<>(); + for (String zoneId : filteringResult.getMatchingPositionConditionCellIds()){ + ZoneDescriptor zoneDescriptor = modelFactory.createZoneDescriptor(); + zoneDescriptor.setZoneId(zoneId); + if(isEntryNotification(filteringResult, zoneId)) { + zoneDescriptor.setNotificationType(PositionMonitoring.ENTRY_NOTIFICATION_TYPE); + }else { + zoneDescriptor.setNotificationType(PositionMonitoring.UNDEFINED_TYPE); + } + zoneDescriptors.add(zoneDescriptor); + } + return zoneDescriptors; + } + + private static void logging_sdfindfro(PositionEvent posEvent) { LocalizableObject lObject = PositionMonitoring.getLObjectByIdOrNull(posEvent.getLObjectId()); + if (lObject == null){ + LOG.info("INDFRO: Warning, unknown sensorId was found. Can not log!"); + } String sensorType = lObject.getSensorType(); String timestamp = posEvent.getTimeStamp(); String sensorId = posEvent.getLObjectId(); String agentId = lObject.getAgent().getId(); - LOG.info("SDF: Received: sensorType: " + sensorType + " timestamp: " + timestamp + " sensorId: " + sensorId + "agentId: " + agentId); + LOG.info("SDF: Received: sensorType: " + sensorType + " timestamp: " + timestamp + " sensorId: " + sensorId + " agentId: " + agentId); + LOG.info("INDFRO:"); + LOG.info("INDFRO: Received: sensorType: " + sensorType + "; position: " + logPosition(posEvent) + "; timestamp: " + timestamp + "; sensorId: " + sensorId + "; agentId: " + agentId); + } + + private static String logPosition(PositionEvent posEvent) { + Point3D point = (Point3D) posEvent.getPlacing().getPosition().getPoint(); + return "(x: " + point.getX() + ", y: " + point.getY() + ", z: " + point.getZ() + ")"; } /** @@ -150,60 +376,65 @@ public class PositionMonitoring { return !sdfIsRelevant || (sdfIsRelevant && posEventMeetsSdfAccuracyCondition); } - private static void applyEfilterToPosEvent(PositionEvent posEvent, List<Tuple4<PositionEvent, String, String, String>> entryNotifications, eventFilter eFilter) throws ParseException { - boolean posEventMeetsFilterConditions = !eFilter.process(posEvent); - if(posEventMeetsFilterConditions){ + private static FilteringResult applyEfilterToPosEvent(PositionEvent posEvent, List<Tuple4<PositionEvent, String, String, String>> entryNotifications, eventFilter eFilter) throws ParseException { + FilteringResult filteringResult = eFilter.process(posEvent); + boolean posEventMeetsFilterConditions = !filteringResult.hasBlockedEvent(); + if(posEventMeetsFilterConditions) { LOG.info(eFilter.getMonitoringTaskId() + "-EventFilter accepted the position"); - if (isEntryNotification(posEvent, eFilter)) { + } + return filteringResult; + /* + posEvent = createAndAppendZoneDescriptors(posEvent, filteringResult); + + + if (allNotificationsAreEntryNotifications(posEvent)){ + // hier feststellen ob alle matchingZones EntryNotifications sind entryNotifications.add(Tuples.of(posEvent, eFilter.getMonitoringTaskId(), ENTRY_NOTIFICATION_TYPE, eFilter.getSerializationType())); // note: EntryNotifications are sent after that all ExitNotifications have been sent - associateAgentWithZone(eFilter.getFilterConditionConfig().getPositionConditionCellId(), posEvent.getLObjectId()); + // updateZoneAssociations(eFilter, posEvent); }else { SimpleSceneIntegration.receiveMessage(posEvent, eFilter.getMonitoringTaskId(), UNDEFINED_TYPE, eFilter.getSerializationType()); } - }else if (isExitNotification(posEvent, eFilter)){ + } + return filteringResult; + + else if (isExitNotification(posEvent, eFilter)){ disassociateAgentFromZone(eFilter.getFilterConditionConfig().getPositionConditionCellId(), posEvent.getLObjectId()); SimpleSceneIntegration.receiveMessage(posEvent, eFilter.getMonitoringTaskId(), EXIT_NOTIFICATION_TYPE, eFilter.getSerializationType()); // note: ExitNotifications are sent immediately + */ } + + private static void updateZoneAssociation(String zoneId, PositionEvent posEvent) { + String agentId = DataServices.getAgentForLocalizableObject(posEvent.getLObjectId()).getId(); + associateAgentWithZone(zoneId, agentId); } /** - * assumption: An object has been found to be located outside of a zone. - * This function determines whether it just exited from that zone - * Function has a side-effect: agentIds are removed from the map zonePopulation - * @param posEvent - * @param eFilter + * assumption: An object has been found to be located outside of a zone whose id is zoneId. + * This function determines whether it just exited from that zone. + * @param filteringResult + * @param zoneId * @return */ - private static boolean isExitNotification(PositionEvent posEvent, eventFilter eFilter) { - String zoneId = eFilter.getFilterConditionConfig().getPositionConditionCellId(); + private static boolean isExitNotification(FilteringResult filteringResult, String zoneId) { + PositionEvent posEvent = filteringResult.getPosEvent(); String agentId = DataServices.getAgentForLocalizableObject(posEvent.getLObjectId()).getId(); if(null == zoneId) return false; - if (isLocatedInsideZone(zoneId, agentId)){ - disassociateAgentFromZone(zoneId, agentId); - return true; - }else{ - return false; - } + return isLocatedInsideZone(zoneId, agentId); } /** - * Assumption: posEvent contains a position which is located within the zone associated to eFilter. - * Function has a side-effect: agentIds are added to the map zonePopulation - * @param posEvent - * @param eFilter + * Assumption: zoneId is the id of a zone that the position (contained in filteringResult) + * is actually located in. + * @param filteringResult + * @param zoneId * @return */ - private static boolean isEntryNotification(PositionEvent posEvent, eventFilter eFilter) { - String zoneId = eFilter.getFilterConditionConfig().getPositionConditionCellId(); + private static boolean isEntryNotification(FilteringResult filteringResult, String zoneId) { + PositionEvent posEvent = filteringResult.getPosEvent(); String agentId = DataServices.getAgentForLocalizableObject(posEvent.getLObjectId()).getId(); LOG.info("zoneId: " + zoneId + "; agentId: " + agentId); if(null == zoneId) return false; - if (isLocatedInsideZone(zoneId, agentId)){ - return false; - }else{ - associateAgentWithZone(zoneId, agentId); - return true; - } + return !isLocatedInsideZone(zoneId, agentId); // if the agent was not inside this zone before, it has just entered the zone } private static boolean isLocatedInsideZone(String zoneId, String agentId) { @@ -216,7 +447,9 @@ public class PositionMonitoring { private static void associateAgentWithZone(String zoneId, String agentId) { if(zonePopulation.keySet().contains(zoneId)){ - zonePopulation.get(zoneId).add(agentId); + if (! zonePopulation.get(zoneId).contains(agentId)){ + zonePopulation.get(zoneId).add(agentId); + } }else{ zonePopulation.put(zoneId, new LinkedList<String>(Arrays.asList(agentId))); } @@ -224,17 +457,10 @@ public class PositionMonitoring { private static void disassociateAgentFromZone(String zoneId, String agentId) { if(zonePopulation.keySet().contains(zoneId)){ - if (!zonePopulation.get(zoneId).remove(agentId)){ - LOG.warn("AgentId cannot be removed as it is currently not associated with the given zone"); - } + while(zonePopulation.get(zoneId).remove(agentId)); // remove all occurences }else{ LOG.warn("AgentId cannot be removed as there are currently no AgentIds associated to the zone"); } } - - private static void sendEntryNotifications(List<Tuple4<PositionEvent, String, String, String>> entryNotifications) { - for (Tuple4<PositionEvent, String, String, String> entryNotification : entryNotifications){ - SimpleSceneIntegration.receiveMessage(entryNotification.getT1(), entryNotification.getT2(), entryNotification.getT3(), entryNotification.getT4()); - } - } } + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 9ba769a5384634476b7347bf8435dde1d52d34d5..517faebecf521f3821ba39de797a502cf99020f2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,8 +12,8 @@ mqtt: setKeepAliveInterval: 10 connectionTimeout: 20 clientId: ipos.project.fw - hostname: 192.168.0.111 - # hostname: broker.hivemq.com + # hostname: 192.168.0.111 + hostname: broker.hivemq.com port: 1883 spring: diff --git a/testdata_raw.txt b/testdata_raw_empty.txt similarity index 100% rename from testdata_raw.txt rename to testdata_raw_empty.txt diff --git a/testdata_raw_indfro.txt b/testdata_raw_indfro.txt new file mode 100644 index 0000000000000000000000000000000000000000..73712114be453211a0c860e9f76d332bd4f9853f --- /dev/null +++ b/testdata_raw_indfro.txt @@ -0,0 +1,6 @@ +{"sensorPositionEvent": [{"sensorId": "UWB_1", "position": {"refSystemId": "ROOT", "point": {"x": 3.0,"y": 1.5,"z": 3.0}, "accuracy": 1.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "lastPosUpdate": "2021-10-14T19:32:20+00:00"}]} +{"sensorPositionEvent": [{"sensorId": "UWB_1", "position": {"refSystemId": "ROOT", "point": {"x": 3.0,"y": 4.5,"z": 3.0}, "accuracy": 1.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "lastPosUpdate": "2021-10-14T19:32:21+00:00"}]} +{"sensorPositionEvent": [{"sensorId": "UWB_1", "position": {"refSystemId": "ROOT", "point": {"x": -3.0,"y": 4.5,"z": 3.0}, "accuracy": 1.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "lastPosUpdate": "2021-10-14T19:32:22+00:00"}]} +{"sensorPositionEvent": [{"sensorId": "UWB_1", "position": {"refSystemId": "ROOT", "point": {"x": 3.0,"y": 1.5,"z": 3.0}, "accuracy": 1.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "lastPosUpdate": "2021-10-14T19:32:23+00:00"}]} +{"nfcRawDataEvent" : [ {"timestamp" : "2021-10-14T19:33:24+00:00", "tagId": "83221710", "type": "RFID", "scannerId": "98:CD:AC:26:2D:18"} ] } +{"sensorPositionEvent": [{"sensorId": "UWB_1", "position": {"refSystemId": "ROOT", "point": {"x": 3.0,"y": 1.5,"z": 3.0}, "accuracy": 1.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "lastPosUpdate": "2021-10-14T19:34:25+00:00"}]} \ No newline at end of file diff --git a/testdata_raw_query.txt b/testdata_raw_query.txt new file mode 100644 index 0000000000000000000000000000000000000000..bd86a5a94b1b1b1ff0d7bc5e00a371ecc380ade2 --- /dev/null +++ b/testdata_raw_query.txt @@ -0,0 +1 @@ +{"queryRequests":[{"trackingTaskId": "RobolabMonitoringCeti_tracking"}, {"trackingTaskId": "RobolabMonitoringFrontend_tracking"}]} \ No newline at end of file diff --git a/testdata_raw_full.txt b/testdata_raw_sdf.txt similarity index 100% rename from testdata_raw_full.txt rename to testdata_raw_sdf.txt