Skip to content
Snippets Groups Projects
Commit 4f2514b8 authored by René Schöne's avatar René Schöne
Browse files

attempt with ragconnect 0.2.2 failed

- compiles, but dependency definitions are not able to model data flow to NTAs. appears to not work
parent 959c02ec
No related branches found
No related tags found
No related merge requests found
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'
}
......@@ -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',
])
}
......
......@@ -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 ;
......@@ -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 {
......
......@@ -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));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment