You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by ld...@apache.org on 2021/07/29 13:24:06 UTC

[plc4x] 01/02: PLC4X-307 Add support for custom generator options.

This is an automated email from the ASF dual-hosted git repository.

ldywicki pushed a commit to branch feature/PLC4X-307
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 43f239e0b2f92388a3e9445f6f0945594ca50b41
Author: Ɓukasz Dywicki <lu...@code-house.org>
AuthorDate: Thu Jul 29 13:19:38 2021 +0200

    PLC4X-307 Add support for custom generator options.
    
    Ships a new 'package' parameter for Java code generator which lets to specify root package of generated code.
---
 .../protocol/freemarker/FreemarkerLanguageOutput.java      | 11 +++++++----
 .../java/org/apache/plc4x/language/c/CLanguageOutput.java  |  9 ++++++++-
 .../org/apache/plc4x/language/go/GoLanguageOutput.java     |  8 +++++++-
 .../org/apache/plc4x/language/java/JavaLanguageOutput.java | 10 ++++++++--
 .../plc4x/language/java/JavaLanguageTemplateHelper.java    | 14 ++++++++++----
 5 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java b/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java
index c5d4122..ff8f076 100644
--- a/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java
+++ b/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java
@@ -41,7 +41,8 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput {
     private static final Logger LOGGER = LoggerFactory.getLogger(FreemarkerLanguageOutput.class);
 
     @Override
-    public void generate(File outputDir, String languageName, String protocolName, String outputFlavor, Map<String, TypeDefinition> types)
+    public void generate(File outputDir, String languageName, String protocolName, String outputFlavor, Map<String, TypeDefinition> types,
+        Map<String, String> options)
         throws GenerationException {
 
         // Configure the Freemarker template engine
@@ -70,7 +71,8 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput {
             typeContext.put("languageName", languageName);
             typeContext.put("protocolName", protocolName);
             typeContext.put("outputFlavor", outputFlavor);
-            typeContext.put("helper", getHelper(null, protocolName, outputFlavor, types));
+            typeContext.put("helper", getHelper(null, protocolName, outputFlavor, types, options));
+            typeContext.putAll(options);
 
             for (Template template : specTemplates) {
                 try {
@@ -90,7 +92,7 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput {
             typeContext.put("outputFlavor", outputFlavor);
             typeContext.put("typeName", typeEntry.getKey());
             typeContext.put("type", typeEntry.getValue());
-            typeContext.put("helper", getHelper(typeEntry.getValue(), protocolName, outputFlavor, types));
+            typeContext.put("helper", getHelper(typeEntry.getValue(), protocolName, outputFlavor, types, options));
 
             // Depending on the type, get the corresponding list of templates.
             List<Template> templateList;
@@ -179,6 +181,7 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput {
 
     protected abstract List<Template> getDataIoTemplates(Configuration freemarkerConfiguration) throws IOException;
 
-    protected abstract FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types);
+    protected abstract FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types,
+        Map<String, String> options);
 
 }
diff --git a/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java b/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java
index a32c756..e35a8ed 100644
--- a/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java
+++ b/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java
@@ -20,6 +20,7 @@ package org.apache.plc4x.language.c;
 
 import freemarker.template.Configuration;
 import freemarker.template.Template;
+import java.util.Set;
 import org.apache.plc4x.plugins.codegenerator.protocol.freemarker.FreemarkerLanguageOutput;
 import org.apache.plc4x.plugins.codegenerator.protocol.freemarker.FreemarkerLanguageTemplateHelper;
 import org.apache.plc4x.plugins.codegenerator.types.definitions.TypeDefinition;
@@ -38,6 +39,11 @@ public class CLanguageOutput extends FreemarkerLanguageOutput {
     }
 
     @Override
+    public Set<String> supportedOptions() {
+        return Collections.emptySet();
+    }
+
+    @Override
     public List<String> supportedOutputFlavors() {
         return Collections.singletonList("read-write");
     }
@@ -69,7 +75,8 @@ public class CLanguageOutput extends FreemarkerLanguageOutput {
     }
 
     @Override
-    protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types) {
+    protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types,
+        Map<String, String> options) {
         return new CLanguageTemplateHelper(thisType, protocolName, flavorName, types);
     }
 
diff --git a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java
index d578b50..e73aeee 100644
--- a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java
+++ b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java
@@ -35,6 +35,11 @@ public class GoLanguageOutput extends FreemarkerLanguageOutput {
     }
 
     @Override
+    public Set<String> supportedOptions() {
+        return Collections.emptySet();
+    }
+
+    @Override
     public List<String> supportedOutputFlavors() {
         return Arrays.asList("read-write", "read-only", "passive");
     }
@@ -65,7 +70,8 @@ public class GoLanguageOutput extends FreemarkerLanguageOutput {
     }
 
     @Override
-    protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types) {
+    protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types,
+        Map<String, String> options) {
         return new GoLanguageTemplateHelper(thisType, protocolName, flavorName, types);
     }
 
diff --git a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java
index a6d5457..f859dd4 100644
--- a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java
+++ b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java
@@ -35,6 +35,11 @@ public class JavaLanguageOutput extends FreemarkerLanguageOutput {
     }
 
     @Override
+    public Set<String> supportedOptions() {
+        return Collections.singleton("package");
+    }
+
+    @Override
     public List<String> supportedOutputFlavors() {
         return Arrays.asList("read-write", "read-only", "passive");
     }
@@ -65,8 +70,9 @@ public class JavaLanguageOutput extends FreemarkerLanguageOutput {
     }
 
     @Override
-    protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types) {
-        return new JavaLanguageTemplateHelper(thisType, protocolName, flavorName, types);
+    protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types,
+        Map<String, String> options) {
+        return new JavaLanguageTemplateHelper(thisType, protocolName, flavorName, types, options);
     }
 
 }
diff --git a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
index bdddcbf..a5158b3 100644
--- a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
+++ b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
@@ -19,6 +19,7 @@
 
 package org.apache.plc4x.language.java;
 
+import java.util.Optional;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.commons.text.WordUtils;
@@ -34,14 +35,19 @@ import java.util.function.Function;
 @SuppressWarnings({"unused", "WeakerAccess"})
 public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelper {
 
-    public JavaLanguageTemplateHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types) {
+    private final Map<String, String> options;
+
+    public JavaLanguageTemplateHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types,
+        Map<String, String> options) {
         super(thisType, protocolName, flavorName, types);
+        this.options = options;
     }
 
     public String packageName(String protocolName, String languageName, String languageFlavorName) {
-        return "org.apache.plc4x." + String.join("", languageName.split("\\-")) + "." +
-            String.join("", protocolName.split("\\-")) + "." +
-            String.join("", languageFlavorName.split("\\-"));
+        return Optional.ofNullable(options.get("package")).orElseGet(() ->
+            "org.apache.plc4x." + String.join("", languageName.split("\\-")) + "." +
+                String.join("", protocolName.split("\\-")) + "." +
+                String.join("", languageFlavorName.split("\\-")));
     }
 
     @Override