From 6e5d5705b55f6045333068ce943c1bed53f16805 Mon Sep 17 00:00:00 2001
From: Frank Rohde <frank.rohde@tu-dresden.de>
Date: Thu, 23 Sep 2021 11:29:06 +0200
Subject: [PATCH] aktuellen Arbeitsstand hochgeladen (noch unfertig)

---
 emf_datamodel/model/iPos_Datamodel.aird       | 18 ++++++--
 emf_datamodel/model/iPos_Datamodel.ecore      |  1 +
 emf_datamodel/model/iPos_Datamodel.genmodel   |  1 +
 .../api/MqttRequestHandler.java               |  2 +-
 .../iPos_Datamodel/IPos_DatamodelPackage.java | 28 +++++++++++++
 .../iPos_Datamodel/PositionEvent.java         | 22 ++++++++++
 .../impl/IPos_DatamodelPackageImpl.java       |  9 ++++
 .../impl/PositionEventImpl.java               | 42 +++++++++++++++++++
 .../eventfilter/TestEventFilter.java          |  6 +--
 .../eventfilter/eventFilter.java              | 32 ++++++++------
 .../Functionality/eventfilter/readConfig.java | 38 ++++++++++++++++-
 src/main/java/ipos/project/MainApp.java       |  3 +-
 .../UseCaseController/PositionMonitoring.java | 35 +++++++++++++++-
 13 files changed, 214 insertions(+), 23 deletions(-)

diff --git a/emf_datamodel/model/iPos_Datamodel.aird b/emf_datamodel/model/iPos_Datamodel.aird
index 9ad5df1..03cccc2 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="6e23d65f-26dc-4643-838c-468a34fb58eb">
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_Et4wgAQNEey-kNQ7esRa_g" name="iPos_Datamodel" repPath="#_Es-xkAQNEey-kNQ7esRa_g" changeId="4f4a5b30-f4e8-4575-905e-d40e474ab771">
         <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>
@@ -383,6 +383,10 @@
               <styles xmi:type="notation:FontStyle" xmi:id="_UpH4wRFAEeydeasO1RaQEg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
               <layoutConstraint xmi:type="notation:Location" xmi:id="_UpIf0BFAEeydeasO1RaQEg"/>
             </children>
+            <children xmi:type="notation:Node" xmi:id="_ooLRABvcEeyPOIo-WqURQQ" type="3010" element="_onxBUBvcEeyPOIo-WqURQQ">
+              <styles xmi:type="notation:FontStyle" xmi:id="_ooLRARvcEeyPOIo-WqURQQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_ooLRAhvcEeyPOIo-WqURQQ"/>
+            </children>
             <styles xmi:type="notation:SortingStyle" xmi:id="_lCOfwQZsEey-kNQ7esRa_g"/>
             <styles xmi:type="notation:FilteringStyle" xmi:id="_lCOfwgZsEey-kNQ7esRa_g"/>
           </children>
@@ -454,7 +458,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_vpk49gZsEey-kNQ7esRa_g"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_vpk48QZsEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vpk48gZsEey-kNQ7esRa_g" x="2478" y="120" width="138" height="195"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vpk48gZsEey-kNQ7esRa_g" x="2487" y="54" width="138" height="195"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_yn7gcAZsEey-kNQ7esRa_g" type="2003" element="_yny9kAZsEey-kNQ7esRa_g">
           <children xmi:type="notation:Node" xmi:id="_yn7gcwZsEey-kNQ7esRa_g" type="5007"/>
@@ -2246,7 +2250,7 @@
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
       <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
       <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
-      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_crga1RFAEeydeasO1RaQEg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_qwXFihvcEeyPOIo-WqURQQ" 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']"/>
@@ -2258,6 +2262,14 @@
         </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="_onxBUBvcEeyPOIo-WqURQQ" name="sensorId : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//PositionEvent/sensorId"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//PositionEvent/sensorId"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_qwZhwRvcEeyPOIo-WqURQQ" 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:DNodeList" uid="_ovifAAZsEey-kNQ7esRa_g" name="RawdataEvent" tooltipText="" outgoingEdges="_T72oPgaBEey-kNQ7esRa_g" width="12" height="10">
       <target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//RawdataEvent"/>
diff --git a/emf_datamodel/model/iPos_Datamodel.ecore b/emf_datamodel/model/iPos_Datamodel.ecore
index 14dfc6d..fcaf687 100644
--- a/emf_datamodel/model/iPos_Datamodel.ecore
+++ b/emf_datamodel/model/iPos_Datamodel.ecore
@@ -119,6 +119,7 @@
         eType="#//Placing"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="timeStamp" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"
         transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sensorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="RawdataEvent">
     <eStructuralFeatures xsi:type="ecore:EReference" name="rawdata" lowerBound="1"
diff --git a/emf_datamodel/model/iPos_Datamodel.genmodel b/emf_datamodel/model/iPos_Datamodel.genmodel
index e3f67ec..fc72004 100644
--- a/emf_datamodel/model/iPos_Datamodel.genmodel
+++ b/emf_datamodel/model/iPos_Datamodel.genmodel
@@ -110,6 +110,7 @@
     <genClasses ecoreClass="iPos_Datamodel.ecore#//PositionEvent">
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//PositionEvent/placing"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//PositionEvent/timeStamp"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//PositionEvent/sensorId"/>
     </genClasses>
     <genClasses ecoreClass="iPos_Datamodel.ecore#//RawdataEvent">
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//RawdataEvent/rawdata"/>
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 50ea702..0b45117 100644
--- a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/api/MqttRequestHandler.java
+++ b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/api/MqttRequestHandler.java
@@ -34,7 +34,7 @@ public class MqttRequestHandler implements Handler {
             MonitoringRequest monReqInternal = SimpleSceneTransformer.monReq_SScene2Internal(monReqProto);
             // TODO: send request via JMS to MonitoringController
 
-            this.jmsTemplate.convertAndSend("/request123", monReqProto); // submit request to the internal broker
+            this.jmsTemplate.convertAndSend("/request123", monReqInternal); // submit request to the internal broker
         } catch (InvalidProtocolBufferException e) {
             e.printStackTrace();
         }
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 b712185..6c020a7 100644
--- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/IPos_DatamodelPackage.java
+++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/IPos_DatamodelPackage.java
@@ -1345,6 +1345,15 @@ public interface IPos_DatamodelPackage extends EPackage {
 	 */
 	int POSITION_EVENT__TIME_STAMP = 1;
 
+	/**
+	 * The feature id for the '<em><b>Sensor Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POSITION_EVENT__SENSOR_ID = 2;
+
 	/**
 	 * The number of structural features of the '<em>Position Event</em>' class.
 	 * <!-- begin-user-doc -->
@@ -3253,6 +3262,17 @@ public interface IPos_DatamodelPackage extends EPackage {
 	 */
 	EAttribute getPositionEvent_TimeStamp();
 
+	/**
+	 * Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getSensorId <em>Sensor Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sensor Id</em>'.
+	 * @see ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getSensorId()
+	 * @see #getPositionEvent()
+	 * @generated
+	 */
+	EAttribute getPositionEvent_SensorId();
+
 	/**
 	 * Returns the meta object for class '{@link ipos.project.DataModellntegration.iPos_Datamodel.RawdataEvent <em>Rawdata Event</em>}'.
 	 * <!-- begin-user-doc -->
@@ -4588,6 +4608,14 @@ public interface IPos_DatamodelPackage extends EPackage {
 		 */
 		EAttribute POSITION_EVENT__TIME_STAMP = eINSTANCE.getPositionEvent_TimeStamp();
 
+		/**
+		 * The meta object literal for the '<em><b>Sensor Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute POSITION_EVENT__SENSOR_ID = eINSTANCE.getPositionEvent_SensorId();
+
 		/**
 		 * The meta object literal for the '{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.RawdataEventImpl <em>Rawdata Event</em>}' class.
 		 * <!-- begin-user-doc -->
diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java
index d1179c4..2bc5b47 100644
--- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java
+++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/PositionEvent.java
@@ -66,4 +66,26 @@ public interface PositionEvent extends EObject {
 	 */
 	void setTimeStamp(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Sensor Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sensor Id</em>' attribute.
+	 * @see #setSensorId(String)
+	 * @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getPositionEvent_SensorId()
+	 * @model
+	 * @generated
+	 */
+	String getSensorId();
+
+	/**
+	 * Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getSensorId <em>Sensor Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sensor Id</em>' attribute.
+	 * @see #getSensorId()
+	 * @generated
+	 */
+	void setSensorId(String value);
+
 } // PositionEvent
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 42ba7db..3b18849 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
@@ -1174,6 +1174,15 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data
 		return (EAttribute) positionEventEClass.getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPositionEvent_SensorId() {
+		return (EAttribute) positionEventEClass.getEStructuralFeatures().get(2);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java
index bee60d5..e4bd30b 100644
--- a/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java
+++ b/src/main/java/ipos/project/DataModellntegration/iPos_Datamodel/impl/PositionEventImpl.java
@@ -59,6 +59,26 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P
 	 */
 	protected String timeStamp = TIME_STAMP_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getSensorId() <em>Sensor Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSensorId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SENSOR_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSensorId() <em>Sensor Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSensorId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String sensorId = SENSOR_ID_EDEFAULT;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -140,6 +160,28 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P
 					oldTimeStamp, timeStamp));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSensorId() {
+		return sensorId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSensorId(String newSensorId) {
+		String oldSensorId = sensorId;
+		sensorId = newSensorId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IPos_DatamodelPackage.POSITION_EVENT__SENSOR_ID,
+					oldSensorId, sensorId));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/src/main/java/ipos/project/Functionality/eventfilter/TestEventFilter.java b/src/main/java/ipos/project/Functionality/eventfilter/TestEventFilter.java
index dbe5fcf..050002b 100644
--- a/src/main/java/ipos/project/Functionality/eventfilter/TestEventFilter.java
+++ b/src/main/java/ipos/project/Functionality/eventfilter/TestEventFilter.java
@@ -49,9 +49,9 @@ public class TestEventFilter {
         events.put(tagNames.tagY,"2.456");
         events.put(tagNames.tagZ, "1");
         events.put(tagNames.tagAccuracy,"0.15"); */
-        testPoint3D.setX((float) 1.34);
-        testPoint3D.setY((float) 2.456);
-        testPoint3D.setZ((float) 1);
+        testPoint3D.setX((float) 3.34);
+        testPoint3D.setY((float) 2.656);
+        testPoint3D.setZ((float) 2);
         testPosition.setPoint(testPoint3D);
         testPlacing.setPosition(testPosition);
         testLObject.setId("AGV001");
diff --git a/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java b/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java
index 05b3589..f75f81c 100644
--- a/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java
+++ b/src/main/java/ipos/project/Functionality/eventfilter/eventFilter.java
@@ -5,6 +5,7 @@ import ipos.project.Functionality.eventfilter.Cell.Vector3;
 import ipos.project.DataModellntegration.iPos_Datamodel.*;
 
 import java.sql.Timestamp;
+import java.lang.Math;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -70,10 +71,13 @@ public class eventFilter {
         return (float) Math.hypot(Math.hypot(dx, dy), dz);
     }
 
-    private static boolean is_in_cell(Vector3 cod, Vector3 ref, Vector3 size, Quaternion rot){
-        cod.sub(ref);
-        rot.toMatrix();
-        return true;
+    private static boolean is_in_cell(Point3D cod, Float[] ref, Float[] size, Float[] rot){
+        if ((Math.abs(cod.getX()-ref[0])<= size[0]/2) && (Math.abs(cod.getY()-ref[1])<= size[1]/2) && (Math.abs(cod.getZ()-ref[2])<= size[2]/2)) {
+            return true;
+        }
+        else {
+            return false;
+        }
     }
 
     public boolean process(PositionEvent event) throws ParseException {
@@ -216,19 +220,21 @@ public class eventFilter {
         System.out.println("Filter status (position_delta) " + ": " + flag);
 
         //filter positionCondition_cell condition
-        /*if (filterStructure[8] && !flag) {
+        if (filterStructure[8] && !flag) {
             flag = true; //switch the filter status to block, if the event meet the filter condition, switch to pass
-            Vector3 cod = new Vector3(Double.parseDouble(event.getPositionInfo().getPosition().getCoordinate().getX()),Double.parseDouble(event.getPositionInfo().getPosition().getCoordinate().getY()),Double.parseDouble(event.getPositionInfo().getPosition().getCoordinate().getZ()));
-            for (int i = 0; i < positionCondition_cell.size(); i++) {
-                Vector3 ref = new Vector3(positionCondition_cell.get(i)[0][0], positionCondition_cell.get(i)[0][1], positionCondition_cell.get(i)[0][2]);
-                Vector3 size = new Vector3(positionCondition_cell.get(i)[1][0], positionCondition_cell.get(i)[1][1], positionCondition_cell.get(i)[1][2]);
-                Quaternion rot = new Quaternion(positionCondition_cell.get(i)[2][0], positionCondition_cell.get(i)[2][1], positionCondition_cell.get(i)[2][2], positionCondition_cell.get(i)[2][3]);
-                if (is_in_cell(cod, ref, size, rot)) {
-                    flag = false;
+            if (event.getPlacing().getPosition() instanceof RelativePosition) {
+                RelativePosition rPosition = (RelativePosition) event.getPlacing().getPosition();
+                for (int i = 0; i < positionConditionCell.size(); i++) {
+                    if (rPosition.getPoint() instanceof Point3D) {
+                        Point3D cod = (Point3D) rPosition.getPoint();
+                        if (is_in_cell(cod, positionConditionCell.get(i)[0], positionConditionCell.get(i)[1], positionConditionCell.get(i)[2])) {
+                            flag = false;
+                        }
+                    }
                 }
             }
         }
-        System.out.println("Filter status (positionCondition_cell) " + ": " + flag);*/
+        System.out.println("Filter status (positionCondition_cell) " + ": " + flag);
 
 
         if (!flag) {
diff --git a/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java b/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java
index b32f9de..a0282d4 100644
--- a/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java
+++ b/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java
@@ -1,14 +1,49 @@
 package ipos.project.Functionality.eventfilter;
 import ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition;
+import ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest;
+import ipos.project.DataModellntegration.iPos_Datamodel.WorldModel;
+import ipos.project.DataModellntegration.iPos_Datamodel.Zone;
 import org.json.JSONArray;
 import org.json.JSONObject;
 
+import javax.xml.stream.EventFilter;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
 public class readConfig {
+
+    // kommt später raus, Zugriff auf Weltmodell erfolgt eigentlich über Komponente DataRetrieval
+    private static WorldModel wm;
+
+    public static void readFilterConfigFromMonitoringRequest (MonitoringRequest monReq, EventFilterCondition config){
+        // wichtig bis Freitag: Kriterien "position_delta" und "position_condition_cell" aus config-file
+        float delta_monReq = monReq.getDelta();
+        String frameId_monReq = monReq.getFrameId();
+        Zone zone_monReq = retrieveZone(frameId_monReq);
+        config.setFilterStructure(new boolean[] {false, false, false, false, false, false, false, true, true});
+        config.setPositionDelta(delta_monReq);
+        ArrayList<Float[][]> position_condition_cell = new ArrayList<>();
+        Float[][] cell_c = new Float[3][4];
+        // erste Dimension wählt aus: Position, Space, Quaternion
+        // zweite Dimension wählt aus: x,y,z,w
+    }
+
+    private static Zone retrieveZone(String zoneId){
+        List<Zone> knownZones = wm.getZoneMap().get(0).getZone();
+        for (var zone : knownZones){
+            if(zone.getId().equals(zoneId)){
+                return zone;
+            }
+        }
+        return null;
+    }
+
+    public static void setWM(WorldModel worldModel){
+        wm = worldModel;
+    }
+
     public static void readFilterConfigFromJson (String json_file, EventFilterCondition config) throws Exception {
 
         //Time condition: One time condition consist of two timestamp in format "yyyy-MM-dd HH:mm:ss.SSS", if the timestamp of the position event falls in between, the event passes.
@@ -261,8 +296,9 @@ public class readConfig {
         System.out.println("\tsensor_id_condition          : " + config.getSensorIdCondition());
         System.out.println("\tid_condition                 : " + config.getIdCondition());
         System.out.println("\taccuracy_condition           : " + config.getAccuracyCondition());
-        System.out.println("\tposition_condition           : " + config.getPositionCondition().get(0)[0] + ", " + config.getPositionCondition().get(0)[1] + ", " + config.getPositionCondition().get(0)[2] + ", " + config.getPositionCondition().get(0)[3]);
+        //System.out.println("\tposition_condition           : " + config.getPositionCondition().get(0)[0] + ", " + config.getPositionCondition().get(0)[1] + ", " + config.getPositionCondition().get(0)[2] + ", " + config.getPositionCondition().get(0)[3]);
         System.out.println("\ttime_min_interval            : " + config.getTimeMinInterval());
         System.out.println("\tposition_delta               : " + config.getPositionDelta());
+        System.out.println("\tfilter_structure             : " + config.getFilterStructure());
     }
 }
diff --git a/src/main/java/ipos/project/MainApp.java b/src/main/java/ipos/project/MainApp.java
index 2e431c6..62704a8 100644
--- a/src/main/java/ipos/project/MainApp.java
+++ b/src/main/java/ipos/project/MainApp.java
@@ -10,7 +10,8 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import java.text.ParseException;
 
 @SpringBootApplication
-@EnableJpaRepositories("ipos.project.models.SimpleScene.*")
+// @EnableJpaRepositories("ipos.project.models.SimpleScene.*")
+@EnableJpaRepositories("ipos.project.DataModellntegration.iPos_Datamodel.impl")
 public class MainApp {
 	public static void main(String[] args) throws ParseException {
 		TestEventFilter.test();
diff --git a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java
index 72b54eb..35286a6 100644
--- a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java
+++ b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java
@@ -1,6 +1,8 @@
 package ipos.project.UseCaseController;
 
 import ipos.project.DataModellntegration.iPos_Datamodel.*;
+import ipos.project.Functionality.eventfilter.eventFilter;
+import ipos.project.Functionality.eventfilter.readConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.jms.annotation.JmsListener;
@@ -8,6 +10,8 @@ import org.springframework.stereotype.Component;
 import ipos.models.SimpleScene.IposPosition;
 
 import java.lang.ref.Reference;
+import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -17,7 +21,8 @@ import java.util.Map;
 public class PositionMonitoring {
     private final Logger LOG = LoggerFactory.getLogger(getClass());
 
-    WorldModel wm;
+    public WorldModel wm;
+    List<eventFilter> eventFilters = new ArrayList<eventFilter>();
     private IPos_DatamodelFactory modelFactory = IPos_DatamodelFactory.eINSTANCE;
 
     public void initialize(){
@@ -120,4 +125,32 @@ public class PositionMonitoring {
     public void receiveMessage(IposPosition pos) {
         LOG.info("Received <" + pos + ">");
     }
+
+    @JmsListener(destination = "/monitoringRequest", containerFactory = "jmsListenFactory")
+    public void receiveMessage(MonitoringRequest monReq) {
+        LOG.info("Received <" + monReq + ">");
+        eventFilter filter = new eventFilter();
+        EventFilterCondition config = modelFactory.createEventFilterCondition();
+        readConfig.setWM(wm);
+        readConfig.readFilterConfigFromMonitoringRequest(monReq, config);
+        filter.init(config);
+        eventFilters.add(filter);
+
+        // SimpleSceneIntegration muss MQTT-topic gemäß monreq.MonitoringTaskId einrichten
+    }
+
+    @JmsListener(destination = "/PositionEvent", containerFactory = "jmsListenFactory")
+    public void receiveMessage(PositionEvent posEvent) {
+        LOG.info("Received <" + posEvent + ">");
+        for (eventFilter eFilter : eventFilters){
+            try {
+                if(eFilter.process(posEvent)){
+                    // mqtt-topic (=monitoringTaskId) beschaffen
+                    // posEvent mit mqtt-topic an SimpleSceneIntegration-Komponente zum Aussenden weiterleiten
+                }
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }
-- 
GitLab