From 4f2514b81a1d0194ccb4b99440782d4a57ce66ee Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Thu, 28 Jul 2022 09:24:41 +0200 Subject: [PATCH] attempt with ragconnect 0.2.2 failed - compiles, but dependency definitions are not able to model data flow to NTAs. appears to not work --- ...rag.java-old-ragconnect-conventions.gradle | 18 ++++++ .../src/main/resources/tasks.gradle | 4 +- .../src/main/jastadd/OldWorldModelB.connect | 36 ++++++----- .../src/main/jastadd/forwardsComp.jadd | 11 +--- .../de/tudresden/inf/st/old/b/OldMainB.java | 60 +++++++++++++++++-- 5 files changed, 95 insertions(+), 34 deletions(-) create mode 100644 buildSrc/src/main/groovy/ros3rag.java-old-ragconnect-conventions.gradle diff --git a/buildSrc/src/main/groovy/ros3rag.java-old-ragconnect-conventions.gradle b/buildSrc/src/main/groovy/ros3rag.java-old-ragconnect-conventions.gradle new file mode 100644 index 0000000..1f856db --- /dev/null +++ b/buildSrc/src/main/groovy/ros3rag.java-old-ragconnect-conventions.gradle @@ -0,0 +1,18 @@ +plugins { + id 'ros3rag.java-jastadd-conventions' +} + +configurations { + ragconnect + grammar2uml + relast +} + +dependencies { + api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11' + grammar2uml group: 'de.tudresden.inf.st', name: 'grammar2uml', version: '0.2.3' + + relast group: 'org.jastadd', name: 'relast', version: "0.4.0-143" + + implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: '1.2.1-77' +} diff --git a/ros3rag.common/src/main/resources/tasks.gradle b/ros3rag.common/src/main/resources/tasks.gradle index b0c1d78..402e14e 100644 --- a/ros3rag.common/src/main/resources/tasks.gradle +++ b/ros3rag.common/src/main/resources/tasks.gradle @@ -65,7 +65,9 @@ task oldRagConnect(type: JavaExec) { file('src/gen/workaround/merged.connect'), '--rootNode=' + project.ext.ragConnectRootNode, '--protocols=' + project.ext.ragConnectProtocols, - '--List=JastAddList' + '--List=JastAddList', +// '--logReads', + '--logWrites', ]) } diff --git a/ros3rag.old.b/src/main/jastadd/OldWorldModelB.connect b/ros3rag.old.b/src/main/jastadd/OldWorldModelB.connect index 165fa1a..d6ed83d 100644 --- a/ros3rag.old.b/src/main/jastadd/OldWorldModelB.connect +++ b/ros3rag.old.b/src/main/jastadd/OldWorldModelB.connect @@ -46,9 +46,7 @@ ConvertCommand maps de.tudresden.inf.st.ceti.Command command to Operation {: // --- sending --- send WorldModelB.NextOperationAsNtaToken using PrintCommand ; -// (direct manipulation is dangerous) send WorldModelB.NextOperation using PrintAndRememberOperation ; send Robot.MyPosition ; -// (direct manipulation is dangerous) send Robot.myPosition(String) using ImmediateUpdate ; PrintCommand maps de.tudresden.inf.st.ceti.Command cmd to byte[] {: if (cmd == null) { @@ -58,23 +56,6 @@ PrintCommand maps de.tudresden.inf.st.ceti.Command cmd to byte[] {: return cmd.toByteArray(); :} -// (direct manipulation is dangerous) -//PrintAndRememberOperation maps Operation op to byte[] {: -// byte[] result = op.toProtobufByteArray(); -// if (result == null) { -// reject(); -// } -// ((WorldModelB) this).addExecutedOperation(op); -// return result; -//:} -// -// (direct manipulation is dangerous) -//ImmediateUpdate maps String pos to String {: -// Robot robot = (Robot) this; -// robot.setCurrentPosition(pos); -// return pos; -//:} - ConfigChangeCommandCheckForOwnedCollaborationZone maps byte[] bytes to String {: de.tudresden.inf.st.ceti.Command command = null; try { @@ -187,3 +168,20 @@ CommandCheckForOccupiedCollaborationZone maps byte[] bytes to String {: } return String.join(",", occupiedZoneNames); :} + +// probably need dependency definitions + +// WorldModelB.NextOperationAsNtaToken +WorldModelB.NextOperationAsNtaToken canDependOn WorldModelB.OtherSceneAsJson as NextOperationWorldModelOtherSceneDep ; +WorldModelB.NextOperationAsNtaToken canDependOn WorldModelB.MySceneAsProtobuf as NextOperationWorldModelMySceneDep ; +WorldModelB.NextOperationAsNtaToken canDependOn Robot.CurrentPosition as NextOperationRobotCurrentPositionDep ; +WorldModelB.NextOperationAsNtaToken canDependOn RobotObject.State as NextOperationRobotObjectStateDep ; +WorldModelB.NextOperationAsNtaToken canDependOn Robot.OccupiedCollaborationZoneNames as NextOperationRobotOccupiedDep ; +WorldModelB.NextOperationAsNtaToken canDependOn Robot.OwnedCollaborationZoneNames as NextOperationRobotOwnedDep ; + +// Robot.MyPosition +//Robot.MyPosition canDependOn RobotObject.State as MyPositionRobotObjectStateDep ; +Robot.MyPosition canDependOn WorldModelB.MySceneAsProtobuf as MyPositionMySceneDep ; +Robot.MyPosition canDependOn Robot.CurrentPosition as MyPositionRobotCurrentPositionDep ; +Robot.MyPosition canDependOn Robot.OccupiedCollaborationZoneNames as MyPositionRobotOccupiedDep ; +Robot.MyPosition canDependOn Robot.OwnedCollaborationZoneNames as MyPositionRobotOwnedDep ; diff --git a/ros3rag.old.b/src/main/jastadd/forwardsComp.jadd b/ros3rag.old.b/src/main/jastadd/forwardsComp.jadd index 7406eb8..8c40534 100644 --- a/ros3rag.old.b/src/main/jastadd/forwardsComp.jadd +++ b/ros3rag.old.b/src/main/jastadd/forwardsComp.jadd @@ -9,16 +9,7 @@ aspect ForwardsCompatibility { } static Robot ASTNode.hackTemporaryRobot; -// refine MqttHandler public boolean MqttHandler.newConnection(String topic, java.util.function.Consumer<byte[]> callback) { -// if (topic.equals("/ceti_cell_placeworld/command")) { -// // add decorator consumer to set hackTemporaryRobot -// java.util.function.Consumer<byte[]> decoratedConsumer = input -> { -// -// }; -// } -// refined(); -// } - refine ROS2RAG public boolean Robot.connectOwnedCollaborationZoneNames(String uriString) throws java.io.IOException { + refine ROS2RAG public boolean Robot.connectOwnedCollaborationZoneNames(String uriString) throws java.io.IOException { String scheme,host, path; java.net.URI uri; try { diff --git a/ros3rag.old.b/src/main/java/de/tudresden/inf/st/old/b/OldMainB.java b/ros3rag.old.b/src/main/java/de/tudresden/inf/st/old/b/OldMainB.java index 7cf3c3e..8727575 100644 --- a/ros3rag.old.b/src/main/java/de/tudresden/inf/st/old/b/OldMainB.java +++ b/ros3rag.old.b/src/main/java/de/tudresden/inf/st/old/b/OldMainB.java @@ -166,6 +166,17 @@ public class OldMainB extends SharedMainParts<MqttHandler, ArtificialRoot> { checkSuccess(robot.connectMyPosition(mqttUri(topicPosition, config), true), "MyPosition (" + robot.getName() + ")"); } + + // TODO make the actual dependencies + model.getWorldModelB().addNextOperationWorldModelMySceneDep(model.getWorldModelB()); + model.getWorldModelB().addNextOperationWorldModelOtherSceneDep(model.getWorldModelB()); + for (Robot robot : model.getWorldModelB().getRobotList()) { + model.getWorldModelB().addNextOperationRobotCurrentPositionDep(robot); + robot.addMyPositionRobotCurrentPositionDep(robot); + robot.addMyPositionRobotOccupiedDep(robot); + robot.addMyPositionRobotOwnedDep(robot); + robot.addMyPositionMySceneDep(model.getWorldModelB()); + } } private void checkSuccess(boolean connectSuccess, String target) { @@ -179,10 +190,51 @@ public class OldMainB extends SharedMainParts<MqttHandler, ArtificialRoot> { // Thread t = new Thread(() -> { try { String filename = artificialRoot.getWorldModelB().dumpAst(builder -> { - builder.excludeChildren("Orientation", "Size"); - builder.excludeRelations("ContainedInRegion"); - builder.includeNonterminalAttributes("LogicalScene", "diffScenes", "diffToOperations"); - builder.includeAttributes("realRegion", "computeOperations", "myPosition"); + builder.includeChildWhen((parentNode, childNode, contextName) -> { + switch (contextName) { + case "Orientation": + case "Size": + return false; + default: + return true; + } + }); + builder.includeTokensWhen((node, tokenName, value) -> { + switch (tokenName) { + case "_internal_MySceneAsProtobuf": + case "_internal_OtherSceneAsJson": + return false; + default: + return true; + } + }); + builder.includeAttributeWhen((node, attributeName, isNTA, value) -> { + if (isNTA) { + switch (attributeName) { + case "diffScenes": + case "diffToOperations": + case "LogicalScene": + return true; + default: + return false; + } + } else { + switch (attributeName) { + case "realRegion": + case "computeOperations": + case "myPosition": + return true; + default: + return false; + } + } + }); + builder.includeRelationsWhen((sourceNode, targetNode, roleName) -> { + if (roleName.startsWith("_internal_") && (roleName.endsWith("Source") || roleName.endsWith("Target"))) { + return false; + } + return !roleName.equals("ContainedInRegion"); + }); builder.includeNullNodes(); }); mainHandler.publish(TOPIC_MODEL_SVG_PATH, filename.getBytes(StandardCharsets.UTF_8)); -- GitLab