Skip to content

Commit 2e768d9

Browse files
committed
feat: Made KNX KnxDatapointType have information on the correlated PlcValueType
1 parent a3f3d6d commit 2e768d9

File tree

198 files changed

+4442
-612
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

198 files changed

+4442
-612
lines changed

code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ public String getName() {
3636
}
3737

3838
@Override
39-
public List<String> supportedOutputFlavors() {
40-
return Arrays.asList("read-write", "read-only", "passive");
39+
public Set<String> supportedOptions() {
40+
return new HashSet<>(List.of(
41+
// Map containing the type-names for external types.
42+
"externalTypes"));
4143
}
4244

4345
@Override
44-
public Set<String> supportedOptions() {
45-
return null;
46+
public List<String> supportedOutputFlavors() {
47+
return Arrays.asList("read-write", "read-only", "passive");
4648
}
4749

4850
@Override

code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageTemplateHelper.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,25 @@ public String packageName(String protocolName, String languageName, String langu
6161
String.join("", languageFlavorName.split("-")));
6262
}
6363

64+
public Set<String> getRequiredImports() {
65+
if(options.containsKey("externalTypes")) {
66+
Object externalTypes = options.get("externalTypes");
67+
if (!(externalTypes instanceof Map)) {
68+
throw new IllegalArgumentException("The option 'externalTypes' is not a Map");
69+
}
70+
Map<String, Object> externalTypesMap = (Map<String, Object>) externalTypes;
71+
72+
Set<String> externalTypesSet = new HashSet<>(externalTypesMap.size());
73+
for (String externalType : externalTypesMap.keySet()) {
74+
String externalTypeNamespace = (String) externalTypesMap.get(externalType);
75+
externalTypesSet.add(externalTypeNamespace);
76+
}
77+
return externalTypesSet;
78+
}
79+
80+
return Collections.emptySet();
81+
}
82+
6483
@Override
6584
public String getLanguageTypeNameForField(Field field) {
6685
// If the referenced type is a DataIo type, the value is of type PlcValue.
@@ -79,6 +98,32 @@ public String getLanguageTypeNameForField(Field field) {
7998

8099
@Override
81100
public String getLanguageTypeNameForTypeReference(TypeReference typeReference) {
101+
if(options.containsKey("externalTypes")) {
102+
Object externalTypes = options.get("externalTypes");
103+
if(!(externalTypes instanceof Map)) {
104+
throw new IllegalArgumentException("The option 'externalTypes' is not a Map");
105+
}
106+
Map<String, Object> externalTypesMap = (Map<String, Object>) externalTypes;
107+
108+
String typeName = null;
109+
if(typeReference.isComplexTypeReference()) {
110+
typeName = typeReference.asComplexTypeReference().orElseThrow().getName();
111+
} else if(typeReference.isEnumTypeReference()) {
112+
typeName = typeReference.asEnumTypeReference().orElseThrow().getName();
113+
}
114+
if((typeName != null) && externalTypesMap.containsKey(typeName)) {
115+
String replacement = externalTypesMap.get(typeName).toString();
116+
String namespaceAlias;
117+
if(replacement.contains(" ")) {
118+
namespaceAlias = replacement.split(" ")[0];
119+
} else {
120+
String[] split = replacement.split("/");
121+
namespaceAlias = split[split.length - 1];
122+
}
123+
return namespaceAlias + "." + typeName;
124+
}
125+
}
126+
82127
Objects.requireNonNull(typeReference);
83128
if (typeReference instanceof ArrayTypeReference) {
84129
final ArrayTypeReference arrayTypeReference = (ArrayTypeReference) typeReference;
@@ -1189,6 +1234,21 @@ public String escapeValue(TypeReference typeReference, String valueString) {
11891234
return "\"" + valueString + "\"";
11901235
}
11911236
} else if (typeReference.isEnumTypeReference()) {
1237+
if(options.containsKey("externalTypes")) {
1238+
Object externalTypes = options.get("externalTypes");
1239+
if (!(externalTypes instanceof Map)) {
1240+
throw new IllegalArgumentException("The option 'externalTypes' is not a Map");
1241+
}
1242+
Map<String, Object> externalTypesMap = (Map<String, Object>) externalTypes;
1243+
1244+
// If this is an external type
1245+
if(externalTypesMap.containsKey(typeReference.asEnumTypeReference().orElseThrow().getName())) {
1246+
String namespace = (String) externalTypesMap.get(typeReference.asEnumTypeReference().orElseThrow().getName());
1247+
String namespacePrefix = namespace.contains(".") ? namespace.substring(namespace.lastIndexOf(".") + 1) : namespace;
1248+
return namespacePrefix + "." + typeReference.asEnumTypeReference().orElseThrow().getName() + "." + valueString;
1249+
}
1250+
}
1251+
11921252
return "model." + typeReference.asEnumTypeReference().orElseThrow().getName() + "." + valueString;
11931253
}
11941254
return valueString;

code-generation/language-cs/src/main/resources/templates/cs/data-io-template.cs.ftlh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<#-- @ftlvariable name="helper" type="org.apache.plc4x.language.cs.CsLanguageTemplateHelper" -->
2626
<#-- @ftlvariable name="tracer" type="org.apache.plc4x.plugins.codegenerator.protocol.freemarker.Tracer" -->
2727
<#-- @ftlvariable name="type" type="org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition" -->
28-
${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.cs
28+
<#if !helper.isExternal()>${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.cs</#if>
2929
/*
3030
* Licensed to the Apache Software Foundation (ASF) under one
3131
* or more contributor license agreements. See the NOTICE file
@@ -53,6 +53,9 @@ using NLog;
5353
using org.apache.plc4net.api.value;
5454
using org.apache.plc4net.spi.generation;
5555
using org.apache.plc4net.spi.model.values;
56+
<#list helper.getRequiredImports() as import>
57+
using ${import};
58+
</#list>
5659

5760
<#-- TODO: the code below implies that parserArguments will be null if not present... not pretty -->
5861
<#if type.parserArguments.isPresent()><#assign parserArguments=type.parserArguments.orElseThrow()></#if>

code-generation/language-cs/src/main/resources/templates/cs/enum-template.cs.ftlh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<#-- @ftlvariable name="helper" type="org.apache.plc4x.language.cs.CsLanguageTemplateHelper" -->
2727
<#-- @ftlvariable name="tracer" type="org.apache.plc4x.plugins.codegenerator.protocol.freemarker.Tracer" -->
2828
<#-- @ftlvariable name="type" type="org.apache.plc4x.plugins.codegenerator.types.definitions.EnumTypeDefinition" -->
29-
${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.cs
29+
<#if !helper.isExternal()>${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.cs</#if>
3030
/*
3131
* Licensed to the Apache Software Foundation (ASF) under one
3232
* or more contributor license agreements. See the NOTICE file
@@ -47,6 +47,9 @@ ${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/m
4747
*/
4848

4949
// Code generated by code-generation. DO NOT EDIT.
50+
<#list helper.getRequiredImports() as import>
51+
using ${import};
52+
</#list>
5053

5154
namespace org.apache.plc4net.drivers.${protocolName?replace("-", "")}.${outputFlavor?replace("-", "")}.model
5255
{

code-generation/language-cs/src/main/resources/templates/cs/io-template.cs.ftlh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<#-- @ftlvariable name="helper" type="org.apache.plc4x.language.cs.CsLanguageTemplateHelper" -->
2626
<#-- @ftlvariable name="tracer" type="org.apache.plc4x.plugins.codegenerator.protocol.freemarker.Tracer" -->
2727
<#-- @ftlvariable name="type" type="org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition" -->
28-
${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/io/${type.name}.cs
28+
<#if !helper.isExternal()>${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/io/${type.name}.cs</#if>
2929
/*
3030
* Licensed to the Apache Software Foundation (ASF) under one
3131
* or more contributor license agreements. See the NOTICE file
@@ -46,6 +46,9 @@ ${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/m
4646
*/
4747

4848
// Code generated by code-generation. DO NOT EDIT.
49+
<#list helper.getRequiredImports() as import>
50+
using ${import};
51+
</#list>
4952

5053
<#-- TODO: the code below implies that parserArguments will be null if not present... not pretty -->
5154
<#if type.parserArguments.isPresent()><#assign parserArguments=type.allParserArguments.orElseThrow()></#if>

code-generation/language-cs/src/main/resources/templates/cs/model-template.cs.ftlh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<#-- @ftlvariable name="tracer" type="org.apache.plc4x.plugins.codegenerator.protocol.freemarker.Tracer" -->
2727
<#-- @ftlvariable name="type" type="org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition" -->
2828
<#-- Declare the name and type of variables declared locally inside the template -->
29-
${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.cs
29+
<#if !helper.isExternal()>${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.cs</#if>
3030
/*
3131
* Licensed to the Apache Software Foundation (ASF) under one
3232
* or more contributor license agreements. See the NOTICE file
@@ -52,6 +52,9 @@ using System.Text;
5252
using org.apache.plc4net.api.value;
5353
using org.apache.plc4net.spi.generation;
5454
using org.apache.plc4net.spi.model.values;
55+
<#list helper.getRequiredImports() as import>
56+
using ${import};
57+
</#list>
5558

5659
// Code generated by code-generation. DO NOT EDIT.
5760

plc4go/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,11 @@
645645
<languageName>go</languageName>
646646
<outputFlavor>read-write</outputFlavor>
647647
<outputDir>${project.basedir}/protocols</outputDir>
648+
<options>
649+
<externalTypes>
650+
<PlcValueType>github.com/apache/plc4x/plc4go/pkg/api/values</PlcValueType>
651+
</externalTypes>
652+
</options>
648653
</configuration>
649654
</execution>
650655
<execution>

0 commit comments

Comments
 (0)