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 2018/09/13 11:35:51 UTC
[incubator-plc4x] 01/02: added support for BigInteger on field
handler
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch feature/api-redesign-chris-c
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit 26cba520ee590c64e0d614f27c62d586e961625e
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Sep 13 13:35:07 2018 +0200
added support for BigInteger on field handler
---
.../apache/plc4x/edgent/mock/MockFieldHandler.java | 5 +
.../plc4x/java/api/messages/PlcWriteRequest.java | 3 +
.../java/base/connection/PlcFieldHandler.java | 2 +
.../java/base/messages/DefaultPlcWriteRequest.java | 7 ++
.../base/protocol/Plc4XSupportedDataTypes.java | 9 +-
.../java/s7/netty/util/S7PlcFieldHandler.java | 108 +++++++++++----------
.../apache/plc4x/java/test/TestFieldHandler.java | 34 ++++---
7 files changed, 105 insertions(+), 63 deletions(-)
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockFieldHandler.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockFieldHandler.java
index f8d2ac8..3d2c1ad 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockFieldHandler.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockFieldHandler.java
@@ -52,6 +52,11 @@ public class MockFieldHandler implements PlcFieldHandler {
}
@Override
+ public FieldItem encodeBigInteger(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
public FieldItem encodeLong(PlcField field, Object[] values) {
return new MockFieldItem(values);
}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index c89c003..1dfa4aa 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -18,6 +18,7 @@ under the License.
*/
package org.apache.plc4x.java.api.messages;
+import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -36,6 +37,8 @@ public interface PlcWriteRequest extends PlcFieldRequest {
PlcWriteRequest.Builder addItem(String name, String fieldQuery, Integer... values);
+ PlcWriteRequest.Builder addItem(String name, String fieldQuery, BigInteger... values);
+
PlcWriteRequest.Builder addItem(String name, String fieldQuery, Long... values);
PlcWriteRequest.Builder addItem(String name, String fieldQuery, Float... values);
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/PlcFieldHandler.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/PlcFieldHandler.java
index d400b5b..2a86796 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/PlcFieldHandler.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/PlcFieldHandler.java
@@ -34,6 +34,8 @@ public interface PlcFieldHandler {
FieldItem encodeInteger(PlcField field, Object[] values);
+ FieldItem encodeBigInteger(PlcField field, Object[] values);
+
FieldItem encodeLong(PlcField field, Object[] values);
FieldItem encodeFloat(PlcField field, Object[] values);
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcWriteRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcWriteRequest.java
index 113bc5b..ec94553 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcWriteRequest.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcWriteRequest.java
@@ -26,6 +26,7 @@ import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.base.connection.PlcFieldHandler;
import org.apache.plc4x.java.base.messages.items.FieldItem;
+import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -90,6 +91,7 @@ public class DefaultPlcWriteRequest implements InternalPlcWriteRequest {
handlerMap.put(Byte.class, fieldHandler::encodeByte);
handlerMap.put(Short.class, fieldHandler::encodeShort);
handlerMap.put(Integer.class, fieldHandler::encodeInteger);
+ handlerMap.put(BigInteger.class, fieldHandler::encodeBigInteger);
handlerMap.put(Long.class, fieldHandler::encodeLong);
handlerMap.put(Float.class, fieldHandler::encodeFloat);
handlerMap.put(Double.class, fieldHandler::encodeDouble);
@@ -120,6 +122,11 @@ public class DefaultPlcWriteRequest implements InternalPlcWriteRequest {
}
@Override
+ public PlcWriteRequest.Builder addItem(String name, String fieldQuery, BigInteger... values) {
+ return addItem(name, fieldQuery, values, fieldHandler::encodeBigInteger);
+ }
+
+ @Override
public Builder addItem(String name, String fieldQuery, Long... values) {
return addItem(name, fieldQuery, values, fieldHandler::encodeLong);
}
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/protocol/Plc4XSupportedDataTypes.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/protocol/Plc4XSupportedDataTypes.java
index 4b1ca7e..dd48376 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/protocol/Plc4XSupportedDataTypes.java
+++ b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/protocol/Plc4XSupportedDataTypes.java
@@ -182,7 +182,7 @@ public class Plc4XSupportedDataTypes {
public static class DataTypePair<T extends Serializable> {
private final Pair<T, byte[]> dataTypePair;
- private DataTypePair(Pair<T, byte[]> dataTypePair) {
+ public DataTypePair(Pair<T, byte[]> dataTypePair) {
this.dataTypePair = dataTypePair;
}
@@ -211,6 +211,13 @@ public class Plc4XSupportedDataTypes {
return ArrayUtils.clone(dataTypePair.getRight());
}
+ /**
+ * @return the internal pair.
+ */
+ public Pair<T, byte[]> getDataTypePair() {
+ return dataTypePair;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java
index a34a79a..fd8ad5d 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java
@@ -22,7 +22,9 @@ import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.base.connection.PlcFieldHandler;
-import org.apache.plc4x.java.base.messages.items.*;
+import org.apache.plc4x.java.base.messages.items.DefaultIntegerFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultTimeFieldItem;
+import org.apache.plc4x.java.base.messages.items.FieldItem;
import org.apache.plc4x.java.s7.messages.items.*;
import org.apache.plc4x.java.s7.model.S7Field;
import org.apache.plc4x.java.s7.types.S7DataType;
@@ -37,7 +39,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public PlcField createField(String fieldQuery) throws PlcInvalidFieldException {
- if(S7Field.matches(fieldQuery)) {
+ if (S7Field.matches(fieldQuery)) {
return S7Field.of(fieldQuery);
}
throw new PlcInvalidFieldException(fieldQuery);
@@ -47,7 +49,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
public FieldItem encodeBoolean(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
// All of these types are declared as Bit or Bit-String types.
- if((s7Field.getDataType() == S7DataType.BOOL) || (s7Field.getDataType() == S7DataType.BYTE) ||
+ if ((s7Field.getDataType() == S7DataType.BOOL) || (s7Field.getDataType() == S7DataType.BYTE) ||
(s7Field.getDataType() == S7DataType.WORD) || (s7Field.getDataType() == S7DataType.DWORD) ||
(s7Field.getDataType() == S7DataType.LWORD)) {
return internalEncodeBoolean(field, values);
@@ -58,7 +60,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeByte(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if((s7Field.getDataType() == S7DataType.BYTE) || (s7Field.getDataType() == S7DataType.SINT) ||
+ if ((s7Field.getDataType() == S7DataType.BYTE) || (s7Field.getDataType() == S7DataType.SINT) ||
(s7Field.getDataType() == S7DataType.USINT) || (s7Field.getDataType() == S7DataType.CHAR)) {
return internalEncodeInteger(field, values);
}
@@ -68,7 +70,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeShort(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if((s7Field.getDataType() == S7DataType.WORD) || (s7Field.getDataType() == S7DataType.INT) ||
+ if ((s7Field.getDataType() == S7DataType.WORD) || (s7Field.getDataType() == S7DataType.INT) ||
(s7Field.getDataType() == S7DataType.UINT)) {
return internalEncodeInteger(field, values);
}
@@ -78,7 +80,17 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeInteger(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if((s7Field.getDataType() == S7DataType.DWORD) || (s7Field.getDataType() == S7DataType.DINT) ||
+ if ((s7Field.getDataType() == S7DataType.DWORD) || (s7Field.getDataType() == S7DataType.DINT) ||
+ (s7Field.getDataType() == S7DataType.UDINT)) {
+ return internalEncodeInteger(field, values);
+ }
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
+ }
+
+ @Override
+ public FieldItem encodeBigInteger(PlcField field, Object[] values) {
+ S7Field s7Field = (S7Field) field;
+ if ((s7Field.getDataType() == S7DataType.DWORD) || (s7Field.getDataType() == S7DataType.DINT) ||
(s7Field.getDataType() == S7DataType.UDINT)) {
return internalEncodeInteger(field, values);
}
@@ -88,7 +100,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeLong(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if((s7Field.getDataType() == S7DataType.LWORD) || (s7Field.getDataType() == S7DataType.LINT) ||
+ if ((s7Field.getDataType() == S7DataType.LWORD) || (s7Field.getDataType() == S7DataType.LINT) ||
(s7Field.getDataType() == S7DataType.ULINT)) {
return internalEncodeInteger(field, values);
}
@@ -98,7 +110,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeFloat(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if(s7Field.getDataType() == S7DataType.REAL) {
+ if (s7Field.getDataType() == S7DataType.REAL) {
return internalEncodeFloatingPoint(field, values);
}
throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
@@ -107,7 +119,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeDouble(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if(s7Field.getDataType() == S7DataType.LREAL) {
+ if (s7Field.getDataType() == S7DataType.LREAL) {
return internalEncodeFloatingPoint(field, values);
}
throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
@@ -116,7 +128,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeString(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if((s7Field.getDataType() == S7DataType.CHAR) || (s7Field.getDataType() == S7DataType.WCHAR) ||
+ if ((s7Field.getDataType() == S7DataType.CHAR) || (s7Field.getDataType() == S7DataType.WCHAR) ||
(s7Field.getDataType() == S7DataType.STRING) || (s7Field.getDataType() == S7DataType.WSTRING)) {
return internalEncodeString(field, values);
}
@@ -126,7 +138,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeTime(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if(s7Field.getDataType() == S7DataType.TIME) {
+ if (s7Field.getDataType() == S7DataType.TIME) {
return internalEncodeTemporal(field, values);
}
throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
@@ -135,7 +147,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeDate(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if(s7Field.getDataType() == S7DataType.DATE) {
+ if (s7Field.getDataType() == S7DataType.DATE) {
return internalEncodeTemporal(field, values);
}
throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
@@ -144,7 +156,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeDateTime(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if(s7Field.getDataType() == S7DataType.DATE_AND_TIME) {
+ if (s7Field.getDataType() == S7DataType.DATE_AND_TIME) {
return internalEncodeTemporal(field, values);
}
throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
@@ -165,31 +177,31 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
}
List<Boolean> booleanValues = new LinkedList<>();
for (Object value : values) {
- if(value instanceof Boolean) {
+ if (value instanceof Boolean) {
Boolean booleanValue = (Boolean) value;
booleanValues.add(booleanValue);
- } else if(value instanceof Byte) {
+ } else if (value instanceof Byte) {
Byte byteValue = (Byte) value;
BitSet bitSet = BitSet.valueOf(new byte[]{byteValue});
- for(int i = 0; i < 8; i++) {
+ for (int i = 0; i < 8; i++) {
booleanValues.add(bitSet.get(i));
}
- } else if(value instanceof Short) {
+ } else if (value instanceof Short) {
Short shortValue = (Short) value;
BitSet bitSet = BitSet.valueOf(new long[]{shortValue});
- for(int i = 0; i < 16; i++) {
+ for (int i = 0; i < 16; i++) {
booleanValues.add(bitSet.get(i));
}
- } else if(value instanceof Integer) {
+ } else if (value instanceof Integer) {
Integer integerValue = (Integer) value;
BitSet bitSet = BitSet.valueOf(new long[]{integerValue});
- for(int i = 0; i < 32; i++) {
+ for (int i = 0; i < 32; i++) {
booleanValues.add(bitSet.get(i));
}
- } else if(value instanceof Long) {
+ } else if (value instanceof Long) {
long longValue = (Long) value;
BitSet bitSet = BitSet.valueOf(new long[]{longValue});
- for(int i = 0; i < 64; i++) {
+ for (int i = 0; i < 64; i++) {
booleanValues.add(bitSet.get(i));
}
} else {
@@ -271,22 +283,22 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
throw new IllegalArgumentException(
"Cannot assign integer values to " + s7Field.getDataType().name() + " fields.");
}
- if(fieldType == DefaultIntegerFieldItem.class) {
+ if (fieldType == DefaultIntegerFieldItem.class) {
Long[] longValues = new Long[values.length];
for (int i = 0; i < values.length; i++) {
- if(!((values[i] instanceof Byte) || (values[i] instanceof Short) ||
- (values[i] instanceof Integer) || (values[i] instanceof Long))) {
+ if (!((values[i] instanceof Byte) || (values[i] instanceof Short) ||
+ (values[i] instanceof Integer) || (values[i] instanceof BigInteger) || (values[i] instanceof Long))) {
throw new IllegalArgumentException(
"Value of type " + values[i].getClass().getName() +
" is not assignable to " + s7Field.getDataType().name() + " fields.");
}
BigInteger value = BigInteger.valueOf(((Number) values[i]).longValue());
- if(minValue.compareTo(value) > 0) {
+ if (minValue.compareTo(value) > 0) {
throw new IllegalArgumentException(
"Value of " + value.toString() + " exceeds allowed minimum for type "
+ s7Field.getDataType().name() + " (min " + minValue.toString() + ")");
}
- if(maxValue.compareTo(value) < 0) {
+ if (maxValue.compareTo(value) < 0) {
throw new IllegalArgumentException(
"Value of " + value.toString() + " exceeds allowed maximum for type "
+ s7Field.getDataType().name() + " (max " + maxValue.toString() + ")");
@@ -298,9 +310,9 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
BigInteger[] bigIntegerValues = new BigInteger[values.length];
for (int i = 0; i < values.length; i++) {
BigInteger value;
- if(values[i] instanceof BigInteger) {
+ if (values[i] instanceof BigInteger) {
value = (BigInteger) values[i];
- } else if(((values[i] instanceof Byte) || (values[i] instanceof Short) ||
+ } else if (((values[i] instanceof Byte) || (values[i] instanceof Short) ||
(values[i] instanceof Integer) || (values[i] instanceof Long))) {
value = BigInteger.valueOf(((Number) values[i]).longValue());
} else {
@@ -308,12 +320,12 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
"Value of type " + values[i].getClass().getName() +
" is not assignable to " + s7Field.getDataType().name() + " fields.");
}
- if(minValue.compareTo(value) > 0) {
+ if (minValue.compareTo(value) > 0) {
throw new IllegalArgumentException(
"Value of " + value.toString() + " exceeds allowed minimum for type "
+ s7Field.getDataType().name() + " (min " + minValue.toString() + ")");
}
- if(maxValue.compareTo(value) < 0) {
+ if (maxValue.compareTo(value) < 0) {
throw new IllegalArgumentException(
"Value of " + value.toString() + " exceeds allowed maximum for type "
+ s7Field.getDataType().name() + " (max " + maxValue.toString() + ")");
@@ -345,21 +357,21 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
}
Double[] floatingPointValues = new Double[values.length];
for (int i = 0; i < values.length; i++) {
- if(values[i] instanceof Float) {
+ if (values[i] instanceof Float) {
floatingPointValues[i] = ((Float) values[i]).doubleValue();
- } else if(values[i] instanceof Double) {
+ } else if (values[i] instanceof Double) {
floatingPointValues[i] = (Double) values[i];
} else {
throw new IllegalArgumentException(
"Value of type " + values[i].getClass().getName() +
" is not assignable to " + s7Field.getDataType().name() + " fields.");
}
- if(floatingPointValues[i] < minValue) {
+ if (floatingPointValues[i] < minValue) {
throw new IllegalArgumentException(
"Value of " + floatingPointValues[i] + " exceeds allowed minimum for type "
+ s7Field.getDataType().name() + " (min " + minValue.toString() + ")");
}
- if(floatingPointValues[i] > maxValue) {
+ if (floatingPointValues[i] > maxValue) {
throw new IllegalArgumentException(
"Value of " + floatingPointValues[i] + " exceeds allowed maximum for type "
+ s7Field.getDataType().name() + " (max " + maxValue.toString() + ")");
@@ -395,9 +407,9 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
}
List<String> stringValues = new LinkedList<>();
for (Object value : values) {
- if(value instanceof String) {
+ if (value instanceof String) {
String stringValue = (String) value;
- if(stringValue.length() > maxLength) {
+ if (stringValue.length() > maxLength) {
throw new IllegalArgumentException(
"String length " + stringValue.length() + " exceeds allowed maximum for type "
+ s7Field.getDataType().name() + " (max " + maxLength + ")");
@@ -405,40 +417,37 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
stringValues.add(stringValue);
}
// All other types just translate to max one String character.
- else if(value instanceof Byte) {
+ else if (value instanceof Byte) {
Byte byteValue = (Byte) value;
byte[] stringBytes = new byte[]{byteValue};
- if(encoding16Bit) {
+ if (encoding16Bit) {
stringValues.add(new String(stringBytes, Charset.forName("UTF-16")));
} else {
stringValues.add(new String(stringBytes, Charset.forName("UTF-8")));
}
- }
- else if(value instanceof Short) {
+ } else if (value instanceof Short) {
Short shortValue = (Short) value;
byte[] stringBytes = new byte[2];
stringBytes[0] = (byte) (shortValue >> 8);
stringBytes[1] = (byte) (shortValue & 0xFF);
- if(encoding16Bit) {
+ if (encoding16Bit) {
stringValues.add(new String(stringBytes, Charset.forName("UTF-16")));
} else {
stringValues.add(new String(stringBytes, Charset.forName("UTF-8")));
}
- }
- else if(value instanceof Integer) {
+ } else if (value instanceof Integer) {
Integer integerValue = (Integer) value;
byte[] stringBytes = new byte[4];
stringBytes[0] = (byte) ((integerValue >> 24) & 0xFF);
stringBytes[1] = (byte) ((integerValue >> 16) & 0xFF);
stringBytes[2] = (byte) ((integerValue >> 8) & 0xFF);
stringBytes[3] = (byte) (integerValue & 0xFF);
- if(encoding16Bit) {
+ if (encoding16Bit) {
stringValues.add(new String(stringBytes, Charset.forName("UTF-16")));
} else {
stringValues.add(new String(stringBytes, Charset.forName("UTF-8")));
}
- }
- else if(value instanceof Long) {
+ } else if (value instanceof Long) {
Long longValue = (Long) value;
byte[] stringBytes = new byte[8];
stringBytes[0] = (byte) ((longValue >> 56) & 0xFF);
@@ -449,13 +458,12 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
stringBytes[5] = (byte) ((longValue >> 16) & 0xFF);
stringBytes[6] = (byte) ((longValue >> 8) & 0xFF);
stringBytes[7] = (byte) (longValue & 0xFF);
- if(encoding16Bit) {
+ if (encoding16Bit) {
stringValues.add(new String(stringBytes, Charset.forName("UTF-16")));
} else {
stringValues.add(new String(stringBytes, Charset.forName("UTF-8")));
}
- }
- else {
+ } else {
throw new IllegalArgumentException(
"Value of type " + value.getClass().getName() +
" is not assignable to " + s7Field.getDataType().name() + " fields.");
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
index 5953da6..839c89c 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
+++ b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
@@ -25,6 +25,7 @@ import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.base.connection.PlcFieldHandler;
import org.apache.plc4x.java.base.messages.items.*;
+import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -34,7 +35,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public PlcField createField(String fieldQuery) throws PlcInvalidFieldException {
- if(TestField.matches(fieldQuery)) {
+ if (TestField.matches(fieldQuery)) {
return TestField.of(fieldQuery);
}
throw new PlcInvalidFieldException(fieldQuery);
@@ -43,7 +44,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeBoolean(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == Boolean.class) {
+ if (testField.getDataType() == Boolean.class) {
return new DefaultBooleanFieldItem((Boolean[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -52,7 +53,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeByte(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == Byte.class) {
+ if (testField.getDataType() == Byte.class) {
return new DefaultIntegerFieldItem(Arrays.stream(values).map(x -> new Long((Byte) x)).toArray(Long[]::new));
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -61,7 +62,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeShort(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == Short.class) {
+ if (testField.getDataType() == Short.class) {
return new DefaultIntegerFieldItem(Arrays.stream(values).map(x -> new Long((Short) x)).toArray(Long[]::new));
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -70,16 +71,25 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeInteger(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == Integer.class) {
+ if (testField.getDataType() == Integer.class) {
return new DefaultIntegerFieldItem(Arrays.stream(values).map(x -> new Long((Integer) x)).toArray(Long[]::new));
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
@Override
+ public FieldItem encodeBigInteger(PlcField field, Object[] values) {
+ TestField testField = (TestField) field;
+ if (testField.getDataType() == BigInteger.class) {
+ return new DefaultIntegerFieldItem(Arrays.stream(values).map(x -> ((BigInteger) x).longValue()).toArray(Long[]::new));
+ }
+ throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
+ }
+
+ @Override
public FieldItem encodeLong(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == Long.class) {
+ if (testField.getDataType() == Long.class) {
return new DefaultIntegerFieldItem((Long[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -88,7 +98,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeFloat(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == Float.class) {
+ if (testField.getDataType() == Float.class) {
return new DefaultFloatingPointFieldItem((Double[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -97,7 +107,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeDouble(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == Double.class) {
+ if (testField.getDataType() == Double.class) {
return new DefaultFloatingPointFieldItem((Double[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -106,7 +116,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeString(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == String.class) {
+ if (testField.getDataType() == String.class) {
return new DefaultStringFieldItem((String[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -115,7 +125,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeTime(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == LocalTime.class) {
+ if (testField.getDataType() == LocalTime.class) {
return new DefaultTimeFieldItem((LocalDateTime[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -124,7 +134,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeDate(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == LocalDate.class) {
+ if (testField.getDataType() == LocalDate.class) {
return new DefaultTimeFieldItem((LocalDateTime[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
@@ -133,7 +143,7 @@ public class TestFieldHandler implements PlcFieldHandler {
@Override
public FieldItem encodeDateTime(PlcField field, Object[] values) {
TestField testField = (TestField) field;
- if(testField.getDataType() == LocalDateTime.class) {
+ if (testField.getDataType() == LocalDateTime.class) {
return new DefaultTimeFieldItem((LocalDateTime[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());