You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2021/07/02 08:00:56 UTC
[plc4x] branch develop updated: plc4j: added a Serializable
interface
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new b17673a plc4j: added a Serializable interface
b17673a is described below
commit b17673a0cc5cd7cc12d813257ef40149b5b15c72
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Jul 2 10:00:00 2021 +0200
plc4j: added a Serializable interface
+ This should bring the serialization in line with the generated code so the SPI objects can be printed in whatever form required
---
.../plc4x/java/ads/field/DirectAdsField.java | 16 +++++
.../plc4x/java/ads/field/DirectAdsStringField.java | 16 +++++
.../plc4x/java/ads/field/SymbolicAdsField.java | 17 +++++
.../java/ads/field/SymbolicAdsStringField.java | 35 +++++++----
.../java/canopen/field/CANOpenHeartbeatField.java | 14 +++++
.../plc4x/java/canopen/field/CANOpenNMTField.java | 15 +++++
.../plc4x/java/canopen/field/CANOpenPDOField.java | 16 +++++
.../plc4x/java/canopen/field/CANOpenSDOField.java | 16 +++++
.../plc4x/java/eip/readwrite/field/EipField.java | 54 ++++++++++------
.../apache/plc4x/java/mock/field/MockPlcValue.java | 7 +++
.../plc4x/java/modbus/field/ModbusField.java | 27 ++++++--
.../plc4x/java/s7/readwrite/field/S7Field.java | 72 ++++++++++++++--------
.../java/s7/readwrite/field/S7StringField.java | 33 ++++++++--
.../java/spi/messages/DefaultPlcReadRequest.java | 23 +++++++
.../java/spi/messages/DefaultPlcReadResponse.java | 22 +++++++
.../messages/DefaultPlcSubscriptionRequest.java | 25 ++++++++
.../messages/DefaultPlcSubscriptionResponse.java | 24 ++++++++
.../messages/DefaultPlcUnsubscriptionRequest.java | 14 +++--
.../messages/DefaultPlcUnsubscriptionResponse.java | 7 +++
.../java/spi/messages/DefaultPlcWriteRequest.java | 42 ++++++++++++-
.../java/spi/messages/DefaultPlcWriteResponse.java | 23 +++++++
.../java/spi/messages/utils/ResponseItem.java | 21 ++++++-
.../{XmlSerializable.java => Serializable.java} | 9 ++-
.../plc4x/java/spi/utils/XmlSerializable.java | 7 ++-
.../plc4x/java/spi/values/PlcBigDecimal.java | 7 +++
.../plc4x/java/spi/values/PlcBigInteger.java | 7 +++
.../org/apache/plc4x/java/spi/values/PlcDATE.java | 7 +++
.../plc4x/java/spi/values/PlcDATE_AND_TIME.java | 7 +++
.../apache/plc4x/java/spi/values/PlcIECValue.java | 10 +++
.../org/apache/plc4x/java/spi/values/PlcLTIME.java | 7 +++
.../org/apache/plc4x/java/spi/values/PlcList.java | 15 +++++
.../apache/plc4x/java/spi/values/PlcSTRING.java | 7 +++
.../apache/plc4x/java/spi/values/PlcStruct.java | 19 ++++++
.../org/apache/plc4x/java/spi/values/PlcTIME.java | 7 +++
.../plc4x/java/spi/values/PlcTIME_OF_DAY.java | 7 +++
35 files changed, 573 insertions(+), 82 deletions(-)
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
index f352a68..c084f92 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
@@ -20,9 +20,12 @@ package org.apache.plc4x.java.ads.field;
import org.apache.plc4x.java.ads.readwrite.types.AdsDataType;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -148,6 +151,19 @@ public class DirectAdsField implements AdsField {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ writeBuffer.writeLong("indexGroup", 64, getIndexGroup());
+ writeBuffer.writeLong("indexOffset", 64, getIndexOffset());
+ writeBuffer.writeLong("numberOfElements", 64, getNumberOfElements());
+ String plcDataType = getPlcDataType();
+ writeBuffer.writeString("dataType", plcDataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), plcDataType);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java
index bbca100..9d80ca4 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java
@@ -20,9 +20,12 @@ package org.apache.plc4x.java.ads.field;
import org.apache.plc4x.java.ads.readwrite.types.AdsDataType;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -102,6 +105,19 @@ public class DirectAdsStringField extends DirectAdsField implements AdsStringFie
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ writeBuffer.writeLong("indexGroup", 64, getIndexGroup());
+ writeBuffer.writeLong("indexOffset", 64, getIndexOffset());
+ writeBuffer.writeLong("numberOfElements", 64, getNumberOfElements());
+ String plcDataType = getPlcDataType();
+ writeBuffer.writeString("dataType", plcDataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), plcDataType);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java
index e973efa..12a4ced 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java
@@ -20,9 +20,12 @@ package org.apache.plc4x.java.ads.field;
import org.apache.plc4x.java.ads.readwrite.types.AdsDataType;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -114,6 +117,20 @@ public class SymbolicAdsField implements AdsField {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ String symbolicAddress = getSymbolicAddress();
+ writeBuffer.writeString("symbolicAddress", symbolicAddress.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), symbolicAddress);
+
+ writeBuffer.writeInt("numberOfElements", 64, getNumberOfElements());
+
+ String dataType = getPlcDataType();
+ writeBuffer.writeString("dataType", dataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataType);
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
index 11530ae..bceacf9 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
@@ -20,9 +20,12 @@ package org.apache.plc4x.java.ads.field;
import org.apache.plc4x.java.ads.readwrite.types.AdsDataType;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -78,21 +81,27 @@ public class SymbolicAdsStringField extends SymbolicAdsField implements AdsStrin
}
@Override
- public void xmlSerialize(Element parent) {
- Document doc = parent.getOwnerDocument();
- Element messageElement = doc.createElement(getClass().getSimpleName());
- parent.appendChild(messageElement);
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ String symbolicAddress = getSymbolicAddress();
+ writeBuffer.writeString("symbolicAddress", symbolicAddress.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), symbolicAddress);
+
+ writeBuffer.writeInt("numberOfElements", 64, getNumberOfElements());
- Element symbolicAddressElement = doc.createElement("symbolicAddress");
- symbolicAddressElement.appendChild(doc.createTextNode(getSymbolicAddress()));
- messageElement.appendChild(symbolicAddressElement);
+ String dataType = getPlcDataType();
+ writeBuffer.writeString("dataType", dataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataType);
- Element numberOfElementsElement = doc.createElement("numberOfElements");
- numberOfElementsElement.appendChild(doc.createTextNode(Integer.toString(getNumberOfElements())));
- messageElement.appendChild(numberOfElementsElement);
+ writeBuffer.writeInt("stringLength", 64, getStringLength());
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
- Element datatypeElement = doc.createElement("dataType");
- datatypeElement.appendChild(doc.createTextNode(getPlcDataType()));
- messageElement.appendChild(datatypeElement);
+ @Override
+ public void xmlSerialize(Element parent) {
+ super.xmlSerialize(parent);
+ Document doc = parent.getOwnerDocument();
+ Element byteOffsetElement = doc.createElement("stringLength");
+ byteOffsetElement.appendChild(doc.createTextNode(Integer.toString(getStringLength())));
+ parent.getFirstChild().appendChild(byteOffsetElement);
}
}
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java
index 9607540..501150f 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java
@@ -20,9 +20,12 @@ package org.apache.plc4x.java.canopen.field;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.canopen.readwrite.types.CANOpenService;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -64,6 +67,17 @@ public class CANOpenHeartbeatField extends CANOpenField implements CANOpenSubscr
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ String serviceName = getService().name();
+ writeBuffer.writeString("service", serviceName.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), serviceName);
+ writeBuffer.writeInt("node", 64, getNodeId());
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java
index 5f89371..9bff00d 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java
@@ -20,9 +20,12 @@ package org.apache.plc4x.java.canopen.field;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.canopen.readwrite.types.CANOpenService;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -63,6 +66,18 @@ public class CANOpenNMTField extends CANOpenField implements CANOpenSubscription
return new CANOpenNMTField(nodeId);
}
+
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ String serviceName = getService().name();
+ writeBuffer.writeString("service", serviceName.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), serviceName);
+ writeBuffer.writeInt("node",64, getNodeId());
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
@Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java
index 1c4e7ea..d15d155 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java
@@ -21,9 +21,12 @@ package org.apache.plc4x.java.canopen.field;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.canopen.readwrite.types.CANOpenDataType;
import org.apache.plc4x.java.canopen.readwrite.types.CANOpenService;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -82,6 +85,19 @@ public class CANOpenPDOField extends CANOpenField implements CANOpenSubscription
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ String serviceName = getService().name();
+ writeBuffer.writeString("service", serviceName.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), serviceName);
+ writeBuffer.writeInt("node",64, getNodeId());
+ String dataTypeName = getCanOpenDataType().name();
+ writeBuffer.writeString("dataType", dataTypeName.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataTypeName);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java
index c4a51d4..8745977 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java
@@ -20,9 +20,12 @@ package org.apache.plc4x.java.canopen.field;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.canopen.readwrite.types.CANOpenDataType;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -105,6 +108,19 @@ public class CANOpenSDOField extends CANOpenField {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ writeBuffer.writeInt("node",64, getNodeId());
+ writeBuffer.writeInt("index",64, getIndex());
+ writeBuffer.writeInt("subIndex",64, getSubIndex());
+ String dataTypeName = getCanOpenDataType().name();
+ writeBuffer.writeString("dataType", dataTypeName.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataTypeName);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
index a6f5199..5479a53 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
@@ -20,10 +20,13 @@ package org.apache.plc4x.java.eip.readwrite.field;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.eip.readwrite.types.CIPDataTypeCode;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -32,14 +35,14 @@ public class EipField implements PlcField, XmlSerializable {
private static final Pattern ADDRESS_PATTERN =
Pattern.compile("^%(?<tag>[a-zA-Z_.0-9]+\\[?[0-9]*\\]?):?(?<dataType>[A-Z]*):?(?<elementNb>[0-9]*)");
- private static final String TAG="tag";
- private static final String ELEMENTS="elementNb";
- private static final String TYPE="dataType";
+ private static final String TAG = "tag";
+ private static final String ELEMENTS = "elementNb";
+ private static final String TYPE = "dataType";
private final String tag;
private CIPDataTypeCode type;
- private int elementNb;
+ private int elementNb;
public CIPDataTypeCode getType() {
return type;
@@ -81,31 +84,30 @@ public class EipField implements PlcField, XmlSerializable {
this.type = type;
}
- public static boolean matches(String fieldQuery){
+ public static boolean matches(String fieldQuery) {
return ADDRESS_PATTERN.matcher(fieldQuery).matches();
}
- public static EipField of(String fieldString){
+ public static EipField of(String fieldString) {
Matcher matcher = ADDRESS_PATTERN.matcher(fieldString);
- if(matcher.matches()){
+ if (matcher.matches()) {
String tag = matcher.group(TAG);
- int nb=0;
- CIPDataTypeCode type=null;
- if(!matcher.group(ELEMENTS).isEmpty()) {
+ int nb = 0;
+ CIPDataTypeCode type = null;
+ if (!matcher.group(ELEMENTS).isEmpty()) {
nb = Integer.parseInt(matcher.group(ELEMENTS));
}
- if(!matcher.group(TYPE).isEmpty()) {
+ if (!matcher.group(TYPE).isEmpty()) {
type = CIPDataTypeCode.valueOf(matcher.group(TYPE));
}
- if(nb!=0){
- if(type!=null){
- return new EipField(tag,type,nb);
+ if (nb != 0) {
+ if (type != null) {
+ return new EipField(tag, type, nb);
}
return new EipField(tag, nb);
- }
- else{
- if(type!=null){
- return new EipField(tag,type);
+ } else {
+ if (type != null) {
+ return new EipField(tag, type);
}
return new EipField(tag);
}
@@ -120,7 +122,7 @@ public class EipField implements PlcField, XmlSerializable {
@Override
public Class<?> getDefaultJavaType() {
- switch (type){
+ switch (type) {
//ToDo differenciate Short, Integer and Long
case INT:
case DINT:
@@ -140,6 +142,20 @@ public class EipField implements PlcField, XmlSerializable {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ writeBuffer.writeString("node", tag.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), tag);
+ writeBuffer.writeString("type", type.name().getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), type.name());
+ writeBuffer.writeInt("elementNb", 64, elementNb);
+ // TODO: remove this (not language agnostic)
+ String defaultJavaType= (type == null ? Object.class : getDefaultJavaType()).getName();
+ writeBuffer.writeString("defaultJavaType", defaultJavaType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), defaultJavaType);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java
index c27e6a0..43d450e 100644
--- a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java
+++ b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java
@@ -20,6 +20,8 @@
package org.apache.plc4x.java.mock.field;
import org.apache.plc4x.java.api.exceptions.PlcNotImplementedException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.apache.plc4x.java.spi.values.PlcValueAdapter;
import org.w3c.dom.Element;
@@ -36,6 +38,11 @@ public class MockPlcValue extends PlcValueAdapter {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ throw new PlcNotImplementedException("Not implemented");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
throw new PlcNotImplementedException("Not implemented");
}
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
index 0a750b5..e822aa5 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
@@ -22,10 +22,13 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.modbus.readwrite.types.*;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.regex.Pattern;
@@ -43,19 +46,19 @@ public abstract class ModbusField implements PlcField, XmlSerializable {
private final ModbusDataType dataType;
public static ModbusField of(String addressString) {
- if(ModbusFieldCoil.matches(addressString)) {
+ if (ModbusFieldCoil.matches(addressString)) {
return ModbusFieldCoil.of(addressString);
}
- if(ModbusFieldDiscreteInput.matches(addressString)) {
+ if (ModbusFieldDiscreteInput.matches(addressString)) {
return ModbusFieldDiscreteInput.of(addressString);
}
- if(ModbusFieldHoldingRegister.matches(addressString)) {
+ if (ModbusFieldHoldingRegister.matches(addressString)) {
return ModbusFieldHoldingRegister.of(addressString);
}
- if(ModbusFieldInputRegister.matches(addressString)) {
+ if (ModbusFieldInputRegister.matches(addressString)) {
return ModbusFieldInputRegister.of(addressString);
}
- if(ModbusExtendedRegister.matches(addressString)) {
+ if (ModbusExtendedRegister.matches(addressString)) {
return ModbusExtendedRegister.of(addressString);
}
throw new PlcInvalidFieldException("Unable to parse address: " + addressString);
@@ -87,7 +90,7 @@ public abstract class ModbusField implements PlcField, XmlSerializable {
@JsonIgnore
public int getLengthWords() {
- return (int) ((quantity * (float) dataType.getDataTypeSize())/2.0f);
+ return (int) ((quantity * (float) dataType.getDataTypeSize()) / 2.0f);
}
public ModbusDataType getDataType() {
@@ -126,6 +129,18 @@ public abstract class ModbusField implements PlcField, XmlSerializable {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ writeBuffer.writeInt("address", 64, address);
+ writeBuffer.writeInt("numberOfElements", 64, getNumberOfElements());
+ String dataType = getPlcDataType();
+ writeBuffer.writeString("dataType", dataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataType);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
index 64b6aba..68ff4f2 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
@@ -34,10 +34,12 @@ import org.apache.plc4x.java.s7.readwrite.types.TransportSize;
import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.ReadBuffer;
import org.apache.plc4x.java.spi.generation.ReadBufferByteBased;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -85,8 +87,8 @@ public class S7Field implements PlcField, XmlSerializable {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
protected S7Field(@JsonProperty("dataType") TransportSize dataType, @JsonProperty("memoryArea") MemoryArea memoryArea,
- @JsonProperty("blockNumber") int blockNumber, @JsonProperty("byteOffset") int byteOffset,
- @JsonProperty("bitOffset") byte bitOffset, @JsonProperty("numElements") int numElements) {
+ @JsonProperty("blockNumber") int blockNumber, @JsonProperty("byteOffset") int byteOffset,
+ @JsonProperty("bitOffset") byte bitOffset, @JsonProperty("numElements") int numElements) {
this.dataType = dataType;
this.memoryArea = memoryArea;
this.blockNumber = blockNumber;
@@ -126,21 +128,21 @@ public class S7Field implements PlcField, XmlSerializable {
public static boolean matches(String fieldString) {
return
DATA_BLOCK_STRING_ADDRESS_PATTERN.matcher(fieldString).matches() ||
- DATA_BLOCK_STRING_SHORT_PATTERN.matcher(fieldString).matches() ||
- DATA_BLOCK_ADDRESS_PATTERN.matcher(fieldString).matches() ||
- DATA_BLOCK_SHORT_PATTERN.matcher(fieldString).matches() ||
- PLC_PROXY_ADDRESS_PATTERN.matcher(fieldString).matches() ||
- ADDRESS_PATTERN.matcher(fieldString).matches();
+ DATA_BLOCK_STRING_SHORT_PATTERN.matcher(fieldString).matches() ||
+ DATA_BLOCK_ADDRESS_PATTERN.matcher(fieldString).matches() ||
+ DATA_BLOCK_SHORT_PATTERN.matcher(fieldString).matches() ||
+ PLC_PROXY_ADDRESS_PATTERN.matcher(fieldString).matches() ||
+ ADDRESS_PATTERN.matcher(fieldString).matches();
}
/**
* @return Java type of expected response.
- *
+ * <p>
* TODO validate all Methods existing are implemented
*/
@Override
public Class<?> getDefaultJavaType() {
- switch (dataType){
+ switch (dataType) {
case STRING:
return String.class;
case USINT:
@@ -202,30 +204,30 @@ public class S7Field implements PlcField, XmlSerializable {
int byteOffset = checkByteOffset(Integer.parseInt(matcher.group(BYTE_OFFSET)));
byte bitOffset = 0;
int numElements = 1;
- if(matcher.group(NUM_ELEMENTS) != null) {
+ if (matcher.group(NUM_ELEMENTS) != null) {
numElements = Integer.parseInt(matcher.group(NUM_ELEMENTS));
}
return new S7StringField(dataType, memoryArea, blockNumber,
byteOffset, bitOffset, numElements, stringLength);
- } else if((matcher = DATA_BLOCK_ADDRESS_PATTERN.matcher(fieldString)).matches()) {
+ } else if ((matcher = DATA_BLOCK_ADDRESS_PATTERN.matcher(fieldString)).matches()) {
TransportSize dataType = TransportSize.valueOf(matcher.group(DATA_TYPE));
MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
Short transferSizeCode = getSizeCode(matcher.group(TRANSFER_SIZE_CODE));
int blockNumber = checkDatablockNumber(Integer.parseInt(matcher.group(BLOCK_NUMBER)));
int byteOffset = checkByteOffset(Integer.parseInt(matcher.group(BYTE_OFFSET)));
byte bitOffset = 0;
- if(matcher.group(BIT_OFFSET) != null) {
+ if (matcher.group(BIT_OFFSET) != null) {
bitOffset = Byte.parseByte(matcher.group(BIT_OFFSET));
- } else if(dataType == TransportSize.BOOL) {
+ } else if (dataType == TransportSize.BOOL) {
throw new PlcInvalidFieldException("Expected bit offset for BOOL parameters.");
}
int numElements = 1;
- if(matcher.group(NUM_ELEMENTS) != null) {
+ if (matcher.group(NUM_ELEMENTS) != null) {
numElements = Integer.parseInt(matcher.group(NUM_ELEMENTS));
}
- if((transferSizeCode != null) && (dataType.getShortName() != transferSizeCode)) {
+ if ((transferSizeCode != null) && (dataType.getShortName() != transferSizeCode)) {
throw new PlcInvalidFieldException("Transfer size code '" + transferSizeCode +
"' doesn't match specified data type '" + dataType.name() + "'");
}
@@ -237,13 +239,13 @@ public class S7Field implements PlcField, XmlSerializable {
int blockNumber = checkDatablockNumber(Integer.parseInt(matcher.group(BLOCK_NUMBER)));
int byteOffset = checkByteOffset(Integer.parseInt(matcher.group(BYTE_OFFSET)));
byte bitOffset = 0;
- if(matcher.group(BIT_OFFSET) != null) {
+ if (matcher.group(BIT_OFFSET) != null) {
bitOffset = Byte.parseByte(matcher.group(BIT_OFFSET));
- } else if(dataType == TransportSize.BOOL) {
+ } else if (dataType == TransportSize.BOOL) {
throw new PlcInvalidFieldException("Expected bit offset for BOOL parameters.");
}
int numElements = 1;
- if(matcher.group(NUM_ELEMENTS) != null) {
+ if (matcher.group(NUM_ELEMENTS) != null) {
numElements = Integer.parseInt(matcher.group(NUM_ELEMENTS));
}
@@ -300,12 +302,13 @@ public class S7Field implements PlcField, XmlSerializable {
/**
* checks if DatablockNumber of S7Field is in valid range
+ *
* @param blockNumber given DatablockNumber
* @return given blockNumber if Ok, throws PlcInvalidFieldException otherwise
*/
- private static int checkDatablockNumber(int blockNumber){
+ private static int checkDatablockNumber(int blockNumber) {
//ToDo check the value or add reference - limit eventually depending on active S7 --> make a case selection
- if(blockNumber>64000 || blockNumber<1){
+ if (blockNumber > 64000 || blockNumber < 1) {
throw new PlcInvalidFieldException("Datablock numbers larger than 64000 or smaller than 1 are not supported.");
}
return blockNumber;
@@ -313,22 +316,23 @@ public class S7Field implements PlcField, XmlSerializable {
/**
* checks if ByteOffset from S7Field is in valid range
+ *
* @param byteOffset given byteOffset
* @return given byteOffset if Ok, throws PlcInvalidFieldException otherwise
*/
- private static int checkByteOffset(int byteOffset){
+ private static int checkByteOffset(int byteOffset) {
//ToDo check the value or add reference
- if(byteOffset>2097151 || byteOffset<0){
+ if (byteOffset > 2097151 || byteOffset < 0) {
throw new PlcInvalidFieldException("ByteOffset must be smaller than 2097151 and positive.");
}
return byteOffset;
}
protected static Short getSizeCode(String value) {
- if((value == null) || value.isEmpty()) {
+ if ((value == null) || value.isEmpty()) {
return null;
}
- if(value.length() > 1) {
+ if (value.length() > 1) {
return null;
}
return (short) value.getBytes()[0];
@@ -336,7 +340,7 @@ public class S7Field implements PlcField, XmlSerializable {
protected static MemoryArea getMemoryAreaForShortName(String shortName) {
for (MemoryArea memoryArea : MemoryArea.values()) {
- if(memoryArea.getShortName().equals(shortName)) {
+ if (memoryArea.getShortName().equals(shortName)) {
return memoryArea;
}
}
@@ -356,6 +360,24 @@ public class S7Field implements PlcField, XmlSerializable {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ String memoryArea = getMemoryArea().name();
+ writeBuffer.writeString("memoryArea", memoryArea.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), memoryArea);
+
+ writeBuffer.writeInt("blockNumber", 64, getBlockNumber());
+ writeBuffer.writeInt("byteOffset", 64, getByteOffset());
+ writeBuffer.writeInt("bitOffset", 64, getBitOffset());
+ writeBuffer.writeInt("numElements", 64, getNumberOfElements());
+
+ String dataType = getDataType().name();
+ writeBuffer.writeString("dataType", dataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataType);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java
index eeab916..de9276e 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java
@@ -22,18 +22,22 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.plc4x.java.s7.readwrite.types.MemoryArea;
import org.apache.plc4x.java.s7.readwrite.types.TransportSize;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
+
public class S7StringField extends S7Field {
private final int stringLength;
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
protected S7StringField(@JsonProperty("dataType") TransportSize dataType, @JsonProperty("memoryArea") MemoryArea memoryArea,
- @JsonProperty("blockNumber") int blockNumber, @JsonProperty("byteOffset") int byteOffset,
- @JsonProperty("bitOffset") byte bitOffset, @JsonProperty("numElements") int numElements,
- @JsonProperty("stringLength") int stringLength) {
+ @JsonProperty("blockNumber") int blockNumber, @JsonProperty("byteOffset") int byteOffset,
+ @JsonProperty("bitOffset") byte bitOffset, @JsonProperty("numElements") int numElements,
+ @JsonProperty("stringLength") int stringLength) {
super(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements);
this.stringLength = stringLength;
}
@@ -43,12 +47,31 @@ public class S7StringField extends S7Field {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext(getClass().getSimpleName());
+
+ String memoryArea = getMemoryArea().name();
+ writeBuffer.writeString("memoryArea", memoryArea.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), memoryArea);
+
+ writeBuffer.writeInt("blockNumber", 64, getBlockNumber());
+ writeBuffer.writeInt("byteOffset", 64, getByteOffset());
+ writeBuffer.writeInt("bitOffset", 64, getBitOffset());
+ writeBuffer.writeInt("numElements", 64, getNumberOfElements());
+ writeBuffer.writeInt("stringLength", 64, getStringLength());
+
+ String dataType = getDataType().name();
+ writeBuffer.writeString("dataType", dataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataType);
+
+ writeBuffer.popContext(getClass().getSimpleName());
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
super.xmlSerialize(parent);
Document doc = parent.getOwnerDocument();
- Element byteOffsetElement = doc.createElement("byteOffset");
- byteOffsetElement.appendChild(doc.createTextNode(Integer.toString(getByteOffset())));
+ Element byteOffsetElement = doc.createElement("stringLength");
+ byteOffsetElement.appendChild(doc.createTextNode(Integer.toString(getStringLength())));
parent.getFirstChild().appendChild(byteOffsetElement);
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java
index 26bfe38..715d5e1 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java
@@ -26,6 +26,9 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.api.messages.PlcReadResponse;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.spi.connection.PlcFieldHandler;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -109,6 +112,26 @@ public class DefaultPlcReadRequest implements PlcReadRequest, PlcFieldRequest, X
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcReadRequest");
+
+ writeBuffer.pushContext("fields");
+ for (Map.Entry<String, PlcField> fieldEntry : fields.entrySet()) {
+ String fieldName = fieldEntry.getKey();
+ writeBuffer.pushContext(fieldName);
+ PlcField field = fieldEntry.getValue();
+ if(!(field instanceof Serializable)) {
+ throw new RuntimeException("Error serializing. Field doesn't implement XmlSerializable");
+ }
+ ((Serializable) field).serialize(writeBuffer);
+ writeBuffer.popContext(fieldName);
+ }
+ writeBuffer.popContext("fields");
+
+ writeBuffer.popContext("PlcReadRequest");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement("PlcReadRequest");
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
index 1e6b24e..e81dd1f 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
@@ -25,6 +25,9 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.api.messages.PlcReadResponse;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.apache.plc4x.java.spi.values.PlcList;
import org.apache.plc4x.java.api.value.PlcValue;
@@ -719,6 +722,25 @@ public class DefaultPlcReadResponse implements PlcReadResponse, XmlSerializable
return field;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcReadResponse");
+
+ if(request instanceof Serializable) {
+ ((Serializable) request).serialize(writeBuffer);
+ }
+ writeBuffer.pushContext("values");
+ for (Map.Entry<String, ResponseItem<PlcValue>> valueEntry : values.entrySet()) {
+ String fieldName = valueEntry.getKey();
+ writeBuffer.pushContext(fieldName);
+ ResponseItem<PlcValue> valueResponse = valueEntry.getValue();
+ valueResponse.serialize(writeBuffer);
+ writeBuffer.pushContext(fieldName);
+ }
+ writeBuffer.popContext("values");
+
+ writeBuffer.popContext("PlcReadResponse");
+ }
@Override
public void xmlSerialize(Element parent) {
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java
index 95d3470..0dece02 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java
@@ -29,8 +29,13 @@ import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.api.model.PlcSubscriptionField;
import org.apache.plc4x.java.api.types.PlcSubscriptionType;
+import org.apache.plc4x.java.api.value.PlcValue;
import org.apache.plc4x.java.spi.connection.PlcFieldHandler;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Element;
@@ -96,6 +101,26 @@ public class DefaultPlcSubscriptionRequest implements PlcSubscriptionRequest, Xm
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcSubscriptionRequest");
+
+ writeBuffer.pushContext("fields");
+ for (Map.Entry<String, PlcSubscriptionField> fieldEntry : fields.entrySet()) {
+ String fieldName = fieldEntry.getKey();
+ writeBuffer.pushContext(fieldName);
+ PlcField field = fieldEntry.getValue();
+ if(!(field instanceof Serializable)) {
+ throw new RuntimeException("Error serializing. Field doesn't implement XmlSerializable");
+ }
+ ((Serializable) field).serialize(writeBuffer);
+ writeBuffer.popContext(fieldName);
+ }
+ writeBuffer.popContext("fields");
+
+ writeBuffer.popContext("PlcSubscriptionRequest");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
index 741bd93..f56cd47 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
@@ -30,7 +30,11 @@ import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
import org.apache.plc4x.java.api.model.PlcSubscriptionField;
import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Element;
@@ -103,6 +107,26 @@ public class DefaultPlcSubscriptionResponse implements PlcSubscriptionResponse,
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcSubscriptionResponse");
+
+ if(request instanceof Serializable) {
+ ((Serializable) request).serialize(writeBuffer);
+ }
+ writeBuffer.pushContext("values");
+ for (Map.Entry<String, ResponseItem<PlcSubscriptionHandle>> valueEntry : values.entrySet()) {
+ String fieldName = valueEntry.getKey();
+ writeBuffer.pushContext(fieldName);
+ ResponseItem<PlcSubscriptionHandle> valueResponse = valueEntry.getValue();
+ valueResponse.serialize(writeBuffer);
+ writeBuffer.pushContext(fieldName);
+ }
+ writeBuffer.popContext("values");
+
+ writeBuffer.popContext("PlcSubscriptionResponse");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java
index c05d8d5..a85e5a4 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java
@@ -26,13 +26,14 @@ import org.apache.plc4x.java.api.messages.PlcRequest;
import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Element;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@@ -70,6 +71,11 @@ public class DefaultPlcUnsubscriptionRequest implements PlcUnsubscriptionRequest
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java
index 5887e2d..053784b 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.messages.PlcResponse;
import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Element;
@@ -43,6 +45,11 @@ public class DefaultPlcUnsubscriptionResponse implements PlcUnsubscriptionRespon
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
index c010ff0..e3df40c 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
@@ -28,6 +28,9 @@ import org.apache.plc4x.java.api.messages.PlcFieldRequest;
import org.apache.plc4x.java.api.messages.PlcWriteRequest;
import org.apache.plc4x.java.api.messages.PlcWriteResponse;
import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.apache.plc4x.java.spi.values.PlcList;
import org.apache.plc4x.java.api.value.PlcValue;
@@ -37,6 +40,7 @@ import org.apache.plc4x.java.spi.messages.utils.FieldValueItem;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -134,7 +138,7 @@ public class DefaultPlcWriteRequest implements PlcWriteRequest, XmlSerializable
@JsonIgnore
public int getNumberOfValues(String name) {
final PlcValue value = fields.get(name).getValue();
- if(value instanceof PlcList) {
+ if (value instanceof PlcList) {
PlcList list = (PlcList) value;
return list.getLength();
}
@@ -142,6 +146,38 @@ public class DefaultPlcWriteRequest implements PlcWriteRequest, XmlSerializable
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcWriteRequest");
+
+ writeBuffer.pushContext("fields");
+ for (Map.Entry<String, FieldValueItem> fieldEntry : fields.entrySet()) {
+ FieldValueItem fieldValueItem = fieldEntry.getValue();
+ String fieldName = fieldEntry.getKey();
+ writeBuffer.pushContext(fieldName);
+ PlcField field = fieldValueItem.getField();
+ if (!(field instanceof Serializable)) {
+ throw new RuntimeException("Error serializing. Field doesn't implement XmlSerializable");
+ }
+ ((Serializable) field).serialize(writeBuffer);
+ final PlcValue value = fieldValueItem.getValue();
+ if (value instanceof PlcList) {
+ PlcList list = (PlcList) value;
+ for (PlcValue plcValue : list.getList()) {
+ String plcValueString = plcValue.getString();
+ writeBuffer.writeString("value", plcValueString.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), plcValueString);
+ }
+ } else {
+ String plcValueString = value.getString();
+ writeBuffer.writeString("value", plcValueString.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), plcValueString);
+ }
+ writeBuffer.popContext(fieldName);
+ }
+ writeBuffer.popContext("fields");
+
+ writeBuffer.popContext("PlcWriteRequest");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement("PlcWriteRequest");
@@ -153,12 +189,12 @@ public class DefaultPlcWriteRequest implements PlcWriteRequest, XmlSerializable
Element fieldNameElement = doc.createElement(fieldName);
fieldsElement.appendChild(fieldNameElement);
PlcField field = fieldValueItem.getField();
- if(!(field instanceof XmlSerializable)) {
+ if (!(field instanceof XmlSerializable)) {
throw new RuntimeException("Error serializing. Field doesn't implement XmlSerializable");
}
((XmlSerializable) field).xmlSerialize(fieldNameElement);
final PlcValue value = fieldValueItem.getValue();
- if(value instanceof PlcList) {
+ if (value instanceof PlcList) {
PlcList list = (PlcList) value;
for (PlcValue plcValue : list.getList()) {
Element fieldValueElement = doc.createElement("value");
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
index 6d8f3d7..11e8610 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
@@ -27,11 +27,15 @@ import org.apache.plc4x.java.api.messages.PlcWriteResponse;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.api.types.PlcResponseCode;
import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Map;
@@ -72,6 +76,25 @@ public class DefaultPlcWriteResponse implements PlcWriteResponse, XmlSerializabl
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcWriteResponse");
+
+ if(request instanceof Serializable) {
+ ((Serializable) request).serialize(writeBuffer);
+ }
+ writeBuffer.pushContext("fields");
+ for (Map.Entry<String, PlcResponseCode> fieldEntry : values.entrySet()) {
+ String fieldName = fieldEntry.getKey();
+ final PlcResponseCode fieldResponseCode = fieldEntry.getValue();
+ String result = fieldResponseCode.name();
+ writeBuffer.writeString(fieldName, result.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), result);
+ }
+ writeBuffer.popContext("fields");
+
+ writeBuffer.popContext("PlcWriteResponse");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element messageElement = doc.createElement("PlcWriteResponse");
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java
index f1c10df..7063985 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java
@@ -19,9 +19,14 @@ under the License.
package org.apache.plc4x.java.spi.messages.utils;
import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
+
public class ResponseItem<T> implements XmlSerializable {
private final PlcResponseCode code;
@@ -41,9 +46,23 @@ public class ResponseItem<T> implements XmlSerializable {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("ResponseItem");
+ String codeName = code.name();
+ writeBuffer.writeString("result", codeName.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), codeName);
+ if (value != null) {
+ if (!(value instanceof Serializable)) {
+ throw new RuntimeException("Error serializing. Field value doesn't implement XmlSerializable");
+ }
+ ((Serializable) value).serialize(writeBuffer);
+ }
+ writeBuffer.popContext("ResponseItem");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
parent.setAttribute("result", code.name());
- if(value != null) {
+ if (value != null) {
if (!(value instanceof XmlSerializable)) {
throw new RuntimeException("Error serializing. Field value doesn't implement XmlSerializable");
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/Serializable.java
similarity index 78%
copy from plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java
copy to plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/Serializable.java
index 0a94b85..37f234a 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/Serializable.java
@@ -18,10 +18,9 @@ under the License.
*/
package org.apache.plc4x.java.spi.utils;
-import org.w3c.dom.Element;
-
-public interface XmlSerializable {
-
- void xmlSerialize(Element parent);
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+public interface Serializable {
+ void serialize(WriteBuffer writeBuffer) throws ParseException;
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java
index 0a94b85..f124fde 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java
@@ -20,8 +20,13 @@ package org.apache.plc4x.java.spi.utils;
import org.w3c.dom.Element;
-public interface XmlSerializable {
+/**
+ * @deprecated use the {@link Serializable} interface in combination with the {@link org.apache.plc4x.java.spi.generation.WriteBufferXmlBased} to produce xml.
+ */
+@Deprecated
+public interface XmlSerializable extends Serializable {
+ @Deprecated
void xmlSerialize(Element parent);
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
index 538a182..a6fa577 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
@@ -23,6 +23,8 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.math.BigDecimal;
@@ -163,6 +165,11 @@ public class PlcBigDecimal extends PlcSimpleValue<BigDecimal> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
index 3864e71..c37d05f 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
@@ -23,6 +23,8 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.math.BigDecimal;
@@ -163,6 +165,11 @@ public class PlcBigInteger extends PlcSimpleValue<BigInteger> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
index 0567108..96fe580 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.time.Instant;
@@ -94,6 +96,11 @@ public class PlcDATE extends PlcSimpleValue<LocalDate> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
index 9a846ff..8f671e3 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.time.*;
@@ -107,6 +109,11 @@ public class PlcDATE_AND_TIME extends PlcSimpleValue<LocalDateTime> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java
index 9774f1c..0a36bbc 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java
@@ -21,9 +21,13 @@ package org.apache.plc4x.java.spi.values;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
+
public abstract class PlcIECValue<T> extends PlcValueAdapter {
T value;
@@ -79,6 +83,12 @@ public abstract class PlcIECValue<T> extends PlcValueAdapter {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length*8,StandardCharsets.UTF_8.name(),valueString);
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element plcValueElement = doc.createElement(getClass().getSimpleName());
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
index 6e0bfbe..6f06a04 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
@@ -23,6 +23,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.math.BigInteger;
@@ -89,6 +91,11 @@ public class PlcLTIME extends PlcSimpleValue<Duration> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java
index 92b1f92..625dfe3 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java
@@ -22,6 +22,9 @@ package org.apache.plc4x.java.spi.values;
import com.fasterxml.jackson.annotation.*;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -90,6 +93,18 @@ public class PlcList extends PlcValueAdapter {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcList");
+ for (PlcValue listItem : listItems) {
+ if (!(listItem instanceof Serializable)) {
+ throw new PlcRuntimeException("Error serializing. List item doesn't implement XmlSerializable");
+ }
+ ((Serializable) listItem).serialize(writeBuffer);
+ }
+ writeBuffer.popContext("PlcList");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element plcValueElement = doc.createElement("PlcList");
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
index f90239a..67d5d07 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
@@ -23,6 +23,8 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.math.BigDecimal;
@@ -230,6 +232,11 @@ public class PlcSTRING extends PlcSimpleValue<String> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java
index b6c186a..c262eb2 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java
@@ -25,6 +25,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.utils.Serializable;
import org.apache.plc4x.java.spi.utils.XmlSerializable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -87,6 +90,22 @@ public class PlcStruct extends PlcValueAdapter {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.pushContext("PlcStruct");
+ for (Map.Entry<String, PlcValue> entry : map.entrySet()) {
+ String fieldName = entry.getKey();
+ writeBuffer.pushContext(fieldName);
+ PlcValue fieldValue = entry.getValue();
+ if (!(fieldValue instanceof Serializable)) {
+ throw new PlcRuntimeException("Error serializing. List item doesn't implement XmlSerializable");
+ }
+ ((Serializable) fieldValue).serialize(writeBuffer);
+ writeBuffer.pushContext(fieldName);
+ }
+ writeBuffer.popContext("PlcStruct");
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
Document doc = parent.getOwnerDocument();
Element plcValueElement = doc.createElement("PlcStruct");
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
index abfa5a1..76f83da 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
@@ -23,6 +23,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.time.Duration;
@@ -84,6 +86,11 @@ public class PlcTIME extends PlcSimpleValue<Duration> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
index 4f59c74..3ff2da4 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.time.LocalTime;
@@ -81,6 +83,11 @@ public class PlcTIME_OF_DAY extends PlcSimpleValue<LocalTime> {
}
@Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ // TODO: Implement
+ }
+
+ @Override
public void xmlSerialize(Element parent) {
// TODO: Implement
}