diff --git a/.gitignore b/.gitignore index 84af703d4fb7139e5599f61f0b7e4044c62d3b4d..aa0282eb2dcea439ad181e21a62ce01a7d5c80bb 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ /build/ /src/gen /src/gen-res +/*.png +uml.md +gradle.properties diff --git a/build.gradle b/build.gradle index 88458d3cd6bd932cb2339a9f40b58ec80c43ae58..a34e4f04292d23b7ab6a2b0a5258c72c2b8d7061 100644 --- a/build.gradle +++ b/build.gradle @@ -17,9 +17,17 @@ mainClassName = 'de.tudresden.inf.st.mrc.MinimalMain' repositories { jcenter() +// maven { +// name "gitlab-maven" +// url "https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven" +// } maven { - name "gitlab-maven" - url "https://gitlab.example.com/api/v4/groups/jastadd/-/packages/maven" + name "gitlab-maven-ragconnect" + url "https://git-st.inf.tu-dresden.de/api/v4/projects/708/packages/maven" + } + maven { + name "gitlab-maven-relast2uml" + url "https://git-st.inf.tu-dresden.de/api/v4/projects/679/packages/maven" } } @@ -28,6 +36,7 @@ apply plugin: 'jastadd' configurations { baseRuntimeClasspath ragconnectClasspath + grammar2umlClasspath } run { @@ -39,18 +48,34 @@ sourceSets.main.java.srcDir genSrc idea.module.generatedSourceDirs += genSrc dependencies { - implementation fileTree(include: ['dumpAst2uml.jar'], dir: 'libs') +// implementation fileTree(include: ['dumpAst2uml.jar'], dir: 'libs') implementation group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version: '1.15' implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.2' implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.2' - ragconnectClasspath group: 'de.tudresden.inf.st', name: 'ragconnect.base', version: '0.2.3' + implementation group: 'de.tudresden.inf.st', name: 'dumpAstWithPlantuml', version: '0.3.5' + grammar2umlClasspath group: 'de.tudresden.inf.st', name: 'grammar2uml', version: '0.1.1' - jastadd2 "org.jastadd:jastadd:2.3.4" +// ragconnectClasspath group: 'de.tudresden.inf.st', name: 'ragconnect', version: '0.2.4' + ragconnectClasspath fileTree(include: ['ragconnect-0.2.4.jar'], dir: '/data/git/jastadd-ragconnect/ragconnect.base/build/libs') +// jastadd2 "org.jastadd:jastadd:2.3.4" + jastadd2 fileTree(include: ['jastadd2.jar'], dir: '/data/git/jastadd-2/') } // Input files for relast def relastFiles = ["src/gen/jastadd/MinimalModel.relast", "src/gen/jastadd/RagConnect.relast"] +task grammar2uml(type: JavaExec) { + main = 'de.tudresden.inf.st.jastadd.grammar2uml.compiler.Compiler' + classpath = configurations.grammar2umlClasspath +// classpath = configurations.implementation + + args([ + '--verbose', + ] + + + relastFiles) +} + // phases: ragConnect -> RelAst -> JastAdd // phase: ragConnect task ragConnect(type: JavaExec) { @@ -132,7 +157,17 @@ jastadd { // jastaddOptions = ["--lineColumnNumbers", "--visitCheck=true", "--rewrite=cnta", "--cache=all"] // default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false' - extraJastAddOptions = ["--lineColumnNumbers", '--List=JastAddList'] + extraJastAddOptions = [ + '--lineColumnNumbers', + '--List=JastAddList', +// '--incremental=param', +// '--cache=all', +// '--tracing=api,flush', +// +// "--flush=full", +// "--incremental=param,debug", + "--tracing=api", + ] } cleanGen.doFirst { diff --git a/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java b/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java index 937fe5fc4524427d2482b37cec01e0bf9eb636cb..9b72db0ffaea26d6f02c8a539e20f43e3775ba27 100644 --- a/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java +++ b/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java @@ -1,10 +1,16 @@ package de.tudresden.inf.st.mrc; +import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper; import de.tudresden.inf.st.mrc.ast.A; import de.tudresden.inf.st.mrc.ast.B; +import de.tudresden.inf.st.mrc.ast.MqttHandler; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.IOException; +import java.nio.file.Paths; import java.util.Scanner; +import java.util.concurrent.TimeUnit; /** * Minimal main. @@ -12,30 +18,82 @@ import java.util.Scanner; * @author rschoene - Initial contribution */ public class MinimalMain { - public static void main(String[] args) throws IOException { - A a = new A(); - // set some default value for input - a.setInput(""); - B b1 = new B(); - B b2 = new B(); - a.addB(b1); - a.addB(b2); + private static final Logger logger = LogManager.getLogger(MinimalMain.class); + private static final String TOPIC_FOR_INPUT = "topic/for/input"; + private static final String TOPIC_URI_FOR_INPUT = "mqtt://localhost/" + TOPIC_FOR_INPUT; + private static MqttHandler publisher; + + public static void main(String[] args) throws Exception { + publisher = new MqttHandler("publisher").setHost("localhost"); + publisher.waitUntilReady(2, TimeUnit.SECONDS); + publisher.publish("---", "---".getBytes()); + + A normalA = addNewA(); + enableTracing(normalA); + B b1 = normalA.getB(0); + B b2 = normalA.getB(1); // a.OutputOnA -> a.Input - a.addDependencyA(a); + normalA.addDependencyA(normalA); // b1.OutputOnB -> a.Input - b1.addDependencyB(a); + b1.addDependencyB(normalA); // b2.OutputOnB -> a.Input - b2.addDependencyB(a); + b2.addDependencyB(normalA); + + normalA.connectInput(TOPIC_URI_FOR_INPUT); + normalA.connectOutputOnA("mqtt://localhost/normalA/out", true); + b1.connectOutputOnB("mqtt://localhost/normalA/b1/out", true); + b2.connectOutputOnB("mqtt://localhost/normalA/b2/out", false); + + A aWithNoDependency = addNewA(); + enableTracing(aWithNoDependency); + + aWithNoDependency.connectInput(TOPIC_URI_FOR_INPUT); + aWithNoDependency.connectOutputOnA("mqtt://localhost/aNoDep/out", true); + aWithNoDependency.getB(0).connectOutputOnB("mqtt://localhost/aNoDep/b1/out", true); + aWithNoDependency.getB(1).connectOutputOnB("mqtt://localhost/aNoDep/b2/out", false); + + // stimulated incremental evaluation + aWithNoDependency.getB(0).getOutputOnB(); + + Dumper.read(normalA).dumpAsPNG(Paths.get("images.png")); - a.connectInput("mqtt://localhost/topic/for/input"); - a.connectOutputOnA("mqtt://localhost/a/out", true); - b1.connectOutputOnB("mqtt://localhost/b1/out", true); - b2.connectOutputOnB("mqtt://localhost/b2/out", false); + waitAndRun(1, "Publish 2", () -> publisher.publish(TOPIC_FOR_INPUT, "2".getBytes())); + waitAndRun(2, "Disconnect normalA", () -> { + try { + boolean success = normalA.disconnectInput(TOPIC_URI_FOR_INPUT); + System.out.println("disconnect success: " + success); + } catch (IOException e) { + e.printStackTrace(); + } + }); + waitAndRun(3, "Publish 4", () -> publisher.publish(TOPIC_FOR_INPUT, "4".getBytes())); // while (true) {} - System.out.println("[Enter] to exit"); - Scanner scanner = new Scanner(System.in); - scanner.nextLine(); +// System.out.println("[Enter] to exit"); +// Scanner scanner = new Scanner(System.in); +// scanner.nextLine(); + Thread.sleep(6); + } + + private static void waitAndRun(long seconds, String description, Runnable runnable) throws InterruptedException { + Thread.sleep(seconds); + System.out.println(description); + publisher.publish("---", description.getBytes()); + runnable.run(); + } + + private static A addNewA() { + A result = new A(); + result.setInput("1"); + B b1 = new B(); + B b2 = new B(); + result.addB(b1); + result.addB(b2); + return result; + } + + private static void enableTracing(A a) { + a.trace().setReceiver((event, node, attribute, params, value) -> logger.info("event: {}, node: {}, attribute: {}, params: {}, value: {},", event, node, attribute, params, value)); } } diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 9566029b0cd86cf4a23425159c85150b13e4882c..16afeebf06d7ec39a50ab503c86dc2e6dec3951a 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -6,7 +6,7 @@ </Console> </Appenders> <Loggers> - <Root level="info"> + <Root level="debug"> <AppenderRef ref="Console"/> </Root> </Loggers>