Skip to content
Snippets Groups Projects
Commit 9e0a30b0 authored by FrankR's avatar FrankR
Browse files

- (untested) implemented reception and transformation of SimpleScene-Configuration messages

parent c4bb6768
No related branches found
Tags
No related merge requests found
package ipos.project.DataModellntegration.SimpleSceneIntegration.api; package ipos.project.DataModellntegration.SimpleSceneIntegration.api;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import ipos.models.GenericSensor;
import ipos.models.SimpleScene; import ipos.models.SimpleScene;
import ipos.models.SimpleScene.IposMonitoringRequest; import ipos.models.SimpleScene.IposMonitoringRequest;
import ipos.project.DataModellntegration.SimpleSceneIntegration.SimpleSceneIntegration;
import ipos.project.DataModellntegration.SimpleSceneIntegration.service.SimpleSceneTransformer; import ipos.project.DataModellntegration.SimpleSceneIntegration.service.SimpleSceneTransformer;
import ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest; import ipos.project.DataModellntegration.iPos_Datamodel.*;
import ipos.project.UseCaseController.Administration;
import ipos.project.UseCaseController.PositionMonitoring; import ipos.project.UseCaseController.PositionMonitoring;
import ipos.project.config.mqtt.Handler; import ipos.project.config.mqtt.Handler;
import ipos.project.config.mqtt.MqttListener; import ipos.project.config.mqtt.MqttListener;
import ipos.project.mapper.ProtoJsonMap; import ipos.project.mapper.ProtoJsonMap;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.JmsTemplate;
import java.util.List;
// subscribe to the topic. It's example // subscribe to the topic. It's example
@MqttListener("usertopic/IposConfigWrapper") @MqttListener("usertopic/IposConfigWrapper")
...@@ -34,19 +33,70 @@ public class MqttRequestHandler implements Handler { ...@@ -34,19 +33,70 @@ public class MqttRequestHandler implements Handler {
// method that handle new message from the topic // method that handle new message from the topic
public void handle(MqttMessage message) { public void handle(MqttMessage message) {
try { try {
// TODO: Zwischen JSON und Protobuf unterscheiden können
SimpleScene.IposConfigWrapper iposConfigWrapper = ProtoJsonMap.fromJson(message.toString(), SimpleScene.IposConfigWrapper.class); SimpleScene.IposConfigWrapper iposConfigWrapper = ProtoJsonMap.fromJson(message.toString(), SimpleScene.IposConfigWrapper.class);
// IposMonitoringRequest monReqProto = IposMonitoringRequest.parseFrom(message.getPayload()); // IposMonitoringRequest monReqProto = IposMonitoringRequest.parseFrom(message.getPayload());
LOG.info("IposConfigWrapper received: \n" LOG.info("IposConfigWrapper received: \n"
+ iposConfigWrapper.toString()); + iposConfigWrapper.toString());
for (IposMonitoringRequest monReq : iposConfigWrapper.getMonitoringRequestsList()){ // Annahme: iposConfigWrapper enthält für leere Felder leere Listen und nicht null
MonitoringRequest monReqInternal = SimpleSceneTransformer.monReq_SScene2Internal(monReq); processMonitoringRequests(iposConfigWrapper);
PositionMonitoring.receiveMessage(monReqInternal); processRefSystems(iposConfigWrapper.getRefSystemsList());
// TODO: send request via JMS to MonitoringController 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());
// this.jmsTemplate.convertAndSend("/request123", monReqInternal); // submit request to the internal broker // this.jmsTemplate.convertAndSend("/request123", monReqInternal); // submit request to the internal broker
} catch (InvalidProtocolBufferException e) { } catch (InvalidProtocolBufferException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
/*
private SimpleScene.IposConfigWrapper replaceNullByEmptyList(SimpleScene.IposConfigWrapper configWrapper) {
SimpleScene.IposConfigWrapper.Builder configWrapper_NoNull = SimpleScene.IposConfigWrapper.newBuilder();
configWrapper_NoNull.add;
}
*/
private void processPois(List<SimpleScene.POI> poisList) {
for (SimpleScene.POI poi : poisList){
POI poi_internal = SimpleSceneTransformer.poi_SScene2Internal(poi);
Administration.handlePoi(poi_internal);
}
}
private void processRefSystems(List<SimpleScene.RefSystem> refSystemsList) {
for (SimpleScene.RefSystem refSystem : refSystemsList){
ReferenceSystem refSystem_internal = SimpleSceneTransformer.refSystem_SScene2Internal(refSystem);
Administration.handleRefSystem(refSystem_internal);
}
}
private void processObjectConfigs(List<SimpleScene.IposObjectConfig> objectConfigsList) {
for( SimpleScene.IposObjectConfig objConfig : objectConfigsList){
Agent agent = SimpleSceneTransformer.agent_SScene2Internal(objConfig);
Administration.handleAgent(agent);
}
}
private void processFrameConfigs(List<SimpleScene.IposFrameConfig> frames){
/*
if (null == frames){
LOG.info("ConfigWrapper-message contains no Frame-definitions");
return;
}
*/
for( SimpleScene.IposFrameConfig frame : frames){
Zone zone = SimpleSceneTransformer.zone_SScene2Internal(frame);
Administration.handleZone(zone);
}
}
private void processMonitoringRequests(SimpleScene.IposConfigWrapper iposConfigWrapper) {
for (IposMonitoringRequest monReq : iposConfigWrapper.getMonitoringRequestsList()){
MonitoringRequest monReqInternal = SimpleSceneTransformer.monReq_SScene2Internal(monReq);
PositionMonitoring.receiveMessage(monReqInternal);
// TODO: send request via JMS to MonitoringController
}
}
} }
...@@ -92,4 +92,99 @@ public class SimpleSceneTransformer { ...@@ -92,4 +92,99 @@ public class SimpleSceneTransformer {
protoPoint3D.setX(internalPoint3D.getX()).setY(internalPoint3D.getY()).setZ(internalPoint3D.getZ()); protoPoint3D.setX(internalPoint3D.getX()).setY(internalPoint3D.getY()).setZ(internalPoint3D.getZ());
return protoPoint3D; return protoPoint3D;
} }
public static Zone zone_SScene2Internal(SimpleScene.IposFrameConfig frame) {
Zone zone = modelFactory.createZone();
zone.setId(frame.getId());
zone.setName(frame.getId());
for (SimpleScene.IposSpace space_proto : frame.getSpaceList()){
Space space = space_SScene2Internal(space_proto);
zone.getSpace().add(space);
}
return zone;
}
private static Space space_SScene2Internal(SimpleScene.IposSpace space_proto) {
Space space = modelFactory.createSpace();
space.setX(space_proto.getX());
space.setY(space_proto.getY());
space.setZ(space_proto.getZ());
space.setCentrePoint(placing_SScene2Internal(space_proto.getPosition(),space_proto.getOrientation()));
return space;
}
private static Placing placing_SScene2Internal(SimpleScene.IposPosition position, SimpleScene.IposSimpleOrientation orientation) {
Placing placing = modelFactory.createPlacing();
placing.setPosition(position_SScene2Internal(position));
placing.setOrientation(orientation_SScene2Internal(orientation));
return placing;
}
private static Orientation orientation_SScene2Internal(SimpleScene.IposSimpleOrientation orientation_proto) {
Quaternion orientation = (Quaternion) modelFactory.createOrientation();
orientation.setX(orientation_proto.getX());
orientation.setY(orientation_proto.getY());
orientation.setZ(orientation_proto.getZ());
orientation.setW(orientation_proto.getW());
return orientation;
}
private static Position position_SScene2Internal(SimpleScene.IposPosition position_proto) {
Position position = modelFactory.createPosition();
position.setReferenceSystem(PositionMonitoring.getReferenceSystemByIdOrNull(position_proto.getRefSystemId()));
position.setPoint(point_SScene2Internal(position_proto.getPoint()));
position.setAccuracy(accuracy_SScene2Internal(position_proto.getAccuracy()));
return position;
}
private static Accuracy accuracy_SScene2Internal(float accuracy_proto) {
Gaussian accuracy = modelFactory.createGaussian();
accuracy.setConfidenceInterval(accuracy_proto);
return accuracy;
}
private static Point point_SScene2Internal(SimpleScene.IposPoint3D point_proto) {
Point3D point = modelFactory.createPoint3D();
point.setX(point_proto.getX());
point.setY(point_proto.getY());
point.setZ(point_proto.getZ());
return point;
}
/**
* It is the job of this function to create Agent- and LocalizableObject-objects.
* If is not the job of this function to checker whether agent/lobject-Objects
* do already exist for the respective ids.
* @param objConfig
* @return
*/
public static Agent agent_SScene2Internal(SimpleScene.IposObjectConfig objConfig) {
Agent agent = modelFactory.createAgent();
agent.setAgentType(objConfig.getAgentType());
agent.setId(objConfig.getAgentId());
LocalizableObject lObject = modelFactory.createLocalizableObject();
lObject.setSensorType(objConfig.getSensorType());
lObject.setId(objConfig.getSensorId());
lObject.setAgent(agent);
agent.getLObject().add(lObject);
return agent;
}
public static ReferenceSystem refSystem_SScene2Internal(SimpleScene.RefSystem refSystem_proto) {
ReferenceSystem refSystem = modelFactory.createReferenceSystem();
refSystem.setId(refSystem.getId());
refSystem.setName(refSystem.getId());
if (null != refSystem_proto.getPosition() && null != refSystem_proto.getOrientation()) {
refSystem.setOrigin(placing_SScene2Internal(refSystem_proto.getPosition(), refSystem_proto.getOrientation()));
}
return refSystem;
}
public static POI poi_SScene2Internal(SimpleScene.POI poi_proto) {
POI poi = modelFactory.createPOI();
poi.setDescription(poi_proto.getDescription());
poi.setData(poi_proto.getDataMap());
poi.setPosition(position_SScene2Internal(poi_proto.getPosition()));
return poi;
}
} }
...@@ -73,6 +73,15 @@ public class PositionMonitoring { ...@@ -73,6 +73,15 @@ public class PositionMonitoring {
return null; return null;
} }
public static ReferenceSystem getReferenceSystemByIdOrNull(String refSystemId){
for (ReferenceSystem refSystem : wm.getReferenceSystem()){
if(refSystem.getId().equals(refSystemId)){
return refSystem;
}
}
return null;
}
private POI createPOI(Position position, String description, Map<String, String> data){ private POI createPOI(Position position, String description, Map<String, String> data){
POI poi = modelFactory.createPOI(); POI poi = modelFactory.createPOI();
poi.setPosition(position); poi.setPosition(position);
...@@ -185,6 +194,7 @@ public class PositionMonitoring { ...@@ -185,6 +194,7 @@ public class PositionMonitoring {
// @JmsListener(destination = "/PositionEvent", containerFactory = "jmsListenFactory") // @JmsListener(destination = "/PositionEvent", containerFactory = "jmsListenFactory")
public static void receiveMessage(PositionEvent posEvent) { public static void receiveMessage(PositionEvent posEvent) {
// TODO: Update currentPlacing attribute of the affected localizableObject
LOG.info("Received <" + posEvent + ">"); LOG.info("Received <" + posEvent + ">");
List<Tuple3<PositionEvent, String, String>> entryNotifications = new LinkedList<>(); List<Tuple3<PositionEvent, String, String>> entryNotifications = new LinkedList<>();
for (eventFilter eFilter : eventFilters){ for (eventFilter eFilter : eventFilters){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment