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