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/17 13:42:54 UTC
[incubator-plc4x] branch master updated: [General] added remaining
datatypes for FieldItem
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
The following commit(s) were added to refs/heads/master by this push:
new 21f5386 [General] added remaining datatypes for FieldItem
21f5386 is described below
commit 21f53861c06b219a5829f78ecf43456c89f1e75b
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Sep 17 15:42:41 2018 +0200
[General] added remaining datatypes for FieldItem
---
.../plc4x/edgent/PlcConnectionAdapterTest.java | 6 +-
.../plc4x/java/api/messages/PlcReadResponse.java | 11 ++
.../apache/plc4x/java/ads/model/AdsDataType.java | 4 +
.../plc4x/java/ads/model/AdsPlcFieldHandler.java | 30 +++---
.../ads/protocol/util/LittleEndianDecoder.java | 118 ++++++++++-----------
.../ads/protocol/util/LittleEndianEncoder.java | 21 ++--
.../java/base/messages/DefaultPlcReadResponse.java | 43 ++++++++
.../base/messages/DefaultPlcSubscriptionEvent.java | 26 +++++
...ldItem.java => DefaultBigDecimalFieldItem.java} | 56 +++++++---
.../messages/items/DefaultBigIntegerFieldItem.java | 8 ++
.../messages/items/DefaultBooleanFieldItem.java | 5 +-
...gerFieldItem.java => DefaultByteFieldItem.java} | 35 +++---
...tFieldItem.java => DefaultDoubleFieldItem.java} | 13 ++-
...ntFieldItem.java => DefaultFloatFieldItem.java} | 29 +++--
.../messages/items/DefaultIntegerFieldItem.java | 31 ++++--
...gerFieldItem.java => DefaultLongFieldItem.java} | 13 ++-
...erFieldItem.java => DefaultShortFieldItem.java} | 32 +++---
.../plc4x/java/base/messages/items/FieldItem.java | 9 ++
.../ethernetip/netty/Plc4XEtherNetIpProtocol.java | 4 +-
.../messages/items/S7FloatingPointFieldItem.java | 4 +-
...7IntegerFieldItem.java => S7LongFieldItem.java} | 6 +-
.../plc4x/java/s7/netty/Plc4XS7Protocol.java | 12 +--
.../java/s7/netty/util/S7PlcFieldHandler.java | 28 ++---
.../apache/plc4x/java/test/TestFieldHandler.java | 14 +--
.../org/apache/plc4x/java/test/TestDeviceTest.java | 4 +-
25 files changed, 372 insertions(+), 190 deletions(-)
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
index 2368bea..bb9c2af 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
@@ -31,7 +31,7 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
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.base.messages.items.DefaultIntegerFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultLongFieldItem;
import org.apache.plc4x.test.FastTests;
import org.hamcrest.core.IsInstanceOf;
import org.junit.Test;
@@ -88,7 +88,7 @@ public class PlcConnectionAdapterTest {
// will help identify problems in the adapter/supplier/consumer
PlcField plcField = request.getFields().get(0);
// TODO: smart value conversion
- connection.setFieldItem(plcField, new DefaultIntegerFieldItem(0L));
+ connection.setFieldItem(plcField, new DefaultLongFieldItem(0L));
CompletableFuture<PlcReadResponse<?>> cf = connection.read(request);
@@ -103,7 +103,7 @@ public class PlcConnectionAdapterTest {
// this is really a tests of our mock tooling but knowing it's behaving as expected
// will help identify problems in the adapter/supplier/consumer
PlcField plcField = request.getFields().get(0);
- connection.setFieldItem(plcField, new DefaultIntegerFieldItem(0L));
+ connection.setFieldItem(plcField, new DefaultLongFieldItem(0L));
CompletableFuture<PlcWriteResponse<?>> cf = connection.write(request);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
index 666fdfa..c52de88 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
@@ -18,6 +18,7 @@ under the License.
*/
package org.apache.plc4x.java.api.messages;
+import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -119,6 +120,16 @@ public interface PlcReadResponse<T extends PlcReadRequest> extends PlcFieldRespo
Collection<Double> getAllDoubles(String name);
+ boolean isValidBigDecimal(String name);
+
+ boolean isValidBigDecimal(String name, int index);
+
+ BigDecimal getBigDecimal(String name);
+
+ BigDecimal getBigDecimal(String name, int index);
+
+ Collection<BigDecimal> getAllBigDecimals(String name);
+
boolean isValidString(String name);
boolean isValidString(String name, int index);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsDataType.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsDataType.java
index 72da37f..b9859f5 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsDataType.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsDataType.java
@@ -529,4 +529,8 @@ public enum AdsDataType {
public int getTargetByteSize() {
return targetByteSize;
}
+
+ public boolean withinBounds(double other) {
+ return other >= lowerBound && other <= upperBound;
+ }
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsPlcFieldHandler.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsPlcFieldHandler.java
index 11dc8c8..424efdb 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsPlcFieldHandler.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsPlcFieldHandler.java
@@ -717,49 +717,49 @@ public class AdsPlcFieldHandler implements PlcFieldHandler {
Class<? extends FieldItem> fieldType;
switch (adsField.getAdsDataType()) {
case BYTE:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case WORD:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case DWORD:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case SINT:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case USINT:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case INT:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case UINT:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case DINT:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case UDINT:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case LINT:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case ULINT:
fieldType = DefaultBigIntegerFieldItem.class;
break;
case INT32:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
case INT64:
- fieldType = DefaultIntegerFieldItem.class;
+ fieldType = DefaultLongFieldItem.class;
break;
default:
throw new IllegalArgumentException(
"Cannot assign integer values to " + adsField.getAdsDataType().name() + " fields.");
}
- if (fieldType == DefaultIntegerFieldItem.class) {
+ if (fieldType == DefaultLongFieldItem.class) {
Long[] longValues = new Long[values.length];
for (int i = 0; i < values.length; i++) {
if (!((values[i] instanceof Byte) || (values[i] instanceof Short) ||
@@ -781,7 +781,7 @@ public class AdsPlcFieldHandler implements PlcFieldHandler {
}
longValues[i] = value.longValue();
}
- return new DefaultIntegerFieldItem(longValues);
+ return new DefaultLongFieldItem(longValues);
} else {
BigInteger[] bigIntegerValues = new BigInteger[values.length];
for (int i = 0; i < values.length; i++) {
@@ -848,7 +848,7 @@ public class AdsPlcFieldHandler implements PlcFieldHandler {
+ adsField.getAdsDataType().name() + " (max " + maxValue.toString() + ")");
}
}
- return new DefaultFloatingPointFieldItem(floatingPointValues);
+ return new DefaultDoubleFieldItem(floatingPointValues);
}
private FieldItem internalEncodeString(PlcField field, Object[] values) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
index 2c689a3..8d37edb 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
@@ -62,20 +62,20 @@ public class LittleEndianDecoder {
return new DefaultBooleanFieldItem(values.toArray(new Boolean[0]));
}
case BITARR8: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Short> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
short aByte = wrappedBuffer.readUnsignedByte();
- values.offer((long) aByte);
+ values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultShortFieldItem(values.toArray(new Short[0]));
}
case BITARR16: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Integer> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aLong = wrappedBuffer.readUnsignedShortLE();
+ int aLong = wrappedBuffer.readUnsignedShortLE();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultIntegerFieldItem(values.toArray(new Integer[0]));
}
case BITARR32: {
LinkedList<Long> values = new LinkedList<>();
@@ -83,31 +83,31 @@ public class LittleEndianDecoder {
long aLong = wrappedBuffer.readUnsignedIntLE();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case INT8: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Byte> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aLong = wrappedBuffer.readByte();
+ byte aLong = wrappedBuffer.readByte();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultByteFieldItem(values.toArray(new Byte[0]));
}
case INT16: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Short> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aLong = wrappedBuffer.readShortLE();
+ short aLong = wrappedBuffer.readShortLE();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultShortFieldItem(values.toArray(new Short[0]));
}
case INT32: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Integer> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aLong = wrappedBuffer.readIntLE();
+ int aLong = wrappedBuffer.readIntLE();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultIntegerFieldItem(values.toArray(new Integer[0]));
}
case INT64: {
LinkedList<Long> values = new LinkedList<>();
@@ -118,23 +118,23 @@ public class LittleEndianDecoder {
// TODO: potential dataloss here.
values.offer(bigInteger.longValue());
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case UINT8: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Short> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aLong = wrappedBuffer.readUnsignedByte();
+ short aLong = wrappedBuffer.readUnsignedByte();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultShortFieldItem(values.toArray(new Short[0]));
}
case UINT16: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Integer> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aLong = wrappedBuffer.readUnsignedShortLE();
+ int aLong = wrappedBuffer.readUnsignedShortLE();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultIntegerFieldItem(values.toArray(new Integer[0]));
}
case UINT32: {
LinkedList<Long> values = new LinkedList<>();
@@ -142,7 +142,7 @@ public class LittleEndianDecoder {
long aLong = wrappedBuffer.readUnsignedIntLE();
values.offer(aLong);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case UINT64: {
LinkedList<Long> values = new LinkedList<>();
@@ -153,15 +153,15 @@ public class LittleEndianDecoder {
// TODO: potential dataloss here.
values.offer(bigInteger.longValue());
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case FLOAT: {
- LinkedList<Double> values = new LinkedList<>();
+ LinkedList<Float> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- double aLong = wrappedBuffer.readFloatLE();
+ float aLong = wrappedBuffer.readFloatLE();
values.offer(aLong);
}
- return new DefaultFloatingPointFieldItem(values.toArray(new Double[0]));
+ return new DefaultFloatFieldItem(values.toArray(new Float[0]));
}
case DOUBLE: {
LinkedList<Double> values = new LinkedList<>();
@@ -169,7 +169,7 @@ public class LittleEndianDecoder {
double aLong = wrappedBuffer.readDoubleLE();
values.offer(aLong);
}
- return new DefaultFloatingPointFieldItem(values.toArray(new Double[0]));
+ return new DefaultDoubleFieldItem(values.toArray(new Double[0]));
}
case BOOL: {
LinkedList<Boolean> values = new LinkedList<>();
@@ -180,20 +180,20 @@ public class LittleEndianDecoder {
return new DefaultBooleanFieldItem(values.toArray(new Boolean[0]));
}
case BYTE: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Short> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aByte = wrappedBuffer.readUnsignedByte();
+ short aByte = wrappedBuffer.readUnsignedByte();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultShortFieldItem(values.toArray(new Short[0]));
}
case WORD: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Integer> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aByte = wrappedBuffer.readUnsignedShortLE();
+ int aByte = wrappedBuffer.readUnsignedShortLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultIntegerFieldItem(values.toArray(new Integer[0]));
}
case DWORD: {
LinkedList<Long> values = new LinkedList<>();
@@ -201,47 +201,47 @@ public class LittleEndianDecoder {
long aByte = wrappedBuffer.readUnsignedIntLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case SINT: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Byte> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aByte = wrappedBuffer.readByte();
+ byte aByte = wrappedBuffer.readByte();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultByteFieldItem(values.toArray(new Byte[0]));
}
case USINT: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Short> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aByte = wrappedBuffer.readUnsignedByte();
+ short aByte = wrappedBuffer.readUnsignedByte();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultShortFieldItem(values.toArray(new Short[0]));
}
case INT: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Short> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aByte = wrappedBuffer.readShortLE();
+ short aByte = wrappedBuffer.readShortLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultShortFieldItem(values.toArray(new Short[0]));
}
case UINT: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Integer> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aByte = wrappedBuffer.readUnsignedShortLE();
+ int aByte = wrappedBuffer.readUnsignedShortLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultIntegerFieldItem(values.toArray(new Integer[0]));
}
case DINT: {
- LinkedList<Long> values = new LinkedList<>();
+ LinkedList<Integer> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- long aByte = wrappedBuffer.readIntLE();
+ int aByte = wrappedBuffer.readIntLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultIntegerFieldItem(values.toArray(new Integer[0]));
}
case UDINT: {
LinkedList<Long> values = new LinkedList<>();
@@ -249,7 +249,7 @@ public class LittleEndianDecoder {
long aByte = wrappedBuffer.readUnsignedIntLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case LINT: {
LinkedList<Long> values = new LinkedList<>();
@@ -257,7 +257,7 @@ public class LittleEndianDecoder {
long aByte = wrappedBuffer.readLongLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case ULINT: {
LinkedList<BigInteger> values = new LinkedList<>();
@@ -270,12 +270,12 @@ public class LittleEndianDecoder {
return new DefaultBigIntegerFieldItem(values.toArray(new BigInteger[0]));
}
case REAL: {
- LinkedList<Double> values = new LinkedList<>();
+ LinkedList<Float> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
- double aByte = wrappedBuffer.readFloatLE();
+ float aByte = wrappedBuffer.readFloatLE();
values.offer(aByte);
}
- return new DefaultFloatingPointFieldItem(values.toArray(new Double[0]));
+ return new DefaultFloatFieldItem(values.toArray(new Float[0]));
}
case LREAL: {
LinkedList<Double> values = new LinkedList<>();
@@ -283,13 +283,13 @@ public class LittleEndianDecoder {
double aByte = wrappedBuffer.readDoubleLE();
values.offer(aByte);
}
- return new DefaultFloatingPointFieldItem(values.toArray(new Double[0]));
+ return new DefaultDoubleFieldItem(values.toArray(new Double[0]));
}
case STRING: {
LinkedList<String> values = new LinkedList<>();
while (wrappedBuffer.isReadable()) {
ByteArrayOutputStream os = new ByteArrayOutputStream();
- Byte aByte;
+ byte aByte;
while ((aByte = wrappedBuffer.readByte()) != 0x0) {
os.write(aByte);
}
@@ -303,7 +303,7 @@ public class LittleEndianDecoder {
long aByte = wrappedBuffer.readUnsignedIntLE();
values.offer(aByte);
}
- return new DefaultIntegerFieldItem(values.toArray(new Long[0]));
+ return new DefaultLongFieldItem(values.toArray(new Long[0]));
}
case TIME_OF_DAY: {
LinkedList<LocalTime> values = new LinkedList<>();
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoder.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoder.java
index 11828c8..a039766 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoder.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoder.java
@@ -41,7 +41,6 @@ public class LittleEndianEncoder {
// Utility class
}
- // TODO: add bound checking
public static byte[] encodeData(AdsDataType adsDataType, Object... values) throws PlcProtocolException {
if (values.length == 0) {
return new byte[]{};
@@ -114,8 +113,8 @@ public class LittleEndianEncoder {
}
private static Stream<byte[]> encodeFloat(AdsDataType adsDataType, Stream<Float> floatStream) {
- // TODO: add boundchecks and add optional extension
return floatStream
+ .peek(value -> checkBound(adsDataType, value))
// TODO: check how ads expects this data
.map(Float::floatToIntBits)
.map(intValue -> new byte[]{
@@ -127,8 +126,8 @@ public class LittleEndianEncoder {
}
private static Stream<byte[]> encodeDouble(AdsDataType adsDataType, Stream<Double> doubleStream) {
- // TODO: add boundchecks and add optional extension
return doubleStream
+ .peek(value -> checkBound(adsDataType, value))
// TODO: check how ads expects this data
.map(Double::doubleToLongBits)
.map(longValue -> new byte[]{
@@ -144,8 +143,8 @@ public class LittleEndianEncoder {
}
private static Stream<byte[]> encodeInteger(AdsDataType adsDataType, Stream<Integer> integerStream) {
- // TODO: add boundchecks and add optional extension
return integerStream
+ .peek(value -> checkBound(adsDataType, value))
.map(intValue -> new byte[]{
(byte) (intValue & 0x000000ff),
(byte) ((intValue & 0x0000ff00) >> 8),
@@ -155,8 +154,8 @@ public class LittleEndianEncoder {
}
private static Stream<byte[]> encodeLong(AdsDataType adsDataType, Stream<Long> integerStream) {
- // TODO: add boundchecks and add optional extension
return integerStream
+ .peek(value -> checkBound(adsDataType, value))
.map(longValue -> new byte[]{
(byte) (longValue & 0x00000000_000000ffL),
(byte) ((longValue & 0x00000000_0000ff00L) >> 8),
@@ -186,7 +185,6 @@ public class LittleEndianEncoder {
}
private static Stream<byte[]> encodeCalendar(AdsDataType adsDataType, Stream<Calendar> calendarStream) {
- // TODO: add boundchecks and add optional extension
return calendarStream
.map(Calendar.class::cast)
.map(Calendar::getTime)
@@ -194,6 +192,7 @@ public class LittleEndianEncoder {
.map(BigInteger::valueOf)
.map(TimeStamp::javaToWinTime)
.map(BigInteger::longValue)
+ .peek(value -> checkBound(adsDataType, value))
.map(time -> new byte[]{
(byte) (time & 0x00000000_000000ffL),
(byte) ((time & 0x00000000_0000ff00L) >> 8),
@@ -209,8 +208,8 @@ public class LittleEndianEncoder {
private static Stream<byte[]> encodeShort(AdsDataType adsDataType, Stream<Short> shortStream) {
- // TODO: add boundchecks and add optional extension
return shortStream
+ .peek(value -> checkBound(adsDataType, value))
.map(shortValue -> new byte[]{
(byte) (shortValue & 0x00ff),
(byte) ((shortValue & 0xff00) >> 8),
@@ -218,8 +217,8 @@ public class LittleEndianEncoder {
}
private static Stream<byte[]> encodeByte(AdsDataType adsDataType, Stream<Byte> byteStream) {
- // TODO: add boundchecks and add optional extension
return byteStream
+ .peek(value -> checkBound(adsDataType, value))
.map(aByte -> new byte[]{aByte});
}
@@ -228,4 +227,10 @@ public class LittleEndianEncoder {
return booleanStream
.map(booleanValue -> new byte[]{booleanValue ? (byte) 0x01 : (byte) 0x00});
}
+
+ private static void checkBound(AdsDataType adsDataType, double other) {
+ if (!adsDataType.withinBounds(other)) {
+ throw new PlcRuntimeException(other + " not within bounds of " + adsDataType);
+ }
+ }
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java
index 1d37858..7bd028d 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.api.types.PlcResponseCode;
import org.apache.plc4x.java.base.messages.items.FieldItem;
+import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -445,6 +446,48 @@ public class DefaultPlcReadResponse implements InternalPlcReadResponse {
}
@Override
+ public boolean isValidBigDecimal(String name) {
+ return isValidBigDecimal(name, 0);
+ }
+
+ @Override
+ public boolean isValidBigDecimal(String name, int index) {
+ FieldItem fieldInternal = getFieldInternal(name);
+ if (fieldInternal != null) {
+ return fieldInternal.isValidBigDecimal(index);
+ }
+ return false;
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(String name) {
+ return getBigDecimal(name, 0);
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(String name, int index) {
+ FieldItem fieldInternal = getFieldInternal(name);
+ if (fieldInternal != null) {
+ return fieldInternal.getBigDecimal(index);
+ }
+ return null;
+ }
+
+ @Override
+ public Collection<BigDecimal> getAllBigDecimals(String name) {
+ FieldItem fieldInternal = getFieldInternal(name);
+ if (fieldInternal != null) {
+ int num = fieldInternal.getNumberOfValues();
+ List<BigDecimal> values = new ArrayList<>(num);
+ for (int i = 0; i < num; i++) {
+ values.add(fieldInternal.getBigDecimal(i));
+ }
+ return values;
+ }
+ return null;
+ }
+
+ @Override
public boolean isValidString(String name) {
return isValidString(name, 0);
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
index 349bf4f..a188811 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.api.types.PlcResponseCode;
+import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -263,6 +264,31 @@ public class DefaultPlcSubscriptionEvent implements InternalPlcSubscriptionEvent
}
@Override
+ public boolean isValidBigDecimal(String name) {
+ return false;
+ }
+
+ @Override
+ public boolean isValidBigDecimal(String name, int index) {
+ return false;
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(String name) {
+ return null;
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(String name, int index) {
+ return null;
+ }
+
+ @Override
+ public Collection<BigDecimal> getAllBigDecimals(String name) {
+ return null;
+ }
+
+ @Override
public boolean isValidString(String name) {
return false;
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigDecimalFieldItem.java
similarity index 57%
copy from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java
copy to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigDecimalFieldItem.java
index f3bc8ed..17a5ed7 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigDecimalFieldItem.java
@@ -18,11 +18,12 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
-public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
+public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
- public DefaultFloatingPointFieldItem(Double... values) {
+ public DefaultBigDecimalFieldItem(BigDecimal... values) {
super(values);
}
@@ -39,15 +40,17 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public Boolean getBoolean(int index) {
if (isValidBoolean(index)) {
- return getValue(index) != 0L;
+ return getValue(index).compareTo(BigDecimal.ZERO) != 0;
}
return null;
}
@Override
public boolean isValidByte(int index) {
- Double value = getValue(index);
- return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+ BigDecimal value = getValue(index);
+ BigDecimal min = BigDecimal.valueOf(Byte.MIN_VALUE);
+ BigDecimal max = BigDecimal.valueOf(Byte.MAX_VALUE);
+ return (value != null) && (value.compareTo(min) < 0) && (value.compareTo(max) > 0);
}
@Override
@@ -60,8 +63,10 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidShort(int index) {
- Double value = getValue(index);
- return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+ BigDecimal value = getValue(index);
+ BigDecimal min = BigDecimal.valueOf(Short.MIN_VALUE);
+ BigDecimal max = BigDecimal.valueOf(Short.MAX_VALUE);
+ return (value != null) && (value.compareTo(min) < 0) && (value.compareTo(max) > 0);
}
@Override
@@ -74,8 +79,10 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidInteger(int index) {
- Double value = getValue(index);
- return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+ BigDecimal value = getValue(index);
+ BigDecimal min = BigDecimal.valueOf(Integer.MIN_VALUE);
+ BigDecimal max = BigDecimal.valueOf(Integer.MAX_VALUE);
+ return (value != null) && (value.compareTo(min) < 0) && (value.compareTo(max) > 0);
}
@Override
@@ -87,21 +94,23 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
}
public boolean isValidBigInteger(int index) {
- Double value = getValue(index);
+ BigDecimal value = getValue(index);
return value != null;
}
public BigInteger getBigInteger(int index) {
if (isValidBigInteger(index)) {
- return BigInteger.valueOf(getValue(index).longValue());
+ return getValue(index).toBigInteger();
}
return null;
}
@Override
public boolean isValidLong(int index) {
- Double value = getValue(index);
- return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
+ BigDecimal value = getValue(index);
+ BigDecimal min = BigDecimal.valueOf(Long.MIN_VALUE);
+ BigDecimal max = BigDecimal.valueOf(Long.MAX_VALUE);
+ return (value != null) && (value.compareTo(min) < 0) && (value.compareTo(max) > 0);
}
@Override
@@ -114,8 +123,10 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidFloat(int index) {
- Double value = getValue(index);
- return (value != null) && (value <= Float.MAX_VALUE) && (value >= Float.MIN_VALUE);
+ BigDecimal value = getValue(index);
+ BigDecimal min = BigDecimal.valueOf(Float.MIN_VALUE);
+ BigDecimal max = BigDecimal.valueOf(Float.MAX_VALUE);
+ return (value != null) && (value.compareTo(min) < 0) && (value.compareTo(max) > 0);
}
@Override
@@ -128,17 +139,28 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidDouble(int index) {
- return (getValue(index) != null);
+ BigDecimal value = getValue(index);
+ BigDecimal min = BigDecimal.valueOf(Double.MIN_VALUE);
+ BigDecimal max = BigDecimal.valueOf(Double.MAX_VALUE);
+ return (value != null) && (value.compareTo(min) < 0) && (value.compareTo(max) > 0);
}
@Override
public Double getDouble(int index) {
if (isValidDouble(index)) {
- return getValue(index);
+ return getValue(index).doubleValue();
}
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return getValue(index);
+ }
+
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java
index 33903b3..9e30774 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java
@@ -157,5 +157,13 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return new BigDecimal(getValue(index));
+ }
+
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java
index 239c478..abb02b4 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java
@@ -38,7 +38,7 @@ public class DefaultBooleanFieldItem extends FieldItem<Boolean> {
@Override
public Boolean getBoolean(int index) {
- if(isValidBoolean(index)) {
+ if (isValidBoolean(index)) {
return getValue(index);
}
return null;
@@ -59,11 +59,12 @@ public class DefaultBooleanFieldItem extends FieldItem<Boolean> {
i++;
}
byte[] bytes = bitSet.toByteArray();
- if(bytes.length < index) {
+ if (bytes.length < index) {
return null;
}
return bytes[index];
}
+ // TODO: implement other methods according to getByte
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteFieldItem.java
similarity index 81%
copy from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
copy to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteFieldItem.java
index e6e65ca..eec3ad7 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteFieldItem.java
@@ -18,11 +18,12 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
-public class DefaultIntegerFieldItem extends FieldItem<Long> {
+public class DefaultByteFieldItem extends FieldItem<Byte> {
- public DefaultIntegerFieldItem(Long... values) {
+ public DefaultByteFieldItem(Byte... values) {
super(values);
}
@@ -46,22 +47,22 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidByte(int index) {
- Long value = getValue(index);
- return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+ Byte value = getValue(index);
+ return (value != null);
}
@Override
public Byte getByte(int index) {
if (isValidByte(index)) {
- return getValue(index).byteValue();
+ return getValue(index);
}
return null;
}
@Override
public boolean isValidShort(int index) {
- Long value = getValue(index);
- return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+ Byte value = getValue(index);
+ return (value != null);
}
@Override
@@ -74,8 +75,8 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidInteger(int index) {
- Long value = getValue(index);
- return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+ Byte value = getValue(index);
+ return (value != null);
}
@Override
@@ -87,7 +88,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
}
public boolean isValidBigInteger(int index) {
- Long value = getValue(index);
+ Byte value = getValue(index);
return value != null;
}
@@ -106,14 +107,14 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public Long getLong(int index) {
if (isValidFloat(index)) {
- return getValue(index);
+ return getValue(index).longValue();
}
return null;
}
@Override
public boolean isValidFloat(int index) {
- Long value = getValue(index);
+ Byte value = getValue(index);
return (value != null) && (value <= Float.MAX_VALUE) && (value >= Float.MIN_VALUE);
}
@@ -127,7 +128,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidDouble(int index) {
- Long value = getValue(index);
+ Byte value = getValue(index);
return (value != null) && (value <= Double.MAX_VALUE) && (value >= Double.MIN_VALUE);
}
@@ -139,5 +140,13 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return new BigDecimal(getValue(index));
+ }
+
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultDoubleFieldItem.java
similarity index 91%
copy from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java
copy to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultDoubleFieldItem.java
index f3bc8ed..5019ca9 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultDoubleFieldItem.java
@@ -18,11 +18,12 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
-public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
+public class DefaultDoubleFieldItem extends FieldItem<Double> {
- public DefaultFloatingPointFieldItem(Double... values) {
+ public DefaultDoubleFieldItem(Double... values) {
super(values);
}
@@ -139,6 +140,14 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return new BigDecimal(getValue(index));
+ }
+
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatFieldItem.java
similarity index 84%
rename from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java
rename to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatFieldItem.java
index f3bc8ed..53f94e6 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatingPointFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatFieldItem.java
@@ -18,11 +18,12 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
-public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
+public class DefaultFloatFieldItem extends FieldItem<Float> {
- public DefaultFloatingPointFieldItem(Double... values) {
+ public DefaultFloatFieldItem(Float... values) {
super(values);
}
@@ -46,7 +47,7 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidByte(int index) {
- Double value = getValue(index);
+ Float value = getValue(index);
return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
}
@@ -60,7 +61,7 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidShort(int index) {
- Double value = getValue(index);
+ Float value = getValue(index);
return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
}
@@ -74,7 +75,7 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidInteger(int index) {
- Double value = getValue(index);
+ Float value = getValue(index);
return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
}
@@ -87,7 +88,7 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
}
public boolean isValidBigInteger(int index) {
- Double value = getValue(index);
+ Float value = getValue(index);
return value != null;
}
@@ -100,7 +101,7 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidLong(int index) {
- Double value = getValue(index);
+ Float value = getValue(index);
return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
}
@@ -114,14 +115,14 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public boolean isValidFloat(int index) {
- Double value = getValue(index);
+ Float value = getValue(index);
return (value != null) && (value <= Float.MAX_VALUE) && (value >= Float.MIN_VALUE);
}
@Override
public Float getFloat(int index) {
if (isValidFloat(index)) {
- return getValue(index).floatValue();
+ return getValue(index);
}
return null;
}
@@ -134,11 +135,19 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
@Override
public Double getDouble(int index) {
if (isValidDouble(index)) {
- return getValue(index);
+ return getValue(index).doubleValue();
}
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return new BigDecimal(getValue(index));
+ }
+
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
index e6e65ca..3f2de70 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
@@ -18,11 +18,12 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
-public class DefaultIntegerFieldItem extends FieldItem<Long> {
+public class DefaultIntegerFieldItem extends FieldItem<Integer> {
- public DefaultIntegerFieldItem(Long... values) {
+ public DefaultIntegerFieldItem(Integer... values) {
super(values);
}
@@ -46,7 +47,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidByte(int index) {
- Long value = getValue(index);
+ Integer value = getValue(index);
return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
}
@@ -60,7 +61,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidShort(int index) {
- Long value = getValue(index);
+ Integer value = getValue(index);
return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
}
@@ -74,20 +75,20 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidInteger(int index) {
- Long value = getValue(index);
- return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+ Integer value = getValue(index);
+ return (value != null);
}
@Override
public Integer getInteger(int index) {
if (isValidInteger(index)) {
- return getValue(index).intValue();
+ return getValue(index);
}
return null;
}
public boolean isValidBigInteger(int index) {
- Long value = getValue(index);
+ Integer value = getValue(index);
return value != null;
}
@@ -106,14 +107,14 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public Long getLong(int index) {
if (isValidFloat(index)) {
- return getValue(index);
+ return getValue(index).longValue();
}
return null;
}
@Override
public boolean isValidFloat(int index) {
- Long value = getValue(index);
+ Integer value = getValue(index);
return (value != null) && (value <= Float.MAX_VALUE) && (value >= Float.MIN_VALUE);
}
@@ -127,7 +128,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidDouble(int index) {
- Long value = getValue(index);
+ Integer value = getValue(index);
return (value != null) && (value <= Double.MAX_VALUE) && (value >= Double.MIN_VALUE);
}
@@ -139,5 +140,13 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return new BigDecimal(getValue(index));
+ }
+
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLongFieldItem.java
similarity index 91%
copy from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
copy to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLongFieldItem.java
index e6e65ca..2fb238c 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLongFieldItem.java
@@ -18,11 +18,12 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
-public class DefaultIntegerFieldItem extends FieldItem<Long> {
+public class DefaultLongFieldItem extends FieldItem<Long> {
- public DefaultIntegerFieldItem(Long... values) {
+ public DefaultLongFieldItem(Long... values) {
super(values);
}
@@ -139,5 +140,13 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return new BigDecimal(getValue(index));
+ }
+
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultShortFieldItem.java
similarity index 82%
copy from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
copy to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultShortFieldItem.java
index e6e65ca..a8e9d4e 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultShortFieldItem.java
@@ -18,11 +18,12 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
-public class DefaultIntegerFieldItem extends FieldItem<Long> {
+public class DefaultShortFieldItem extends FieldItem<Short> {
- public DefaultIntegerFieldItem(Long... values) {
+ public DefaultShortFieldItem(Short... values) {
super(values);
}
@@ -46,7 +47,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidByte(int index) {
- Long value = getValue(index);
+ Short value = getValue(index);
return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
}
@@ -60,22 +61,22 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidShort(int index) {
- Long value = getValue(index);
- return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+ Short value = getValue(index);
+ return (value != null);
}
@Override
public Short getShort(int index) {
if (isValidShort(index)) {
- return getValue(index).shortValue();
+ return getValue(index);
}
return null;
}
@Override
public boolean isValidInteger(int index) {
- Long value = getValue(index);
- return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+ Short value = getValue(index);
+ return (value != null);
}
@Override
@@ -87,7 +88,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
}
public boolean isValidBigInteger(int index) {
- Long value = getValue(index);
+ Short value = getValue(index);
return value != null;
}
@@ -106,14 +107,14 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public Long getLong(int index) {
if (isValidFloat(index)) {
- return getValue(index);
+ return getValue(index).longValue();
}
return null;
}
@Override
public boolean isValidFloat(int index) {
- Long value = getValue(index);
+ Short value = getValue(index);
return (value != null) && (value <= Float.MAX_VALUE) && (value >= Float.MIN_VALUE);
}
@@ -127,7 +128,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
@Override
public boolean isValidDouble(int index) {
- Long value = getValue(index);
+ Short value = getValue(index);
return (value != null) && (value <= Double.MAX_VALUE) && (value >= Double.MIN_VALUE);
}
@@ -139,5 +140,12 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return getValue(index) != null;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return new BigDecimal(getValue(index));
+ }
}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
index bb9d7db..f6bf7bb 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
@@ -18,6 +18,7 @@ under the License.
*/
package org.apache.plc4x.java.base.messages.items;
+import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -102,6 +103,14 @@ public abstract class FieldItem<T> {
return null;
}
+ public boolean isValidBigDecimal(int index) {
+ return false;
+ }
+
+ public BigDecimal getBigDecimal(int index) {
+ return null;
+ }
+
public boolean isValidString(int index) {
return false;
}
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
index f3472b8..98df8d0 100644
--- a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
+++ b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
@@ -38,7 +38,7 @@ import org.apache.plc4x.java.api.types.PlcResponseCode;
import org.apache.plc4x.java.base.events.ConnectEvent;
import org.apache.plc4x.java.base.events.ConnectedEvent;
import org.apache.plc4x.java.base.messages.*;
-import org.apache.plc4x.java.base.messages.items.DefaultIntegerFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultLongFieldItem;
import org.apache.plc4x.java.base.messages.items.FieldItem;
import org.apache.plc4x.java.ethernetip.model.EtherNetIpField;
import org.slf4j.Logger;
@@ -479,7 +479,7 @@ public class Plc4XEtherNetIpProtocol extends MessageToMessageCodec<EnipPacket, P
} else {
value = -1;
}
- DefaultIntegerFieldItem fieldItem = new DefaultIntegerFieldItem((long) value);
+ DefaultLongFieldItem fieldItem = new DefaultLongFieldItem((long) value);
values.put(fieldName, new ImmutablePair<>(responseCode, fieldItem));
}
InternalPlcReadResponse response = new DefaultPlcReadResponse(request, values);
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7FloatingPointFieldItem.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7FloatingPointFieldItem.java
index f2024d3..0cca4f7 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7FloatingPointFieldItem.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7FloatingPointFieldItem.java
@@ -18,10 +18,10 @@
*/
package org.apache.plc4x.java.s7.messages.items;
-import org.apache.plc4x.java.base.messages.items.DefaultFloatingPointFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultDoubleFieldItem;
import org.apache.plc4x.java.s7.netty.model.types.TransportSize;
-public class S7FloatingPointFieldItem extends DefaultFloatingPointFieldItem {
+public class S7FloatingPointFieldItem extends DefaultDoubleFieldItem {
private final TransportSize naturalDataType;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7IntegerFieldItem.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7LongFieldItem.java
similarity index 87%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7IntegerFieldItem.java
rename to plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7LongFieldItem.java
index a9c6ee6..6db08c8 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7IntegerFieldItem.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/messages/items/S7LongFieldItem.java
@@ -18,14 +18,14 @@
*/
package org.apache.plc4x.java.s7.messages.items;
-import org.apache.plc4x.java.base.messages.items.DefaultIntegerFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultLongFieldItem;
import org.apache.plc4x.java.s7.netty.model.types.TransportSize;
-public class S7IntegerFieldItem extends DefaultIntegerFieldItem {
+public class S7LongFieldItem extends DefaultLongFieldItem {
private final TransportSize naturalDataType;
- public S7IntegerFieldItem(TransportSize naturalDataType, Long... values) {
+ public S7LongFieldItem(TransportSize naturalDataType, Long... values) {
super(values);
this.naturalDataType = naturalDataType;
}
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
index 6db3b37..83b7f3b 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
@@ -475,34 +475,34 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
// 8 bit:
case SINT: {
Long longValue = (long) data.readByte();
- fieldItem = new S7IntegerFieldItem(field.getDataType(), longValue);
+ fieldItem = new S7LongFieldItem(field.getDataType(), longValue);
break;
}
case USINT: {
Long longValue = (long) data.readUnsignedByte();
- fieldItem = new S7IntegerFieldItem(field.getDataType(), longValue);
+ fieldItem = new S7LongFieldItem(field.getDataType(), longValue);
break;
}
// 16 bit:
case INT: {
Long longValue = (long) data.readShort();
- fieldItem = new S7IntegerFieldItem(field.getDataType(), longValue);
+ fieldItem = new S7LongFieldItem(field.getDataType(), longValue);
break;
}
case UINT: {
Long longValue = (long) data.readUnsignedShort();
- fieldItem = new S7IntegerFieldItem(field.getDataType(), longValue);
+ fieldItem = new S7LongFieldItem(field.getDataType(), longValue);
break;
}
// 32 bit:
case DINT: {
Long longValue = (long) data.readInt();
- fieldItem = new S7IntegerFieldItem(field.getDataType(), longValue);
+ fieldItem = new S7LongFieldItem(field.getDataType(), longValue);
break;
}
case UDINT: {
Long longValue = data.readUnsignedInt();
- fieldItem = new S7IntegerFieldItem(field.getDataType(), longValue);
+ fieldItem = new S7LongFieldItem(field.getDataType(), longValue);
break;
}
// 64 bit:
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 d1612ac..fbaf4b7 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,7 @@ 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.DefaultIntegerFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultLongFieldItem;
import org.apache.plc4x.java.base.messages.items.DefaultLocalDateTimeFieldItem;
import org.apache.plc4x.java.base.messages.items.FieldItem;
import org.apache.plc4x.java.s7.messages.items.*;
@@ -222,57 +222,57 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
case BYTE:
minValue = BigInteger.valueOf((long) Byte.MIN_VALUE);
maxValue = BigInteger.valueOf((long) Byte.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case WORD:
minValue = BigInteger.valueOf((long) Short.MIN_VALUE);
maxValue = BigInteger.valueOf((long) Short.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case DWORD:
minValue = BigInteger.valueOf((long) Integer.MIN_VALUE);
maxValue = BigInteger.valueOf((long) Integer.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case LWORD:
minValue = BigInteger.valueOf(Long.MIN_VALUE);
maxValue = BigInteger.valueOf(Long.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case SINT:
minValue = BigInteger.valueOf((long) Byte.MIN_VALUE);
maxValue = BigInteger.valueOf((long) Byte.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case USINT:
minValue = BigInteger.valueOf((long) 0);
maxValue = BigInteger.valueOf((long) Byte.MAX_VALUE * 2);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case INT:
minValue = BigInteger.valueOf((long) Short.MIN_VALUE);
maxValue = BigInteger.valueOf((long) Short.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case UINT:
minValue = BigInteger.valueOf((long) 0);
maxValue = BigInteger.valueOf(((long) Short.MAX_VALUE) * 2);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case DINT:
minValue = BigInteger.valueOf((long) Integer.MIN_VALUE);
maxValue = BigInteger.valueOf((long) Integer.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case UDINT:
minValue = BigInteger.valueOf((long) 0);
maxValue = BigInteger.valueOf(((long) Integer.MAX_VALUE) * 2);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case LINT:
minValue = BigInteger.valueOf(Long.MIN_VALUE);
maxValue = BigInteger.valueOf(Long.MAX_VALUE);
- fieldType = S7IntegerFieldItem.class;
+ fieldType = S7LongFieldItem.class;
break;
case ULINT:
minValue = BigInteger.valueOf((long) 0);
@@ -283,7 +283,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
throw new IllegalArgumentException(
"Cannot assign integer values to " + s7Field.getDataType().name() + " fields.");
}
- if (fieldType == DefaultIntegerFieldItem.class) {
+ if (fieldType == DefaultLongFieldItem.class) {
Long[] longValues = new Long[values.length];
for (int i = 0; i < values.length; i++) {
if (!((values[i] instanceof Byte) || (values[i] instanceof Short) ||
@@ -305,7 +305,7 @@ public class S7PlcFieldHandler implements PlcFieldHandler {
}
longValues[i] = value.longValue();
}
- return new S7IntegerFieldItem(s7Field.getDataType(), longValues);
+ return new S7LongFieldItem(s7Field.getDataType(), longValues);
} else {
BigInteger[] bigIntegerValues = new BigInteger[values.length];
for (int i = 0; i < values.length; i++) {
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 36325f4..7e65770 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
@@ -54,7 +54,7 @@ public class TestFieldHandler implements PlcFieldHandler {
public FieldItem encodeByte(PlcField field, Object[] values) {
TestField testField = (TestField) field;
if (testField.getDataType() == Byte.class) {
- return new DefaultIntegerFieldItem(Arrays.stream(values).map(x -> new Long((Byte) x)).toArray(Long[]::new));
+ return new DefaultLongFieldItem(Arrays.stream(values).map(x -> new Long((Byte) x)).toArray(Long[]::new));
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
@@ -63,7 +63,7 @@ public class TestFieldHandler implements PlcFieldHandler {
public FieldItem encodeShort(PlcField field, Object[] values) {
TestField testField = (TestField) field;
if (testField.getDataType() == Short.class) {
- return new DefaultIntegerFieldItem(Arrays.stream(values).map(x -> new Long((Short) x)).toArray(Long[]::new));
+ return new DefaultLongFieldItem(Arrays.stream(values).map(x -> new Long((Short) x)).toArray(Long[]::new));
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
@@ -72,7 +72,7 @@ public class TestFieldHandler implements PlcFieldHandler {
public FieldItem encodeInteger(PlcField field, Object[] values) {
TestField testField = (TestField) field;
if (testField.getDataType() == Integer.class) {
- return new DefaultIntegerFieldItem(Arrays.stream(values).map(x -> new Long((Integer) x)).toArray(Long[]::new));
+ return new DefaultLongFieldItem(Arrays.stream(values).map(x -> new Long((Integer) x)).toArray(Long[]::new));
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
@@ -81,7 +81,7 @@ public class TestFieldHandler implements PlcFieldHandler {
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));
+ return new DefaultLongFieldItem(Arrays.stream(values).map(x -> ((BigInteger) x).longValue()).toArray(Long[]::new));
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
@@ -90,7 +90,7 @@ public class TestFieldHandler implements PlcFieldHandler {
public FieldItem encodeLong(PlcField field, Object[] values) {
TestField testField = (TestField) field;
if (testField.getDataType() == Long.class) {
- return new DefaultIntegerFieldItem((Long[]) values);
+ return new DefaultLongFieldItem((Long[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
@@ -99,7 +99,7 @@ public class TestFieldHandler implements PlcFieldHandler {
public FieldItem encodeFloat(PlcField field, Object[] values) {
TestField testField = (TestField) field;
if (testField.getDataType() == Float.class) {
- return new DefaultFloatingPointFieldItem((Double[]) values);
+ return new DefaultDoubleFieldItem((Double[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
@@ -108,7 +108,7 @@ public class TestFieldHandler implements PlcFieldHandler {
public FieldItem encodeDouble(PlcField field, Object[] values) {
TestField testField = (TestField) field;
if (testField.getDataType() == Double.class) {
- return new DefaultFloatingPointFieldItem((Double[]) values);
+ return new DefaultDoubleFieldItem((Double[]) values);
}
throw new PlcRuntimeException("Invalid encoder for type " + testField.getDataType().getName());
}
diff --git a/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/test/TestDeviceTest.java b/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/test/TestDeviceTest.java
index fa817cf..53df1c7 100644
--- a/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/test/TestDeviceTest.java
+++ b/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/test/TestDeviceTest.java
@@ -19,7 +19,7 @@
package org.apache.plc4x.java.test;
import org.apache.plc4x.java.base.messages.items.FieldItem;
-import org.apache.plc4x.java.base.messages.items.DefaultIntegerFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultLongFieldItem;
import org.junit.Test;
import java.util.Optional;
@@ -48,7 +48,7 @@ public class TestDeviceTest {
Optional<FieldItem> value = device.get(field);
assertFalse(value.isPresent());
- device.set(field, new DefaultIntegerFieldItem((long) 42));
+ device.set(field, new DefaultLongFieldItem((long) 42));
value = device.get(field);
assertTrue(value.isPresent());
FieldItem fieldItem = value.get();