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 14:43:20 UTC

[incubator-plc4x] branch feature/api-redesign-chris-c updated (16fc039 -> cb27228)

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a change to branch feature/api-redesign-chris-c
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git.


    from 16fc039  fixed remaining tests in ADS. Still needs a lot of refactoring and todo tests
     new 5c3a127  fixed missing methods for BigInteger Support
     new 9d5f2e2  some work on ADS tests
     new cb27228  fixed ethernetip field handler

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../plc4x/java/api/messages/PlcReadResponse.java   | 11 +++
 .../ads/protocol/util/LittleEndianDecoderTest.java | 84 ++++++++++++++--------
 .../ads/protocol/util/LittleEndianEncoderTest.java | 66 +++++++++++------
 .../java/base/messages/DefaultPlcReadResponse.java | 43 +++++++++++
 .../base/messages/DefaultPlcSubscriptionEvent.java | 26 +++++++
 .../messages/items/DefaultBigIntegerFieldItem.java | 24 +++++--
 .../items/DefaultFloatingPointFieldItem.java       | 14 ++++
 .../messages/items/DefaultIntegerFieldItem.java    | 26 +++++--
 .../plc4x/java/base/messages/items/FieldItem.java  | 44 ++++++++++++
 .../ethernetip/netty/util/EnipPlcFieldHandler.java |  6 ++
 10 files changed, 279 insertions(+), 65 deletions(-)


[incubator-plc4x] 02/03: some work on ADS tests

Posted by sr...@apache.org.
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 9d5f2e2b2d4f05382f2564f143f6d6d18d431800
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Sep 13 16:39:00 2018 +0200

    some work on ADS tests
---
 .../ads/protocol/util/LittleEndianDecoderTest.java | 84 ++++++++++++++--------
 .../ads/protocol/util/LittleEndianEncoderTest.java | 66 +++++++++++------
 2 files changed, 97 insertions(+), 53 deletions(-)

diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoderTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoderTest.java
index b5c4fcf..467ccc8 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoderTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoderTest.java
@@ -18,46 +18,70 @@
  */
 package org.apache.plc4x.java.ads.protocol.util;
 
-public class LittleEndianDecoderTest {
-
-    /*
-    TODO: complete broken fix after refactoring
-    @Test
-    public void decodeData() throws Exception {
-        assertEquals(asList(true, false), LittleEndianDecoder.decodeData(Boolean.class, new byte[]{0x1, 0x0}));
+import org.apache.plc4x.java.ads.model.AdsDataType;
+import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
+import org.apache.plc4x.java.api.exceptions.PlcUnsupportedDataTypeException;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
-        assertEquals(asList((byte) 0x1, (byte) 0x0), LittleEndianDecoder.decodeData(Byte.class, new byte[]{0x1, 0x0}));
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.stream.Stream;
 
-        assertEquals(singletonList((short) 1), LittleEndianDecoder.decodeData(Short.class, new byte[]{0x1}));
-        assertEquals(singletonList((short) 256), LittleEndianDecoder.decodeData(Short.class, new byte[]{0x0, 0x1}));
-        assertEquals(asList((short) 256, (short) 256), LittleEndianDecoder.decodeData(Short.class, new byte[]{0x0, 0x1, 0x0, 0x1}));
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-        assertEquals(singletonList(1), LittleEndianDecoder.decodeData(Integer.class, new byte[]{0x1}));
-        assertEquals(singletonList(16777216), LittleEndianDecoder.decodeData(Integer.class, new byte[]{0x0, 0x0, 0x0, 0x1}));
-        assertEquals(asList(16777216, 16777216), LittleEndianDecoder.decodeData(Integer.class, new byte[]{0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1}));
+@Disabled("needs finishing")
+public class LittleEndianDecoderTest {
 
-        assertEquals(singletonList(1.4E-45f), LittleEndianDecoder.decodeData(Float.class, new byte[]{0x1}));
-        assertEquals(singletonList(2.3509887E-38f), LittleEndianDecoder.decodeData(Float.class, new byte[]{0x0, 0x0, 0x0, 0x1}));
-        assertEquals(asList(2.3509887E-38f, 2.3509887E-38f), LittleEndianDecoder.decodeData(Float.class, new byte[]{0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1}));
+    @ParameterizedTest
+    @MethodSource("createAdsDataTypePears")
+    public void decodeData(AdsDataType adsDataType, Collection expectedTypes, Class<?> clazz, byte[] adsData) {
+        assertEquals(expectedTypes, Arrays.asList(LittleEndianDecoder.decodeData(adsDataType, adsData).getValues()));
+    }
 
-        assertEquals(singletonList(4.9E-324), LittleEndianDecoder.decodeData(Double.class, new byte[]{0x1}));
-        assertEquals(singletonList(7.2911220195563975E-304), LittleEndianDecoder.decodeData(Double.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}));
-        assertEquals(asList(7.2911220195563975E-304, 7.2911220195563975E-304), LittleEndianDecoder.decodeData(Double.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}));
+    @Test
+    public void negativeTest() {
+        assertThrows(PlcProtocolException.class, () -> LittleEndianDecoder.decodeData(AdsDataType.STRING, new byte[]{0x01}));
+        assertThrows(PlcUnsupportedDataTypeException.class, () -> LittleEndianDecoder.decodeData(AdsDataType.UNKNOWN, new byte[10]));
+    }
 
+    private static Stream<Arguments> createAdsDataTypePears() {
         Calendar calendar1 = Calendar.getInstance();
         calendar1.setTime(new Date(-11644473600000L));
-        assertEquals(singletonList(calendar1), LittleEndianDecoder.decodeData(Calendar.class, new byte[]{0x1}));
         Calendar calendar0x0001 = Calendar.getInstance();
         calendar0x0001.setTime(new Date(-4438714196208L));
-        assertEquals(singletonList(calendar0x0001), LittleEndianDecoder.decodeData(Calendar.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}));
-        assertEquals(asList(calendar0x0001, calendar0x0001), LittleEndianDecoder.decodeData(Calendar.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}));
-
-        assertEquals(singletonList("plc4x"), LittleEndianDecoder.decodeData(String.class, new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x0}));
-        assertEquals(singletonList("plc4xplc4x"), LittleEndianDecoder.decodeData(String.class, new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x70, 0x6c, 0x63, 0x34, 0x78, 0x0}));
-        assertEquals(asList("plc4x", "plc4x"), LittleEndianDecoder.decodeData(String.class, new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x0, 0x70, 0x6c, 0x63, 0x34, 0x78, 0x0}));
 
-        assertThrows(PlcProtocolException.class, () -> LittleEndianDecoder.decodeData(String.class, new byte[]{0x01}));
-        assertThrows(PlcUnsupportedDataTypeException.class, () -> LittleEndianDecoder.decodeData(this.getClass(), new byte[10]));
+        return Arrays.stream(AdsDataType.values())
+            .filter(adsDataType -> adsDataType != AdsDataType.UNKNOWN)
+            .flatMap(adsDataType -> Stream.of(
+                Arguments.of(asList(true, false), Boolean.class, new byte[]{0x1, 0x0}),
+                Arguments.of(asList((byte) 0x1, (byte) 0x0), Byte.class, new byte[]{0x1, 0x0}),
+                Arguments.of(singletonList((short) 1), Short.class, new byte[]{0x1}),
+                Arguments.of(singletonList((short) 256), Short.class, new byte[]{0x0, 0x1}),
+                Arguments.of(asList((short) 256, (short) 256), Short.class, new byte[]{0x0, 0x1, 0x0, 0x1}),
+                Arguments.of(singletonList(1), Integer.class, new byte[]{0x1}),
+                Arguments.of(singletonList(16777216), Integer.class, new byte[]{0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(asList(16777216, 16777216), Integer.class, new byte[]{0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(singletonList(1.4E-45f), Float.class, new byte[]{0x1}),
+                Arguments.of(singletonList(2.3509887E-38f), Float.class, new byte[]{0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(asList(2.3509887E-38f, 2.3509887E-38f), Float.class, new byte[]{0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(singletonList(4.9E-324), Double.class, new byte[]{0x1}),
+                Arguments.of(singletonList(7.2911220195563975E-304), Double.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(asList(7.2911220195563975E-304, 7.2911220195563975E-304), Double.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(singletonList(calendar1), Calendar.class, new byte[]{0x1}),
+                Arguments.of(singletonList(calendar0x0001), Calendar.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(asList(calendar0x0001, calendar0x0001), Calendar.class, new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}),
+                Arguments.of(singletonList("plc4x"), String.class, new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x0}),
+                Arguments.of(singletonList("plc4xplc4x"), String.class, new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x70, 0x6c, 0x63, 0x34, 0x78, 0x0}),
+                Arguments.of(asList("plc4x", "plc4x"), String.class, new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x0, 0x70, 0x6c, 0x63, 0x34, 0x78, 0x0})
+            ).map(arguments -> Arguments.of(adsDataType, arguments.get()[0], arguments.get()[1], arguments.get()[2])));
     }
-*/
 }
\ No newline at end of file
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoderTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoderTest.java
index 65c479b..7370bee 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoderTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianEncoderTest.java
@@ -18,38 +18,58 @@
  */
 package org.apache.plc4x.java.ads.protocol.util;
 
-public class LittleEndianEncoderTest {
-
-    /*
-    TODO: complete broken fix after refactoring
-    @Test
-    public void encodeData() throws Exception {
-        assertByteEquals(new byte[]{0x01, 0x00, 0x01, 0x00}, LittleEndianEncoder.encodeData(Boolean.class, true, false, true, false));
+import org.apache.plc4x.java.ads.model.AdsDataType;
+import org.apache.plc4x.java.api.exceptions.PlcUnsupportedDataTypeException;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
-        assertByteEquals(new byte[]{0x12, 0x03, 0x05, 0x7f}, LittleEndianEncoder.encodeData(Byte.class, (byte) 0x12, (byte) 0x03, (byte) 0x05, (byte) 0x7f));
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.stream.Stream;
 
-        assertByteEquals(new byte[]{0x1, 0x00}, LittleEndianEncoder.encodeData(Short.class, (short) 1));
-        assertByteEquals(new byte[]{0x0e, 0x00, 0x50, 0x00}, LittleEndianEncoder.encodeData(Short.class, (short) 14, (short) 80));
+import static org.apache.plc4x.java.base.util.Assert.assertByteEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-        assertByteEquals(new byte[]{0x5a, 0x0a, 0x00, 0x00}, LittleEndianEncoder.encodeData(Integer.class, 2650));
-        assertByteEquals(new byte[]{0x5a, 0x0a, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00}, LittleEndianEncoder.encodeData(Integer.class, 2650, 80));
+@Disabled("needs finishing")
+public class LittleEndianEncoderTest {
 
-        assertByteEquals(new byte[]{(byte) 0xc3, (byte) 0xf5, 0x48, 0x40}, LittleEndianEncoder.encodeData(Float.class, 3.14f));
-        assertByteEquals(new byte[]{(byte) 0xc3, (byte) 0xf5, 0x48, 0x40, 0x14, (byte) 0xae, 0x07, 0x40}, LittleEndianEncoder.encodeData(Float.class, 3.14f, 2.12f));
+    @ParameterizedTest
+    @MethodSource("createAdsDataTypePears")
+    public void decodeData(AdsDataType adsDataType, byte[] expectedData, Class<?> clazz, Object[] values) throws Exception {
+        assertByteEquals(expectedData, LittleEndianEncoder.encodeData(adsDataType, values));
+    }
 
-        assertByteEquals(new byte[]{0x1F, (byte) 0x85, (byte) 0xEB, 0x51, (byte) 0xB8, 0x1E, 0x09, 0x40}, LittleEndianEncoder.encodeData(Double.class, 3.14));
-        assertByteEquals(new byte[]{0x1F, (byte) 0x85, (byte) 0xEB, 0x51, (byte) 0xB8, 0x1E, 0x09, 0x40, (byte) 0xF6, 0x28, 0x5C, (byte) 0x8F, (byte) 0xC2, (byte) 0xF5, 0x00, 0x40}, LittleEndianEncoder.encodeData(Double.class, 3.14, 2.12));
+    @Test
+    public void negativeTest() {
+        assertThrows(PlcUnsupportedDataTypeException.class, () -> LittleEndianEncoder.encodeData(AdsDataType.UNKNOWN, ""));
+    }
 
+    private static Stream<Arguments> createAdsDataTypePears() {
         Calendar calendar1 = Calendar.getInstance();
         //calendar1.set(2003, Calendar.DECEMBER, 23, 13, 3, 0);
         calendar1.setTime(new Date(1072180980436L));
-        assertByteEquals(new byte[]{(byte) 0x40, (byte) 0x79, (byte) 0xFB, (byte) 0xB5, (byte) 0x4C, (byte) 0xC9, (byte) 0xC3, (byte) 0x01}, LittleEndianEncoder.encodeData(Calendar.class, calendar1));
-
-        assertByteEquals(new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x00}, LittleEndianEncoder.encodeData(String.class, "plc4x"));
-        assertByteEquals(new byte[]{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00}, LittleEndianEncoder.encodeData(String.class, "HelloWorld!"));
-        assertByteEquals(new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00}, LittleEndianEncoder.encodeData(String.class, "plc4x", "HelloWorld!"));
 
-        assertThrows(PlcUnsupportedDataTypeException.class, () -> LittleEndianEncoder.encodeData(this.getClass(), ""));
+        return Arrays.stream(AdsDataType.values())
+            .filter(adsDataType -> adsDataType != AdsDataType.UNKNOWN)
+            .flatMap(adsDataType -> Stream.of(
+                Arguments.of(new byte[]{0x01, 0x00, 0x01, 0x00}, Boolean.class, true, false, true, false),
+                Arguments.of(new byte[]{0x12, 0x03, 0x05, 0x7f}, Byte.class, (byte) 0x12, (byte) 0x03, (byte) 0x05, (byte) 0x7f),
+                Arguments.of(new byte[]{0x1, 0x00}, Short.class, (short) 1),
+                Arguments.of(new byte[]{0x0e, 0x00, 0x50, 0x00}, Short.class, (short) 14, (short) 80),
+                Arguments.of(new byte[]{0x5a, 0x0a, 0x00, 0x00}, Integer.class, 2650),
+                Arguments.of(new byte[]{0x5a, 0x0a, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00}, Integer.class, 2650, 80),
+                Arguments.of(new byte[]{(byte) 0xc3, (byte) 0xf5, 0x48, 0x40}, Float.class, 3.14f),
+                Arguments.of(new byte[]{(byte) 0xc3, (byte) 0xf5, 0x48, 0x40, 0x14, (byte) 0xae, 0x07, 0x40}, Float.class, 3.14f, 2.12f),
+                Arguments.of(new byte[]{0x1F, (byte) 0x85, (byte) 0xEB, 0x51, (byte) 0xB8, 0x1E, 0x09, 0x40}, Double.class, 3.14),
+                Arguments.of(new byte[]{0x1F, (byte) 0x85, (byte) 0xEB, 0x51, (byte) 0xB8, 0x1E, 0x09, 0x40, (byte) 0xF6, 0x28, 0x5C, (byte) 0x8F, (byte) 0xC2, (byte) 0xF5, 0x00, 0x40}, Double.class, 3.14, 2.12),
+                Arguments.of(new byte[]{(byte) 0x40, (byte) 0x79, (byte) 0xFB, (byte) 0xB5, (byte) 0x4C, (byte) 0xC9, (byte) 0xC3, (byte) 0x01}, Calendar.class, calendar1),
+                Arguments.of(new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x00}, String.class, "plc4x"),
+                Arguments.of(new byte[]{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00}, String.class, "HelloWorld!"),
+                Arguments.of(new byte[]{0x70, 0x6c, 0x63, 0x34, 0x78, 0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00}, String.class, "plc4x", "HelloWorld!")
+            ).map(arguments -> Arguments.of(adsDataType, arguments.get()[0], arguments.get()[1], arguments.get()[2])));
     }
-    */
 }
\ No newline at end of file


[incubator-plc4x] 03/03: fixed ethernetip field handler

Posted by sr...@apache.org.
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 cb27228be4e923cdaae2335722e580583cc7f98f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Sep 13 16:43:15 2018 +0200

    fixed ethernetip field handler
---
 .../java/org/apache/plc4x/java/base/messages/items/FieldItem.java  | 7 +++++++
 .../plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java      | 6 ++++++
 2 files changed, 13 insertions(+)

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 e63e3d5..1d1b2bd 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
@@ -161,4 +161,11 @@ public abstract class FieldItem<T> {
     public int hashCode() {
         return Arrays.hashCode(values);
     }
+
+    @Override
+    public String toString() {
+        return "FieldItem{" +
+            "values=" + Arrays.toString(values) +
+            '}';
+    }
 }
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java
index 5357a7c..2eb1413 100644
--- a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java
+++ b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java
@@ -60,6 +60,12 @@ public class EnipPlcFieldHandler implements PlcFieldHandler {
     }
 
     @Override
+    public FieldItem encodeBigInteger(PlcField field, Object[] values) {
+        EtherNetIpField enipField = (EtherNetIpField) field;
+        throw new PlcRuntimeException("Invalid encoder for type " + enipField);
+    }
+
+    @Override
     public FieldItem encodeLong(PlcField field, Object[] values) {
         EtherNetIpField enipField = (EtherNetIpField) field;
         throw new PlcRuntimeException("Invalid encoder for type " + enipField);


[incubator-plc4x] 01/03: fixed missing methods for BigInteger Support

Posted by sr...@apache.org.
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 5c3a127763b919b11ccd0c7ec15564de1f60e65a
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Sep 13 15:38:17 2018 +0200

    fixed missing methods for BigInteger Support
---
 .../plc4x/java/api/messages/PlcReadResponse.java   | 11 ++++++
 .../java/base/messages/DefaultPlcReadResponse.java | 43 ++++++++++++++++++++++
 .../base/messages/DefaultPlcSubscriptionEvent.java | 26 +++++++++++++
 .../messages/items/DefaultBigIntegerFieldItem.java | 24 +++++++++---
 .../items/DefaultFloatingPointFieldItem.java       | 14 +++++++
 .../messages/items/DefaultIntegerFieldItem.java    | 26 ++++++++++---
 .../plc4x/java/base/messages/items/FieldItem.java  | 37 +++++++++++++++++++
 7 files changed, 169 insertions(+), 12 deletions(-)

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 b202927..666fdfa 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.BigInteger;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -78,6 +79,16 @@ public interface PlcReadResponse<T extends PlcReadRequest> extends PlcFieldRespo
 
     Collection<Integer> getAllIntegers(String name);
 
+    boolean isValidBigInteger(String name);
+
+    boolean isValidBigInteger(String name, int index);
+
+    BigInteger getBigInteger(String name);
+
+    BigInteger getBigInteger(String name, int index);
+
+    Collection<BigInteger> getAllBigIntegers(String name);
+
     boolean isValidLong(String name);
 
     boolean isValidLong(String name, int index);
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 38c1eb3..eadf20b 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.BigInteger;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -276,6 +277,48 @@ public class DefaultPlcReadResponse implements InternalPlcReadResponse {
     }
 
     @Override
+    public boolean isValidBigInteger(String name) {
+        return isValidBigInteger(name, 0);
+    }
+
+    @Override
+    public boolean isValidBigInteger(String name, int index) {
+        FieldItem fieldInternal = getFieldInternal(name);
+        if (fieldInternal != null) {
+            return fieldInternal.isValidInteger(index);
+        }
+        return false;
+    }
+
+    @Override
+    public BigInteger getBigInteger(String name) {
+        return getBigInteger(name, 0);
+    }
+
+    @Override
+    public BigInteger getBigInteger(String name, int index) {
+        FieldItem fieldInternal = getFieldInternal(name);
+        if (fieldInternal != null) {
+            return fieldInternal.getBigInteger(index);
+        }
+        return null;
+    }
+
+    @Override
+    public Collection<BigInteger> getAllBigIntegers(String name) {
+        FieldItem fieldInternal = getFieldInternal(name);
+        if (fieldInternal != null) {
+            int num = fieldInternal.getNumValues();
+            List<BigInteger> values = new ArrayList<>(num);
+            for (int i = 0; i < num; i++) {
+                values.add(fieldInternal.getBigInteger(i));
+            }
+            return values;
+        }
+        return null;
+    }
+
+    @Override
     public boolean isValidLong(String name) {
         return isValidLong(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 dbfcd4c..349bf4f 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.BigInteger;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -162,6 +163,31 @@ public class DefaultPlcSubscriptionEvent implements InternalPlcSubscriptionEvent
     }
 
     @Override
+    public boolean isValidBigInteger(String name) {
+        return false;
+    }
+
+    @Override
+    public boolean isValidBigInteger(String name, int index) {
+        return false;
+    }
+
+    @Override
+    public BigInteger getBigInteger(String name) {
+        return null;
+    }
+
+    @Override
+    public BigInteger getBigInteger(String name, int index) {
+        return null;
+    }
+
+    @Override
+    public Collection<BigInteger> getAllBigIntegers(String name) {
+        return null;
+    }
+
+    @Override
     public boolean isValidLong(String name) {
         return false;
     }
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 8578db1..33903b3 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
@@ -54,7 +54,7 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Byte getByte(int index) {
-        if(isValidByte(index)) {
+        if (isValidByte(index)) {
             return getValue(index).byteValue();
         }
         return null;
@@ -69,7 +69,7 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Short getShort(int index) {
-        if(isValidShort(index)) {
+        if (isValidShort(index)) {
             return getValue(index).shortValue();
         }
         return null;
@@ -84,13 +84,25 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Integer getInteger(int index) {
-        if(isValidInteger(index)) {
+        if (isValidInteger(index)) {
             BigInteger value = getValue(index);
             return value.intValue();
         }
         return null;
     }
 
+    public boolean isValidBigInteger(int index) {
+        BigInteger value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (isValidBigInteger(index)) {
+            return getValue(index);
+        }
+        return null;
+    }
+
     @Override
     public boolean isValidLong(int index) {
         BigInteger value = getValue(index);
@@ -100,7 +112,7 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Long getLong(int index) {
-        if(isValidLong(index)) {
+        if (isValidLong(index)) {
             BigInteger value = getValue(index);
             return value.longValue();
         }
@@ -120,7 +132,7 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Float getFloat(int index) {
-        if(isValidFloat(index)) {
+        if (isValidFloat(index)) {
             return getValue(index).floatValue();
         }
         return null;
@@ -139,7 +151,7 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Double getDouble(int index) {
-        if(isValidDouble(index)) {
+        if (isValidDouble(index)) {
             return getValue(index).doubleValue();
         }
         return null;
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/DefaultFloatingPointFieldItem.java
index 7b1ae04..f3bc8ed 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/DefaultFloatingPointFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import java.math.BigInteger;
+
 public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
 
     public DefaultFloatingPointFieldItem(Double... values) {
@@ -84,6 +86,18 @@ public class DefaultFloatingPointFieldItem extends FieldItem<Double> {
         return null;
     }
 
+    public boolean isValidBigInteger(int index) {
+        Double value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (isValidBigInteger(index)) {
+            return BigInteger.valueOf(getValue(index).longValue());
+        }
+        return null;
+    }
+
     @Override
     public boolean isValidLong(int index) {
         Double value = 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 a2d4035..e6e65ca 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,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import java.math.BigInteger;
+
 public class DefaultIntegerFieldItem extends FieldItem<Long> {
 
     public DefaultIntegerFieldItem(Long... values) {
@@ -50,7 +52,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
 
     @Override
     public Byte getByte(int index) {
-        if(isValidByte(index)) {
+        if (isValidByte(index)) {
             return getValue(index).byteValue();
         }
         return null;
@@ -64,7 +66,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
 
     @Override
     public Short getShort(int index) {
-        if(isValidShort(index)) {
+        if (isValidShort(index)) {
             return getValue(index).shortValue();
         }
         return null;
@@ -78,12 +80,24 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
 
     @Override
     public Integer getInteger(int index) {
-        if(isValidInteger(index)) {
+        if (isValidInteger(index)) {
             return getValue(index).intValue();
         }
         return null;
     }
 
+    public boolean isValidBigInteger(int index) {
+        Long value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (isValidBigInteger(index)) {
+            return BigInteger.valueOf(getValue(index));
+        }
+        return null;
+    }
+
     @Override
     public boolean isValidLong(int index) {
         return (getValue(index) != null);
@@ -91,7 +105,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
 
     @Override
     public Long getLong(int index) {
-        if(isValidFloat(index)) {
+        if (isValidFloat(index)) {
             return getValue(index);
         }
         return null;
@@ -105,7 +119,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
 
     @Override
     public Float getFloat(int index) {
-        if(isValidFloat(index)) {
+        if (isValidFloat(index)) {
             return getValue(index).floatValue();
         }
         return null;
@@ -119,7 +133,7 @@ public class DefaultIntegerFieldItem extends FieldItem<Long> {
 
     @Override
     public Double getDouble(int index) {
-        if(isValidDouble(index)) {
+        if (isValidDouble(index)) {
             return getValue(index).doubleValue();
         }
         return null;
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 0324250..e63e3d5 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,9 +18,11 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import java.math.BigInteger;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.Arrays;
 
 public abstract class FieldItem<T> {
 
@@ -39,6 +41,7 @@ public abstract class FieldItem<T> {
     public boolean isValidBoolean(int index) {
         return false;
     }
+
     public Boolean getBoolean(int index) {
         return null;
     }
@@ -46,6 +49,7 @@ public abstract class FieldItem<T> {
     public boolean isValidByte(int index) {
         return false;
     }
+
     public Byte getByte(int index) {
         return null;
     }
@@ -53,6 +57,7 @@ public abstract class FieldItem<T> {
     public boolean isValidShort(int index) {
         return false;
     }
+
     public Short getShort(int index) {
         return null;
     }
@@ -60,13 +65,23 @@ public abstract class FieldItem<T> {
     public boolean isValidInteger(int index) {
         return false;
     }
+
     public Integer getInteger(int index) {
         return null;
     }
 
+    public boolean isValidBigInteger(int index) {
+        return false;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        return null;
+    }
+
     public boolean isValidLong(int index) {
         return false;
     }
+
     public Long getLong(int index) {
         return null;
     }
@@ -74,6 +89,7 @@ public abstract class FieldItem<T> {
     public boolean isValidFloat(int index) {
         return false;
     }
+
     public Float getFloat(int index) {
         return null;
     }
@@ -81,6 +97,7 @@ public abstract class FieldItem<T> {
     public boolean isValidDouble(int index) {
         return false;
     }
+
     public Double getDouble(int index) {
         return null;
     }
@@ -88,6 +105,7 @@ public abstract class FieldItem<T> {
     public boolean isValidString(int index) {
         return false;
     }
+
     public String getString(int index) {
         return null;
     }
@@ -95,6 +113,7 @@ public abstract class FieldItem<T> {
     public boolean isValidTime(int index) {
         return false;
     }
+
     public LocalTime getTime(int index) {
         return null;
     }
@@ -102,6 +121,7 @@ public abstract class FieldItem<T> {
     public boolean isValidDate(int index) {
         return false;
     }
+
     public LocalDate getDate(int index) {
         return null;
     }
@@ -109,6 +129,7 @@ public abstract class FieldItem<T> {
     public boolean isValidDateTime(int index) {
         return false;
     }
+
     public LocalDateTime getDateTime(int index) {
         return null;
     }
@@ -124,4 +145,20 @@ public abstract class FieldItem<T> {
         return values[index];
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof FieldItem)) {
+            return false;
+        }
+        FieldItem<?> fieldItem = (FieldItem<?>) o;
+        return Arrays.equals(values, fieldItem.values);
+    }
+
+    @Override
+    public int hashCode() {
+        return Arrays.hashCode(values);
+    }
 }