diff --git a/.gitignore b/.gitignore index ccfb92b6f71c4cb7fbdf983c55c90585009e9da4..ebd336ce88ef400785e2e031caed1b95cdbc4c93 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ src/gen-res build/ out/ logs/ +/after.png +/before.png diff --git a/build.gradle b/build.gradle index 190d15209f35c53d8820ede939c6bcb0dd3791a0..5b94d55fc88260e98edcba2c4343fa1cdf8bf048 100644 --- a/build.gradle +++ b/build.gradle @@ -82,7 +82,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.9.0' - jastadd2 "org.jastadd:jastadd:2.3.5" + jastadd2 "org.jastadd:jastadd2:2.3.5-dresden-6" relast group: 'org.jastadd', name: 'relast', version: "${relast_version}" ecore files("libs/ecore2relast-0.1.jar") @@ -119,6 +119,9 @@ dependencies { ragconnectClasspath 'de.tudresden.inf.st:ragconnect:1.0.0-alpha-214' // ragconnectClasspath fileTree(include: ['ragconnect.base-fatjar-1.0.0-alpha.jar'], dir: './libs') + // vis + implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: '1.2.1-77' + // testing testImplementation('org.junit.jupiter:junit-jupiter:5.8.2') @@ -213,7 +216,11 @@ task ragConnect(type: JavaExec) { '--rootNode=PetriNet', '--List=JastAddList', '--incremental=param', - '--tracing=flush' + '--tracing=flush', + '--experimental-jastadd-329', + '--logReads', + '--logWrites', + '--logIncremental' ]) } @@ -269,11 +276,11 @@ jastadd { parser.genDir = "src/gen/java/de/tudresden/inf/st/pnml/jastadd/parser" // default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false' - extraJastAddOptions = ['--List=JastAddList', '--incremental=param', '--tracing=flush'] + extraJastAddOptions = ['--List=JastAddList', '--cache=all', '--incremental=param', '--tracing=flush'] } ragConnect.dependsOn ecoreToRelast relastToJastAdd.dependsOn ragConnect generateAst.dependsOn relastToJastAdd -compileJava.dependsOn generateExpressionBeaver \ No newline at end of file +compileJava.dependsOn generateExpressionBeaver diff --git a/src/main/jastadd/engine/connection/Dineros.connect b/src/main/jastadd/engine/connection/Dineros.connect index bdb8f6589a1eeea0d2efddc7eedddc9c942c605d..695a151c33485b6d1d1c75f3bb0bf4579ba32a84 100644 --- a/src/main/jastadd/engine/connection/Dineros.connect +++ b/src/main/jastadd/engine/connection/Dineros.connect @@ -1,5 +1,5 @@ receive InputSignalBinding.InputSignalValue using InputSignalTransformation; -send OutputSignalBinding.OutputSignalValue using OutputSignalTransformation; +send OutputSignalBinding.outputSignalValue(String) using OutputSignalTransformation; // mapping definitions OutputSignalTransformation maps String s to String {: diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java index 57767c62c7097f6d2a9ad8c2850764991c25ebe9..c66309546526a15fb698b853ad488b608097feed 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java @@ -1,5 +1,6 @@ package de.tudresden.inf.st.pnml.engine; +import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper; import de.tudresden.inf.st.pnml.engine.execution.DefaultFinalTransitionCallback; import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultNode; @@ -18,15 +19,16 @@ import org.ros.node.topic.Publisher; import org.xml.sax.SAXException; import rosjava_srv.StringServiceRequest; import rosjava_srv.StringServiceResponse; -import std_msgs.String; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.net.URI; import java.util.Map; +import java.util.concurrent.TimeUnit; public class Main { @@ -51,16 +53,18 @@ public class Main { PetriNetInitializer.initOutputSignalConnections(petriNet, "localhost", "mqtt"); + dump(bm, "before"); + System.out.println("Output Signal Values BEFORE: "); for(Place p : petriNet.allPlaces()){ for(OutputSignalBinding osb : p.asOutputSignalPlace().getOutputSignalBindingList()){ - System.out.println(osb.getOutputSignalID() + " : " + osb.getOutputSignalValue()); + System.out.println(osb.getOutputSignalID() + " : " + osb.outputSignalValue()); } } try { System.out.println("Sleeping for 2s"); - Thread.sleep(2000); + TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } @@ -76,14 +80,16 @@ public class Main { for ( OutputSignalBinding b : p.asOutputSignalPlace().getOutputSignalBindingList()){ System.out.println("New Num: " + bm.resolveBalloonPlace(p).getNumBalloonMarking()); - System.out.println("New Value: " + b.getOutputSignalValue()); + System.out.println("New Value: " + b.outputSignalValue()); } } + dump(bm, "after"); + System.out.println("Output Signal Values AFTER: "); for(Place p : petriNet.allPlaces()){ for(OutputSignalBinding osb : p.asOutputSignalPlace().getOutputSignalBindingList()){ - System.out.println(osb.getOutputSignalID() + " : " + osb.getOutputSignalValue()); + System.out.println(osb.getOutputSignalID() + " : " + osb.outputSignalValue()); } } @@ -91,6 +97,32 @@ public class Main { System.out.println(bm.print()); } + private static void dump(BalloonMarking balloonMarking, String filename) throws IOException { + Dumper.read(balloonMarking) + .includeChildWhen((parentNode, childNode, contextName) -> { +// System.out.println("encountered " + parentNode + "." + contextName); + switch (contextName) { + case "AnnotationGraphics": + case "NodeGraphics": + case "Toolspecific": + return false; + default: + return true; + } + }) + .includeAttributeWhen((node, attributeName, isNTA, value) -> { +// System.out.println("encountered " + node + "." + attributeName); + switch (attributeName) { + case "outputSignalValue": + case "OutputSignalBinding": + return true; + default: + return false; + } + }) + .dumpAsPNG(Paths.get(filename + ".png")); + } + @SuppressWarnings("unused") private static void isTest() throws IOException { java.lang.String pnmlPath = "../pnml-relast-engine/src/main/resources/nets/is-test-2.pnml"; @@ -293,7 +325,7 @@ public class Main { e.printStackTrace(); } - for (Map.Entry<InputSignalTransition, Publisher<String>> entry : diNeRosNode.getDinerosPublishers().entrySet()) { + for (Map.Entry<InputSignalTransition, Publisher<std_msgs.String>> entry : diNeRosNode.getDinerosPublishers().entrySet()) { System.out.println("Firing publisher of:" + entry.getKey().getId()); diNeRosNode.firePublisherTransition(entry.getKey()); }