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