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