From 68ba775fa816e86dee868024669824b108fac66d Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Mon, 26 Feb 2024 12:24:15 +0100 Subject: [PATCH] finished upgrade of generator --- src/main/jastadd/gen/Package.jadd | 18 +++-- src/main/jastadd/gen/PackageNav.jadd | 6 ++ .../de/tudresden/inf/st/pnml/gen/Main.java | 16 ++-- .../gen/builders/PackageStructureBuilder.java | 74 +++++++++---------- .../inf/st/pnml/gen/data/LauncherContext.java | 14 ++-- .../pnml/gen/generators/JavaClassGenUtil.java | 4 +- .../resources/mustache/JavaLauncher.mustache | 4 +- 7 files changed, 70 insertions(+), 66 deletions(-) diff --git a/src/main/jastadd/gen/Package.jadd b/src/main/jastadd/gen/Package.jadd index ab51726..4c5900a 100644 --- a/src/main/jastadd/gen/Package.jadd +++ b/src/main/jastadd/gen/Package.jadd @@ -9,7 +9,8 @@ aspect PackageGen { return res; } - syn String GradleFile.generateBuildGradle(String archiveBaseName, String version, String pnmlRelastVersion, String group, List<NetInfo> netInfos){ + syn String GradleFile.generateBuildGradle(String archiveBaseName, String version, String pnmlRelastVersion, + String group, List<NetInfo> netInfos){ String res = de.tudresden.inf.st.pnml.gen.generators.GradleGenUtil .generateBuildGradle(archiveBaseName, version, pnmlRelastVersion, group, netInfos); @@ -17,19 +18,20 @@ aspect PackageGen { return res; } - syn String NodeFile.generate(String procotol){ + syn String NodeFile.generate(String protocol){ String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil. - generateNodeClass(dinerosPackage().getNamespace(), getName(), procotol); + generateNodeClass(dinerosPackage().getNamespace(), getName(), protocol); this.setFileContent(res); return res; } - syn String LauncherFile.generate(){ + syn String LauncherFile.generate(String rosHost, String rosMasterUri, String signalHost, String netPath, String nodeClassName){ - // String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil. - // generateLauncherClass(dinerosPackage().getNamespace(), getName(), ""); - // this.setFileContent(res); - return null; + String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil + .generateLauncherClass(rosHost, rosMasterUri, signalHost, + dinerosPackage().getNamespace(), netPath, nodeClassName); + this.setFileContent(res); + return res; } } \ No newline at end of file diff --git a/src/main/jastadd/gen/PackageNav.jadd b/src/main/jastadd/gen/PackageNav.jadd index eecb189..7a6e47c 100644 --- a/src/main/jastadd/gen/PackageNav.jadd +++ b/src/main/jastadd/gen/PackageNav.jadd @@ -32,6 +32,12 @@ aspect PackageNav { syn PnmlFile PackageFile.asPnmlFile() = null; eq PnmlFile.asPnmlFile() = this; + syn boolean PackageFile.isLauncherFile() = false; + eq LauncherFile.isLauncherFile() = true; + + syn LauncherFile PackageFile.asLauncherFile() = null; + eq LauncherFile.asLauncherFile() = this; + syn boolean PackageFile.isGradleFile() = false; eq GradleFile.isGradleFile() = true; diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java b/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java index 52bdba6..549ed62 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java @@ -18,21 +18,21 @@ public class Main { public static void main(java.lang.String[] args) throws IOException { - // if(args.length != 1){ - // System.out.println("Error: Invalid arguments."); - // return; - // } + if(args.length != 1){ + System.out.println("Error: Invalid arguments."); + return; + } - // String configPath = args[0]; + String configPath = args[0]; //String configPath = "src/test/resources/GeneratorConfig.json"; ObjectMapper generatorConfigObjectMapper = new ObjectMapper(); - // GeneratorConfig gc = generatorConfigObjectMapper.readValue(Files.readString(Paths.get(configPath)), GeneratorConfig.class); - GeneratorConfig gc = new GeneratorConfig("sample", "sample-pkg", + GeneratorConfig gc = generatorConfigObjectMapper.readValue(Files.readString(Paths.get(configPath)), GeneratorConfig.class); + /* GeneratorConfig gc = new GeneratorConfig("sample", "sample-pkg", "de.tudresden.inf.st.sorting","0.1", "src/test/resources/EngineConfig.json","mqtt", "localhost", "http://localhost:11311","localhost", - "/home/sebastian/Desktop/tmp"); + "/home/sebastian/Desktop/tmp");*/ DinerosPackage dp = new DinerosPackage(); dp.setName(gc.packageName); diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java b/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java index 12195bd..eb3759e 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java @@ -1,6 +1,5 @@ package de.tudresden.inf.st.pnml.gen.builders; -import de.tudresden.inf.st.pnml.base.constants.PnmlConstants; import de.tudresden.inf.st.pnml.gen.json.NetInfo; import de.tudresden.inf.st.pnml.jastadd.model.*; @@ -16,8 +15,8 @@ public class PackageStructureBuilder { private static final String FILE_PATH = "../pnml-relast-pkg-gen/src/main/resources/static/"; - public static void build(String packagePath, DinerosPackage dinerosPackage, List<NetInfo> netInfos, String engineVersion - , String rosHost, String rosMasterUri, String signalHost, String protocol) { + public static void build(String packagePath, DinerosPackage dinerosPackage, List<NetInfo> netInfos, String engineVersion, + String rosHost, String rosMasterUri, String signalHost, String protocol) { List<PetriNet> nets = new ArrayList<>(); @@ -25,12 +24,6 @@ public class PackageStructureBuilder { nets.add(PnmlParser.parsePnml(n.net, false).get(0)); } - List<String> stringNetPaths = new ArrayList<>(); - - for(NetInfo n : netInfos){ - stringNetPaths.add(n.net); - } - try { Files.createDirectories(Paths.get(packagePath)); @@ -39,7 +32,7 @@ public class PackageStructureBuilder { buildStaticFilesIntoDinerosPackage(dinerosPackage, engineVersion); includeDirectoriesRecursive(dinerosPackage.getDir(0), packagePath); - includeTemplateFiles(dinerosPackage, nets, engineVersion, protocol, netInfos, rosHost, rosMasterUri, signalHost); + includeTemplateFiles(dinerosPackage, protocol, netInfos, rosHost, rosMasterUri, signalHost, engineVersion); includeFilesInPackageRecursive(dinerosPackage.getDir(0), packagePath); insertStringsAsFilesRecursive(dinerosPackage.getDir(0), packagePath); @@ -49,7 +42,6 @@ public class PackageStructureBuilder { e.printStackTrace(); } - } ///////////////////////////////////// @@ -63,7 +55,6 @@ public class PackageStructureBuilder { if(pf.isJavaFile()){ System.out.println("Writing file " + pf.getName() + " to: " + packagePath + "/" + packageDirectory.getName() + "/" + pf.getName() + ".java"); - //System.out.println("Content: \n" + pf.asTemplateFile().getFileContent()); writeToFile(packagePath + "/" + packageDirectory.getName() + "/" + pf.getName() + ".java", pf.asTemplateFile().getFileContent()); }else { System.out.println("Writing file " + pf.getName() + " to: " + packagePath + "/" + packageDirectory.getName() + "/" + pf.getName()); @@ -106,6 +97,11 @@ public class PackageStructureBuilder { gradleProbs.setName("gradle.properties"); gradleProbs.setFileID(UUID.randomUUID().toString()); pd.addFile(gradleProbs); + + GradleFile gradleSettings = new GradleFile(); + gradleSettings.setName("settings.gradle"); + gradleSettings.setFileID(UUID.randomUUID().toString()); + pd.addFile(gradleSettings); } if (pd.getName().equals("nodes")) { @@ -119,10 +115,10 @@ public class PackageStructureBuilder { if (pd.getName().equals("launchers")) { for (NetInfo netInfo : netInfos) { - LauncherFile launcherBinding = new LauncherFile(); - launcherBinding.setName(netInfo.name + "Launcher"); - launcherBinding.setFileID(UUID.randomUUID().toString()); - pd.addFile(launcherBinding); + LauncherFile launcher = new LauncherFile(); + launcher.setName(netInfo.name + "Launcher"); + launcher.setFileID(UUID.randomUUID().toString()); + pd.addFile(launcher); } } @@ -245,11 +241,10 @@ public class PackageStructureBuilder { // TREE TO FILE TREE //////////////// ///////////////////////////////////// - private static void includeTemplateFiles(DinerosPackage dinerosPackage, List<PetriNet> nets, String engineVersion, String protocol, - List<NetInfo> netInfos, String rosHost, String rosMasterUri, String signalHost) { - - Set<String> visitedPackageFileIDs = new HashSet<>(); + private static void includeTemplateFiles(DinerosPackage dinerosPackage, String protocol, List<NetInfo> netInfos, + String rosHost, String rosMasterUri, String signalHost, String engineVersion) { + System.out.println("Generating contents of nodes."); for (NetInfo netInfo : netInfos) { for (PackageFile pf : dinerosPackage.allPackageFiles()) { if (pf.isNodeFile() && pf.getName().equals(netInfo.name)){ @@ -259,31 +254,32 @@ public class PackageStructureBuilder { } } - /* for (NetInfo netInfo : netInfos) { + System.out.println("Generating contents of launchers."); + for (NetInfo netInfo : netInfos) { for (PackageFile pf : dinerosPackage.allPackageFiles()) { - - if (pf.isNodeFile() && i == Integer.parseInt(splitNodeFileId[1])) { - pf.setName("Node" + splitNodeFileId[1]); - pf.asNodeFile().generate(protocol); - break; + String launchFileName = netInfo.name + "Launcher"; + if (pf.isLauncherFile() && pf.getName().equals(launchFileName)){ + pf.setName(launchFileName); + pf.asLauncherFile().generate(rosHost, rosMasterUri, signalHost, netInfo.net, netInfo.name); } } + } - for (PackageFile pf : dinerosPackage.allPackageFiles()) { - if (!visitedPackageFileIDs.contains(pf.getFileID())) { + System.out.println("Generating contents of gradle files."); + for (PackageFile pf : dinerosPackage.allPackageFiles()) { - if (pf.getName().equals("build.gradle")) { - // pf.asGradleFile().generateBuildGradle(mainClassName, dinerosPackage.getName(), dinerosPackage.getVersion(), engineVersion); - visitedPackageFileIDs.add(pf.getFileID()); - } + if (pf.getName().equals("build.gradle")) { + System.out.println(">>> build.gradle"); + pf.asGradleFile().generateBuildGradle(dinerosPackage.getRootName(), dinerosPackage.getVersion(), + engineVersion, dinerosPackage.getNamespace(), netInfos); - if (pf.getName().equals("settings.gradle")) { - pf.asGradleFile().generateSettingsGradle(dinerosPackage.getRootName()); - visitedPackageFileIDs.add(pf.getFileID()); - } - } } - }*/ + + if (pf.getName().equals("settings.gradle")) { + System.out.println(">>> settings.gradle"); + pf.asGradleFile().generateSettingsGradle(dinerosPackage.getRootName()); + } + } } private static void includeDirectoriesRecursive(PackageDirectory packageDirectory, String packagePath) throws IOException { @@ -331,4 +327,4 @@ public class PackageStructureBuilder { } } } -} +} \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/data/LauncherContext.java b/src/main/java/de/tudresden/inf/st/pnml/gen/data/LauncherContext.java index 612f4c4..643af9c 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/gen/data/LauncherContext.java +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/data/LauncherContext.java @@ -4,16 +4,16 @@ public class LauncherContext { private String rosHost; private String rosMasterUri; - private String mqttHost; + private String signalHost; private String packageNamespace; private String netPath; private String nodeClassName; - public LauncherContext(String rosHost, String rosMasterUri, String mqttHost, + public LauncherContext(String rosHost, String rosMasterUri, String signalHost, String packageNamespace, String netPath, String nodeClassName) { this.rosHost = rosHost; this.rosMasterUri = rosMasterUri; - this.mqttHost = mqttHost; + this.signalHost = signalHost; this.packageNamespace = packageNamespace; this.netPath = netPath; this.nodeClassName = nodeClassName; @@ -35,12 +35,12 @@ public class LauncherContext { this.rosMasterUri = rosMasterUri; } - public String getMqttHost() { - return mqttHost; + public String getSignalHost() { + return signalHost; } - public void setMqttHost(String mqttHost) { - this.mqttHost = mqttHost; + public void setSignalHost(String signalHost) { + this.signalHost = signalHost; } public String getPackageNamespace() { diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java index 1721f11..e38b36b 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java @@ -7,11 +7,11 @@ import java.util.Map; public class JavaClassGenUtil extends AbstractGenUtil{ - public static String generateLauncherClass(String rosHost, String rosMasterUri, String mqttHost, + public static String generateLauncherClass(String rosHost, String rosMasterUri, String signalHost, String packageNamespace, String netPath, String nodeName){ Map<String, Object> context = new HashMap<>(); - LauncherContext launcherContext = new LauncherContext(rosHost, rosMasterUri, mqttHost, + LauncherContext launcherContext = new LauncherContext(rosHost, rosMasterUri, signalHost, packageNamespace, netPath, nodeName); context.put("launcherContext", launcherContext); return generate(context, "JavaLauncher.mustache"); diff --git a/src/main/resources/mustache/JavaLauncher.mustache b/src/main/resources/mustache/JavaLauncher.mustache index c61e979..b22c732 100644 --- a/src/main/resources/mustache/JavaLauncher.mustache +++ b/src/main/resources/mustache/JavaLauncher.mustache @@ -10,7 +10,7 @@ public class {{{nodeClassName}}}Launcher { private static final String ROS_HOST = "{{{rosHost}}}"; private static final String ROS_MASTER_URI = "{{{rosMasterUri}}}"; - private static final String MQTT_HOST = "{{{mqttHost}}}"; + private static final String SIGNAL_HOST = "{{{signalHost}}}"; protected static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST); protected static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault(); @@ -22,7 +22,7 @@ public class {{{nodeClassName}}}Launcher { String petriNetPath = "{{{netPath}}}"; PetriNet petriNet = PnmlParser.parsePnml(petriNetPath, true).get(0); - {{{nodeClassName}}} node = new {{{nodeClassName}}}("{{{nodeClassName}}}", petriNet, MQTT_HOST); + {{{nodeClassName}}} node = new {{{nodeClassName}}}("{{{nodeClassName}}}", petriNet, SIGNAL_HOST); // TODO: bind handlers to transitions -- GitLab