diff --git a/settings.gradle b/settings.gradle index 36aee84fb4317c74cad172205254355162c2acd7..0c705c21afae601469f6caa4c7e1c6c2b48d37e4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,4 @@ rootProject.name = 'ifm-refactoring-jastadd' include 'statemachine' -include 'trainbenchmark' -//include 'ragdoc-builder' include 'ragdoc-view' diff --git a/statemachine/.gitignore b/statemachine/.gitignore index 19ad8f831544c2661c133c48b7da7a78df83a50d..1ff83bae793351073fb8c6fdf7ad16dde44aeeed 100644 --- a/statemachine/.gitignore +++ b/statemachine/.gitignore @@ -5,3 +5,4 @@ src/gen-res/ /bin/ logs/ /doc/ +DrAST.cfg diff --git a/statemachine/DrAST.cfg b/statemachine/DrAST.cfg deleted file mode 100644 index a5e75e925199099f743ed7cea31321a0f60d70d4..0000000000000000000000000000000000000000 --- a/statemachine/DrAST.cfg +++ /dev/null @@ -1,16 +0,0 @@ -#DrAST settings file. -#Mon Nov 18 17:23:41 CET 2019 -normalEdgeWidth=1.0 -showEdges=true -refEdgeWidth=2.0 -NTA-depth=1 -NTA-cached=1 -dynamic-values=0 -prevJar=build/libs/statemachine-0.1.jar -dashedVertexEdgeWidth=0.2 -NTA-computed=0 -normalVertexEdgeWidth=1.0 -nodeThreshold=1000 -showNodes=true -curvedEdges=true -dashedEdgeWidth=0.2 diff --git a/statemachine/build.gradle b/statemachine/build.gradle index 022baba06ecc05ab5fb30f0896959dda4e67b8b8..f0aad7522477fa80eeb1e55b2f2272b900fefa5d 100644 --- a/statemachine/build.gradle +++ b/statemachine/build.gradle @@ -1,5 +1,5 @@ group 'de.tudresden.inf.st' -version '2.0-SNAPSHOT' +version '0.1' apply plugin: 'java' apply plugin: 'jastadd' @@ -62,25 +62,29 @@ buildscript { jar { manifest { attributes( - 'Class-Path': configurations.compile.collect { it.getName() }.join(' '), 'Main-Class': 'de.tudresden.inf.st.statemachine.Main' ) } } -task DrAST(type: JavaExec, dependsOn:jar) { - group = "verification" - description = 'run the DrAST visual debugger tool' - classpath = sourceSets.test.runtimeClasspath - main = 'de.tudresden.inf.st.statemachine.DrAstRunner' +task jarDrAst(type: Jar) { + group = "build" + description = 'create a jar to runthe DrAST visual debugger tool' + manifest { + attributes 'Implementation-Title': 'DrAST visual debugger tool for StateMachine', + 'Implementation-Version': project.version, + 'Main-Class': 'de.tudresden.inf.st.statemachine.DrAstRunner' + } + archivesBaseName = 'drast-statemachine-all' + from { sourceSets.main.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } + with jar } -String[] drastArguments = ['../libs/DrAST-1.2.2.jar'] -task DrASTjar(type: JavaExec, dependsOn:jar) { - group = "verification" - description = 'run the DrAST visual debugger tool as a JAR' - main = '-jar' - args drastArguments +task runDrAST(type: JavaExec, dependsOn:jar) { + group = "application" + description = 'run the DrAST visual debugger tool' + classpath = sourceSets.main.runtimeClasspath + main = 'de.tudresden.inf.st.statemachine.DrAstRunner' } def relastFiles = fileTree('src/main/jastadd/') { diff --git a/statemachine/run_DrAST.sh b/statemachine/run_DrAST.sh new file mode 100755 index 0000000000000000000000000000000000000000..2e043e4b40962534cc337e5afea2e4b5f1567f2f --- /dev/null +++ b/statemachine/run_DrAST.sh @@ -0,0 +1,2 @@ +#!/bin/bash +java -Dlog4j2.disableJmx=true -jar build/libs/drast-statemachine-all-0.1.jar diff --git a/statemachine/src/main/jastadd/Util.jadd b/statemachine/src/main/jastadd/Util.jadd index aa431f923b708d0b68399990d49f45ae2ba9dabf..517b6a51d6c7ea953aeb2a59f7b42ca354a77979 100644 --- a/statemachine/src/main/jastadd/Util.jadd +++ b/statemachine/src/main/jastadd/Util.jadd @@ -33,7 +33,7 @@ aspect JastAddAPIExtension { return getLabel(); } - public String State.toString() { + public String Element.toString() { return getLabel(); } } diff --git a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java index d22a3a3f1faf6bb1639e1fc696d784a17b8cdfdc..2fd811e0f2604e506ea8634a0a6943a88d5767de 100644 --- a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java +++ b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java @@ -38,14 +38,15 @@ public class DrAstRunner extends DrASTGUI { private static void openView() { guiHasBeenCreated = true; DrASTSettings.put(DrASTSettings.PREV_JAR, "build/libs/statemachine-0.1.jar"); - launch(new String[0]); + DrASTSettings.put(DrASTSettings.PREV_TAIL_ARGS, "-Dlog4j2.disable.jmx=true"); + launch(); con.onApplicationClose(); } public void setRoot(Object root) { long timeStart = System.currentTimeMillis(); DrAST newAst = new DrAST(root, TreeFilter.readFilter(con.getFilter())); - Log.info("Filter update: done after %d ms", new Object[]{System.currentTimeMillis() - timeStart}); + Log.info("Filter update: done after %d ms", System.currentTimeMillis() - timeStart); Platform.runLater(() -> { mon.reset(newAst); if (guiHasBeenCreated) { @@ -59,8 +60,8 @@ public class DrAstRunner extends DrASTGUI { public void start(Stage stage) throws Exception { FXMLLoader loader = new FXMLLoader(); - Parent rootView = (Parent)loader.load(this.getClass().getResource("/main.fxml").openStream()); - con = (Controller)loader.getController(); + Parent rootView = loader.load(this.getClass().getResource("/main.fxml").openStream()); + con = loader.getController(); mon.setParentStage(stage); mon.setController(con); mon.setDrASTUI(this); diff --git a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java index 11292538e652a485cb067934f693480a90a7d970..c10cff5f340983827a57aac27c7894aea33ee578 100644 --- a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java +++ b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java @@ -1,54 +1,68 @@ package de.tudresden.inf.st.statemachine; -import de.tudresden.inf.st.statemachine.jastadd.model.*; -import drast.model.DrAST; +import beaver.Parser; +import de.tudresden.inf.st.statemachine.jastadd.model.State; +import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine; +import de.tudresden.inf.st.statemachine.jastadd.model.Transition; +import java.io.IOException; +import java.nio.file.Paths; import java.util.Set; public class Main { + @SuppressWarnings("WeakerAccess") public static Object DrAST_root_node; public static void main(String[] args) { - // manual construction of a simple statemachine - // (S) -- 1 --> (A) -- 3 --> (E) - // ^ | - // \ / - // `---- 2 ----* - StateMachine statemachine = new StateMachine(); - State start = new State(); - start.setLabel("S"); - State stateA = new State(); - stateA.setLabel("A"); - State end = new State(); - end.setLabel("E"); - Transition t1 = new Transition(); - t1.setLabel("1"); - Transition t2 = new Transition(); - t2.setLabel("2"); - Transition t3 = new Transition(); - t3.setLabel("3"); - t1.setFrom(start); - t1.setTo(stateA); - t2.setFrom(stateA); - t2.setTo(start); - t3.setFrom(stateA); - t3.setTo(end); - statemachine.addElement(start); - statemachine.addElement(stateA); - statemachine.addElement(end); - statemachine.setInitial(start); - statemachine.addFinal(end); + if (args.length == 0) { + // manual construction of a simple statemachine + // (S) -- 1 --> (B) -- 3 --> (E) + // ^ | + // \ / + // `---- 2 ----* + StateMachine statemachine = new StateMachine(); + State start = new State(); + start.setLabel("S"); + State stateB = new State(); + stateB.setLabel("B"); + State end = new State(); + end.setLabel("E"); + Transition t1 = new Transition(); + t1.setLabel("1"); + Transition t2 = new Transition(); + t2.setLabel("2"); + Transition t3 = new Transition(); + t3.setLabel("3"); + t1.setFrom(start); + t1.setTo(stateB); + t2.setFrom(stateB); + t2.setTo(start); + t3.setFrom(stateB); + t3.setTo(end); + statemachine.addElement(start); + statemachine.addElement(stateB); + statemachine.addElement(end); + statemachine.setInitial(start); + statemachine.addFinal(end); - // reachability analysis - Set<Set<State>> sccs = statemachine.SCC(); - System.out.println("SCCs found:"); - for (Set<State> scc : sccs) { - System.out.println(scc); + // reachability analysis + Set<Set<State>> sccs = statemachine.SCC(); + System.out.println("SCCs found:"); + for (Set<State> scc : sccs) { + System.out.println(scc); + } + DrAST_root_node = statemachine; + } else { + // load the file given as first argument + try { + StateMachine stateMachine = ParserUtils.load(Paths.get(args[0])); + stateMachine.treeResolveAll(); + DrAST_root_node = stateMachine; + } catch (IOException | Parser.Exception e) { + e.printStackTrace(); + } } - - DrAST_root_node = statemachine; -// DrAST.ui.DrASTUI debugger = new DrAST.ui.DrASTUI(statemachine); } } diff --git a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..ef4e50169c525b631a10a531b9965283a967d2f4 --- /dev/null +++ b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java @@ -0,0 +1,27 @@ +package de.tudresden.inf.st.statemachine; + +import beaver.Parser; +import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine; +import de.tudresden.inf.st.statemachine.jastadd.parser.StateMachineParser; +import de.tudresden.inf.st.statemachine.jastadd.scanner.StateMachineScanner; + +import java.io.IOException; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; + +/** + * Utility methods for loading statemachine files. + * + * @author rschoene - Initial contribution + */ +public class ParserUtils { + static StateMachine load(Path path) throws IOException, Parser.Exception { + Reader reader = Files.newBufferedReader(path); + StateMachineScanner scanner = new StateMachineScanner(reader); + StateMachineParser parser = new StateMachineParser(); + StateMachine result = (StateMachine) parser.parse(scanner); + reader.close(); + return result; + } +} diff --git a/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java b/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java index 7628327f4fdc8c58294fab94de040b4e7307971b..16a6344661f21f81096f4223186bd6bf51877663 100644 --- a/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java +++ b/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java @@ -4,14 +4,9 @@ import beaver.Parser; import de.tudresden.inf.st.statemachine.jastadd.model.State; import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine; import de.tudresden.inf.st.statemachine.jastadd.model.Transition; -import de.tudresden.inf.st.statemachine.jastadd.parser.StateMachineParser; -import de.tudresden.inf.st.statemachine.jastadd.scanner.StateMachineScanner; import org.junit.Test; import java.io.IOException; -import java.io.Reader; -import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; @@ -21,7 +16,7 @@ import static org.hamcrest.collection.IsEmptyCollection.empty; import static org.junit.Assert.*; /** - * TODO: Add description. + * Testing the statemachine parser. * * @author rschoene - Initial contribution */ @@ -29,7 +24,7 @@ public class ParserTest { @Test public void test1() throws IOException, Parser.Exception { - StateMachine stateMachine = load(Paths.get("src", "test", "resources", "machine_one.sm")); + StateMachine stateMachine = ParserUtils.load(Paths.get("src", "test", "resources", "machine_one.sm")); assertEquals(6, stateMachine.getNumElement()); assertEquals(3, stateMachine.states().size()); @@ -87,12 +82,4 @@ public class ParserTest { return s.getOutgoingList().stream().map(Transition::getTo).collect(Collectors.toList()); } - private static StateMachine load(Path path) throws IOException, Parser.Exception { - Reader reader = Files.newBufferedReader(path); - StateMachineScanner scanner = new StateMachineScanner(reader); - StateMachineParser parser = new StateMachineParser(); - StateMachine result = (StateMachine) parser.parse(scanner); - reader.close(); - return result; - } }