You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2019/05/05 09:50:10 UTC
[plc4x] 01/02: Some refactorings.
This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch feature/code-gen
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 264a616fd62f6daa9ecbb934832d56634667efbb
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Sun May 5 10:17:03 2019 +0200
Some refactorings.
---
sandbox/code-gen/pom.xml | 5 +
.../java/org/apache/plc4x/codegen/DFDLUtil.java | 50 ++
.../codegen/{version2 => ast}/AbstractNode.java | 2 +-
.../{version2 => ast}/AssignementExpression.java | 2 +-
.../{version2 => ast}/BinaryExpression.java | 2 +-
.../plc4x/codegen/{version2 => ast}/Block.java | 2 +-
.../codegen/{version2 => ast}/CallExpression.java | 2 +-
.../codegen/{version2 => ast}/ClassDefinition.java | 2 +-
.../codegen/{version2 => ast}/CodeWriter.java | 2 +-
.../{version2 => ast}/ConditionalStatement.java | 2 +-
.../codegen/{version2 => ast}/ConstantNode.java | 2 +-
.../{version2 => ast}/ConstructorDeclaration.java | 2 +-
.../{version2 => ast}/DeclarationStatement.java | 2 +-
.../codegen/{version2 => ast}/Expression.java | 2 +-
.../{version2 => ast}/FieldDeclaration.java | 2 +-
.../codegen/{version2 => ast}/FieldReference.java | 2 +-
.../plc4x/codegen/{version2 => ast}/FileNode.java | 2 +-
.../plc4x/codegen/{version2 => ast}/Generator.java | 2 +-
.../codegen/{version2 => ast}/IfStatement.java | 2 +-
.../codegen/{version2 => ast}/JavaGenerator.java | 2 +-
.../codegen/{version2 => ast}/LineComment.java | 2 +-
.../plc4x/codegen/{version2 => ast}/Method.java | 2 +-
.../{version2 => ast}/MethodDefinition.java | 2 +-
.../codegen/{version2 => ast}/NewExpression.java | 2 +-
.../plc4x/codegen/{version2 => ast}/NoOp.java | 2 +-
.../plc4x/codegen/{version2 => ast}/Node.java | 2 +-
.../codegen/{version2 => ast}/NodeVisitor.java | 2 +-
.../{version2 => ast}/ParameterExpression.java | 2 +-
.../codegen/{version2 => ast}/PhpGenerator.java | 2 +-
.../codegen/{version2 => ast}/PojoFactory.java | 2 +-
.../plc4x/codegen/{version2 => ast}/Primitive.java | 2 +-
.../codegen/{version2 => ast}/PythonGenerator.java | 2 +-
.../codegen/{version2 => ast}/ReturnStatement.java | 2 +-
.../plc4x/codegen/{version2 => ast}/Statement.java | 2 +-
.../plc4x/codegen/{version2 => ast}/TypeNode.java | 2 +-
.../plc4x/codegen/{version2 => ast}/TypeUtil.java | 2 +-
.../codegen/{ => python}/AbstractNodeVisitor.java | 2 +-
.../apache/plc4x/codegen/{ => python}/AddNode.java | 2 +-
.../plc4x/codegen/{ => python}/AliasNode.java | 2 +-
.../codegen/{ => python}/AnnAssignerNode.java | 2 +-
.../apache/plc4x/codegen/{ => python}/ArgNode.java | 2 +-
.../plc4x/codegen/{ => python}/ArgumentsNode.java | 2 +-
.../plc4x/codegen/{ => python}/AssignNode.java | 2 +-
.../plc4x/codegen/{ => python}/AttributeNode.java | 2 +-
.../plc4x/codegen/{ => python}/AugAssignNode.java | 2 +-
.../plc4x/codegen/{ => python}/BinOpNode.java | 2 +-
.../plc4x/codegen/{ => python}/CallNode.java | 2 +-
.../plc4x/codegen/{ => python}/ClassDefNode.java | 2 +-
.../plc4x/codegen/{ => python}/CodePrinter.java | 2 +-
.../plc4x/codegen/{ => python}/CompareNode.java | 2 +-
.../plc4x/codegen/{ => python}/ContextNode.java | 2 +-
.../apache/plc4x/codegen/{ => python}/EqNode.java | 2 +-
.../plc4x/codegen/{ => python}/ExprNode.java | 2 +-
.../codegen/{ => python}/FunctionDefNode.java | 2 +-
.../apache/plc4x/codegen/{ => python}/IfNode.java | 2 +-
.../plc4x/codegen/{ => python}/ImportFromNode.java | 2 +-
.../plc4x/codegen/{ => python}/KeywordNode.java | 2 +-
.../plc4x/codegen/{ => python}/LineEntryNode.java | 2 +-
.../plc4x/codegen/{ => python}/ListNode.java | 2 +-
.../plc4x/codegen/{ => python}/LoadNode.java | 2 +-
.../plc4x/codegen/{ => python}/ModuleNode.java | 2 +-
.../plc4x/codegen/{ => python}/MultNode.java | 2 +-
.../codegen/{ => python}/NameConstantNode.java | 2 +-
.../plc4x/codegen/{ => python}/NameNode.java | 2 +-
.../apache/plc4x/codegen/{ => python}/Node.java | 2 +-
.../plc4x/codegen/{ => python}/NodeVisitor.java | 2 +-
.../plc4x/codegen/{ => python}/NotEqNode.java | 2 +-
.../apache/plc4x/codegen/{ => python}/NumNode.java | 2 +-
.../plc4x/codegen/{ => python}/PassNode.java | 2 +-
.../plc4x/codegen/{ => python}/ReturnNode.java | 2 +-
.../plc4x/codegen/{ => python}/StoreNode.java | 2 +-
.../apache/plc4x/codegen/{ => python}/StrNode.java | 2 +-
.../plc4x/codegen/{ => python}/TupleNode.java | 2 +-
.../plc4x/codegen/{ => python}/WhileNode.java | 2 +-
.../org/apache/plc4x/codegen/DFDLUtilTest.java | 22 +
.../org/apache/plc4x/codegen/ModuleNodeTest.java | 37 +-
.../java/org/apache/plc4x/codegen/PojoBuilder.java | 17 +
.../{version2 => ast}/JavaGeneratorTest.java | 2 +-
.../{version2 => ast}/PhpGeneratorTest.java | 2 +-
.../codegen/{version2 => ast}/PojoFactoryTest.java | 6 +-
.../{version2 => ast}/PythonGeneratorTest.java | 2 +-
.../code-gen/src/test/resources/protocol.dfdl.xsd | 909 +++++++++++++++++++++
82 files changed, 1115 insertions(+), 81 deletions(-)
diff --git a/sandbox/code-gen/pom.xml b/sandbox/code-gen/pom.xml
index 4aa7a12..e7390ae 100644
--- a/sandbox/code-gen/pom.xml
+++ b/sandbox/code-gen/pom.xml
@@ -20,6 +20,11 @@
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
+ <groupId>org.dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>2.1.1</version>
+ </dependency>
+ <dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/DFDLUtil.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/DFDLUtil.java
new file mode 100644
index 0000000..08331b3
--- /dev/null
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/DFDLUtil.java
@@ -0,0 +1,50 @@
+package org.apache.plc4x.codegen;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Namespace;
+import org.dom4j.QName;
+import org.dom4j.io.SAXReader;
+
+import java.io.File;
+import java.util.Iterator;
+
+/**
+ * Util to create a POJO from a DFDL file.
+ */
+public class DFDLUtil {
+
+ private static final Namespace xsNamespace = new Namespace("xs", "http://www.w3.org/2001/XMLSchema");
+ private static final QName complexType = new QName("complexType", xsNamespace);
+
+ public void transform(File dfdlSchemaFile, File outputDir) {
+ assert outputDir.exists();
+ assert outputDir.isDirectory();
+
+
+ final Document schema = parseDFDLSchema(dfdlSchemaFile);
+
+ final Iterator<Element> iterator = getMainTypes(schema);
+
+ while (iterator.hasNext()) {
+ final Element element = iterator.next();
+ System.out.println(element);
+ }
+ }
+
+ private Document parseDFDLSchema(File schemaFile) {
+ try {
+ SAXReader reader = new SAXReader();
+ return reader.read(schemaFile);
+ } catch (DocumentException e) {
+ // Do something
+ throw new RuntimeException("Unable to read DFDL Schema File", e);
+ }
+ }
+
+ private Iterator<Element> getMainTypes(Document dfdlSchema) {
+ Element rootElement = dfdlSchema.getRootElement();
+ return rootElement.elementIterator(complexType);
+ }
+}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/AbstractNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/AbstractNode.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/AbstractNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/AbstractNode.java
index abf44ae..ad9d3c1 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/AbstractNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/AbstractNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public abstract class AbstractNode implements Node {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/AssignementExpression.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/AssignementExpression.java
similarity index 93%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/AssignementExpression.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/AssignementExpression.java
index 9544eed..f6cf445 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/AssignementExpression.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/AssignementExpression.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class AssignementExpression extends Expression {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/BinaryExpression.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/BinaryExpression.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/BinaryExpression.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/BinaryExpression.java
index 0aef957..e40807b 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/BinaryExpression.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/BinaryExpression.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class BinaryExpression extends Expression {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Block.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Block.java
similarity index 92%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Block.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Block.java
index dff5888..5236f64 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Block.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Block.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.Arrays;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/CallExpression.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/CallExpression.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/CallExpression.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/CallExpression.java
index d3060a7..0efbc16 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/CallExpression.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/CallExpression.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.Arrays;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ClassDefinition.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ClassDefinition.java
similarity index 97%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ClassDefinition.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ClassDefinition.java
index ce212a3..1d4bd5c 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ClassDefinition.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ClassDefinition.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/CodeWriter.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/CodeWriter.java
similarity index 96%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/CodeWriter.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/CodeWriter.java
index a2e897e..bac3964 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/CodeWriter.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/CodeWriter.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.stream.IntStream;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConditionalStatement.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConditionalStatement.java
similarity index 86%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConditionalStatement.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConditionalStatement.java
index 9a381b1..227ae44 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConditionalStatement.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConditionalStatement.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class ConditionalStatement extends Expression {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConstantNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstantNode.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConstantNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstantNode.java
index df43f3c..43068f9 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConstantNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstantNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class ConstantNode extends Expression {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConstructorDeclaration.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstructorDeclaration.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConstructorDeclaration.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstructorDeclaration.java
index 084d548..df5b02b 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ConstructorDeclaration.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ConstructorDeclaration.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/DeclarationStatement.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/DeclarationStatement.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/DeclarationStatement.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/DeclarationStatement.java
index cfc5b06..36d3b66 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/DeclarationStatement.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/DeclarationStatement.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class DeclarationStatement extends Statement {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Expression.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Expression.java
similarity index 75%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Expression.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Expression.java
index 77bd812..c57b9a5 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Expression.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Expression.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public abstract class Expression extends AbstractNode {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FieldDeclaration.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldDeclaration.java
similarity index 90%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FieldDeclaration.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldDeclaration.java
index c4f8790..df13db2 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FieldDeclaration.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldDeclaration.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class FieldDeclaration implements Node {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FieldReference.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldReference.java
similarity index 89%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FieldReference.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldReference.java
index 7ae8759..8e88319 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FieldReference.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FieldReference.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class FieldReference extends ParameterExpression {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FileNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FileNode.java
similarity index 93%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FileNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FileNode.java
index 36cc3a7..e3036cb 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/FileNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/FileNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Generator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Generator.java
similarity index 97%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Generator.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Generator.java
index 24fef5c..25a34e2 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Generator.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Generator.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/IfStatement.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/IfStatement.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/IfStatement.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/IfStatement.java
index e984f9b..24949d2 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/IfStatement.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/IfStatement.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class IfStatement extends Statement {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/JavaGenerator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/JavaGenerator.java
similarity index 99%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/JavaGenerator.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/JavaGenerator.java
index 8c79c24..875fa1c 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/JavaGenerator.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/JavaGenerator.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/LineComment.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/LineComment.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/LineComment.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/LineComment.java
index 0b89d74..85e3b4d 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/LineComment.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/LineComment.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
/**
* Comment over one Line
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Method.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Method.java
similarity index 96%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Method.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Method.java
index 9cfdd0c..05dd023 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Method.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Method.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/MethodDefinition.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/MethodDefinition.java
similarity index 97%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/MethodDefinition.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/MethodDefinition.java
index 884b123..76f0346 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/MethodDefinition.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/MethodDefinition.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.Collections;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NewExpression.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NewExpression.java
similarity index 92%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NewExpression.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NewExpression.java
index 1e4c467..012e321 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NewExpression.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NewExpression.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.Arrays;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NoOp.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NoOp.java
similarity index 87%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NoOp.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NoOp.java
index e8f5099..c59a87f 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NoOp.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NoOp.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
/**
* Do Nothing command;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Node.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Node.java
similarity index 71%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Node.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Node.java
index e569b05..f8dc47a 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Node.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Node.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public interface Node {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NodeVisitor.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NodeVisitor.java
similarity index 81%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NodeVisitor.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NodeVisitor.java
index dc690d6..55fd6ad 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/NodeVisitor.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/NodeVisitor.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public interface NodeVisitor<T> {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ParameterExpression.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ParameterExpression.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ParameterExpression.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ParameterExpression.java
index 8216e70..fda0db0 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ParameterExpression.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ParameterExpression.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class ParameterExpression extends Expression {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PhpGenerator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PhpGenerator.java
similarity index 98%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PhpGenerator.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PhpGenerator.java
index 325d4c9..f0fe64c 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PhpGenerator.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PhpGenerator.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PojoFactory.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java
similarity index 98%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PojoFactory.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java
index 857bbed..bfe345f 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PojoFactory.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PojoFactory.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Primitive.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Primitive.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Primitive.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Primitive.java
index 67f11bb..fcfeef9 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Primitive.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Primitive.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class Primitive extends TypeNode {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PythonGenerator.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PythonGenerator.java
similarity index 99%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PythonGenerator.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PythonGenerator.java
index 9430b53..898cefb 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/PythonGenerator.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/PythonGenerator.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import java.util.List;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ReturnStatement.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ReturnStatement.java
similarity index 90%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ReturnStatement.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ReturnStatement.java
index 0e87d6f..295dd5e 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/ReturnStatement.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/ReturnStatement.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class ReturnStatement extends Statement {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Statement.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Statement.java
similarity index 55%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Statement.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Statement.java
index 128baa8..10dc159 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/Statement.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/Statement.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public abstract class Statement implements Node {
}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/TypeNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/TypeNode.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/TypeNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/TypeNode.java
index 36fe9c7..07df5e6 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/TypeNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/TypeNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
/**
* Stub for the Type System.
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/TypeUtil.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/TypeUtil.java
similarity index 85%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/TypeUtil.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/TypeUtil.java
index fd6a010..27e6fe3 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/version2/TypeUtil.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ast/TypeUtil.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
public class TypeUtil {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AbstractNodeVisitor.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AbstractNodeVisitor.java
similarity index 99%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AbstractNodeVisitor.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AbstractNodeVisitor.java
index d6b9e62..3e8a04d 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AbstractNodeVisitor.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AbstractNodeVisitor.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
public class AbstractNodeVisitor<T> implements NodeVisitor<T> {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AddNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AddNode.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AddNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AddNode.java
index 3e794c5..b00576b 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AddNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AddNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AliasNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AliasNode.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AliasNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AliasNode.java
index 21d7247..97f1c1b 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AliasNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AliasNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AnnAssignerNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AnnAssignerNode.java
similarity index 96%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AnnAssignerNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AnnAssignerNode.java
index 70143b5..b827741 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AnnAssignerNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AnnAssignerNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ArgNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ArgNode.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ArgNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ArgNode.java
index 7dc1757..abb910f 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ArgNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ArgNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ArgumentsNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ArgumentsNode.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ArgumentsNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ArgumentsNode.java
index 8f4ea38..a9d6273 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ArgumentsNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ArgumentsNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AssignNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AssignNode.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AssignNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AssignNode.java
index 1211b42..2b8f775 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AssignNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AssignNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AttributeNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AttributeNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AttributeNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AttributeNode.java
index 648ad7b..955f70e 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AttributeNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AttributeNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AugAssignNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AugAssignNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AugAssignNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AugAssignNode.java
index 658f14c..30817b6 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/AugAssignNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/AugAssignNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/BinOpNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/BinOpNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/BinOpNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/BinOpNode.java
index aa126a5..0b097a7 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/BinOpNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/BinOpNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CallNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CallNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CallNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CallNode.java
index 5fd598a..71935bc 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CallNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CallNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ClassDefNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ClassDefNode.java
similarity index 96%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ClassDefNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ClassDefNode.java
index 0445741..ec8ed45 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ClassDefNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ClassDefNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CodePrinter.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CodePrinter.java
similarity index 96%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CodePrinter.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CodePrinter.java
index 7040542..e97aafb 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CodePrinter.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CodePrinter.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import java.util.stream.IntStream;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CompareNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CompareNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CompareNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CompareNode.java
index 12378a5..bda8e88 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/CompareNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/CompareNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ContextNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ContextNode.java
similarity index 55%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ContextNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ContextNode.java
index 5239760..395c483 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ContextNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ContextNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
public abstract class ContextNode extends Node {
}
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/EqNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/EqNode.java
similarity index 83%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/EqNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/EqNode.java
index 04b84d7..302e09d 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/EqNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/EqNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ExprNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ExprNode.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ExprNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ExprNode.java
index 1f8fa79..3f5f1a7 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ExprNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ExprNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/FunctionDefNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/FunctionDefNode.java
similarity index 96%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/FunctionDefNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/FunctionDefNode.java
index 188bf68..4913a6c 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/FunctionDefNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/FunctionDefNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/IfNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/IfNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/IfNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/IfNode.java
index 5deef16..5748faf 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/IfNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/IfNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ImportFromNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ImportFromNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ImportFromNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ImportFromNode.java
index fc572c1..e7a29b0 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ImportFromNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ImportFromNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/KeywordNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/KeywordNode.java
similarity index 93%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/KeywordNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/KeywordNode.java
index 0dfe54a..2853614 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/KeywordNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/KeywordNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/LineEntryNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/LineEntryNode.java
similarity index 92%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/LineEntryNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/LineEntryNode.java
index 017ded2..cd3b0d1 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/LineEntryNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/LineEntryNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ListNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ListNode.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ListNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ListNode.java
index 32f6e90..0b6b83f 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ListNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ListNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/LoadNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/LoadNode.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/LoadNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/LoadNode.java
index cdf5327..70cab16 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/LoadNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/LoadNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ModuleNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ModuleNode.java
similarity index 92%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ModuleNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ModuleNode.java
index b17ea2d..c802813 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ModuleNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ModuleNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/MultNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/MultNode.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/MultNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/MultNode.java
index 1cecd78..f254afb 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/MultNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/MultNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NameConstantNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NameConstantNode.java
similarity index 92%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NameConstantNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NameConstantNode.java
index 13decf1..0d69905 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NameConstantNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NameConstantNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NameNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NameNode.java
similarity index 93%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NameNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NameNode.java
index c2a5d2f..dfc617f 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NameNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NameNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/Node.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/Node.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/Node.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/Node.java
index d8918ce..c31838f 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/Node.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/Node.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NodeVisitor.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NodeVisitor.java
similarity index 96%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NodeVisitor.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NodeVisitor.java
index f712f05..2384118 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NodeVisitor.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NodeVisitor.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
public interface NodeVisitor<T> {
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NotEqNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NotEqNode.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NotEqNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NotEqNode.java
index 60476f9..54844b8 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NotEqNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NotEqNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NumNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NumNode.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NumNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NumNode.java
index 57c6f9d..dd152f6 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/NumNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/NumNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/PassNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/PassNode.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/PassNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/PassNode.java
index ca5b611..09ba0b4 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/PassNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/PassNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ReturnNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ReturnNode.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ReturnNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ReturnNode.java
index 22235fa..0c08323 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/ReturnNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/ReturnNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/StoreNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/StoreNode.java
similarity index 84%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/StoreNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/StoreNode.java
index 8ac8205..4752108 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/StoreNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/StoreNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/StrNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/StrNode.java
similarity index 91%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/StrNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/StrNode.java
index 5bf0854..f2c7c9a 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/StrNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/StrNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/TupleNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/TupleNode.java
similarity index 94%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/TupleNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/TupleNode.java
index 0c06728..e24aab5 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/TupleNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/TupleNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/WhileNode.java b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/WhileNode.java
similarity index 95%
rename from sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/WhileNode.java
rename to sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/WhileNode.java
index 19e19dc..14866e9 100644
--- a/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/WhileNode.java
+++ b/sandbox/code-gen/src/main/java/org/apache/plc4x/codegen/python/WhileNode.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen;
+package org.apache.plc4x.codegen.python;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/DFDLUtilTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/DFDLUtilTest.java
new file mode 100644
index 0000000..df89b0c
--- /dev/null
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/DFDLUtilTest.java
@@ -0,0 +1,22 @@
+package org.apache.plc4x.codegen;
+
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.*;
+
+public class DFDLUtilTest {
+
+ @Test
+ public void loadDFDL() {
+ final File schema = new File("src/test/resources/protocol.dfdl.xsd");
+ final File outDir = new File("/tmp/");
+
+ System.out.println(schema.getAbsolutePath().toString());
+
+ final DFDLUtil util = new DFDLUtil();
+
+ util.transform(schema, outDir);
+ }
+}
\ No newline at end of file
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ModuleNodeTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ModuleNodeTest.java
index 1ba9fa3..08e6723 100644
--- a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ModuleNodeTest.java
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ModuleNodeTest.java
@@ -1,9 +1,44 @@
package org.apache.plc4x.codegen;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.plc4x.codegen.python.AbstractNodeVisitor;
+import org.apache.plc4x.codegen.python.AddNode;
+import org.apache.plc4x.codegen.python.AliasNode;
+import org.apache.plc4x.codegen.python.AnnAssignerNode;
+import org.apache.plc4x.codegen.python.ArgNode;
+import org.apache.plc4x.codegen.python.ArgumentsNode;
+import org.apache.plc4x.codegen.python.AssignNode;
+import org.apache.plc4x.codegen.python.AttributeNode;
+import org.apache.plc4x.codegen.python.AugAssignNode;
+import org.apache.plc4x.codegen.python.BinOpNode;
+import org.apache.plc4x.codegen.python.CallNode;
+import org.apache.plc4x.codegen.python.ClassDefNode;
+import org.apache.plc4x.codegen.python.CodePrinter;
+import org.apache.plc4x.codegen.python.CompareNode;
+import org.apache.plc4x.codegen.python.EqNode;
+import org.apache.plc4x.codegen.python.ExprNode;
+import org.apache.plc4x.codegen.python.FunctionDefNode;
+import org.apache.plc4x.codegen.python.IfNode;
+import org.apache.plc4x.codegen.python.ImportFromNode;
+import org.apache.plc4x.codegen.python.KeywordNode;
+import org.apache.plc4x.codegen.python.ListNode;
+import org.apache.plc4x.codegen.python.LoadNode;
+import org.apache.plc4x.codegen.python.ModuleNode;
+import org.apache.plc4x.codegen.python.MultNode;
+import org.apache.plc4x.codegen.python.NameConstantNode;
+import org.apache.plc4x.codegen.python.NameNode;
+import org.apache.plc4x.codegen.python.Node;
+import org.apache.plc4x.codegen.python.NodeVisitor;
+import org.apache.plc4x.codegen.python.NotEqNode;
+import org.apache.plc4x.codegen.python.NumNode;
+import org.apache.plc4x.codegen.python.PassNode;
+import org.apache.plc4x.codegen.python.ReturnNode;
+import org.apache.plc4x.codegen.python.StoreNode;
+import org.apache.plc4x.codegen.python.StrNode;
+import org.apache.plc4x.codegen.python.TupleNode;
+import org.apache.plc4x.codegen.python.WhileNode;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.platform.commons.util.Preconditions;
import java.io.File;
import java.io.IOException;
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/PojoBuilder.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/PojoBuilder.java
new file mode 100644
index 0000000..ffb86ad
--- /dev/null
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/PojoBuilder.java
@@ -0,0 +1,17 @@
+package org.apache.plc4x.codegen;
+
+/**
+ * Build POJOs (awesome)
+ */
+public class PojoBuilder {
+
+ private final String namespace;
+ private final String className;
+
+ public PojoBuilder(String namespace, String className) {
+ this.namespace = namespace;
+ this.className = className;
+ }
+
+
+}
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/JavaGeneratorTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/JavaGeneratorTest.java
similarity index 99%
rename from sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/JavaGeneratorTest.java
rename to sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/JavaGeneratorTest.java
index ad1738a..329b10f 100644
--- a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/JavaGeneratorTest.java
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/JavaGeneratorTest.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import org.junit.Before;
import org.junit.Test;
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PhpGeneratorTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PhpGeneratorTest.java
similarity index 92%
rename from sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PhpGeneratorTest.java
rename to sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PhpGeneratorTest.java
index 863c3c1..f5ba88f 100644
--- a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PhpGeneratorTest.java
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PhpGeneratorTest.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import org.junit.Test;
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PojoFactoryTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PojoFactoryTest.java
similarity index 92%
rename from sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PojoFactoryTest.java
rename to sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PojoFactoryTest.java
index 2d1abea..c5a5700 100644
--- a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PojoFactoryTest.java
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PojoFactoryTest.java
@@ -1,11 +1,7 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import org.junit.Test;
-import java.sql.SQLOutput;
-
-import static org.junit.Assert.*;
-
public class PojoFactoryTest {
@Test
diff --git a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PythonGeneratorTest.java b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PythonGeneratorTest.java
similarity index 97%
rename from sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PythonGeneratorTest.java
rename to sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PythonGeneratorTest.java
index 53bcc8c..f7ed106 100644
--- a/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/version2/PythonGeneratorTest.java
+++ b/sandbox/code-gen/src/test/java/org/apache/plc4x/codegen/ast/PythonGeneratorTest.java
@@ -1,4 +1,4 @@
-package org.apache.plc4x.codegen.version2;
+package org.apache.plc4x.codegen.ast;
import org.junit.Before;
import org.junit.Test;
diff --git a/sandbox/code-gen/src/test/resources/protocol.dfdl.xsd b/sandbox/code-gen/src/test/resources/protocol.dfdl.xsd
new file mode 100644
index 0000000..1cb2922
--- /dev/null
+++ b/sandbox/code-gen/src/test/resources/protocol.dfdl.xsd
@@ -0,0 +1,909 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+ xmlns:s7="http://plc4x.apache.org/s7"
+ xmlns:fn="http://www.w3.org/2005/xpath-functions"
+ targetNamespace="http://plc4x.apache.org/s7">
+
+ <xs:annotation>
+ <xs:appinfo source="http://www.ogf.org/dfdl/">
+ <dfdl:defineVariable name="messageType" type="xs:string"/>
+ <dfdl:defineFormat name="s7FullFormat">
+ <dfdl:format representation="binary"
+ binaryNumberRep="binary"
+ byteOrder="bigEndian"
+ lengthKind="implicit" lengthUnits="bytes" length="0"
+ occursCountKind="implicit"
+ textOutputMinLength="0"
+ alignment="1" alignmentUnits="bits"
+ leadingSkip="0" trailingSkip="0"
+ textPadKind="none" ignoreCase="no"
+ textBidi="no" floating="no"
+ encoding="utf-8" truncateSpecifiedLengthString="no"
+ initiator="" terminator=""
+ sequenceKind="ordered" separator=""
+ escapeSchemeRef="" initiatedContent="no"
+ encodingErrorPolicy="replace"/>
+ </dfdl:defineFormat>
+ <dfdl:format ref="s7:s7FullFormat"/>
+ </xs:appinfo>
+ </xs:annotation>
+
+ <!--
+
+ Simple type definition.
+
+ -->
+
+ <xs:simpleType name="bit" dfdl:lengthUnits="bits" dfdl:length="1" dfdl:lengthKind="explicit">
+ <xs:restriction base="xs:boolean"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="byte" dfdl:lengthUnits="bytes" dfdl:length="1" dfdl:lengthKind="explicit">
+ <xs:restriction base="xs:unsignedByte"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="short" dfdl:lengthUnits="bytes" dfdl:length="2" dfdl:lengthKind="explicit">
+ <xs:restriction base="xs:unsignedShort"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="hexByte" dfdl:lengthUnits="bytes" dfdl:length="1" dfdl:lengthKind="explicit">
+ <xs:restriction base="xs:hexBinary"/>
+ </xs:simpleType>
+
+ <!--
+
+ TPKT - Iso-On-TCP
+
+ -->
+
+ <xs:element name="TpktMessage" type="s7:TpktMessageType"/>
+
+ <xs:complexType name="TpktMessageType">
+ <xs:sequence>
+ <!-- TPKT Magic Byte always 0x03 -->
+ <xs:element name="magicByte" type="s7:byte">
+ <xs:annotation>
+ <xs:appinfo source="http://www.ogf.org/dfdl/">
+ <dfdl:assert message="Magic number was not 0x03."
+ test="{. eq 3}"/>
+ </xs:appinfo>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="reserved" type="s7:byte"/>
+ <xs:element name="length" type="s7:short"/>
+ <xs:element name="userData" type="s7:CotpMessageType"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <!--
+
+ ISO 8073/X.224 - ISO-TP - COTP - Connection-Oriented Transport Protocol Messages
+
+ -->
+
+ <xs:simpleType name="CotpTpduType">
+ <xs:restriction base="xs:unsignedByte">
+ <xs:enumeration id="tpduTypeConnectionRequest" value="224">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">ConnectionRequest</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration id="tpduTypeConnectionResponse" value="208">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">ConnectionResponse</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="128">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">DisconnectRequest</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="192">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">DisconnectResponse</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="112">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">Error</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="240">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">Data</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="CotpParameterType">
+ <xs:restriction base="xs:unsignedByte">
+ <xs:enumeration value="192">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">TpduSize</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="193">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">CallingTsap</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="194">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">CalledTsap</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="195">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">Checksum</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ <xs:enumeration value="224">
+ <xs:annotation>
+ <xs:appinfo source="http://plc4x.apache.org/">DisconnectAdditionalInformation</xs:appinfo>
+ </xs:annotation>
+ </xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="CotpMessageType">
+ <xs:sequence>
+ <!-- Length of the COTP header data -->
+ <xs:element name="headerLength" type="s7:byte"/>
+ <xs:element name="type" type="s7:CotpTpduType"/>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="224" ref="s7:CotpTpduConnectionRequest"/>
+ <xs:element dfdl:choiceBranchKey="208" ref="s7:CotpTpduConnectionResponse"/>
+ <xs:element dfdl:choiceBranchKey="128" ref="s7:CotpTpduDisconnectRequest"/>
+ <xs:element dfdl:choiceBranchKey="192" ref="s7:CotpTpduDisconnectResponse"/>
+ <xs:element dfdl:choiceBranchKey="112" ref="s7:CotpTpduError"/>
+ <xs:element dfdl:choiceBranchKey="240" ref="s7:CotpTpduData"/>
+ </xs:choice>
+ <xs:element name="userData" type="s7:S7MessageType" minOccurs="0"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if((../../length - (../headerLength + 5)) gt 0) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="CotpTpduConnectionRequest">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="destinationReference" type="s7:short"/>
+ <xs:element name="sourceReference" type="s7:short"/>
+ <xs:element name="protocolClass" type="s7:byte"/>
+ <xs:element ref="s7:parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 6}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../../headerLength gt 6) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpTpduConnectionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="destinationReference" type="s7:short"/>
+ <xs:element name="sourceReference" type="s7:short"/>
+ <xs:element name="protocolClass" type="s7:byte"/>
+ <xs:element ref="s7:parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 6}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../../headerLength gt 6) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpTpduDisconnectRequest">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="destinationReference" type="s7:short"/>
+ <xs:element name="sourceReference" type="s7:short"/>
+ <xs:element name="disconnectReason" type="s7:byte"/>
+ <xs:element ref="s7:parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 6}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../../headerLength gt 6) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpTpduDisconnectResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="destinationReference" type="s7:short"/>
+ <xs:element name="sourceReference" type="s7:short"/>
+ <xs:element ref="s7:parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 5}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../../headerLength gt 5) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpTpduError">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="destinationReference" type="s7:short"/>
+ <xs:element name="rejectCause" type="s7:byte"/>
+ <xs:element ref="s7:parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 4}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../../headerLength gt 4) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpTpduData">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="endOfTransmission" type="xs:unsignedInt"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bits" dfdl:length="1"/>
+ <xs:element name="tpduRef" type="xs:unsignedInt"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bits" dfdl:length="7"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="parameters">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="parameter" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="type" type="s7:CotpParameterType"/>
+ <xs:element name="parameterLength" type="s7:byte"/>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="192" ref="s7:CotpParameterTpduSize"/>
+ <xs:element dfdl:choiceBranchKey="193" ref="s7:CotpParameterCallingTsap"/>
+ <xs:element dfdl:choiceBranchKey="194" ref="s7:CotpParameterCalledTsap"/>
+ <xs:element dfdl:choiceBranchKey="195" ref="s7:CotpParameterChecksum"/>
+ <xs:element dfdl:choiceBranchKey="224"
+ ref="s7:CotpParameterDisconnectAdditionalInformation"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpParameterTpduSize">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="tpduSize" type="s7:byte"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpParameterCallingTsap">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="tsapId" type="s7:short"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpParameterCalledTsap">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="tsapId" type="s7:short"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpParameterChecksum">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="checksum" type="s7:byte"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="CotpParameterDisconnectAdditionalInformation">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="data" type="xs:hexBinary"
+ dfdl:byteOrder="bigEndian" dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit"
+ dfdl:length="{../../parameterLength}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <!--
+
+ S7 Types
+
+ -->
+
+ <xs:complexType name="S7MessageType">
+ <xs:sequence>
+ <!-- S7 Magic Byte always 0x32 -->
+ <xs:element name="magicByte" type="s7:byte">
+ <xs:annotation>
+ <xs:appinfo source="http://www.ogf.org/dfdl/">
+ <dfdl:assert message="Magic number was not 0x32."
+ test="{. eq 50}"/>
+ </xs:appinfo>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="type" type="s7:byte"/>
+ <!--
+ Unfortunately the response for a CPU Functions request follows the rules of a
+ response, however has the header structure of a request
+ (no error code or error class). As mapping to the same type is not allowed,
+ we map to strings and use that as choice-key.
+ -->
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="1" ref="s7:S7RequestMessage"/>
+ <xs:element dfdl:choiceBranchKey="3" ref="s7:S7ResponseMessage"/>
+ <xs:element dfdl:choiceBranchKey="7" ref="s7:S7UserDataMessage"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="S7RequestMessage">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- Reserved value always 0x0000 -->
+ <xs:element name="reserved" type="s7:short" fixed="0"/>
+ <xs:element name="tpduReference" type="s7:short"/>
+ <xs:element name="parametersLength" type="s7:short"/>
+ <xs:element name="payloadsLength" type="s7:short"/>
+ <xs:element name="parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../parametersLength}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../parametersLength gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="parameter" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="type" type="s7:byte"/>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="240"
+ ref="s7:S7GeneralParameterSetupCommunication"/>
+ <xs:element dfdl:choiceBranchKey="4" ref="s7:S7RequestParameterReadVar"/>
+ <xs:element dfdl:choiceBranchKey="5" ref="s7:S7RequestParameterWriteVar"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ As we might be outputting an empty payload block for a parameter that might not have a payload,
+ we have to output this element if the parameters are not empty. The case that the payloads are
+ not empty but the parameters are can't happen during normal operation.
+ -->
+ <xs:element name="payloads" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../payloadsLength}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../parametersLength gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <!--
+ For every parameter we'll be outputting a payload block, even if this might be empty.
+ This is required in order to find the matching parameter for every payload we might
+ be having. We need to match these as otherwise we couldn't determine the type of a
+ payload as this has no type information and we need to be able to access the number
+ of items for a read/write request in order to process the correct number of items in
+ the payload.
+ -->
+ <xs:element name="payload" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{fn:count(../../parameters[1]/parameter)}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice
+ dfdl:choiceDispatchKey="{xs:string(../../parameters[1]/parameter[dfdl:occursIndex()]/type)}">
+ <xs:element dfdl:choiceBranchKey="240"
+ ref="s7:S7GeneralPayloadSetupCommunication"/>
+ <xs:element dfdl:choiceBranchKey="4" ref="s7:S7RequestPayloadReadVar"/>
+ <xs:element dfdl:choiceBranchKey="5" ref="s7:S7RequestPayloadWriteVar"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7ResponseMessage">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- Reserved value always 0x0000 -->
+ <xs:element name="reserved" type="s7:short" fixed="0"/>
+ <xs:element name="tpduReference" type="s7:short"/>
+ <xs:element name="parametersLength" type="s7:short"/>
+ <xs:element name="payloadsLength" type="s7:short"/>
+ <!-- UserData (type 7) responses don't have the error class and code -->
+ <xs:element name="errorClass" type="s7:byte" minOccurs="0"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{if(../../type eq 3) then 1 else 0}"/>
+ <xs:element name="errorCode" type="s7:byte" minOccurs="0"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{if(../../type eq 3) then 1 else 0}"/>
+ <xs:element name="parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../parametersLength}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../parametersLength gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="parameter" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="type" type="s7:byte"/>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="240"
+ ref="s7:S7GeneralParameterSetupCommunication"/>
+ <xs:element dfdl:choiceBranchKey="4" ref="s7:S7ResponseParameterReadVar"/>
+ <xs:element dfdl:choiceBranchKey="5" ref="s7:S7ResponseParameterWriteVar"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ As we might be outputting an empty payload block for a parameter that might not have a payload,
+ we have to output this element if the parameters are not empty. The case that the payloads are
+ not empty but the parameters are can't happen during normal operation.
+ -->
+ <xs:element name="payloads" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../payloadsLength}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../parametersLength gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <!--
+ For every parameter we'll be outputting a payload block, even if this might be empty.
+ This is required in order to find the matching parameter for every payload we might
+ be having. We need to match these as otherwise we couldn't determin the type of a
+ payload as this has no type information and we need to be able to access the number
+ of items for a read/write request in order to process the correct number of items in
+ the payload.
+ -->
+ <xs:element name="payload" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{fn:count(../../parameters[1]/parameter)}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice
+ dfdl:choiceDispatchKey="{xs:string(../../parameters[1]/parameter[dfdl:occursIndex()]/type)}">
+ <xs:element dfdl:choiceBranchKey="240"
+ ref="s7:S7GeneralPayloadSetupCommunication"/>
+ <xs:element dfdl:choiceBranchKey="4" ref="s7:S7ResponsePayloadReadVar"/>
+ <xs:element dfdl:choiceBranchKey="5" ref="s7:S7ResponsePayloadWriteVar"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+
+ <xs:element name="S7UserDataMessage">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- Reserved value always 0x0000 -->
+ <xs:element name="reserved" type="s7:short" fixed="0"/>
+ <xs:element name="tpduReference" type="s7:short"/>
+ <xs:element name="parametersLength" type="s7:short"/>
+ <xs:element name="payloadsLength" type="s7:short"/>
+ <xs:element name="parameters" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../parametersLength}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../parametersLength gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="parameter" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="type" type="s7:byte"/>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="0"
+ ref="s7:S7UserDataParameterCPUService"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ As we might be outputting an empty payload block for a parameter that might not have a payload,
+ we have to output this element if the parameters are not empty. The case that the payloads are
+ not empty but the parameters are can't happen during normal operation.
+ -->
+ <xs:element name="payloads" minOccurs="0"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../payloadsLength}"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../parametersLength gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <!--
+ For every parameter we'll be outputting a payload block, even if this might be empty.
+ This is required in order to find the matching parameter for every payload we might
+ be having. We need to match these as otherwise we couldn't determine the type of a
+ payload as this has no type information and we need to be able to access the number
+ of items for a read/write request in order to process the correct number of items in
+ the payload.
+ -->
+ <xs:element name="payload" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{fn:count(../../parameters[1]/parameter)}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice
+ dfdl:choiceDispatchKey="{xs:string(../../parameters[1]/parameter[dfdl:occursIndex()]/type)}">
+ <xs:element dfdl:choiceBranchKey="0"
+ ref="s7:S7UserDataPayloadCpuServices"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <!--
+
+ Parameters.
+
+ -->
+
+ <xs:element name="S7GeneralParameterSetupCommunication">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- Reserved value always 0x00 -->
+ <xs:element name="reserved" type="s7:byte" fixed="0"/>
+ <xs:element name="maxAmqCaller" type="s7:short"/>
+ <xs:element name="maxAmqCallee" type="s7:short"/>
+ <xs:element name="pduLength" type="s7:short"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7UserDataParameterCPUService">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- Fixed header 0x0112 274 -> -->
+ <xs:element name="header" type="s7:short"/><!-- fixed="274"-->
+ <xs:element name="paramLength" type="s7:byte"/><!-- fixed="4"-->
+ <!-- Request: 0x11 -> 17 -->
+ <xs:element name="typeCode" type="s7:byte"/><!-- fixed="17"-->
+ <xs:element name="type" type="xs:unsignedByte" dfdl:lengthKind="explicit" dfdl:lengthUnits="bits"
+ dfdl:length="4"/>
+ <!-- First 4 bits: Request 0x40, last 4 bits: Function Group 0x04 = 0x44 -> 68 -->
+ <xs:element name="functionGroup" type="xs:unsignedByte" dfdl:lengthKind="explicit"
+ dfdl:lengthUnits="bits" dfdl:length="4"/><!-- fixed="68"-->
+ <!-- READ SSL = 0x01 -->
+ <xs:element name="subFunctionGroup" type="s7:byte"/><!-- fixed="1"-->
+ <xs:element name="sequenceNumber" type="s7:byte"/>
+ <xs:element name="dataUnitReferenceNumber" type="s7:byte" minOccurs="0"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../sequenceNumber eq 2) then 1 else 0}"/>
+ <xs:element name="lastDataUnit" type="s7:byte" minOccurs="0"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../sequenceNumber eq 2) then 1 else 0}"/>
+ <xs:element name="errorCode" type="s7:short" minOccurs="0"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../sequenceNumber eq 2) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7RequestParameterReadVar">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="numItems" type="s7:byte"/>
+ <xs:element name="items" minOccurs="0"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{if(../numItems gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="item" minOccurs="0" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{../../numItems}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="type" type="s7:byte"/>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="18"
+ ref="s7:S7RequestParameterReadVarAnyItem"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7RequestParameterReadVarAnyItem">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="paramLength" type="s7:byte"/><!-- fixed="10"-->
+ <!-- Addressing Mode: Any 0x10 -> 16 -->
+ <xs:element name="addressingMode" type="s7:byte"/><!-- fixed="16"-->
+ <xs:element name="dataType" type="s7:byte"/>
+ <xs:element name="numElements" type="s7:short"/>
+ <xs:element name="dataBlockNumber" type="s7:short"/>
+ <xs:element name="memoryArea" type="s7:byte"/>
+ <!--
+ The next 3 bytes (24 bits) contain the byte- and bit-offset,
+ were the last byte contains the bit-offset in the last 3 bits
+ and the byteOffset is encoded in the higher level 21 bits
+ -->
+ <xs:element name="byteOffset" type="xs:unsignedInt"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bits" dfdl:length="21"/>
+ <xs:element name="bitOffset" type="xs:unsignedInt"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bits" dfdl:length="3"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7ResponseParameterReadVar">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="numItems" type="s7:byte"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7RequestParameterWriteVar">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="numItems" type="s7:byte"/>
+ <xs:element name="items" minOccurs="0"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{if(../numItems gt 0) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="item" minOccurs="0" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{../../numItems}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="type" type="s7:byte"/>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
+ <xs:element dfdl:choiceBranchKey="18"
+ ref="s7:S7RequestParameterWriteVarAnyItem"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7RequestParameterWriteVarAnyItem">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="itemLength" type="s7:byte"/><!-- fixed="10"-->
+ <!-- Addressing Mode: Any 0x10 -> 16 -->
+ <xs:element name="addressingMode" type="s7:byte"/><!-- fixed="16"-->
+ <xs:element name="dataType" type="s7:byte"/>
+ <xs:element name="numElements" type="s7:short"/>
+ <xs:element name="dataBlockNumber" type="s7:short"/>
+ <xs:element name="memoryArea" type="s7:byte"/>
+ <!--
+ The next 3 bytes (24 bits) contain the byte- and bit-offset,
+ were the last byte contains the bit-offset in the last 3 bits
+ and the byteOffset is encoded in the higher level 21 bits
+ -->
+ <xs:element name="byteOffset" type="xs:unsignedInt"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bits" dfdl:length="21"/>
+ <xs:element name="bitOffset" type="xs:unsignedInt"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bits" dfdl:length="3"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7ResponseParameterWriteVar">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="numItems" type="s7:byte"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <!--
+
+ Payloads.
+
+ -->
+
+ <xs:element name="S7GeneralPayloadSetupCommunication"
+ type="xs:hexBinary" dfdl:lengthKind="explicit" dfdl:length="0"/>
+
+ <xs:element name="S7UserDataPayloadCpuServices">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="returnCode" type="s7:byte"/>
+ <xs:element name="transportSize" type="s7:byte"/><!-- fixed="9"-->
+ <xs:element name="length" type="s7:short"/>
+ <xs:element name="sslId" type="s7:short" minOccurs="0"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../returnCode eq 255) then 1 else 0}"/>
+ <xs:element name="sslIndex" type="s7:short" minOccurs="0"
+ dfdl:occursCountKind="expression"
+ dfdl:occursCount="{if(../returnCode eq 255) then 1 else 0}"/>
+ <xs:element name="partialList" minOccurs="0"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{if((../returnCode eq 255) and (../length gt 4)) then 1 else 0}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="partialListLengthInBytes" type="s7:short"/>
+ <xs:element name="partialListCount" type="s7:short"/>
+ <xs:element name="sslDataRecords">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="sslDataRecord" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{../../partialListCount}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice dfdl:choiceDispatchKey="{xs:string(../../../sslId[1])}">
+ <xs:element dfdl:choiceBranchKey="17"
+ ref="s7:S7ResponsePayloadCpuServicesSslDataRecordModuleIdentification"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7ResponsePayloadCpuServicesSslDataRecordModuleIdentification">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="index" type="s7:short"/>
+ <xs:element name="articleNumber" type="xs:string" dfdl:textTrimKind="none" dfdl:alignmentUnits="bytes"
+ dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="20"/>
+ <xs:element name="bgType" type="s7:short"/>
+ <xs:element name="moduleOrOsVersion" type="s7:short"/>
+ <xs:element name="pgDescriptionFileVersion" type="s7:short"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7RequestPayloadReadVar"
+ type="xs:hexBinary" dfdl:lengthKind="explicit" dfdl:length="0"/>
+
+ <xs:element name="S7ResponsePayloadReadVar">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- The number of items which should be read is transmitted in the matching parameter -->
+ <xs:element name="numItems" type="s7:byte"
+ dfdl:inputValueCalc="{
+ ../../../../parameters[1]/parameter[dfdl:occursIndex()]/s7:S7ResponseParameterReadVar/numItems
+ }"/>
+ <xs:element name="item" minOccurs="0" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{../numItems}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="returnCode" type="s7:byte"/>
+ <xs:element name="transportSize" type="s7:byte"/>
+ <xs:element name="rawLength" type="s7:short"/>
+ <!--
+ For some reason the types BIT, BYTE_WORD_DWORD and INTEGER are transferred in "bits",
+ the rest is transferred in "bytes"
+ -->
+ <xs:element name="lengthInBytes" type="s7:short" dfdl:inputValueCalc="{
+ xs:unsignedShort(if((../transportSize eq 3) or (../transportSize eq 4) or (../transportSize eq 5))
+ then fn:ceiling(xs:double(../rawLength div 8))
+ else ../rawLength)}"/>
+ <xs:element name="data" type="xs:hexBinary"
+ dfdl:byteOrder="bigEndian" dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit"
+ dfdl:length="{../lengthInBytes}"/>
+ <!--
+ Transport sizes: BIT, BYTE_WORD_DWORD and OCTET_STRING require a blank byte.
+ However only if this is not the last item in the result.
+ -->
+ <xs:element name="fillByte" type="s7:byte" minOccurs="0"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{
+ if(((../lengthInBytes mod 2) eq 1) and
+ (dfdl:occursIndex() ne ../../numItems)) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7RequestPayloadWriteVar">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- The number of items which should be read is transmitted in the matching parameter -->
+ <xs:element name="numItems" type="s7:byte"
+ dfdl:inputValueCalc="{
+ ../../../../parameters[1]/parameter[dfdl:occursIndex()]/s7:S7RequestParameterWriteVar/numItems
+ }"/>
+ <xs:element name="item" minOccurs="0" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{../numItems}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="returnCode" type="s7:byte"/>
+ <xs:element name="transportSize" type="s7:byte"/>
+ <xs:element name="rawLength" type="s7:short"/>
+ <!--
+ For some reason the types BIT, BYTE_WORD_DWORD and INTEGER are transferred in "bits",
+ the rest is transferred in "bytes"
+ -->
+ <xs:element name="lengthInBytes" type="s7:short" dfdl:inputValueCalc="{
+ xs:unsignedShort(if((../transportSize eq 3) or (../transportSize eq 4) or (../transportSize eq 5))
+ then fn:ceiling(../rawLength div 8)
+ else ../rawLength)}"/>
+ <xs:element name="data" type="xs:hexBinary"
+ dfdl:byteOrder="bigEndian" dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit"
+ dfdl:length="{../lengthInBytes}"/>
+ <!--
+ It seems that the item payload must always be an even number of bytes. So if it's
+ not an even number, add a fill byte.
+ -->
+ <xs:element name="fillByte" type="s7:byte" minOccurs="0"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{
+ if(((../lengthInBytes mod 2) eq 1) and
+ (dfdl:occursIndex() ne ../../numItems)) then 1 else 0}"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="S7ResponsePayloadWriteVar">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- The number of items which should be read is transmitted in the matching parameter -->
+ <xs:element name="numItems" type="s7:byte"
+ dfdl:inputValueCalc="{
+ ../../../../parameters[1]/parameter[dfdl:occursIndex()]/s7:S7ResponseParameterWriteVar/numItems
+ }"/>
+ <xs:element name="item" minOccurs="0" maxOccurs="unbounded"
+ dfdl:occursCountKind="expression" dfdl:occursCount="{../numItems}">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="returnCode" type="s7:byte"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
\ No newline at end of file