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/01/11 14:40:12 UTC

[incubator-plc4x] branch master updated (3e19b41 -> 9b46c5e)

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

sruehl pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git.


    from 3e19b41  chars not bytes and add another check to stop running off end of buffer
     add a2a4d84  Migrate PlcDriverManagerTest to assertj
     add d4fdb5b  Java-Gernerify APIs
     add 3d65ec7  Merge branch 'master' into refactoring/java_generify
     add 51075d9  added Tests for Plc4XS7Protocol
     add 88a32d3  added basic test implementation for S7Protocol
     add 71fecb8  added unchecked variants of plc requests.
     add d7730f0  Merge branch 'master' into refactoring/java_generify
     add cead5c1  split plcRequest into single and bulk plc request
     add 1eb41f8  added a checked variant of bulk requests/responses.
     add 6badd3b  added a couple of default methods to the interfaces
     add cfe70db  Introduced Optional for single elements
     add 7c78c45  added missing overload methods
     add fd66d1d  added request build for convenient request creation.
     add 99fb948  Merge branch 'master' into refactoring/java_generify
     add 1c71c7b  moved specific messages into a sub package to declutter the API
     add 80fa0ae  fix tests
     add b3869eb  fixed firstType builder bug; added getValue to bulk; added getValue tests
     add 6a3da68  comment surefire back in
     add b86dc42  fixed one more builder bug
     add 2267211  Merge branch 'master' into refactoring/java_generify
     add d6497dc  link response into request to retrieve a typed response.
     add 675a108  fixed test by cleaning up the generics.
     add 76f1d0b  move getValue() method up to parent
     add b1aa871  added indicator methods to reponses.
     add 6402596  minor generic adjustments
     add fc694ac  small cleanup on api
     add 1361a0a  use list instead of array and get rid of some more suppress warnings
     new 6fbc8de  make single requests/responses extend from checked BulkResponse
     new 3ce27ea  fixed edgent test
     new a643675  deprecated BulkPlc*
     new 4078c58  get rid of BulkPlc*
     new 3615ee4  Rename CheckedPlc* to TypeSafePlc*
     new c28c5ee  Deprecated SinglePlc*
     new c9b36e9  get rid of SinglePlc*
     new 9504a16  implement actual typesafety into TypeSafePlc*
     new fd31bad  polished builders and code cleanup
     new be5fec1  added missing Objects.requireNonNull assertion
     new ea71d93  small pre-merge fixes.
     new 9b46c5e  Merge branch 'master' into assertj_migration

The 12 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:
 .../java/org/apache/plc4x/camel/Constants.java     |    1 -
 .../java/org/apache/plc4x/camel/PLC4XProducer.java |   21 +-
 .../org/apache/plc4x/camel/PLC4XComponentTest.java |    3 +-
 .../apache/plc4x/edgent/PlcConnectionAdapter.java  |  253 +++--
 .../plc4x/edgent/PlcConnectionAdapterTest.java     | 1030 ++++++++++----------
 .../apache/plc4x/edgent/mock/MockConnection.java   |  123 ++-
 .../plc4x/java/api/connection/PlcReader.java       |   17 +-
 .../plc4x/java/api/connection/PlcWriter.java       |   19 +-
 .../plc4x/java/api/messages/PlcReadRequest.java    |  129 ++-
 .../plc4x/java/api/messages/PlcReadResponse.java   |   44 +-
 .../plc4x/java/api/messages/PlcWriteRequest.java   |  120 ++-
 .../plc4x/java/api/messages/PlcWriteResponse.java  |   44 +-
 .../java/api/messages/items/ReadRequestItem.java   |   23 +-
 .../java/api/messages/items/ReadResponseItem.java  |   13 +-
 .../java/api/messages/items/WriteRequestItem.java  |   33 +-
 .../java/api/messages/items/WriteResponseItem.java |    9 +-
 .../messages/specific/TypeSafePlcReadRequest.java  |   84 ++
 .../messages/specific/TypeSafePlcReadResponse.java |   81 ++
 .../messages/specific/TypeSafePlcWriteRequest.java |   76 ++
 .../specific/TypeSafePlcWriteResponse.java         |   56 ++
 .../plc4x/java/api/messages/APIMessageTests.java   |  173 ++--
 .../apache/plc4x/java/PlcDriverManagerTest.java    |   52 +-
 .../plc4x/java/s7/netty/Plc4XS7Protocol.java       |   68 +-
 .../apache/plc4x/java/s7/S7PlcReaderSample.java    |   13 +-
 .../org/apache/plc4x/java/s7/S7PlcScanner.java     |   18 +-
 .../org/apache/plc4x/java/s7/S7PlcTestConsole.java |   14 +-
 .../apache/plc4x/java/s7/S7PlcWriterSample.java    |   11 +-
 .../plc4x/java/s7/netty/Plc4XS7ProtocolTest.java   |   19 +-
 28 files changed, 1654 insertions(+), 893 deletions(-)
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java

-- 
To stop receiving notification emails like this one, please contact
['"commits@plc4x.apache.org" <co...@plc4x.apache.org>'].

[incubator-plc4x] 01/12: make single requests/responses extend from checked BulkResponse

Posted by sr...@apache.org.
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

commit 6fbc8de4b59cba24b3c0fee8054d699bb1f55b77
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 11:32:24 2018 +0100

    make single requests/responses extend from checked BulkResponse
---
 .../java/org/apache/plc4x/edgent/PlcConnectionAdapter.java   |  2 +-
 .../java/org/apache/plc4x/edgent/mock/MockConnection.java    | 11 +++++++----
 .../api/messages/specific/CheckedBulkPlcReadRequest.java     |  5 +----
 .../api/messages/specific/CheckedBulkPlcWriteRequest.java    |  9 +++++----
 .../java/api/messages/specific/SinglePlcReadRequest.java     |  7 +++++--
 .../java/api/messages/specific/SinglePlcReadResponse.java    |  4 ++--
 .../java/api/messages/specific/SinglePlcWriteRequest.java    | 12 +++++-------
 .../java/api/messages/specific/SinglePlcWriteResponse.java   |  4 ++--
 .../java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java |  6 +++---
 9 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
index 7c104df..a689c92 100644
--- a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
+++ b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
@@ -181,8 +181,8 @@ public class PlcConnectionAdapter implements AutoCloseable {
         throw new IllegalArgumentException("Not a legal plc data type: " + cls.getSimpleName());
     }
 
+    @SuppressWarnings("unchecked")
     static <T> SinglePlcWriteRequest<T> newPlcWriteRequest(Address address, T value) {
-        @SuppressWarnings("unchecked")
         Class<T> cls = (Class<T>) value.getClass();
         return new SinglePlcWriteRequest<>(cls, address, value);
     }
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
index 1868046..c31eb2a 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
@@ -25,7 +25,10 @@ import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.exceptions.PlcIoException;
-import org.apache.plc4x.java.api.messages.*;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+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.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
@@ -98,10 +101,10 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
             responseItems.add(responseItem);
         }
         PlcReadResponse response;
-        if (readRequest instanceof BulkPlcReadRequest) {
-            response = new BulkPlcReadResponse((BulkPlcReadRequest) readRequest, responseItems);
-        } else if (readRequest instanceof SinglePlcReadRequest) {
+        if (readRequest instanceof SinglePlcReadRequest) {
             response = new SinglePlcReadResponse((SinglePlcReadRequest) readRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+        } else if (readRequest instanceof BulkPlcReadRequest) {
+            response = new BulkPlcReadResponse((BulkPlcReadRequest) readRequest, responseItems);
         } else {
             response = null;
         }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
index 42fe6eb..9fd1d90 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
@@ -60,11 +60,8 @@ public class CheckedBulkPlcReadRequest<T> extends BulkPlcReadRequest {
         readRequestItems.add((ReadRequestItem<T>) readRequestItem);
     }
 
-    public List<? extends ReadRequestItem<?>> getReadRequestItems() {
+    public List<? extends ReadRequestItem<T>> getReadRequestItems() {
         return readRequestItems;
     }
 
-    public int getNumberOfItems() {
-        return readRequestItems.size();
-    }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
index ff94d8b..32009de 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
@@ -28,7 +28,7 @@ public class CheckedBulkPlcWriteRequest<T> extends BulkPlcWriteRequest {
 
     private final List<WriteRequestItem<T>> requestItems;
 
-    private Class<T> datatype;
+    private final Class<T> datatype;
 
     public CheckedBulkPlcWriteRequest(Class<T> type) {
         this.datatype = type;
@@ -40,8 +40,9 @@ public class CheckedBulkPlcWriteRequest<T> extends BulkPlcWriteRequest {
         addItem(new WriteRequestItem<>(dataType, address, values));
     }
 
-    public CheckedBulkPlcWriteRequest(List<WriteRequestItem<T>> requestItems) {
-        this.requestItems = requestItems;
+    public CheckedBulkPlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
+        this(dataType);
+        this.requestItems.addAll(requestItems);
     }
 
     @SuppressWarnings("unchecked")
@@ -52,7 +53,7 @@ public class CheckedBulkPlcWriteRequest<T> extends BulkPlcWriteRequest {
         if (writeRequestItem.getDatatype() != datatype) {
             throw new IllegalArgumentException("Incompatible datatype " + writeRequestItem.getDatatype());
         }
-        requestItems.add((WriteRequestItem<T>)writeRequestItem);
+        requestItems.add((WriteRequestItem<T>) writeRequestItem);
     }
 
     public List<? extends WriteRequestItem<?>> getRequestItems() {
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
index ac5d05f..8c03128 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
@@ -18,7 +18,6 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
@@ -26,22 +25,26 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcReadRequest<T> implements PlcReadRequest {
+public class SinglePlcReadRequest<T> extends CheckedBulkPlcReadRequest<T> {
 
     private ReadRequestItem<T> requestItem;
 
     public SinglePlcReadRequest() {
+        super(null);
     }
 
     public SinglePlcReadRequest(ReadRequestItem<T> requestItem) {
+        super(null);
         this.requestItem = requestItem;
     }
 
     public SinglePlcReadRequest(Class<T> dataType, Address address) {
+        super(null);
         requestItem = new ReadRequestItem<>(dataType, address);
     }
 
     public SinglePlcReadRequest(Class<T> dataType, Address address, int size) {
+        super(null);
         requestItem = new ReadRequestItem<>(dataType, address, size);
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
index 1161e47..24acb1c 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
@@ -18,19 +18,19 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcReadResponse<T> implements PlcReadResponse {
+public class SinglePlcReadResponse<T> extends CheckedBulkPlcReadResponse<T> {
 
     private final SinglePlcReadRequest<T> request;
     private final ReadResponseItem<T> responseItem;
 
     public SinglePlcReadResponse(SinglePlcReadRequest<T> request, ReadResponseItem<T> responseItem) {
+        super(request, Collections.singletonList(responseItem));
         this.request = request;
         this.responseItem = responseItem;
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
index 3beca8b..4da59b7 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
@@ -18,7 +18,6 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
@@ -26,22 +25,21 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcWriteRequest<T> implements PlcWriteRequest {
+public class SinglePlcWriteRequest<T> extends CheckedBulkPlcWriteRequest<T> {
 
     private WriteRequestItem<T> requestItem;
 
     public SinglePlcWriteRequest() {
+        super(null);
     }
 
     public SinglePlcWriteRequest(WriteRequestItem<T> requestItem) {
+        super(null);
         this.requestItem = requestItem;
     }
 
-    public SinglePlcWriteRequest(Class<T> dataType, Address address, T value) {
-        addItem(new WriteRequestItem<>(dataType, address, value));
-    }
-
-    public SinglePlcWriteRequest(Class<T> dataType, Address address, T[] values) {
+    public SinglePlcWriteRequest(Class<T> dataType, Address address, T... values) {
+        super(null);
         addItem(new WriteRequestItem<>(dataType, address, values));
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
index 6c2c498..7b7abe1 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
@@ -18,19 +18,19 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
-import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcWriteResponse<T> implements PlcWriteResponse {
+public class SinglePlcWriteResponse<T> extends CheckedBulkPlcWriteResponse<T> {
 
     private final SinglePlcWriteRequest<T> request;
     private final WriteResponseItem<T> responseItem;
 
     public SinglePlcWriteResponse(SinglePlcWriteRequest<T> request, WriteResponseItem<T> responseItem) {
+        super(request, Collections.singletonList(responseItem));
         this.request = request;
         this.responseItem = responseItem;
     }
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 6233801..f8ccf3d 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
@@ -177,10 +177,10 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                         }
                         responseItems.add(responseItem);
                     }
-                    if (plcReadRequest instanceof BulkPlcReadRequest) {
-                        response = new BulkPlcReadResponse((BulkPlcReadRequest) plcReadRequest, responseItems);
-                    } else if (plcReadRequest instanceof SinglePlcReadRequest) {
+                    if (plcReadRequest instanceof SinglePlcReadRequest) {
                         response = new SinglePlcReadResponse((SinglePlcReadRequest) plcReadRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+                    } else if (plcReadRequest instanceof BulkPlcReadRequest) {
+                        response = new BulkPlcReadResponse((BulkPlcReadRequest) plcReadRequest, responseItems);
                     } else {
                         response = null;
                     }

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 05/12: Rename CheckedPlc* to TypeSafePlc*

Posted by sr...@apache.org.
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

commit 3615ee46225480b43184428ab07ad7a785912d10
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 12:39:55 2018 +0100

    Rename CheckedPlc* to TypeSafePlc*
---
 .../main/java/org/apache/plc4x/java/api/connection/PlcReader.java | 8 ++++----
 .../main/java/org/apache/plc4x/java/api/connection/PlcWriter.java | 8 ++++----
 .../java/org/apache/plc4x/java/api/messages/PlcReadRequest.java   | 8 ++++----
 .../java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java  | 8 ++++----
 .../plc4x/java/api/messages/specific/SinglePlcReadRequest.java    | 2 +-
 .../plc4x/java/api/messages/specific/SinglePlcReadResponse.java   | 2 +-
 .../plc4x/java/api/messages/specific/SinglePlcWriteRequest.java   | 2 +-
 .../plc4x/java/api/messages/specific/SinglePlcWriteResponse.java  | 2 +-
 .../{CheckedPlcReadRequest.java => TypeSafePlcReadRequest.java}   | 8 ++++----
 .../{CheckedPlcReadResponse.java => TypeSafePlcReadResponse.java} | 6 +++---
 .../{CheckedPlcWriteRequest.java => TypeSafePlcWriteRequest.java} | 8 ++++----
 ...CheckedPlcWriteResponse.java => TypeSafePlcWriteResponse.java} | 6 +++---
 12 files changed, 34 insertions(+), 34 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
index 91c3c7d..f6569fb 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
@@ -20,8 +20,8 @@ package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.specific.CheckedPlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.CheckedPlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
 
@@ -60,8 +60,8 @@ public interface PlcReader {
      * @return a {@link CompletableFuture} giving async access to the returned value.
      */
     @SuppressWarnings("unchecked")
-    default <T> CompletableFuture<CheckedPlcReadResponse<T>> read(CheckedPlcReadRequest<T> readRequest) {
-        return (CompletableFuture<CheckedPlcReadResponse<T>>) read((PlcReadRequest) readRequest);
+    default <T> CompletableFuture<TypeSafePlcReadResponse<T>> read(TypeSafePlcReadRequest<T> readRequest) {
+        return (CompletableFuture<TypeSafePlcReadResponse<T>>) read((PlcReadRequest) readRequest);
     }
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
index 5ae800c..071bd3b 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
@@ -21,8 +21,8 @@ package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
-import org.apache.plc4x.java.api.messages.specific.CheckedPlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.CheckedPlcWriteResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteResponse;
 
@@ -61,8 +61,8 @@ public interface PlcWriter {
      * @return a {@link CompletableFuture} giving async access to the response of the write operation.
      */
     @SuppressWarnings("unchecked")
-    default <T> CompletableFuture<CheckedPlcWriteResponse<T>> write(CheckedPlcWriteRequest<T> writeRequest) {
-        return (CompletableFuture<CheckedPlcWriteResponse<T>>) write((PlcWriteRequest) writeRequest);
+    default <T> CompletableFuture<TypeSafePlcWriteResponse<T>> write(TypeSafePlcWriteRequest<T> writeRequest) {
+        return (CompletableFuture<TypeSafePlcWriteResponse<T>>) write((PlcWriteRequest) writeRequest);
     }
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
index 674c902..4714d6d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
@@ -19,7 +19,7 @@ under the License.
 package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.specific.CheckedPlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
 import org.apache.plc4x.java.api.model.Address;
 
@@ -116,7 +116,7 @@ public class PlcReadRequest implements PlcRequest {
             if (mixed) {
                 plcReadRequest = new PlcReadRequest();
             } else {
-                plcReadRequest = new CheckedPlcReadRequest<>(firstType);
+                plcReadRequest = new TypeSafePlcReadRequest<>(firstType);
             }
             for (ReadRequestItem request : requests) {
                 plcReadRequest.addItem(request);
@@ -144,7 +144,7 @@ public class PlcReadRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public <T> CheckedPlcReadRequest<T> buildBulk(Class<T> type) {
+        public <T> TypeSafePlcReadRequest<T> buildBulk(Class<T> type) {
             if (requests.size() < 2) {
                 throw new IllegalStateException("Checked bulk request needs more than one request");
             }
@@ -154,7 +154,7 @@ public class PlcReadRequest implements PlcRequest {
             if (mixed) {
                 throw new IllegalStateException("Mixed types contained");
             }
-            return (CheckedPlcReadRequest<T>) build();
+            return (TypeSafePlcReadRequest<T>) build();
         }
 
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index cba4d7d..71251b2 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -19,7 +19,7 @@ under the License.
 package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.specific.CheckedPlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
 import org.apache.plc4x.java.api.model.Address;
 
@@ -105,7 +105,7 @@ public class PlcWriteRequest implements PlcRequest {
             if (mixed) {
                 plcWriteRequest = new PlcWriteRequest();
             } else {
-                plcWriteRequest = new CheckedPlcWriteRequest<>(firstType);
+                plcWriteRequest = new TypeSafePlcWriteRequest<>(firstType);
             }
             for (WriteRequestItem request : requests) {
                 plcWriteRequest.addItem(request);
@@ -133,7 +133,7 @@ public class PlcWriteRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public <T> CheckedPlcWriteRequest<T> buildBulk(Class<T> type) {
+        public <T> TypeSafePlcWriteRequest<T> buildBulk(Class<T> type) {
             if (requests.size() < 2) {
                 throw new IllegalStateException("Checked bulk request needs more than one request");
             }
@@ -143,7 +143,7 @@ public class PlcWriteRequest implements PlcRequest {
             if (mixed) {
                 throw new IllegalStateException("Mixed types contained");
             }
-            return (CheckedPlcWriteRequest<T>) build();
+            return (TypeSafePlcWriteRequest<T>) build();
         }
 
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
index 7f5e4bc..a8226c2 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
@@ -25,7 +25,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcReadRequest<T> extends CheckedPlcReadRequest<T> {
+public class SinglePlcReadRequest<T> extends TypeSafePlcReadRequest<T> {
 
     private ReadRequestItem<T> requestItem;
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
index 0b985ed..c835998 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
@@ -24,7 +24,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcReadResponse<T> extends CheckedPlcReadResponse<T> {
+public class SinglePlcReadResponse<T> extends TypeSafePlcReadResponse<T> {
 
     private final SinglePlcReadRequest<T> request;
     private final ReadResponseItem<T> responseItem;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
index d0d5085..35ac219 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
@@ -25,7 +25,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcWriteRequest<T> extends CheckedPlcWriteRequest<T> {
+public class SinglePlcWriteRequest<T> extends TypeSafePlcWriteRequest<T> {
 
     private WriteRequestItem<T> requestItem;
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
index 28e2310..eb9b52a 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
@@ -24,7 +24,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcWriteResponse<T> extends CheckedPlcWriteResponse<T> {
+public class SinglePlcWriteResponse<T> extends TypeSafePlcWriteResponse<T> {
 
     private final SinglePlcWriteRequest<T> request;
     private final WriteResponseItem<T> responseItem;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
similarity index 88%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadRequest.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
index b6ae5ea..58ff74e 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
@@ -25,23 +25,23 @@ import org.apache.plc4x.java.api.model.Address;
 import java.util.LinkedList;
 import java.util.List;
 
-public class CheckedPlcReadRequest<T> extends PlcReadRequest {
+public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
 
     private final List<ReadRequestItem<T>> readRequestItems;
 
     private Class<T> datatype;
 
-    public CheckedPlcReadRequest(Class<T> type) {
+    public TypeSafePlcReadRequest(Class<T> type) {
         this.datatype = type;
         this.readRequestItems = new LinkedList<>();
     }
 
-    public CheckedPlcReadRequest(Class<T> dataType, Address address) {
+    public TypeSafePlcReadRequest(Class<T> dataType, Address address) {
         this(dataType);
         addItem(new ReadRequestItem<>(dataType, address));
     }
 
-    public CheckedPlcReadRequest(Class<T> dataType, Address address, int size) {
+    public TypeSafePlcReadRequest(Class<T> dataType, Address address, int size) {
         this(dataType);
         addItem(new ReadRequestItem<>(dataType, address, size));
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
similarity index 85%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadResponse.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
index 19df33a..c6b0d33 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
@@ -24,12 +24,12 @@ import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 
 import java.util.List;
 
-public class CheckedPlcReadResponse<T> extends PlcReadResponse {
+public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
 
-    private final CheckedPlcReadRequest<T> request;
+    private final TypeSafePlcReadRequest<T> request;
     private final List<ReadResponseItem<T>> responseItems;
 
-    public CheckedPlcReadResponse(CheckedPlcReadRequest<T> request, List<ReadResponseItem<T>> responseItems) {
+    public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, List<ReadResponseItem<T>> responseItems) {
         super(null, null);
         this.request = request;
         this.responseItems = responseItems;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
similarity index 87%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteRequest.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
index b8c63f6..8979cf5 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
@@ -25,23 +25,23 @@ import org.apache.plc4x.java.api.model.Address;
 import java.util.LinkedList;
 import java.util.List;
 
-public class CheckedPlcWriteRequest<T> extends PlcWriteRequest {
+public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
 
     private final List<WriteRequestItem<T>> requestItems;
 
     private final Class<T> datatype;
 
-    public CheckedPlcWriteRequest(Class<T> type) {
+    public TypeSafePlcWriteRequest(Class<T> type) {
         this.datatype = type;
         this.requestItems = new LinkedList<>();
     }
 
-    public CheckedPlcWriteRequest(Class<T> dataType, Address address, T... values) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, Address address, T... values) {
         this(dataType);
         addItem(new WriteRequestItem<>(dataType, address, values));
     }
 
-    public CheckedPlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
         this(dataType);
         this.requestItems.addAll(requestItems);
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
similarity index 85%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteResponse.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
index 91ca855..2b9e164 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
@@ -24,12 +24,12 @@ import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 
 import java.util.List;
 
-public class CheckedPlcWriteResponse<T> extends PlcWriteResponse {
+public class TypeSafePlcWriteResponse<T> extends PlcWriteResponse {
 
-    private final CheckedPlcWriteRequest<T> request;
+    private final TypeSafePlcWriteRequest<T> request;
     private final List<WriteResponseItem<T>> responseItems;
 
-    public CheckedPlcWriteResponse(CheckedPlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
+    public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
         super(null, null);
         this.request = request;
         this.responseItems = responseItems;

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 02/12: fixed edgent test

Posted by sr...@apache.org.
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

commit 3ce27ea3b73614c86cddcdcd44880fe0c46586d3
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 12:14:54 2018 +0100

    fixed edgent test
---
 .../apache/plc4x/edgent/PlcConnectionAdapter.java  |  2 +-
 .../plc4x/edgent/PlcConnectionAdapterTest.java     | 44 +++++++++++++---------
 .../apache/plc4x/edgent/mock/MockConnection.java   |  8 ++--
 3 files changed, 32 insertions(+), 22 deletions(-)

diff --git a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
index a689c92..c12f82e 100644
--- a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
+++ b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
@@ -112,7 +112,7 @@ public class PlcConnectionAdapter implements AutoCloseable {
                     address = connection.parseAddress(addressStr);
                     PlcReader reader = connection.getReader().get();
                     SinglePlcReadRequest<T> readRequest = PlcConnectionAdapter.newPlcReadRequest(datatype, address);
-                    return reader.read(readRequest).get().getResponseItems().get(0).getValues().get(0);
+                    return reader.read(readRequest).get().getResponseItem().get().getValues().get(0);
                 } catch (Exception e) {
                     logger.error("reading from plc device {} {} failed", connection, address, e);
                     return null;
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 8b95451..ead9699 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
@@ -26,7 +26,7 @@ import org.apache.plc4x.edgent.mock.MockAddress;
 import org.apache.plc4x.edgent.mock.MockConnection;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.messages.*;
+import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
@@ -40,6 +40,7 @@ import org.junit.jupiter.api.Test;
 
 import java.lang.reflect.Array;
 import java.util.Calendar;
+import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
@@ -116,7 +117,7 @@ public class PlcConnectionAdapterTest {
     private <T> void checkRead(MockConnection connection, SinglePlcReadRequest<T> request, T value) throws InterruptedException, ExecutionException {
         // 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
-        connection.setDataValue(request.getReadRequestItems().get(0).getAddress(), value);
+        connection.setDataValue(request.getCheckedReadRequestItems().get(0).getAddress(), value);
 
         CompletableFuture<SinglePlcReadResponse<T>> cf = connection.read(request);
 
@@ -140,6 +141,9 @@ public class PlcConnectionAdapterTest {
         if (writtenData.getClass().isArray()) {
             writtenData = (T) Array.get(writtenData, 0);
         }
+        if (List.class.isAssignableFrom(writtenData.getClass())) {
+            writtenData = (T) ((List) writtenData).get(0);
+        }
         Assertions.assertEquals(value, writtenData);
     }
 
@@ -157,7 +161,7 @@ public class PlcConnectionAdapterTest {
 
         {
             SinglePlcReadRequest<Boolean> request = PlcConnectionAdapter.newPlcReadRequest(Boolean.class, address);
-            ReadRequestItem<Boolean> requestItem = request.getReadRequestItems().get(0);
+            ReadRequestItem<Boolean> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Boolean.class, "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -166,7 +170,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcReadRequest<Byte> request = PlcConnectionAdapter.newPlcReadRequest(Byte.class, address);
-            ReadRequestItem<Byte> requestItem = request.getReadRequestItems().get(0);
+            ReadRequestItem<Byte> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Byte.class, "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -175,7 +179,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcReadRequest<Short> request = PlcConnectionAdapter.newPlcReadRequest(Short.class, address);
-            ReadRequestItem<Short> requestItem = request.getReadRequestItems().get(0);
+            ReadRequestItem<Short> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Short.class, "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -184,7 +188,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcReadRequest<Integer> request = PlcConnectionAdapter.newPlcReadRequest(Integer.class, address);
-            ReadRequestItem<Integer> requestItem = request.getReadRequestItems().get(0);
+            ReadRequestItem<Integer> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Integer.class, "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -193,7 +197,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcReadRequest<Float> request = PlcConnectionAdapter.newPlcReadRequest(Float.class, address);
-            ReadRequestItem<Float> requestItem = request.getReadRequestItems().get(0);
+            ReadRequestItem<Float> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Float.class, "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -202,7 +206,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcReadRequest<String> request = PlcConnectionAdapter.newPlcReadRequest(String.class, address);
-            ReadRequestItem<String> requestItem = request.getReadRequestItems().get(0);
+            ReadRequestItem<String> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == String.class, "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -211,7 +215,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcReadRequest<Calendar> request = PlcConnectionAdapter.newPlcReadRequest(Calendar.class, address);
-            ReadRequestItem<Calendar> requestItem = request.getReadRequestItems().get(0);
+            ReadRequestItem<Calendar> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Calendar.class, "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -235,7 +239,7 @@ public class PlcConnectionAdapterTest {
 
         {
             SinglePlcWriteRequest<Boolean> request = PlcConnectionAdapter.newPlcWriteRequest(address, true);
-            WriteRequestItem<Boolean> requestItem = request.getRequestItems().get(0);
+            WriteRequestItem<Boolean> requestItem = request.getCheckedRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Boolean.class.isAssignableFrom(dataType), "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -243,7 +247,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcWriteRequest<Byte> request = PlcConnectionAdapter.newPlcWriteRequest(address, (byte) 0x113);
-            WriteRequestItem<Byte> requestItem = request.getRequestItems().get(0);
+            WriteRequestItem<Byte> requestItem = request.getCheckedRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Byte.class.isAssignableFrom(dataType), "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -251,7 +255,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcWriteRequest<Short> request = PlcConnectionAdapter.newPlcWriteRequest(address, (short) 113);
-            WriteRequestItem<Short> requestItem = request.getRequestItems().get(0);
+            WriteRequestItem<Short> requestItem = request.getCheckedRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Short.class.isAssignableFrom(dataType), "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -259,7 +263,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcWriteRequest<Integer> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1033);
-            WriteRequestItem<Integer> requestItem = request.getRequestItems().get(0);
+            WriteRequestItem<Integer> requestItem = request.getCheckedRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Integer.class.isAssignableFrom(dataType), "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -267,7 +271,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcWriteRequest<Float> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1043.5f);
-            WriteRequestItem<Float> requestItem = request.getRequestItems().get(0);
+            WriteRequestItem<Float> requestItem = request.getCheckedRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Float.class.isAssignableFrom(dataType), "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -275,7 +279,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             SinglePlcWriteRequest<String> request = PlcConnectionAdapter.newPlcWriteRequest(address, "A written value");
-            WriteRequestItem<String> requestItem = request.getRequestItems().get(0);
+            WriteRequestItem<String> requestItem = request.getCheckedRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
             Assertions.assertTrue(String.class.isAssignableFrom(dataType), "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -284,7 +288,7 @@ public class PlcConnectionAdapterTest {
         {
             Calendar calValue = Calendar.getInstance();
             SinglePlcWriteRequest<Calendar> request = PlcConnectionAdapter.newPlcWriteRequest(address, calValue);
-            WriteRequestItem<Calendar> requestItem = request.getRequestItems().get(0);
+            WriteRequestItem<Calendar> requestItem = request.getCheckedRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Calendar.class.isAssignableFrom(dataType), "class:" + request.getClass());
             Assertions.assertSame(address, requestItem.getAddress());
@@ -426,7 +430,7 @@ public class PlcConnectionAdapterTest {
         Consumer<?> consumer;
 
         consumer = adapter.newConsumer(String.class, addressStr);
-        checkConsumer(2, connection, address, (Consumer<String>) consumer, "one", "two", "three");
+        checkConsumer(2, connection, address, consumer, "one", "two", "three");
 
         adapter.close();
     }
@@ -445,6 +449,9 @@ public class PlcConnectionAdapterTest {
         for (Object value : values) {
             consumer.accept((T) value);
             T writtenData = (T) connection.getDataValue(address);
+            if (List.class.isAssignableFrom(writtenData.getClass())) {
+                writtenData = (T) ((List) writtenData).get(0);
+            }
             if (writtenData.getClass().isArray()) {
                 writtenData = (T) Array.get(writtenData, 0);
             }
@@ -546,6 +553,9 @@ public class PlcConnectionAdapterTest {
             if (writtenData.getClass().isArray()) {
                 writtenData = (T) Array.get(writtenData, 0);
             }
+            if (List.class.isAssignableFrom(writtenData.getClass())) {
+                writtenData = (T) ((List) writtenData).get(0);
+            }
             // System.out.println("checkConsumerJson"+(writeFailureCountTrigger > 0 ? "NEG" : "")+": value:"+value+" writtenData:"+writtenData);
             if (writeFailureCountTrigger <= 0)
                 Assertions.assertEquals(value, writtenData);
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
index c31eb2a..c17e7de 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
@@ -104,7 +104,7 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
         if (readRequest instanceof SinglePlcReadRequest) {
             response = new SinglePlcReadResponse((SinglePlcReadRequest) readRequest, responseItems.isEmpty() ? null : responseItems.get(0));
         } else if (readRequest instanceof BulkPlcReadRequest) {
-            response = new BulkPlcReadResponse((BulkPlcReadRequest) readRequest, responseItems);
+            response = new BulkPlcReadResponse(readRequest, responseItems);
         } else {
             response = null;
         }
@@ -128,10 +128,10 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
             responseItems.add(responseItem);
         }
         PlcWriteResponse response;
-        if (writeRequest instanceof BulkPlcWriteRequest) {
-            response = new BulkPlcWriteResponse((BulkPlcWriteRequest) writeRequest, responseItems);
-        } else if (writeRequest instanceof SinglePlcWriteRequest) {
+        if (writeRequest instanceof SinglePlcWriteRequest) {
             response = new SinglePlcWriteResponse((SinglePlcWriteRequest) writeRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+        } else if (writeRequest instanceof BulkPlcWriteRequest) {
+            response = new BulkPlcWriteResponse(writeRequest, responseItems);
         } else {
             response = null;
         }

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 11/12: small pre-merge fixes.

Posted by sr...@apache.org.
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

commit ea71d93b636c1cb0e8f1a7c1a250a7dca2154da4
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 15:35:54 2018 +0100

    small pre-merge fixes.
---
 .../apache/plc4x/edgent/PlcConnectionAdapter.java  |  5 +++--
 .../plc4x/java/s7/netty/Plc4XS7Protocol.java       | 22 +++++++++-------------
 2 files changed, 12 insertions(+), 15 deletions(-)

diff --git a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
index 9854500..b92015b 100644
--- a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
+++ b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
@@ -18,7 +18,8 @@ under the License.
 */
 package org.apache.plc4x.edgent;
 
-import com.google.gson.JsonObject;
+import java.util.Calendar;
+
 import org.apache.edgent.function.Consumer;
 import org.apache.edgent.function.Function;
 import org.apache.edgent.function.Supplier;
@@ -34,7 +35,7 @@ import org.apache.plc4x.java.api.model.Address;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Calendar;
+import com.google.gson.JsonObject;
 
 /**
  * PlcConnectionAdapter encapsulates a plc4x {@link PlcConnection}.
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 eb1eeb3..7b2aaa2 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
@@ -168,18 +168,16 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                         // All Ok.
                         else {
                             byte[] data = payloadItem.getData();
-                            Class datatype = requestItem.getDatatype();
-                            List value = decodeData(datatype, data);
+                            Class<?> datatype = requestItem.getDatatype();
+                            List<?> value = decodeData(datatype, data);
                             responseItem = new ReadResponseItem(requestItem, responseCode, value);
                         }
                         responseItems.add(responseItem);
                     }
                     if (plcReadRequest instanceof TypeSafePlcReadRequest) {
-                        response = new TypeSafePlcReadResponse((TypeSafePlcReadRequest) plcReadRequest, responseItems.isEmpty() ? null : responseItems.get(0));
-                    } else if (plcReadRequest instanceof PlcReadRequest) {
+                        response = new TypeSafePlcReadResponse((TypeSafePlcReadRequest) plcReadRequest, responseItems);
+                    }  else {
                         response = new PlcReadResponse(plcReadRequest, responseItems);
-                    } else {
-                        response = null;
                     }
                 }
 
@@ -210,12 +208,10 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                         responseItems.add(responseItem);
                     }
 
-                    if (plcWriteRequest instanceof PlcWriteRequest) {
-                        response = new PlcWriteResponse(plcWriteRequest, responseItems);
-                    } else if (plcWriteRequest instanceof TypeSafePlcWriteRequest) {
-                        response = new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) plcWriteRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+                    if (plcWriteRequest instanceof TypeSafePlcWriteRequest) {
+                        response = new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) plcWriteRequest, responseItems);
                     } else {
-                        response = null;
+                        response = new PlcWriteResponse(plcWriteRequest, responseItems);
                     }
                 }
 
@@ -257,7 +253,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
         }
     }
 
-    private TransportSize encodeTransportSize(Class datatype) {
+    private TransportSize encodeTransportSize(Class<?> datatype) {
         if (datatype == Boolean.class) {
             return TransportSize.BIT;
         } else if (datatype == Byte.class) {
@@ -276,7 +272,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
         return null;
     }
 
-    private DataTransportSize encodeDataTransportSize(Class datatype) {
+    private DataTransportSize encodeDataTransportSize(Class<?> datatype) {
         if (datatype == Boolean.class) {
             return DataTransportSize.BIT;
         } else if (datatype == Byte.class) {

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 12/12: Merge branch 'master' into assertj_migration

Posted by sr...@apache.org.
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

commit 9b46c5ea9e4d9acd031a1a806fa970be1be1e859
Merge: a2a4d84 ea71d93
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 15:37:38 2018 +0100

    Merge branch 'master' into assertj_migration

 .gitignore                                         |    1 +
 Jenkinsfile                                        |    4 +-
 applications/iotree/pom.xml                        |    5 +
 .../plc4x/java/applications/iotree/IoTree.java     |   20 +-
 applications/plclogger/pom.xml                     |    5 +
 .../java/applications/plclogger/PlcLogger.java     |   20 +-
 integrations/apache-camel/pom.xml                  |   23 +-
 .../java/org/apache/plc4x/camel/Constants.java     |    1 -
 .../java/org/apache/plc4x/camel/PLC4XProducer.java |   23 +-
 .../org/apache/plc4x/camel/PLC4XComponentTest.java |    3 +-
 .../apache/plc4x/edgent/PlcConnectionAdapter.java  |  257 +++--
 .../plc4x/edgent/PlcConnectionAdapterTest.java     | 1030 ++++++++++----------
 .../apache/plc4x/edgent/mock/MockConnection.java   |  123 ++-
 .../java/api/connection/AbstractPlcConnection.java |    4 -
 .../plc4x/java/api/connection/PlcReader.java       |   17 +-
 .../plc4x/java/api/connection/PlcWriter.java       |   19 +-
 .../plc4x/java/api/messages/PlcReadRequest.java    |  129 ++-
 .../plc4x/java/api/messages/PlcReadResponse.java   |   44 +-
 .../plc4x/java/api/messages/PlcWriteRequest.java   |  120 ++-
 .../plc4x/java/api/messages/PlcWriteResponse.java  |   44 +-
 .../java/api/messages/items/ReadRequestItem.java   |   23 +-
 .../java/api/messages/items/ReadResponseItem.java  |   13 +-
 .../java/api/messages/items/WriteRequestItem.java  |   33 +-
 .../java/api/messages/items/WriteResponseItem.java |    9 +-
 .../messages/specific/TypeSafePlcReadRequest.java  |   84 ++
 .../messages/specific/TypeSafePlcReadResponse.java |   81 ++
 .../messages/specific/TypeSafePlcWriteRequest.java |   76 ++
 .../specific/TypeSafePlcWriteResponse.java         |   56 ++
 .../PlcUsernamePasswordAuthenticationTest.java     |    0
 .../plc4x/java/api/messages/APIMessageTests.java   |  271 +++++
 .../plc4x/java/api/messages/mock/MockAddress.java  |    0
 .../plc4x/java/api/messages/APIMessageTests.java   |  214 ----
 plc4j/pom.xml                                      |   38 +-
 .../plc4x/java/isotp/netty/IsoTPProtocol.java      |  388 ++++----
 .../java/isotp/netty/model/types/DeviceGroup.java  |    4 +-
 .../isotp/netty/model/types/DisconnectReason.java  |    4 +-
 .../isotp/netty/model/types/ParameterCode.java     |    4 +-
 .../isotp/netty/model/types/ProtocolClass.java     |    4 +-
 .../java/isotp/netty/model/types/RejectCause.java  |    4 +-
 .../java/isotp/netty/model/types/TpduCode.java     |    4 +-
 .../java/isotp/netty/model/types/TpduSize.java     |    4 +-
 .../plc4x/java/s7/connection/S7PlcConnection.java  |    8 +-
 .../plc4x/java/s7/netty/Plc4XS7Protocol.java       |  161 +--
 .../org/apache/plc4x/java/s7/netty/S7Protocol.java |  233 +++--
 .../netty/model/types/DataTransportErrorCode.java  |    4 +-
 .../s7/netty/model/types/DataTransportSize.java    |    4 +-
 .../java/s7/netty/model/types/MemoryArea.java      |    4 +-
 .../java/s7/netty/model/types/MessageType.java     |    4 +-
 .../java/s7/netty/model/types/ParameterType.java   |    4 +-
 .../s7/netty/model/types/SpecificationType.java    |    4 +-
 .../java/s7/netty/model/types/TransportSize.java   |    4 +-
 .../netty/model/types/VariableAddressingMode.java  |    4 +-
 .../plc4x/java/isotp/netty/IsoTPProtocolTest.java  |  648 +++++++++++-
 .../apache/plc4x/java/isotp/netty/MockChannel.java |  243 +++++
 .../isotp/netty/MockChannelHandlerContext.java     |  234 +++++
 .../java/isotp/netty/MockChannelPipeline.java      |  354 +++++++
 .../apache/plc4x/java/s7/S7PlcReaderSample.java    |   17 +-
 .../org/apache/plc4x/java/s7/S7PlcScanner.java     |   20 +-
 .../org/apache/plc4x/java/s7/S7PlcTestConsole.java |   16 +-
 .../apache/plc4x/java/s7/S7PlcWriterSample.java    |   13 +-
 .../plc4x/java/s7/netty/Plc4XS7ProtocolTest.java   |  198 +++-
 .../apache/plc4x/java/s7/netty/S7ProtocolTest.java |   62 +-
 pom.xml                                            |  263 +++--
 sonar-project.properties.sav                       |   46 +
 src/site/asciidoc/development/building.adoc        |   82 ++
 65 files changed, 4283 insertions(+), 1553 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 04/12: get rid of BulkPlc*

Posted by sr...@apache.org.
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

commit 4078c582f93ac1aa5ac88b7fde82117aee959ac3
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 12:27:04 2018 +0100

    get rid of BulkPlc*
---
 .../java/org/apache/plc4x/camel/PLC4XProducer.java |  4 +-
 .../apache/plc4x/edgent/mock/MockConnection.java   | 13 +++---
 .../plc4x/java/api/connection/PlcReader.java       | 23 ++++-------
 .../plc4x/java/api/connection/PlcWriter.java       | 23 ++++-------
 .../plc4x/java/api/messages/PlcReadRequest.java    | 15 ++++---
 .../plc4x/java/api/messages/PlcWriteRequest.java   | 15 ++++---
 .../plc4x/java/api/messages/PlcWriteResponse.java  |  1 -
 .../api/messages/specific/BulkPlcReadRequest.java  | 46 ----------------------
 .../api/messages/specific/BulkPlcReadResponse.java | 38 ------------------
 .../api/messages/specific/BulkPlcWriteRequest.java | 43 --------------------
 .../messages/specific/BulkPlcWriteResponse.java    | 36 -----------------
 ...ReadRequest.java => CheckedPlcReadRequest.java} | 11 +++---
 ...adResponse.java => CheckedPlcReadResponse.java} |  7 ++--
 ...iteRequest.java => CheckedPlcWriteRequest.java} | 11 +++---
 ...eResponse.java => CheckedPlcWriteResponse.java} | 10 +++--
 .../messages/specific/SinglePlcReadRequest.java    |  2 +-
 .../messages/specific/SinglePlcReadResponse.java   |  2 +-
 .../messages/specific/SinglePlcWriteRequest.java   |  2 +-
 .../messages/specific/SinglePlcWriteResponse.java  |  2 +-
 .../plc4x/java/api/messages/APIMessageTests.java   | 28 ++++++-------
 .../plc4x/java/s7/netty/Plc4XS7Protocol.java       | 13 +++---
 21 files changed, 83 insertions(+), 262 deletions(-)

diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
index fcd037c..02bdfe2 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
@@ -25,8 +25,8 @@ import org.apache.camel.impl.DefaultAsyncProducer;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcException;
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.specific.BulkPlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
 import org.apache.plc4x.java.api.model.Address;
 
@@ -66,7 +66,7 @@ public class PLC4XProducer extends DefaultAsyncProducer {
                 .stream()
                 .map(o -> (WriteRequestItem<?>) new WriteRequestItem(o.getClass(), address, o))
                 .collect(Collectors.toList());
-            BulkPlcWriteRequest bulkPlcWriteRequest = new BulkPlcWriteRequest(collect);
+            PlcWriteRequest bulkPlcWriteRequest = new PlcWriteRequest(collect);
             PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
             completableFuture = plcWriter.write(bulkPlcWriteRequest);
         } else {
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
index c17e7de..29faf15 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
@@ -33,7 +33,10 @@ import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-import org.apache.plc4x.java.api.messages.specific.*;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteResponse;
 import org.apache.plc4x.java.api.model.Address;
 import org.apache.plc4x.java.api.types.ResponseCode;
 
@@ -103,10 +106,8 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
         PlcReadResponse response;
         if (readRequest instanceof SinglePlcReadRequest) {
             response = new SinglePlcReadResponse((SinglePlcReadRequest) readRequest, responseItems.isEmpty() ? null : responseItems.get(0));
-        } else if (readRequest instanceof BulkPlcReadRequest) {
-            response = new BulkPlcReadResponse(readRequest, responseItems);
         } else {
-            response = null;
+            response = new PlcReadResponse(readRequest, responseItems);
         }
         return CompletableFuture.completedFuture(response);
     }
@@ -130,10 +131,8 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
         PlcWriteResponse response;
         if (writeRequest instanceof SinglePlcWriteRequest) {
             response = new SinglePlcWriteResponse((SinglePlcWriteRequest) writeRequest, responseItems.isEmpty() ? null : responseItems.get(0));
-        } else if (writeRequest instanceof BulkPlcWriteRequest) {
-            response = new BulkPlcWriteResponse(writeRequest, responseItems);
         } else {
-            response = null;
+            response = new PlcWriteResponse(writeRequest, responseItems);
         }
 
         return CompletableFuture.completedFuture(response);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
index dc28e25..91c3c7d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
@@ -18,8 +18,12 @@ under the License.
 */
 package org.apache.plc4x.java.api.connection;
 
-import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.messages.specific.*;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.CheckedPlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.CheckedPlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -52,23 +56,12 @@ public interface PlcReader {
      * Reads a requested value from a PLC.
      *
      * @param readRequest object describing the type and location of the value.
-     * @return a {@link CompletableFuture} giving async access to the returned value.
-     */
-    @SuppressWarnings("unchecked")
-    default CompletableFuture<BulkPlcReadResponse> read(BulkPlcReadRequest readRequest) {
-        return (CompletableFuture<BulkPlcReadResponse>) read((PlcReadRequest) readRequest);
-    }
-
-    /**
-     * Reads a requested value from a PLC.
-     *
-     * @param readRequest object describing the type and location of the value.
      * @param <T>         type that is being requested.
      * @return a {@link CompletableFuture} giving async access to the returned value.
      */
     @SuppressWarnings("unchecked")
-    default <T> CompletableFuture<CheckedBulkPlcReadResponse<T>> read(CheckedBulkPlcReadRequest<T> readRequest) {
-        return (CompletableFuture<CheckedBulkPlcReadResponse<T>>) read((PlcReadRequest) readRequest);
+    default <T> CompletableFuture<CheckedPlcReadResponse<T>> read(CheckedPlcReadRequest<T> readRequest) {
+        return (CompletableFuture<CheckedPlcReadResponse<T>>) read((PlcReadRequest) readRequest);
     }
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
index a530885..5ae800c 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
@@ -19,8 +19,12 @@ under the License.
 package org.apache.plc4x.java.api.connection;
 
 
-import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.messages.specific.*;
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteResponse;
+import org.apache.plc4x.java.api.messages.specific.CheckedPlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.CheckedPlcWriteResponse;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteResponse;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -53,23 +57,12 @@ public interface PlcWriter {
      * Writes a given value to a PLC.
      *
      * @param writeRequest object describing the type, location and value that whould be written.
-     * @return a {@link CompletableFuture} giving async access to the response of the write operation.
-     */
-    @SuppressWarnings("unchecked")
-    default CompletableFuture<BulkPlcWriteResponse> write(BulkPlcWriteRequest writeRequest) {
-        return (CompletableFuture<BulkPlcWriteResponse>) write((PlcWriteRequest) writeRequest);
-    }
-
-    /**
-     * Writes a given value to a PLC.
-     *
-     * @param writeRequest object describing the type, location and value that whould be written.
      * @param <T>          type that is being requested.
      * @return a {@link CompletableFuture} giving async access to the response of the write operation.
      */
     @SuppressWarnings("unchecked")
-    default <T> CompletableFuture<CheckedBulkPlcWriteResponse<T>> write(CheckedBulkPlcWriteRequest<T> writeRequest) {
-        return (CompletableFuture<CheckedBulkPlcWriteResponse<T>>) write((PlcWriteRequest) writeRequest);
+    default <T> CompletableFuture<CheckedPlcWriteResponse<T>> write(CheckedPlcWriteRequest<T> writeRequest) {
+        return (CompletableFuture<CheckedPlcWriteResponse<T>>) write((PlcWriteRequest) writeRequest);
     }
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
index 2dae36a..674c902 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
@@ -19,8 +19,7 @@ under the License.
 package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.specific.BulkPlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.CheckedBulkPlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.CheckedPlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
 import org.apache.plc4x.java.api.model.Address;
 
@@ -115,9 +114,9 @@ public class PlcReadRequest implements PlcRequest {
             }
             PlcReadRequest plcReadRequest;
             if (mixed) {
-                plcReadRequest = new BulkPlcReadRequest();
+                plcReadRequest = new PlcReadRequest();
             } else {
-                plcReadRequest = new CheckedBulkPlcReadRequest<>(firstType);
+                plcReadRequest = new CheckedPlcReadRequest<>(firstType);
             }
             for (ReadRequestItem request : requests) {
                 plcReadRequest.addItem(request);
@@ -126,11 +125,11 @@ public class PlcReadRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public BulkPlcReadRequest buildBulk() {
+        public PlcReadRequest buildBulk() {
             if (requests.size() < 2) {
                 throw new IllegalStateException("Bulk request needs more than one request");
             }
-            return (BulkPlcReadRequest) build();
+            return build();
         }
 
         @SuppressWarnings("unchecked")
@@ -145,7 +144,7 @@ public class PlcReadRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public <T> CheckedBulkPlcReadRequest<T> buildBulk(Class<T> type) {
+        public <T> CheckedPlcReadRequest<T> buildBulk(Class<T> type) {
             if (requests.size() < 2) {
                 throw new IllegalStateException("Checked bulk request needs more than one request");
             }
@@ -155,7 +154,7 @@ public class PlcReadRequest implements PlcRequest {
             if (mixed) {
                 throw new IllegalStateException("Mixed types contained");
             }
-            return (CheckedBulkPlcReadRequest<T>) build();
+            return (CheckedPlcReadRequest<T>) build();
         }
 
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index 4b8198d..cba4d7d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -19,8 +19,7 @@ under the License.
 package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.specific.BulkPlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.CheckedBulkPlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.CheckedPlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
 import org.apache.plc4x.java.api.model.Address;
 
@@ -104,9 +103,9 @@ public class PlcWriteRequest implements PlcRequest {
             }
             PlcWriteRequest plcWriteRequest;
             if (mixed) {
-                plcWriteRequest = new BulkPlcWriteRequest();
+                plcWriteRequest = new PlcWriteRequest();
             } else {
-                plcWriteRequest = new CheckedBulkPlcWriteRequest<>(firstType);
+                plcWriteRequest = new CheckedPlcWriteRequest<>(firstType);
             }
             for (WriteRequestItem request : requests) {
                 plcWriteRequest.addItem(request);
@@ -115,11 +114,11 @@ public class PlcWriteRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public BulkPlcWriteRequest buildBulk() {
+        public PlcWriteRequest buildBulk() {
             if (requests.size() < 2) {
                 throw new IllegalStateException("Bulk request needs more than one request");
             }
-            return (BulkPlcWriteRequest) build();
+            return build();
         }
 
         @SuppressWarnings("unchecked")
@@ -134,7 +133,7 @@ public class PlcWriteRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public <T> CheckedBulkPlcWriteRequest<T> buildBulk(Class<T> type) {
+        public <T> CheckedPlcWriteRequest<T> buildBulk(Class<T> type) {
             if (requests.size() < 2) {
                 throw new IllegalStateException("Checked bulk request needs more than one request");
             }
@@ -144,7 +143,7 @@ public class PlcWriteRequest implements PlcRequest {
             if (mixed) {
                 throw new IllegalStateException("Mixed types contained");
             }
-            return (CheckedBulkPlcWriteRequest<T>) build();
+            return (CheckedPlcWriteRequest<T>) build();
         }
 
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
index a73e9a2..ef50a86 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-import org.apache.plc4x.java.api.messages.specific.BulkPlcWriteRequest;
 
 import java.util.List;
 import java.util.Optional;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadRequest.java
deleted file mode 100644
index 6efbad1..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadRequest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.model.Address;
-
-import java.util.List;
-
-/**
- * @deprecated just use {@link PlcReadRequest}
- */
-@Deprecated
-public class BulkPlcReadRequest extends PlcReadRequest {
-    public BulkPlcReadRequest() {
-    }
-
-    public BulkPlcReadRequest(Class<?> dataType, Address address) {
-        super(dataType, address);
-    }
-
-    public BulkPlcReadRequest(Class<?> dataType, Address address, int size) {
-        super(dataType, address, size);
-    }
-
-    public BulkPlcReadRequest(List<ReadRequestItem<?>> readRequestItems) {
-        super(readRequestItems);
-    }
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadResponse.java
deleted file mode 100644
index 777b618..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadResponse.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-
-import java.util.List;
-import java.util.Optional;
-
-/**
- * @deprecated just use {@link PlcReadResponse}
- */
-@Deprecated
-public class BulkPlcReadResponse extends PlcReadResponse {
-
-    public BulkPlcReadResponse(PlcReadRequest request, List<ReadResponseItem<?>> responseItems) {
-        super(request, responseItems);
-    }
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteRequest.java
deleted file mode 100644
index eef9c52..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteRequest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.model.Address;
-
-import java.util.List;
-
-/**
- * @deprecated just use {@link PlcWriteRequest}
- */
-@Deprecated
-public class BulkPlcWriteRequest extends PlcWriteRequest {
-
-    public BulkPlcWriteRequest() {
-    }
-
-    public <T> BulkPlcWriteRequest(Class<T> dataType, Address address, T... values) {
-        super(dataType, address, values);
-    }
-
-    public BulkPlcWriteRequest(List<WriteRequestItem<?>> requestItems) {
-        super(requestItems);
-    }
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteResponse.java
deleted file mode 100644
index f603de5..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteResponse.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.PlcWriteResponse;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-
-import java.util.List;
-
-/**
- * @deprecated just use {@link PlcWriteResponse}
- */
-@Deprecated
-public class BulkPlcWriteResponse extends PlcWriteResponse {
-
-    public BulkPlcWriteResponse(PlcWriteRequest request, List<WriteResponseItem<?>> responseItems) {
-        super(request, responseItems);
-    }
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadRequest.java
similarity index 85%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadRequest.java
index a4ff019..b6ae5ea 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadRequest.java
@@ -18,29 +18,30 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.LinkedList;
 import java.util.List;
 
-public class CheckedBulkPlcReadRequest<T> extends BulkPlcReadRequest {
+public class CheckedPlcReadRequest<T> extends PlcReadRequest {
 
     private final List<ReadRequestItem<T>> readRequestItems;
 
     private Class<T> datatype;
 
-    public CheckedBulkPlcReadRequest(Class<T> type) {
+    public CheckedPlcReadRequest(Class<T> type) {
         this.datatype = type;
         this.readRequestItems = new LinkedList<>();
     }
 
-    public CheckedBulkPlcReadRequest(Class<T> dataType, Address address) {
+    public CheckedPlcReadRequest(Class<T> dataType, Address address) {
         this(dataType);
         addItem(new ReadRequestItem<>(dataType, address));
     }
 
-    public CheckedBulkPlcReadRequest(Class<T> dataType, Address address, int size) {
+    public CheckedPlcReadRequest(Class<T> dataType, Address address, int size) {
         this(dataType);
         addItem(new ReadRequestItem<>(dataType, address, size));
     }
@@ -57,7 +58,7 @@ public class CheckedBulkPlcReadRequest<T> extends BulkPlcReadRequest {
         if (readRequestItem.getDatatype() != datatype) {
             throw new IllegalArgumentException("Incompatible datatype " + readRequestItem.getDatatype());
         }
-        readRequestItems.add((ReadRequestItem<T>) readRequestItem);
+        super.addItem(readRequestItem);
     }
 
     public List<ReadRequestItem<T>> getCheckedReadRequestItems() {
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadResponse.java
similarity index 81%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadResponse.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadResponse.java
index 8dc9fd2..19df33a 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcReadResponse.java
@@ -19,16 +19,17 @@ under the License.
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 
 import java.util.List;
 
-public class CheckedBulkPlcReadResponse<T> extends BulkPlcReadResponse {
+public class CheckedPlcReadResponse<T> extends PlcReadResponse {
 
-    private final CheckedBulkPlcReadRequest<T> request;
+    private final CheckedPlcReadRequest<T> request;
     private final List<ReadResponseItem<T>> responseItems;
 
-    public CheckedBulkPlcReadResponse(CheckedBulkPlcReadRequest<T> request, List<ReadResponseItem<T>> responseItems) {
+    public CheckedPlcReadResponse(CheckedPlcReadRequest<T> request, List<ReadResponseItem<T>> responseItems) {
         super(null, null);
         this.request = request;
         this.responseItems = responseItems;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteRequest.java
similarity index 83%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteRequest.java
index 0643832..b8c63f6 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteRequest.java
@@ -18,29 +18,30 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.LinkedList;
 import java.util.List;
 
-public class CheckedBulkPlcWriteRequest<T> extends BulkPlcWriteRequest {
+public class CheckedPlcWriteRequest<T> extends PlcWriteRequest {
 
     private final List<WriteRequestItem<T>> requestItems;
 
     private final Class<T> datatype;
 
-    public CheckedBulkPlcWriteRequest(Class<T> type) {
+    public CheckedPlcWriteRequest(Class<T> type) {
         this.datatype = type;
         this.requestItems = new LinkedList<>();
     }
 
-    public CheckedBulkPlcWriteRequest(Class<T> dataType, Address address, T... values) {
+    public CheckedPlcWriteRequest(Class<T> dataType, Address address, T... values) {
         this(dataType);
         addItem(new WriteRequestItem<>(dataType, address, values));
     }
 
-    public CheckedBulkPlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
+    public CheckedPlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
         this(dataType);
         this.requestItems.addAll(requestItems);
     }
@@ -57,7 +58,7 @@ public class CheckedBulkPlcWriteRequest<T> extends BulkPlcWriteRequest {
         if (writeRequestItem.getDatatype() != datatype) {
             throw new IllegalArgumentException("Incompatible datatype " + writeRequestItem.getDatatype());
         }
-        requestItems.add((WriteRequestItem<T>) writeRequestItem);
+        super.addItem(writeRequestItem);
     }
 
     public List<WriteRequestItem<T>> getCheckedRequestItems() {
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteResponse.java
similarity index 75%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteResponse.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteResponse.java
index e1f36e4..91ca855 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedPlcWriteResponse.java
@@ -18,22 +18,24 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 
 import java.util.List;
 
-public class CheckedBulkPlcWriteResponse<T> extends BulkPlcWriteResponse {
+public class CheckedPlcWriteResponse<T> extends PlcWriteResponse {
 
-    private final CheckedBulkPlcWriteRequest<T> request;
+    private final CheckedPlcWriteRequest<T> request;
     private final List<WriteResponseItem<T>> responseItems;
 
-    public CheckedBulkPlcWriteResponse(CheckedBulkPlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
+    public CheckedPlcWriteResponse(CheckedPlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
         super(null, null);
         this.request = request;
         this.responseItems = responseItems;
     }
 
-    public BulkPlcWriteRequest getRequest() {
+    public PlcWriteRequest getRequest() {
         return request;
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
index d490bd7..7f5e4bc 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
@@ -25,7 +25,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcReadRequest<T> extends CheckedBulkPlcReadRequest<T> {
+public class SinglePlcReadRequest<T> extends CheckedPlcReadRequest<T> {
 
     private ReadRequestItem<T> requestItem;
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
index 24acb1c..0b985ed 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
@@ -24,7 +24,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcReadResponse<T> extends CheckedBulkPlcReadResponse<T> {
+public class SinglePlcReadResponse<T> extends CheckedPlcReadResponse<T> {
 
     private final SinglePlcReadRequest<T> request;
     private final ReadResponseItem<T> responseItem;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
index 4ffafcc..d0d5085 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
@@ -25,7 +25,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcWriteRequest<T> extends CheckedBulkPlcWriteRequest<T> {
+public class SinglePlcWriteRequest<T> extends CheckedPlcWriteRequest<T> {
 
     private WriteRequestItem<T> requestItem;
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
index 7b7abe1..28e2310 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
@@ -24,7 +24,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class SinglePlcWriteResponse<T> extends CheckedBulkPlcWriteResponse<T> {
+public class SinglePlcWriteResponse<T> extends CheckedPlcWriteResponse<T> {
 
     private final SinglePlcWriteRequest<T> request;
     private final WriteResponseItem<T> responseItem;
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
index 1ea3e8a..a623c81 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
@@ -145,13 +145,13 @@ class APIMessageTests {
     @Test
     @Tag("fast")
     void plcReadResponse() {
-        BulkPlcReadRequest plcReadRequest = new BulkPlcReadRequest();
+        PlcReadRequest plcReadRequest = new PlcReadRequest();
         List<ReadResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
         ReadResponseItem<Byte> readResponseItem = new ReadResponseItem<>(readRequestItem, ResponseCode.OK, Collections.emptyList());
         responseItems.add(readResponseItem);
-        PlcReadResponse plcReadResponse = new BulkPlcReadResponse(plcReadRequest, responseItems);
+        PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
         assertTrue(plcReadResponse.getRequest().getNumberOfItems() == 0, "Unexpected number of response items");
         assertTrue(plcReadResponse.getRequest().equals(plcReadRequest), "Unexpected read request");
         assertTrue(plcReadResponse.getResponseItems().size() == 1, "Unexpected number of response items");
@@ -193,13 +193,13 @@ class APIMessageTests {
     @Test
     @Tag("fast")
     void plcWriteResponse() {
-        BulkPlcWriteRequest plcWriteRequest = new BulkPlcWriteRequest();
+        PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
         List<WriteResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 1);
         WriteResponseItem<Byte> writeResponseItem = new WriteResponseItem<>(writeRequestItem, ResponseCode.OK);
         responseItems.add(writeResponseItem);
-        PlcWriteResponse plcReadResponse = new BulkPlcWriteResponse(plcWriteRequest, responseItems);
+        PlcWriteResponse plcReadResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
         assertTrue(plcReadResponse.getRequest().getNumberOfItems() == 0, "Unexpected number of response items");
         assertTrue(plcReadResponse.getRequest().equals(plcWriteRequest), "Unexpected read request");
         assertTrue(plcReadResponse.getResponseItems().size() == 1, "Unexpected number of response items");
@@ -209,7 +209,7 @@ class APIMessageTests {
     @Test
     @Tag("fast")
     void bulkPlcWriteResponseGetValue() {
-        BulkPlcWriteRequest plcWriteRequest = new BulkPlcWriteRequest();
+        PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
         List<WriteResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         WriteRequestItem<Byte> writeRequestItem1 = new WriteRequestItem<>(Byte.class, address, (byte) 1);
@@ -218,7 +218,7 @@ class APIMessageTests {
         WriteResponseItem<Byte> writeResponseItem2 = new WriteResponseItem<>(writeRequestItem2, ResponseCode.OK);
         responseItems.add(writeResponseItem1);
         responseItems.add(writeResponseItem2);
-        BulkPlcWriteResponse plcWriteResponse = new BulkPlcWriteResponse(plcWriteRequest, responseItems);
+        PlcWriteResponse plcWriteResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
         Optional<WriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(writeRequestItem1);
         Optional<WriteResponseItem<Byte>> responseValue2 = plcWriteResponse.getValue(writeRequestItem2);
         assertEquals(Optional.of(writeResponseItem1), responseValue1, "Unexpected items in response items");
@@ -227,12 +227,12 @@ class APIMessageTests {
 
     @Test
     @Tag("fast")
-    void nonExistingItemBulkPlcWriteResponseGetValue() {
-        BulkPlcWriteRequest plcWriteRequest = new BulkPlcWriteRequest();
+    void nonExistingItemPlcWriteResponseGetValue() {
+        PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
         List<WriteResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         WriteRequestItem<Byte> nonExistingWriteRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 1);
-        BulkPlcWriteResponse plcWriteResponse = new BulkPlcWriteResponse(plcWriteRequest, responseItems);
+        PlcWriteResponse plcWriteResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
         Optional<WriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(nonExistingWriteRequestItem);
         assertEquals(Optional.empty(), responseValue1, "Unexpected items in response items");
     }
@@ -240,7 +240,7 @@ class APIMessageTests {
     @Test
     @Tag("fast")
     void bulkPlcReadResponseGetValue() {
-        BulkPlcReadRequest plcReadRequest = new BulkPlcReadRequest();
+        PlcReadRequest plcReadRequest = new PlcReadRequest();
         List<ReadResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> readRequestItem1 = new ReadRequestItem<>(Byte.class, address, 1);
@@ -249,7 +249,7 @@ class APIMessageTests {
         ReadResponseItem<Byte> readResponseItem2 = new ReadResponseItem<>(readRequestItem2, ResponseCode.OK, Collections.emptyList());
         responseItems.add(readResponseItem1);
         responseItems.add(readResponseItem2);
-        BulkPlcReadResponse plcReadResponse = new BulkPlcReadResponse(plcReadRequest, responseItems);
+        PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
         Optional<ReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(readRequestItem1);
         Optional<ReadResponseItem<Byte>> responseValue2 = plcReadResponse.getValue(readRequestItem2);
         assertEquals(Optional.of(readResponseItem1), responseValue1, "Unexpected items in response items");
@@ -258,12 +258,12 @@ class APIMessageTests {
 
     @Test
     @Tag("fast")
-    void nonExistingItemBulkPlcReadResponseGetValue() {
-        BulkPlcReadRequest plcReadRequest = new BulkPlcReadRequest();
+    void nonExistingItemPlcReadResponseGetValue() {
+        PlcReadRequest plcReadRequest = new PlcReadRequest();
         List<ReadResponseItem<?>> responseItems = new ArrayList<>();
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> nonExistingReadRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
-        BulkPlcReadResponse plcReadResponse = new BulkPlcReadResponse(plcReadRequest, responseItems);
+        PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
         Optional<ReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(nonExistingReadRequestItem);
         assertEquals(Optional.empty(), responseValue1, "Unexpected items in response items");
     }
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 f8ccf3d..0abdb47 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
@@ -22,10 +22,7 @@ import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.MessageToMessageCodec;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcRequestContainer;
-import org.apache.plc4x.java.api.messages.PlcResponse;
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
@@ -179,8 +176,8 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                     }
                     if (plcReadRequest instanceof SinglePlcReadRequest) {
                         response = new SinglePlcReadResponse((SinglePlcReadRequest) plcReadRequest, responseItems.isEmpty() ? null : responseItems.get(0));
-                    } else if (plcReadRequest instanceof BulkPlcReadRequest) {
-                        response = new BulkPlcReadResponse((BulkPlcReadRequest) plcReadRequest, responseItems);
+                    } else if (plcReadRequest instanceof PlcReadRequest) {
+                        response = new PlcReadResponse(plcReadRequest, responseItems);
                     } else {
                         response = null;
                     }
@@ -213,8 +210,8 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                         responseItems.add(responseItem);
                     }
 
-                    if (plcWriteRequest instanceof BulkPlcWriteRequest) {
-                        response = new BulkPlcWriteResponse((BulkPlcWriteRequest) plcWriteRequest, responseItems);
+                    if (plcWriteRequest instanceof PlcWriteRequest) {
+                        response = new PlcWriteResponse(plcWriteRequest, responseItems);
                     } else if (plcWriteRequest instanceof SinglePlcWriteRequest) {
                         response = new SinglePlcWriteResponse((SinglePlcWriteRequest) plcWriteRequest, responseItems.isEmpty() ? null : responseItems.get(0));
                     } else {

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 03/12: deprecated BulkPlc*

Posted by sr...@apache.org.
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

commit a643675efefb8c0c29195a7c419e7b6ae601902e
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 12:16:29 2018 +0100

    deprecated BulkPlc*
---
 .../plc4x/java/api/messages/PlcReadRequest.java    | 39 ++++++++++++++++++----
 .../plc4x/java/api/messages/PlcReadResponse.java   | 29 +++++++++++-----
 .../plc4x/java/api/messages/PlcWriteRequest.java   | 34 +++++++++++++++----
 .../plc4x/java/api/messages/PlcWriteResponse.java  | 31 ++++++++++++-----
 .../api/messages/specific/BulkPlcReadRequest.java  | 28 +++++-----------
 .../api/messages/specific/BulkPlcReadResponse.java | 25 +++++---------
 .../api/messages/specific/BulkPlcWriteRequest.java | 24 ++++---------
 .../messages/specific/BulkPlcWriteResponse.java    | 24 +++++--------
 .../specific/CheckedBulkPlcReadRequest.java        |  9 +++--
 .../specific/CheckedBulkPlcWriteRequest.java       | 13 ++++++--
 .../messages/specific/SinglePlcReadRequest.java    |  7 +++-
 .../messages/specific/SinglePlcWriteRequest.java   |  8 +++--
 12 files changed, 163 insertions(+), 108 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
index 8b06790..2dae36a 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
@@ -28,12 +28,37 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
 
-public interface PlcReadRequest extends PlcRequest {
-    void addItem(ReadRequestItem<?> readRequestItem);
+public class PlcReadRequest implements PlcRequest {
 
-    List<? extends ReadRequestItem<?>> getReadRequestItems();
+    private final List<ReadRequestItem<?>> readRequestItems;
 
-    default Optional<? extends ReadRequestItem<?>> getRequestItem() {
+    public PlcReadRequest() {
+        this.readRequestItems = new LinkedList<>();
+    }
+
+    public PlcReadRequest(Class<?> dataType, Address address) {
+        this();
+        addItem(new ReadRequestItem<>(dataType, address));
+    }
+
+    public PlcReadRequest(Class<?> dataType, Address address, int size) {
+        this();
+        addItem(new ReadRequestItem<>(dataType, address, size));
+    }
+
+    public PlcReadRequest(List<ReadRequestItem<?>> readRequestItems) {
+        this.readRequestItems = readRequestItems;
+    }
+
+    public void addItem(ReadRequestItem<?> readRequestItem) {
+        getReadRequestItems().add(readRequestItem);
+    }
+
+    public List<ReadRequestItem<?>> getReadRequestItems() {
+        return readRequestItems;
+    }
+
+    public Optional<? extends ReadRequestItem<?>> getRequestItem() {
         if (getNumberOfItems() > 1) {
             throw new IllegalStateException("too many items " + getNumberOfItems());
         }
@@ -43,15 +68,15 @@ public interface PlcReadRequest extends PlcRequest {
         return Optional.<ReadRequestItem<?>>of(getReadRequestItems().get(0));
     }
 
-    default int getNumberOfItems() {
+    public int getNumberOfItems() {
         return getReadRequestItems().size();
     }
 
-    static Builder builder() {
+    public static Builder builder() {
         return new Builder();
     }
 
-    class Builder {
+    public static class Builder {
 
         private Class firstType;
 
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 6dc3738..7224365 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
@@ -24,12 +24,25 @@ import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import java.util.List;
 import java.util.Optional;
 
-public interface PlcReadResponse extends PlcResponse {
-    PlcReadRequest getRequest();
+public class PlcReadResponse implements PlcResponse {
 
-    List<? extends ReadResponseItem<?>> getResponseItems();
+    private final PlcReadRequest request;
+    private final List<ReadResponseItem<?>> responseItems;
 
-    default Optional<? extends ReadResponseItem<?>> getResponseItem() {
+    public PlcReadResponse(PlcReadRequest request, List<ReadResponseItem<?>> responseItems) {
+        this.request = request;
+        this.responseItems = responseItems;
+    }
+
+    public PlcReadRequest getRequest() {
+        return request;
+    }
+
+    public List<? extends ReadResponseItem<?>> getResponseItems() {
+        return responseItems;
+    }
+
+    public Optional<? extends ReadResponseItem<?>> getResponseItem() {
         if (isMultiValue()) {
             throw new IllegalStateException("too many items " + getNumberOfItems());
         }
@@ -39,20 +52,20 @@ public interface PlcReadResponse extends PlcResponse {
         return Optional.<ReadResponseItem<?>>of(getResponseItems().get(0));
     }
 
-    default int getNumberOfItems() {
+    public int getNumberOfItems() {
         return getResponseItems().size();
     }
 
-    default boolean isMultiValue() {
+    public boolean isMultiValue() {
         return getNumberOfItems() > 1;
     }
 
-    default boolean isEmpty() {
+    public boolean isEmpty() {
         return getNumberOfItems() < 1;
     }
 
     @SuppressWarnings("unchecked")
-    default <T> Optional<ReadResponseItem<T>> getValue(ReadRequestItem<T> item) {
+    public <T> Optional<ReadResponseItem<T>> getValue(ReadRequestItem<T> item) {
         return getResponseItems().stream()
             .filter(x -> x.getRequestItem().equals(item))
             .map(e -> (ReadResponseItem<T>) e)
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index 1a6c082..4b8198d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -28,12 +28,32 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
 
-public interface PlcWriteRequest extends PlcRequest {
-    void addItem(WriteRequestItem<?> writeRequestItem);
+public class PlcWriteRequest implements PlcRequest {
 
-    List<? extends WriteRequestItem<?>> getRequestItems();
+    private final List<WriteRequestItem<?>> requestItems;
 
-    default Optional<? extends WriteRequestItem<?>> getRequestItem() {
+    public PlcWriteRequest() {
+        this.requestItems = new LinkedList<>();
+    }
+
+    public <T> PlcWriteRequest(Class<T> dataType, Address address, T... values) {
+        this();
+        addItem(new WriteRequestItem<>(dataType, address, values));
+    }
+
+    public PlcWriteRequest(List<WriteRequestItem<?>> requestItems) {
+        this.requestItems = requestItems;
+    }
+
+    public void addItem(WriteRequestItem<?> requestItem) {
+        getRequestItems().add(requestItem);
+    }
+
+    public List<WriteRequestItem<?>> getRequestItems() {
+        return requestItems;
+    }
+
+    public Optional<? extends WriteRequestItem<?>> getRequestItem() {
         if (getNumberOfItems() > 1) {
             throw new IllegalStateException("too many items " + getNumberOfItems());
         }
@@ -43,15 +63,15 @@ public interface PlcWriteRequest extends PlcRequest {
         return Optional.<WriteRequestItem<?>>of(getRequestItems().get(0));
     }
 
-    default int getNumberOfItems() {
+    public int getNumberOfItems() {
         return getRequestItems().size();
     }
 
-    static PlcWriteRequest.Builder builder() {
+    public static PlcWriteRequest.Builder builder() {
         return new Builder();
     }
 
-    class Builder {
+    public static class Builder {
 
         private Class firstType;
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
index 9d69150..a73e9a2 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
@@ -20,16 +20,31 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import org.apache.plc4x.java.api.messages.specific.BulkPlcWriteRequest;
 
 import java.util.List;
 import java.util.Optional;
 
-public interface PlcWriteResponse extends PlcResponse {
-    PlcWriteRequest getRequest();
+public class PlcWriteResponse implements PlcResponse {
 
-    List<? extends WriteResponseItem<?>> getResponseItems();
+    private final PlcWriteRequest request;
 
-    default Optional<? extends WriteResponseItem<?>> getResponseItem() {
+    private final List<WriteResponseItem<?>> responseItems;
+
+    public PlcWriteResponse(PlcWriteRequest request, List<WriteResponseItem<?>> responseItems) {
+        this.request = request;
+        this.responseItems = responseItems;
+    }
+
+    public PlcWriteRequest getRequest() {
+        return request;
+    }
+
+    public List<? extends WriteResponseItem<?>> getResponseItems() {
+        return responseItems;
+    }
+
+    public Optional<? extends WriteResponseItem<?>> getResponseItem() {
         if (isMultiValue()) {
             throw new IllegalStateException("too many items " + getNumberOfItems());
         }
@@ -39,20 +54,20 @@ public interface PlcWriteResponse extends PlcResponse {
         return Optional.<WriteResponseItem<?>>of(getResponseItems().get(0));
     }
 
-    default int getNumberOfItems() {
+    public int getNumberOfItems() {
         return getResponseItems().size();
     }
 
-    default boolean isMultiValue() {
+    public boolean isMultiValue() {
         return getNumberOfItems() > 1;
     }
 
-    default boolean isEmpty() {
+    public boolean isEmpty() {
         return getNumberOfItems() < 1;
     }
 
     @SuppressWarnings("unchecked")
-    default <T> Optional<WriteResponseItem<T>> getValue(WriteRequestItem<T> item) {
+    public <T> Optional<WriteResponseItem<T>> getValue(WriteRequestItem<T> item) {
         return getResponseItems().stream()
             .filter(x -> x.getRequestItem().equals(item))
             .map(e -> (WriteResponseItem<T>) e)
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadRequest.java
index 47c7f39..6efbad1 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadRequest.java
@@ -22,37 +22,25 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
-import java.util.LinkedList;
 import java.util.List;
 
-public class BulkPlcReadRequest implements PlcReadRequest {
-
-    private final List<ReadRequestItem<?>> readRequestItems;
-
+/**
+ * @deprecated just use {@link PlcReadRequest}
+ */
+@Deprecated
+public class BulkPlcReadRequest extends PlcReadRequest {
     public BulkPlcReadRequest() {
-        this.readRequestItems = new LinkedList<>();
     }
 
     public BulkPlcReadRequest(Class<?> dataType, Address address) {
-        this();
-        addItem(new ReadRequestItem<>(dataType, address));
+        super(dataType, address);
     }
 
     public BulkPlcReadRequest(Class<?> dataType, Address address, int size) {
-        this();
-        addItem(new ReadRequestItem<>(dataType, address, size));
+        super(dataType, address, size);
     }
 
     public BulkPlcReadRequest(List<ReadRequestItem<?>> readRequestItems) {
-        this.readRequestItems = readRequestItems;
-    }
-
-    public void addItem(ReadRequestItem<?> readRequestItem) {
-        readRequestItems.add(readRequestItem);
+        super(readRequestItems);
     }
-
-    public List<? extends ReadRequestItem<?>> getReadRequestItems() {
-        return readRequestItems;
-    }
-
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadResponse.java
index 00458a7..777b618 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcReadResponse.java
@@ -26,22 +26,13 @@ import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import java.util.List;
 import java.util.Optional;
 
-public class BulkPlcReadResponse implements PlcReadResponse {
-
-    private final BulkPlcReadRequest request;
-    private final List<ReadResponseItem<?>> responseItems;
-
-    public BulkPlcReadResponse(BulkPlcReadRequest request, List<ReadResponseItem<?>> responseItems) {
-        this.request = request;
-        this.responseItems = responseItems;
-    }
-
-    public PlcReadRequest getRequest() {
-        return request;
+/**
+ * @deprecated just use {@link PlcReadResponse}
+ */
+@Deprecated
+public class BulkPlcReadResponse extends PlcReadResponse {
+
+    public BulkPlcReadResponse(PlcReadRequest request, List<ReadResponseItem<?>> responseItems) {
+        super(request, responseItems);
     }
-
-    public List<? extends ReadResponseItem<?>> getResponseItems() {
-        return responseItems;
-    }
-
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteRequest.java
index 9ffe97c..eef9c52 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteRequest.java
@@ -22,32 +22,22 @@ import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
-import java.util.LinkedList;
 import java.util.List;
 
-public class BulkPlcWriteRequest implements PlcWriteRequest {
-
-    private final List<WriteRequestItem<?>> requestItems;
+/**
+ * @deprecated just use {@link PlcWriteRequest}
+ */
+@Deprecated
+public class BulkPlcWriteRequest extends PlcWriteRequest {
 
     public BulkPlcWriteRequest() {
-        this.requestItems = new LinkedList<>();
     }
 
     public <T> BulkPlcWriteRequest(Class<T> dataType, Address address, T... values) {
-        this();
-        addItem(new WriteRequestItem<>(dataType, address, values));
+        super(dataType, address, values);
     }
 
     public BulkPlcWriteRequest(List<WriteRequestItem<?>> requestItems) {
-        this.requestItems = requestItems;
-    }
-
-    public void addItem(WriteRequestItem<?> requestItem) {
-        requestItems.add(requestItem);
+        super(requestItems);
     }
-
-    public List<? extends WriteRequestItem<?>> getRequestItems() {
-        return requestItems;
-    }
-
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteResponse.java
index 3af5c33..f603de5 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/BulkPlcWriteResponse.java
@@ -18,27 +18,19 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 
 import java.util.List;
 
-public class BulkPlcWriteResponse implements PlcWriteResponse {
+/**
+ * @deprecated just use {@link PlcWriteResponse}
+ */
+@Deprecated
+public class BulkPlcWriteResponse extends PlcWriteResponse {
 
-    private final BulkPlcWriteRequest request;
-    private final List<WriteResponseItem<?>> responseItems;
-
-    public BulkPlcWriteResponse(BulkPlcWriteRequest request, List<WriteResponseItem<?>> responseItems) {
-        this.request = request;
-        this.responseItems = responseItems;
-    }
-
-    public BulkPlcWriteRequest getRequest() {
-        return request;
+    public BulkPlcWriteResponse(PlcWriteRequest request, List<WriteResponseItem<?>> responseItems) {
+        super(request, responseItems);
     }
-
-    public List<? extends WriteResponseItem<?>> getResponseItems() {
-        return responseItems;
-    }
-
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
index 9fd1d90..a4ff019 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcReadRequest.java
@@ -46,7 +46,7 @@ public class CheckedBulkPlcReadRequest<T> extends BulkPlcReadRequest {
     }
 
     public void addCheckedItem(ReadRequestItem<T> readRequestItem) {
-        readRequestItems.add(readRequestItem);
+        addItem(readRequestItem);
     }
 
     @SuppressWarnings("unchecked")
@@ -60,8 +60,13 @@ public class CheckedBulkPlcReadRequest<T> extends BulkPlcReadRequest {
         readRequestItems.add((ReadRequestItem<T>) readRequestItem);
     }
 
-    public List<? extends ReadRequestItem<T>> getReadRequestItems() {
+    public List<ReadRequestItem<T>> getCheckedReadRequestItems() {
         return readRequestItems;
     }
 
+    @SuppressWarnings("unchecked")
+    public List<ReadRequestItem<?>> getReadRequestItems() {
+        return (List) getCheckedReadRequestItems();
+    }
+
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
index 32009de..0643832 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/CheckedBulkPlcWriteRequest.java
@@ -45,6 +45,10 @@ public class CheckedBulkPlcWriteRequest<T> extends BulkPlcWriteRequest {
         this.requestItems.addAll(requestItems);
     }
 
+    public void addCheckedItem(WriteRequestItem<T> writeRequestItem) {
+        addItem(writeRequestItem);
+    }
+
     @SuppressWarnings("unchecked")
     public void addItem(WriteRequestItem<?> writeRequestItem) {
         if (writeRequestItem == null) {
@@ -56,11 +60,14 @@ public class CheckedBulkPlcWriteRequest<T> extends BulkPlcWriteRequest {
         requestItems.add((WriteRequestItem<T>) writeRequestItem);
     }
 
-    public List<? extends WriteRequestItem<?>> getRequestItems() {
+    public List<WriteRequestItem<T>> getCheckedRequestItems() {
         return requestItems;
     }
 
-    public int getNumberOfItems() {
-        return requestItems.size();
+    @SuppressWarnings("unchecked")
+    @Override
+    public List<WriteRequestItem<?>> getRequestItems() {
+        return (List) getCheckedRequestItems();
     }
+
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
index 8c03128..d490bd7 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
@@ -58,10 +58,15 @@ public class SinglePlcReadRequest<T> extends CheckedBulkPlcReadRequest<T> {
     }
 
     @Override
-    public List<ReadRequestItem<T>> getReadRequestItems() {
+    public List<ReadRequestItem<T>> getCheckedReadRequestItems() {
         return requestItem != null ? Collections.singletonList(requestItem) : Collections.emptyList();
     }
 
+    @Override
+    public List<ReadRequestItem<?>> getReadRequestItems() {
+        return (List) getCheckedReadRequestItems();
+    }
+
     public Optional<ReadRequestItem<T>> getRequestItem() {
         return Optional.of(requestItem);
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
index 4da59b7..4ffafcc 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
@@ -52,11 +52,15 @@ public class SinglePlcWriteRequest<T> extends CheckedBulkPlcWriteRequest<T> {
         this.requestItem = (WriteRequestItem<T>) requestItem;
     }
 
-    @Override
-    public List<WriteRequestItem<T>> getRequestItems() {
+    public List<WriteRequestItem<T>> getCheckedRequestItems() {
         return (requestItem != null) ? Collections.singletonList(requestItem) : Collections.emptyList();
     }
 
+    @Override
+    public List<WriteRequestItem<?>> getRequestItems() {
+        return (List) getCheckedRequestItems();
+    }
+
     public Optional<WriteRequestItem<T>> getRequestItem() {
         return Optional.ofNullable(requestItem);
     }

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 08/12: implement actual typesafety into TypeSafePlc*

Posted by sr...@apache.org.
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

commit 9504a16cf17caf30bce9c16e4ce68546556cebe9
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 14:57:00 2018 +0100

    implement actual typesafety into TypeSafePlc*
---
 .../plc4x/java/api/connection/PlcReader.java       |  5 +--
 .../plc4x/java/api/connection/PlcWriter.java       |  3 +-
 .../plc4x/java/api/messages/PlcReadResponse.java   |  5 +--
 .../plc4x/java/api/messages/PlcWriteResponse.java  |  4 +--
 .../messages/specific/TypeSafePlcReadRequest.java  | 31 +++++++++++++-----
 .../messages/specific/TypeSafePlcReadResponse.java | 38 ++++++++++++++++++----
 .../messages/specific/TypeSafePlcWriteRequest.java | 22 ++++++++-----
 .../specific/TypeSafePlcWriteResponse.java         | 11 ++++---
 8 files changed, 84 insertions(+), 35 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
index 339540c..ecc0fa3 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 
 /**
@@ -45,9 +46,9 @@ public interface PlcReader {
      * @param <T>         type that is being requested.
      * @return a {@link CompletableFuture} giving async access to the returned value.
      */
-    @SuppressWarnings("unchecked")
     default <T> CompletableFuture<TypeSafePlcReadResponse<T>> read(TypeSafePlcReadRequest<T> readRequest) {
-        return (CompletableFuture<TypeSafePlcReadResponse<T>>) read((PlcReadRequest) readRequest);
+        Objects.requireNonNull(readRequest);
+        return read((PlcReadRequest) readRequest).thenApply(TypeSafePlcReadResponse::new);
     }
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
index cf1140a..adb81a4 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 
@@ -48,7 +49,7 @@ public interface PlcWriter {
      */
     @SuppressWarnings("unchecked")
     default <T> CompletableFuture<TypeSafePlcWriteResponse<T>> write(TypeSafePlcWriteRequest<T> writeRequest) {
-        return (CompletableFuture<TypeSafePlcWriteResponse<T>>) write((PlcWriteRequest) writeRequest);
+        return write((PlcWriteRequest) writeRequest).thenApply(TypeSafePlcWriteResponse::new);
     }
 
 }
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 2bfd942..c0cd8c4 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
@@ -28,14 +28,15 @@ import java.util.Optional;
 public class PlcReadResponse implements PlcResponse {
 
     private final PlcReadRequest request;
-    private final List<ReadResponseItem<?>> responseItems;
+
+    private final List<? extends ReadResponseItem<?>> responseItems;
 
     public PlcReadResponse(PlcReadRequest request, ReadResponseItem<?> responseItems) {
         this.request = request;
         this.responseItems = Collections.singletonList(responseItems);
     }
 
-    public PlcReadResponse(PlcReadRequest request, List<ReadResponseItem<?>> responseItems) {
+    public PlcReadResponse(PlcReadRequest request, List<? extends ReadResponseItem<?>> responseItems) {
         this.request = request;
         this.responseItems = responseItems;
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
index 1bc7b83..ac80b78 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
@@ -29,14 +29,14 @@ public class PlcWriteResponse implements PlcResponse {
 
     private final PlcWriteRequest request;
 
-    private final List<WriteResponseItem<?>> responseItems;
+    private final List<? extends WriteResponseItem<?>> responseItems;
 
     public PlcWriteResponse(PlcWriteRequest request, WriteResponseItem<?> responseItem) {
         this.request = request;
         this.responseItems = Collections.singletonList(responseItem);
     }
 
-    public PlcWriteResponse(PlcWriteRequest request, List<WriteResponseItem<?>> responseItems) {
+    public PlcWriteResponse(PlcWriteRequest request, List<? extends WriteResponseItem<?>> responseItems) {
         this.request = request;
         this.responseItems = responseItems;
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
index 9739022..5c21a07 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
@@ -23,18 +23,22 @@ import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
 public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
 
-    private Class<T> datatype;
+    private Class<T> dataType;
 
     public TypeSafePlcReadRequest(Class<T> dataType) {
-        this.datatype = dataType;
+        this.dataType = dataType;
     }
 
-    public TypeSafePlcReadRequest(Class<T> dataType, ReadRequestItem<T> readRequestItem) {
+    public TypeSafePlcReadRequest(Class<T> dataType, PlcReadRequest plcReadRequest) {
         this(dataType);
+        for (ReadRequestItem<?> readRequestItem : plcReadRequest.getRequestItems()) {
+            addItem(readRequestItem);
+        }
     }
 
     public TypeSafePlcReadRequest(Class<T> dataType, Address address) {
@@ -47,13 +51,18 @@ public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
         addItem(new ReadRequestItem<>(dataType, address, size));
     }
 
-    @SuppressWarnings("unchecked")
-    public void addItem(ReadRequestItem<?> readRequestItem) {
-        if (readRequestItem == null) {
-            return;
+    public TypeSafePlcReadRequest(Class<T> dataType, ReadRequestItem<T>... requestItems) {
+        this(dataType);
+        Objects.requireNonNull(requestItems);
+        for (ReadRequestItem<T> readRequestItem : requestItems) {
+            addItem(readRequestItem);
         }
-        if (readRequestItem.getDatatype() != datatype) {
-            throw new IllegalArgumentException("Incompatible datatype " + readRequestItem.getDatatype());
+    }
+
+    public void addItem(ReadRequestItem<?> readRequestItem) {
+        Objects.requireNonNull(readRequestItem);
+        if (readRequestItem.getDatatype() != dataType) {
+            throw new IllegalArgumentException("Unexpected data type " + readRequestItem.getDatatype() + " on readRequestItem. Expected " + dataType);
         }
         super.addItem(readRequestItem);
     }
@@ -68,4 +77,8 @@ public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
     public Optional<ReadRequestItem<T>> getRequestItem() {
         return (Optional<ReadRequestItem<T>>) super.getRequestItem();
     }
+
+    public Class<T> getDataType() {
+        return dataType;
+    }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
index f76271a..616d581 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
@@ -26,15 +26,33 @@ import java.util.Optional;
 
 public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
 
+    public TypeSafePlcReadResponse(PlcReadResponse plcReadResponse) {
+        super(plcReadResponse.getRequest(), plcReadResponse.getResponseItems());
+        List<? extends ReadResponseItem<?>> responseItems = plcReadResponse.getResponseItems();
+        Class type = null;
+        for (ReadResponseItem<?> responseItem : responseItems) {
+            if (responseItem.getValues().size() > 0) {
+                type = responseItem.getValues().get(0).getClass();
+                break;
+            }
+        }
+        if (type != null) {
+            for (ReadResponseItem<?> responseItem : responseItems) {
+                checkList(responseItem.getValues(), type);
+            }
+        }
+    }
+
     public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, ReadResponseItem<T> responseItem) {
-        // TODO: use checked list.
         super(request, responseItem);
+        checkList(responseItem.getValues(), request.getDataType());
     }
 
-    @SuppressWarnings("unchecked")
     public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, List<ReadResponseItem<T>> responseItems) {
-        // TODO: use checked list.
-        super(request, (List) responseItems);
+        super(request, responseItems);
+        for (ReadResponseItem<T> responseItem : responseItems) {
+            checkList(responseItem.getValues(), request.getDataType());
+        }
     }
 
     @SuppressWarnings("unchecked")
@@ -43,8 +61,8 @@ public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
     }
 
     @SuppressWarnings("unchecked")
-    public List<ReadResponseItem<T>> getResponseItems() {
-        return (List<ReadResponseItem<T>>) super.getResponseItems();
+    public List<? extends ReadResponseItem<T>> getResponseItems() {
+        return (List<? extends ReadResponseItem<T>>) super.getResponseItems();
     }
 
     @SuppressWarnings("unchecked")
@@ -52,4 +70,12 @@ public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
     public Optional<ReadResponseItem<T>> getResponseItem() {
         return (Optional<ReadResponseItem<T>>) super.getResponseItem();
     }
+
+    private static void checkList(List<?> list, Class<?> type) {
+        for (Object o : list) {
+            if (!type.isAssignableFrom(o.getClass())) {
+                throw new IllegalArgumentException("Unexpected data type " + o.getClass() + " on readRequestItem. Expected " + type);
+            }
+        }
+    }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
index 2ebf88f..b05e500 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
 public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
@@ -33,26 +34,29 @@ public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
         this.datatype = type;
     }
 
-    public TypeSafePlcWriteRequest(Class<T> dataType, Address address, T... values) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, PlcWriteRequest plcWriteRequest) {
         this(dataType);
-        addItem(new WriteRequestItem<>(dataType, address, values));
+        for (WriteRequestItem<?> WriteRequestItem : plcWriteRequest.getRequestItems()) {
+            addItem(WriteRequestItem);
+        }
     }
 
-    public TypeSafePlcWriteRequest(Class<T> dataType, WriteRequestItem<T> requestItem) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, Address address, T... values) {
         this(dataType);
-        this.getRequestItems().add(requestItem);
+        addItem(new WriteRequestItem<>(dataType, address, values));
     }
 
-    public TypeSafePlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, WriteRequestItem<T>... requestItems) {
         this(dataType);
-        this.getRequestItems().addAll(requestItems);
+        Objects.requireNonNull(requestItems);
+        for (WriteRequestItem<T> requestItem : requestItems) {
+            getRequestItems().add(requestItem);
+        }
     }
 
     @SuppressWarnings("unchecked")
     public void addItem(WriteRequestItem<?> writeRequestItem) {
-        if (writeRequestItem == null) {
-            return;
-        }
+        Objects.requireNonNull(writeRequestItem);
         if (writeRequestItem.getDatatype() != datatype) {
             throw new IllegalArgumentException("Incompatible datatype " + writeRequestItem.getDatatype());
         }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
index fa485cf..b02cd0b 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
@@ -26,22 +26,25 @@ import java.util.Optional;
 
 public class TypeSafePlcWriteResponse<T> extends PlcWriteResponse {
 
+    public TypeSafePlcWriteResponse(PlcWriteResponse plcWriteResponse) {
+        super(plcWriteResponse.getRequest(), plcWriteResponse.getResponseItems());
+    }
+
     public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, WriteResponseItem<T> responseItem) {
-        // TODO: use checked type.
         super(request, responseItem);
     }
 
     @SuppressWarnings("unchecked")
     public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
-        // TODO: use checked list.
-        super(request, (List) responseItems);
+        super(request, responseItems);
     }
 
     public TypeSafePlcWriteRequest<T> getRequest() {
         return (TypeSafePlcWriteRequest<T>) super.getRequest();
     }
 
-    public List<WriteResponseItem<T>> getResponseItems() {
+    @SuppressWarnings("unchecked")
+    public List<? extends WriteResponseItem<T>> getResponseItems() {
         return (List<WriteResponseItem<T>>) super.getResponseItems();
     }
 

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 10/12: added missing Objects.requireNonNull assertion

Posted by sr...@apache.org.
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

commit be5fec1401673181dd812956b6dbbf106d02a237
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 15:24:16 2018 +0100

    added missing Objects.requireNonNull assertion
---
 .../src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java   | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
index adb81a4..cfc6257 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
@@ -25,6 +25,7 @@ import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 
 /**
@@ -49,6 +50,7 @@ public interface PlcWriter {
      */
     @SuppressWarnings("unchecked")
     default <T> CompletableFuture<TypeSafePlcWriteResponse<T>> write(TypeSafePlcWriteRequest<T> writeRequest) {
+        Objects.requireNonNull(writeRequest);
         return write((PlcWriteRequest) writeRequest).thenApply(TypeSafePlcWriteResponse::new);
     }
 

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 06/12: Deprecated SinglePlc*

Posted by sr...@apache.org.
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

commit c28c5ee0b5db5d31a2c896d1e2408a8bfa401c14
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 13:23:36 2018 +0100

    Deprecated SinglePlc*
---
 .../apache/plc4x/edgent/mock/MockConnection.java   |  2 +-
 .../plc4x/java/api/messages/PlcReadRequest.java    | 74 ++++++++++------------
 .../plc4x/java/api/messages/PlcReadResponse.java   |  6 ++
 .../plc4x/java/api/messages/PlcWriteRequest.java   | 47 ++++++--------
 .../plc4x/java/api/messages/PlcWriteResponse.java  |  6 ++
 .../messages/specific/SinglePlcReadRequest.java    | 56 +++-------------
 .../messages/specific/SinglePlcReadResponse.java   | 29 ++-------
 .../messages/specific/SinglePlcWriteRequest.java   | 50 ++++-----------
 .../messages/specific/SinglePlcWriteResponse.java  | 28 ++------
 .../messages/specific/TypeSafePlcReadRequest.java  | 26 ++++----
 .../messages/specific/TypeSafePlcReadResponse.java | 27 +++++---
 .../messages/specific/TypeSafePlcWriteRequest.java | 22 +++----
 .../specific/TypeSafePlcWriteResponse.java         | 25 +++++---
 .../plc4x/java/api/messages/APIMessageTests.java   | 19 +++---
 .../plc4x/java/s7/netty/Plc4XS7Protocol.java       |  6 +-
 15 files changed, 167 insertions(+), 256 deletions(-)

diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
index 29faf15..798c481 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
@@ -98,7 +98,7 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
             return cf;
         }
         List<ReadResponseItem<?>> responseItems = new LinkedList<>();
-        for (ReadRequestItem requestItem : readRequest.getReadRequestItems()) {
+        for (ReadRequestItem requestItem : readRequest.getRequestItems()) {
             ReadResponseItem responseItem = new ReadResponseItem(requestItem, ResponseCode.OK,
                 Collections.singletonList(getDataValue(requestItem.getAddress())));
             responseItems.add(responseItem);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
index 4714d6d..6821efa 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.LinkedList;
@@ -29,10 +28,15 @@ import java.util.Optional;
 
 public class PlcReadRequest implements PlcRequest {
 
-    private final List<ReadRequestItem<?>> readRequestItems;
+    private final List<ReadRequestItem<?>> requestItems;
 
     public PlcReadRequest() {
-        this.readRequestItems = new LinkedList<>();
+        this.requestItems = new LinkedList<>();
+    }
+
+    public PlcReadRequest(ReadRequestItem<?> requestItem) {
+        this();
+        requestItems.add(requestItem);
     }
 
     public PlcReadRequest(Class<?> dataType, Address address) {
@@ -45,30 +49,45 @@ public class PlcReadRequest implements PlcRequest {
         addItem(new ReadRequestItem<>(dataType, address, size));
     }
 
-    public PlcReadRequest(List<ReadRequestItem<?>> readRequestItems) {
-        this.readRequestItems = readRequestItems;
+    public PlcReadRequest(List<ReadRequestItem<?>> requestItems) {
+        this.requestItems = requestItems;
     }
 
     public void addItem(ReadRequestItem<?> readRequestItem) {
-        getReadRequestItems().add(readRequestItem);
+        getRequestItems().add(readRequestItem);
     }
 
-    public List<ReadRequestItem<?>> getReadRequestItems() {
-        return readRequestItems;
+    public List<ReadRequestItem<?>> getRequestItems() {
+        return requestItems;
     }
 
     public Optional<? extends ReadRequestItem<?>> getRequestItem() {
-        if (getNumberOfItems() > 1) {
+        if (isMultiValue()) {
             throw new IllegalStateException("too many items " + getNumberOfItems());
         }
-        if (getNumberOfItems() < 1) {
+        if (isEmpty()) {
             return Optional.empty();
         }
-        return Optional.<ReadRequestItem<?>>of(getReadRequestItems().get(0));
+        return Optional.<ReadRequestItem<?>>of(getRequestItems().get(0));
+    }
+
+    public void setRequestItem(ReadRequestItem<?> requestItem) {
+        if (isMultiValue()) {
+            throw new IllegalStateException("too many items " + getNumberOfItems());
+        }
+        addItem(requestItem);
     }
 
     public int getNumberOfItems() {
-        return getReadRequestItems().size();
+        return getRequestItems().size();
+    }
+
+    public boolean isMultiValue() {
+        return getNumberOfItems() > 1;
+    }
+
+    public boolean isEmpty() {
+        return getNumberOfItems() < 1;
     }
 
     public static Builder builder() {
@@ -83,13 +102,13 @@ public class PlcReadRequest implements PlcRequest {
 
         private List<ReadRequestItem> requests = new LinkedList<>();
 
-        public <T> Builder addItem(Class<T> dataType, Address address) {
+        public Builder addItem(Class<?> dataType, Address address) {
             checkType(dataType);
             requests.add(new ReadRequestItem<>(dataType, address));
             return this;
         }
 
-        public <T> Builder addItem(Class<T> dataType, Address address, int size) {
+        public Builder addItem(Class<?> dataType, Address address, int size) {
             checkType(dataType);
             requests.add(new ReadRequestItem<>(dataType, address, size));
             return this;
@@ -109,9 +128,6 @@ public class PlcReadRequest implements PlcRequest {
             if (requests.size() < 1) {
                 throw new IllegalStateException("No requests added");
             }
-            if (requests.size() < 2) {
-                return new SinglePlcReadRequest<>(requests.get(0));
-            }
             PlcReadRequest plcReadRequest;
             if (mixed) {
                 plcReadRequest = new PlcReadRequest();
@@ -125,29 +141,7 @@ public class PlcReadRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public PlcReadRequest buildBulk() {
-            if (requests.size() < 2) {
-                throw new IllegalStateException("Bulk request needs more than one request");
-            }
-            return build();
-        }
-
-        @SuppressWarnings("unchecked")
-        public <T> SinglePlcReadRequest<T> build(Class<T> type) {
-            if (requests.size() != 1) {
-                throw new IllegalStateException("Checked request needs exactly one request");
-            }
-            if (firstType != type) {
-                throw new ClassCastException("Incompatible type " + type + ". Required " + firstType);
-            }
-            return (SinglePlcReadRequest<T>) build();
-        }
-
-        @SuppressWarnings("unchecked")
-        public <T> TypeSafePlcReadRequest<T> buildBulk(Class<T> type) {
-            if (requests.size() < 2) {
-                throw new IllegalStateException("Checked bulk request needs more than one request");
-            }
+        public <T> TypeSafePlcReadRequest<T> build(Class<T> type) {
             if (firstType != type) {
                 throw new ClassCastException("Incompatible type " + type + ". Required " + firstType);
             }
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 7224365..2bfd942 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
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.api.messages;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -29,6 +30,11 @@ public class PlcReadResponse implements PlcResponse {
     private final PlcReadRequest request;
     private final List<ReadResponseItem<?>> responseItems;
 
+    public PlcReadResponse(PlcReadRequest request, ReadResponseItem<?> responseItems) {
+        this.request = request;
+        this.responseItems = Collections.singletonList(responseItems);
+    }
+
     public PlcReadResponse(PlcReadRequest request, List<ReadResponseItem<?>> responseItems) {
         this.request = request;
         this.responseItems = responseItems;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index 71251b2..1755018 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.LinkedList;
@@ -53,19 +52,34 @@ public class PlcWriteRequest implements PlcRequest {
     }
 
     public Optional<? extends WriteRequestItem<?>> getRequestItem() {
-        if (getNumberOfItems() > 1) {
+        if (isMultiValue()) {
             throw new IllegalStateException("too many items " + getNumberOfItems());
         }
-        if (getNumberOfItems() < 1) {
+        if (isEmpty()) {
             return Optional.empty();
         }
         return Optional.<WriteRequestItem<?>>of(getRequestItems().get(0));
     }
 
+    public void setRequestItem(WriteRequestItem<?> requestItem) {
+        if (isMultiValue()) {
+            throw new IllegalStateException("too many items " + getNumberOfItems());
+        }
+        addItem(requestItem);
+    }
+
     public int getNumberOfItems() {
         return getRequestItems().size();
     }
 
+    public boolean isMultiValue() {
+        return getNumberOfItems() > 1;
+    }
+
+    public boolean isEmpty() {
+        return getNumberOfItems() < 1;
+    }
+
     public static PlcWriteRequest.Builder builder() {
         return new Builder();
     }
@@ -98,9 +112,6 @@ public class PlcWriteRequest implements PlcRequest {
             if (requests.size() < 1) {
                 throw new IllegalStateException("No requests added");
             }
-            if (requests.size() < 2) {
-                return new SinglePlcWriteRequest<>(requests.get(0));
-            }
             PlcWriteRequest plcWriteRequest;
             if (mixed) {
                 plcWriteRequest = new PlcWriteRequest();
@@ -114,29 +125,7 @@ public class PlcWriteRequest implements PlcRequest {
         }
 
         @SuppressWarnings("unchecked")
-        public PlcWriteRequest buildBulk() {
-            if (requests.size() < 2) {
-                throw new IllegalStateException("Bulk request needs more than one request");
-            }
-            return build();
-        }
-
-        @SuppressWarnings("unchecked")
-        public <T> SinglePlcWriteRequest<T> build(Class<T> type) {
-            if (requests.size() != 1) {
-                throw new IllegalStateException("Checked request needs exactly one request");
-            }
-            if (firstType != type) {
-                throw new ClassCastException("Incompatible type " + type + ". Required " + firstType);
-            }
-            return (SinglePlcWriteRequest<T>) build();
-        }
-
-        @SuppressWarnings("unchecked")
-        public <T> TypeSafePlcWriteRequest<T> buildBulk(Class<T> type) {
-            if (requests.size() < 2) {
-                throw new IllegalStateException("Checked bulk request needs more than one request");
-            }
+        public <T> TypeSafePlcWriteRequest<T> build(Class<T> type) {
             if (firstType != type) {
                 throw new ClassCastException("Incompatible type " + type + ". Required " + firstType);
             }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
index ef50a86..1bc7b83 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.api.messages;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -30,6 +31,11 @@ public class PlcWriteResponse implements PlcResponse {
 
     private final List<WriteResponseItem<?>> responseItems;
 
+    public PlcWriteResponse(PlcWriteRequest request, WriteResponseItem<?> responseItem) {
+        this.request = request;
+        this.responseItems = Collections.singletonList(responseItem);
+    }
+
     public PlcWriteResponse(PlcWriteRequest request, List<WriteResponseItem<?>> responseItems) {
         this.request = request;
         this.responseItems = responseItems;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
index a8226c2..604f9ae 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
@@ -21,61 +21,25 @@ package org.apache.plc4x.java.api.messages.specific;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
+/**
+ * @deprecated methods integrated into super type
+ */
+@Deprecated
 public class SinglePlcReadRequest<T> extends TypeSafePlcReadRequest<T> {
 
-    private ReadRequestItem<T> requestItem;
-
-    public SinglePlcReadRequest() {
-        super(null);
+    public SinglePlcReadRequest(Class<T> dataType) {
+        super(dataType);
     }
 
-    public SinglePlcReadRequest(ReadRequestItem<T> requestItem) {
-        super(null);
-        this.requestItem = requestItem;
+    public SinglePlcReadRequest(Class<T> dataType, ReadRequestItem<T> readRequestItem) {
+        super(dataType, readRequestItem);
     }
 
     public SinglePlcReadRequest(Class<T> dataType, Address address) {
-        super(null);
-        requestItem = new ReadRequestItem<>(dataType, address);
+        super(dataType, address);
     }
 
     public SinglePlcReadRequest(Class<T> dataType, Address address, int size) {
-        super(null);
-        requestItem = new ReadRequestItem<>(dataType, address, size);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public void addItem(ReadRequestItem<?> readRequestItem) {
-        if (this.requestItem != null && readRequestItem != null) {
-            throw new IllegalStateException(SinglePlcReadRequest.class.getName() + " can only contain on requestItem");
-        }
-        this.requestItem = (ReadRequestItem<T>) readRequestItem;
-    }
-
-    @Override
-    public List<ReadRequestItem<T>> getCheckedReadRequestItems() {
-        return requestItem != null ? Collections.singletonList(requestItem) : Collections.emptyList();
-    }
-
-    @Override
-    public List<ReadRequestItem<?>> getReadRequestItems() {
-        return (List) getCheckedReadRequestItems();
-    }
-
-    public Optional<ReadRequestItem<T>> getRequestItem() {
-        return Optional.of(requestItem);
-    }
-
-    public void setRequestItem(ReadRequestItem<T> requestItem) {
-        this.requestItem = requestItem;
-    }
-
-    public int getNumberOfItems() {
-        return requestItem != null ? 1 : 0;
+        super(dataType, address, size);
     }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
index c835998..401d830 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
@@ -21,31 +21,14 @@ package org.apache.plc4x.java.api.messages.specific;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 
 import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
 
+/**
+ * @deprecated methods integrated into super type
+ */
+@Deprecated
 public class SinglePlcReadResponse<T> extends TypeSafePlcReadResponse<T> {
 
-    private final SinglePlcReadRequest<T> request;
-    private final ReadResponseItem<T> responseItem;
-
-    public SinglePlcReadResponse(SinglePlcReadRequest<T> request, ReadResponseItem<T> responseItem) {
-        super(request, Collections.singletonList(responseItem));
-        this.request = request;
-        this.responseItem = responseItem;
-    }
-
-    @Override
-    public SinglePlcReadRequest<T> getRequest() {
-        return request;
-    }
-
-    @Override
-    public List<ReadResponseItem<T>> getResponseItems() {
-        return responseItem != null ? Collections.singletonList(responseItem) : Collections.emptyList();
-    }
-
-    public Optional<ReadResponseItem<T>> getResponseItem() {
-        return Optional.ofNullable(responseItem);
+    public SinglePlcReadResponse(TypeSafePlcReadRequest<T> request, ReadResponseItem<T> readResponseItem) {
+        super(request, Collections.singletonList(readResponseItem));
     }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
index 35ac219..9db1587 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
@@ -21,55 +21,27 @@ package org.apache.plc4x.java.api.messages.specific;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
-import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
+/**
+ * @deprecated methods integrated into super type
+ */
+@Deprecated
 public class SinglePlcWriteRequest<T> extends TypeSafePlcWriteRequest<T> {
 
-    private WriteRequestItem<T> requestItem;
-
-    public SinglePlcWriteRequest() {
-        super(null);
-    }
-
-    public SinglePlcWriteRequest(WriteRequestItem<T> requestItem) {
-        super(null);
-        this.requestItem = requestItem;
+    public SinglePlcWriteRequest(Class<T> type) {
+        super(type);
     }
 
     public SinglePlcWriteRequest(Class<T> dataType, Address address, T... values) {
-        super(null);
-        addItem(new WriteRequestItem<>(dataType, address, values));
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public void addItem(WriteRequestItem<?> requestItem) {
-        if (this.requestItem != null && requestItem != null) {
-            throw new IllegalStateException(SinglePlcReadRequest.class.getName() + " can only contain on readRequestItem");
-        }
-        this.requestItem = (WriteRequestItem<T>) requestItem;
-    }
-
-    public List<WriteRequestItem<T>> getCheckedRequestItems() {
-        return (requestItem != null) ? Collections.singletonList(requestItem) : Collections.emptyList();
-    }
-
-    @Override
-    public List<WriteRequestItem<?>> getRequestItems() {
-        return (List) getCheckedRequestItems();
-    }
-
-    public Optional<WriteRequestItem<T>> getRequestItem() {
-        return Optional.ofNullable(requestItem);
+        super(dataType, address, values);
     }
 
-    public void setRequestItem(WriteRequestItem<T> requestItem) {
-        this.requestItem = requestItem;
+    public SinglePlcWriteRequest(Class<T> dataType, WriteRequestItem<T> requestItem) {
+        super(dataType, requestItem);
     }
 
-    public int getNumberOfItems() {
-        return requestItem != null ? 1 : 0;
+    public SinglePlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> writeRequestItems) {
+        super(dataType, writeRequestItems);
     }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
index eb9b52a..4340965 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
@@ -24,29 +24,13 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
+/**
+ * @deprecated methods integrated into super type
+ */
+@Deprecated
 public class SinglePlcWriteResponse<T> extends TypeSafePlcWriteResponse<T> {
 
-    private final SinglePlcWriteRequest<T> request;
-    private final WriteResponseItem<T> responseItem;
-
-    public SinglePlcWriteResponse(SinglePlcWriteRequest<T> request, WriteResponseItem<T> responseItem) {
-        super(request, Collections.singletonList(responseItem));
-        this.request = request;
-        this.responseItem = responseItem;
-    }
-
-    @Override
-    public SinglePlcWriteRequest<T> getRequest() {
-        return request;
-    }
-
-    @Override
-    public List<WriteResponseItem<T>> getResponseItems() {
-        return responseItem != null ? Collections.singletonList(responseItem) : Collections.emptyList();
-    }
-
-    public Optional<WriteResponseItem<T>> getResponseItem() {
-        return Optional.ofNullable(responseItem);
+    public SinglePlcWriteResponse(TypeSafePlcWriteRequest<T> request, WriteResponseItem<T> writeResponseItem) {
+        super(request, Collections.singletonList(writeResponseItem));
     }
-
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
index 58ff74e..9739022 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
@@ -22,18 +22,19 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
-import java.util.LinkedList;
 import java.util.List;
+import java.util.Optional;
 
 public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
 
-    private final List<ReadRequestItem<T>> readRequestItems;
-
     private Class<T> datatype;
 
-    public TypeSafePlcReadRequest(Class<T> type) {
-        this.datatype = type;
-        this.readRequestItems = new LinkedList<>();
+    public TypeSafePlcReadRequest(Class<T> dataType) {
+        this.datatype = dataType;
+    }
+
+    public TypeSafePlcReadRequest(Class<T> dataType, ReadRequestItem<T> readRequestItem) {
+        this(dataType);
     }
 
     public TypeSafePlcReadRequest(Class<T> dataType, Address address) {
@@ -46,10 +47,6 @@ public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
         addItem(new ReadRequestItem<>(dataType, address, size));
     }
 
-    public void addCheckedItem(ReadRequestItem<T> readRequestItem) {
-        addItem(readRequestItem);
-    }
-
     @SuppressWarnings("unchecked")
     public void addItem(ReadRequestItem<?> readRequestItem) {
         if (readRequestItem == null) {
@@ -61,13 +58,14 @@ public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
         super.addItem(readRequestItem);
     }
 
+    @SuppressWarnings("unchecked")
     public List<ReadRequestItem<T>> getCheckedReadRequestItems() {
-        return readRequestItems;
+        return (List) getRequestItems();
     }
 
     @SuppressWarnings("unchecked")
-    public List<ReadRequestItem<?>> getReadRequestItems() {
-        return (List) getCheckedReadRequestItems();
+    @Override
+    public Optional<ReadRequestItem<T>> getRequestItem() {
+        return (Optional<ReadRequestItem<T>>) super.getRequestItem();
     }
-
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
index c6b0d33..f76271a 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
@@ -18,29 +18,38 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 
 import java.util.List;
+import java.util.Optional;
 
 public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
 
-    private final TypeSafePlcReadRequest<T> request;
-    private final List<ReadResponseItem<T>> responseItems;
+    public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, ReadResponseItem<T> responseItem) {
+        // TODO: use checked list.
+        super(request, responseItem);
+    }
 
+    @SuppressWarnings("unchecked")
     public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, List<ReadResponseItem<T>> responseItems) {
-        super(null, null);
-        this.request = request;
-        this.responseItems = responseItems;
+        // TODO: use checked list.
+        super(request, (List) responseItems);
     }
 
-    public PlcReadRequest getRequest() {
-        return request;
+    @SuppressWarnings("unchecked")
+    public TypeSafePlcReadRequest<T> getRequest() {
+        return (TypeSafePlcReadRequest<T>) super.getRequest();
     }
 
+    @SuppressWarnings("unchecked")
     public List<ReadResponseItem<T>> getResponseItems() {
-        return responseItems;
+        return (List<ReadResponseItem<T>>) super.getResponseItems();
     }
 
+    @SuppressWarnings("unchecked")
+    @Override
+    public Optional<ReadResponseItem<T>> getResponseItem() {
+        return (Optional<ReadResponseItem<T>>) super.getResponseItem();
+    }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
index 8979cf5..2ebf88f 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
@@ -22,18 +22,15 @@ import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.model.Address;
 
-import java.util.LinkedList;
 import java.util.List;
+import java.util.Optional;
 
 public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
 
-    private final List<WriteRequestItem<T>> requestItems;
-
     private final Class<T> datatype;
 
     public TypeSafePlcWriteRequest(Class<T> type) {
         this.datatype = type;
-        this.requestItems = new LinkedList<>();
     }
 
     public TypeSafePlcWriteRequest(Class<T> dataType, Address address, T... values) {
@@ -41,13 +38,14 @@ public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
         addItem(new WriteRequestItem<>(dataType, address, values));
     }
 
-    public TypeSafePlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, WriteRequestItem<T> requestItem) {
         this(dataType);
-        this.requestItems.addAll(requestItems);
+        this.getRequestItems().add(requestItem);
     }
 
-    public void addCheckedItem(WriteRequestItem<T> writeRequestItem) {
-        addItem(writeRequestItem);
+    public TypeSafePlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> requestItems) {
+        this(dataType);
+        this.getRequestItems().addAll(requestItems);
     }
 
     @SuppressWarnings("unchecked")
@@ -61,14 +59,14 @@ public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
         super.addItem(writeRequestItem);
     }
 
+    @SuppressWarnings("unchecked")
     public List<WriteRequestItem<T>> getCheckedRequestItems() {
-        return requestItems;
+        return (List) getRequestItems();
     }
 
     @SuppressWarnings("unchecked")
     @Override
-    public List<WriteRequestItem<?>> getRequestItems() {
-        return (List) getCheckedRequestItems();
+    public Optional<WriteRequestItem<T>> getRequestItem() {
+        return (Optional<WriteRequestItem<T>>) super.getRequestItem();
     }
-
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
index 2b9e164..fa485cf 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
@@ -18,29 +18,36 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.specific;
 
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 
 import java.util.List;
+import java.util.Optional;
 
 public class TypeSafePlcWriteResponse<T> extends PlcWriteResponse {
 
-    private final TypeSafePlcWriteRequest<T> request;
-    private final List<WriteResponseItem<T>> responseItems;
+    public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, WriteResponseItem<T> responseItem) {
+        // TODO: use checked type.
+        super(request, responseItem);
+    }
 
+    @SuppressWarnings("unchecked")
     public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
-        super(null, null);
-        this.request = request;
-        this.responseItems = responseItems;
+        // TODO: use checked list.
+        super(request, (List) responseItems);
     }
 
-    public PlcWriteRequest getRequest() {
-        return request;
+    public TypeSafePlcWriteRequest<T> getRequest() {
+        return (TypeSafePlcWriteRequest<T>) super.getRequest();
     }
 
     public List<WriteResponseItem<T>> getResponseItems() {
-        return responseItems;
+        return (List<WriteResponseItem<T>>) super.getResponseItems();
     }
 
+    @SuppressWarnings("unchecked")
+    @Override
+    public Optional<WriteResponseItem<T>> getResponseItem() {
+        return (Optional<WriteResponseItem<T>>) super.getResponseItem();
+    }
 }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
index a623c81..b8b9d34 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
@@ -24,7 +24,8 @@ import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 import org.apache.plc4x.java.api.messages.mock.MockAddress;
-import org.apache.plc4x.java.api.messages.specific.*;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
 import org.apache.plc4x.java.api.types.ResponseCode;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
@@ -106,8 +107,8 @@ class APIMessageTests {
     @Test
     @Tag("fast")
     void plcReadRequestEmpty() {
-        PlcReadRequest plcReadRequest = new SinglePlcReadRequest();
-        assertTrue(plcReadRequest.getReadRequestItems().isEmpty(), "Request items not empty");
+        PlcReadRequest plcReadRequest = new PlcReadRequest();
+        assertTrue(plcReadRequest.getRequestItems().isEmpty(), "Request items not empty");
         assertTrue(plcReadRequest.getNumberOfItems() == 0, "Expected request items to be zero");
     }
 
@@ -116,7 +117,7 @@ class APIMessageTests {
     void plcReadRequestAddress() {
         MockAddress address = new MockAddress("mock:/DATA");
         PlcReadRequest plcReadRequest = new SinglePlcReadRequest<>(Byte.class, address);
-        assertTrue(plcReadRequest.getReadRequestItems().size() == 1, "Expected one request item");
+        assertTrue(plcReadRequest.getRequestItems().size() == 1, "Expected one request item");
         assertTrue(plcReadRequest.getNumberOfItems() == 1, "Expected one request item");
     }
 
@@ -125,20 +126,20 @@ class APIMessageTests {
     void plcReadRequestSize() {
         MockAddress address = new MockAddress("mock:/DATA");
         PlcReadRequest plcReadRequest = PlcReadRequest.builder().addItem(Byte.class, address, (byte) 1).build(Byte.class);
-        assertTrue(plcReadRequest.getReadRequestItems().size() == 1, "Expected one request item");
+        assertTrue(plcReadRequest.getRequestItems().size() == 1, "Expected one request item");
         assertTrue(plcReadRequest.getNumberOfItems() == 1, "Expected one request item");
     }
 
     @Test
     @Tag("fast")
     void plcReadRequestAddItem() {
-        PlcReadRequest plcReadRequest = new SinglePlcReadRequest();
-        assertTrue(plcReadRequest.getReadRequestItems().isEmpty(), "Request items not empty");
+        PlcReadRequest plcReadRequest = new PlcReadRequest();
+        assertTrue(plcReadRequest.getRequestItems().isEmpty(), "Request items not empty");
         assertTrue(plcReadRequest.getNumberOfItems() == 0, "Expected request items to be zero");
         MockAddress address = new MockAddress("mock:/DATA");
         ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, (byte) 1);
         plcReadRequest.addItem(readRequestItem);
-        assertTrue(plcReadRequest.getReadRequestItems().size() == 1, "Expected one request item");
+        assertTrue(plcReadRequest.getRequestItems().size() == 1, "Expected one request item");
         assertTrue(plcReadRequest.getNumberOfItems() == 1, "Expected one request item");
     }
 
@@ -161,7 +162,7 @@ class APIMessageTests {
     @Test
     @Tag("fast")
     void plcWriteRequestEmpty() {
-        PlcWriteRequest plcWriteRequest = new SinglePlcWriteRequest();
+        PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
         assertTrue(plcWriteRequest.getRequestItems().isEmpty(), "Request items not empty");
         assertTrue(plcWriteRequest.getNumberOfItems() == 0, "Expected request items to be zero");
     }
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 0abdb47..dcd9195 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
@@ -62,7 +62,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
             List<VarParameterItem> parameterItems = new LinkedList<>();
 
             PlcReadRequest readRequest = (PlcReadRequest) msg.getRequest();
-            for (ReadRequestItem requestItem : readRequest.getReadRequestItems()) {
+            for (ReadRequestItem requestItem : readRequest.getRequestItems()) {
                 // Try to get the correct S7 transport size for the given data type.
                 // (Map PLC4X data type to S7 data type)
                 TransportSize transportSize = encodeTransportSize(requestItem.getDatatype());
@@ -146,7 +146,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                     // If the numbers of items don't match, we're in big trouble as the only
                     // way to know how to interpret the responses is by aligning them with the
                     // items from the request as this information is not returned by the PLC.
-                    if (plcReadRequest.getReadRequestItems().size() != payload.getPayloadItems().size()) {
+                    if (plcReadRequest.getRequestItems().size() != payload.getPayloadItems().size()) {
                         throw new PlcProtocolException(
                             "The number of requested items doesn't match the number of returned items");
                     }
@@ -156,7 +156,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                         VarPayloadItem payloadItem = payloadItems.get(i);
 
                         // Get the request item for this payload item
-                        ReadRequestItem requestItem = plcReadRequest.getReadRequestItems().get(i);
+                        ReadRequestItem requestItem = plcReadRequest.getRequestItems().get(i);
 
                         ResponseCode responseCode = decodeResponseCode(payloadItem.getReturnCode());
 

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 07/12: get rid of SinglePlc*

Posted by sr...@apache.org.
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

commit c9b36e90bbe81a6bf0dacb80cb541ae86006faa0
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 13:31:17 2018 +0100

    get rid of SinglePlc*
---
 .../java/org/apache/plc4x/camel/PLC4XProducer.java |  4 +-
 .../apache/plc4x/edgent/PlcConnectionAdapter.java  | 14 +++----
 .../plc4x/edgent/PlcConnectionAdapterTest.java     | 46 ++++++++++-----------
 .../apache/plc4x/edgent/mock/MockConnection.java   | 16 ++++----
 .../plc4x/java/api/connection/PlcReader.java       | 14 -------
 .../plc4x/java/api/connection/PlcWriter.java       | 14 -------
 .../messages/specific/SinglePlcReadRequest.java    | 45 ---------------------
 .../messages/specific/SinglePlcReadResponse.java   | 34 ----------------
 .../messages/specific/SinglePlcWriteRequest.java   | 47 ----------------------
 .../messages/specific/SinglePlcWriteResponse.java  | 36 -----------------
 .../plc4x/java/api/messages/APIMessageTests.java   | 10 ++---
 .../plc4x/java/s7/netty/Plc4XS7Protocol.java       |  8 ++--
 .../apache/plc4x/java/s7/S7PlcReaderSample.java    |  6 +--
 .../org/apache/plc4x/java/s7/S7PlcScanner.java     |  8 ++--
 .../org/apache/plc4x/java/s7/S7PlcTestConsole.java |  6 +--
 .../apache/plc4x/java/s7/S7PlcWriterSample.java    |  8 ++--
 .../plc4x/java/s7/netty/Plc4XS7ProtocolTest.java   | 12 +++---
 17 files changed, 69 insertions(+), 259 deletions(-)

diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
index 02bdfe2..a6e0735 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
@@ -27,7 +27,7 @@ import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.List;
@@ -72,7 +72,7 @@ public class PLC4XProducer extends DefaultAsyncProducer {
         } else {
             Class<?> datatype = in.getHeader(Constants.DATATYPE_HEADER, Class.class);
             Object value = in.getBody(Object.class);
-            SinglePlcWriteRequest plcSimpleWriteRequest = new SinglePlcWriteRequest(datatype, address, value);
+            TypeSafePlcWriteRequest plcSimpleWriteRequest = new TypeSafePlcWriteRequest(datatype, address, value);
             PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
             completableFuture = plcWriter.write(plcSimpleWriteRequest);
         }
diff --git a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
index c12f82e..9854500 100644
--- a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
+++ b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
@@ -28,8 +28,8 @@ import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.model.Address;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -111,7 +111,7 @@ public class PlcConnectionAdapter implements AutoCloseable {
                     connection = getConnection();
                     address = connection.parseAddress(addressStr);
                     PlcReader reader = connection.getReader().get();
-                    SinglePlcReadRequest<T> readRequest = PlcConnectionAdapter.newPlcReadRequest(datatype, address);
+                    TypeSafePlcReadRequest<T> readRequest = PlcConnectionAdapter.newPlcReadRequest(datatype, address);
                     return reader.read(readRequest).get().getResponseItem().get().getValues().get(0);
                 } catch (Exception e) {
                     logger.error("reading from plc device {} {} failed", connection, address, e);
@@ -182,13 +182,13 @@ public class PlcConnectionAdapter implements AutoCloseable {
     }
 
     @SuppressWarnings("unchecked")
-    static <T> SinglePlcWriteRequest<T> newPlcWriteRequest(Address address, T value) {
+    static <T> TypeSafePlcWriteRequest<T> newPlcWriteRequest(Address address, T value) {
         Class<T> cls = (Class<T>) value.getClass();
-        return new SinglePlcWriteRequest<>(cls, address, value);
+        return new TypeSafePlcWriteRequest<>(cls, address, value);
     }
 
-    static <T> SinglePlcReadRequest<T> newPlcReadRequest(Class<T> datatype, Address address) {
-        return new SinglePlcReadRequest<>(datatype, address);
+    static <T> TypeSafePlcReadRequest<T> newPlcReadRequest(Class<T> datatype, Address address) {
+        return new TypeSafePlcReadRequest<>(datatype, address);
     }
 
 }
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 ead9699..187d773 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
@@ -29,10 +29,10 @@ import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 import org.apache.plc4x.java.api.model.Address;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Tag;
@@ -114,25 +114,25 @@ public class PlcConnectionAdapterTest {
             () -> PlcConnectionAdapter.checkDatatype(Double.class));
     }
 
-    private <T> void checkRead(MockConnection connection, SinglePlcReadRequest<T> request, T value) throws InterruptedException, ExecutionException {
+    private <T> void checkRead(MockConnection connection, TypeSafePlcReadRequest<T> request, T value) throws InterruptedException, ExecutionException {
         // 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
         connection.setDataValue(request.getCheckedReadRequestItems().get(0).getAddress(), value);
 
-        CompletableFuture<SinglePlcReadResponse<T>> cf = connection.read(request);
+        CompletableFuture<TypeSafePlcReadResponse<T>> cf = connection.read(request);
 
         Assertions.assertTrue(cf.isDone());
-        SinglePlcReadResponse<T> response = cf.get();
+        TypeSafePlcReadResponse<T> response = cf.get();
         Assertions.assertEquals(value, response.getResponseItems().get(0).getValues().get(0));
     }
 
     @SuppressWarnings("unchecked")
-    private <T> void checkWrite(MockConnection connection, SinglePlcWriteRequest<T> request, T value) throws InterruptedException, ExecutionException {
+    private <T> void checkWrite(MockConnection connection, TypeSafePlcWriteRequest<T> request, T value) throws InterruptedException, ExecutionException {
         // 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
         connection.setDataValue(request.getRequestItems().get(0).getAddress(), value);
 
-        CompletableFuture<SinglePlcWriteResponse<T>> cf = connection.write(request);
+        CompletableFuture<TypeSafePlcWriteResponse<T>> cf = connection.write(request);
 
         Assertions.assertTrue(cf.isDone());
         PlcWriteResponse response = cf.get();
@@ -160,7 +160,7 @@ public class PlcConnectionAdapterTest {
         MockConnection connection = (MockConnection) adapter.getConnection();
 
         {
-            SinglePlcReadRequest<Boolean> request = PlcConnectionAdapter.newPlcReadRequest(Boolean.class, address);
+            TypeSafePlcReadRequest<Boolean> request = PlcConnectionAdapter.newPlcReadRequest(Boolean.class, address);
             ReadRequestItem<Boolean> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Boolean.class, "class:" + request.getClass());
@@ -169,7 +169,7 @@ public class PlcConnectionAdapterTest {
             checkRead(connection, request, false);
         }
         {
-            SinglePlcReadRequest<Byte> request = PlcConnectionAdapter.newPlcReadRequest(Byte.class, address);
+            TypeSafePlcReadRequest<Byte> request = PlcConnectionAdapter.newPlcReadRequest(Byte.class, address);
             ReadRequestItem<Byte> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Byte.class, "class:" + request.getClass());
@@ -178,7 +178,7 @@ public class PlcConnectionAdapterTest {
             checkRead(connection, request, (byte) 0x23);
         }
         {
-            SinglePlcReadRequest<Short> request = PlcConnectionAdapter.newPlcReadRequest(Short.class, address);
+            TypeSafePlcReadRequest<Short> request = PlcConnectionAdapter.newPlcReadRequest(Short.class, address);
             ReadRequestItem<Short> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Short.class, "class:" + request.getClass());
@@ -187,7 +187,7 @@ public class PlcConnectionAdapterTest {
             checkRead(connection, request, (short) 23);
         }
         {
-            SinglePlcReadRequest<Integer> request = PlcConnectionAdapter.newPlcReadRequest(Integer.class, address);
+            TypeSafePlcReadRequest<Integer> request = PlcConnectionAdapter.newPlcReadRequest(Integer.class, address);
             ReadRequestItem<Integer> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Integer.class, "class:" + request.getClass());
@@ -196,7 +196,7 @@ public class PlcConnectionAdapterTest {
             checkRead(connection, request, -133);
         }
         {
-            SinglePlcReadRequest<Float> request = PlcConnectionAdapter.newPlcReadRequest(Float.class, address);
+            TypeSafePlcReadRequest<Float> request = PlcConnectionAdapter.newPlcReadRequest(Float.class, address);
             ReadRequestItem<Float> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Float.class, "class:" + request.getClass());
@@ -205,7 +205,7 @@ public class PlcConnectionAdapterTest {
             checkRead(connection, request, -143.5f);
         }
         {
-            SinglePlcReadRequest<String> request = PlcConnectionAdapter.newPlcReadRequest(String.class, address);
+            TypeSafePlcReadRequest<String> request = PlcConnectionAdapter.newPlcReadRequest(String.class, address);
             ReadRequestItem<String> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == String.class, "class:" + request.getClass());
@@ -214,7 +214,7 @@ public class PlcConnectionAdapterTest {
             checkRead(connection, request, "OneMoreTime");
         }
         {
-            SinglePlcReadRequest<Calendar> request = PlcConnectionAdapter.newPlcReadRequest(Calendar.class, address);
+            TypeSafePlcReadRequest<Calendar> request = PlcConnectionAdapter.newPlcReadRequest(Calendar.class, address);
             ReadRequestItem<Calendar> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
             Assertions.assertTrue(dataType == Calendar.class, "class:" + request.getClass());
@@ -238,7 +238,7 @@ public class PlcConnectionAdapterTest {
         MockConnection connection = (MockConnection) adapter.getConnection();
 
         {
-            SinglePlcWriteRequest<Boolean> request = PlcConnectionAdapter.newPlcWriteRequest(address, true);
+            TypeSafePlcWriteRequest<Boolean> request = PlcConnectionAdapter.newPlcWriteRequest(address, true);
             WriteRequestItem<Boolean> requestItem = request.getCheckedRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Boolean.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -246,7 +246,7 @@ public class PlcConnectionAdapterTest {
             checkWrite(connection, request, true);
         }
         {
-            SinglePlcWriteRequest<Byte> request = PlcConnectionAdapter.newPlcWriteRequest(address, (byte) 0x113);
+            TypeSafePlcWriteRequest<Byte> request = PlcConnectionAdapter.newPlcWriteRequest(address, (byte) 0x113);
             WriteRequestItem<Byte> requestItem = request.getCheckedRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Byte.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -254,7 +254,7 @@ public class PlcConnectionAdapterTest {
             checkWrite(connection, request, (byte) 0x113);
         }
         {
-            SinglePlcWriteRequest<Short> request = PlcConnectionAdapter.newPlcWriteRequest(address, (short) 113);
+            TypeSafePlcWriteRequest<Short> request = PlcConnectionAdapter.newPlcWriteRequest(address, (short) 113);
             WriteRequestItem<Short> requestItem = request.getCheckedRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Short.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -262,7 +262,7 @@ public class PlcConnectionAdapterTest {
             checkWrite(connection, request, (short) 113);
         }
         {
-            SinglePlcWriteRequest<Integer> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1033);
+            TypeSafePlcWriteRequest<Integer> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1033);
             WriteRequestItem<Integer> requestItem = request.getCheckedRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Integer.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -270,7 +270,7 @@ public class PlcConnectionAdapterTest {
             checkWrite(connection, request, 1033);
         }
         {
-            SinglePlcWriteRequest<Float> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1043.5f);
+            TypeSafePlcWriteRequest<Float> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1043.5f);
             WriteRequestItem<Float> requestItem = request.getCheckedRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Float.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -278,7 +278,7 @@ public class PlcConnectionAdapterTest {
             checkWrite(connection, request, 1043.5f);
         }
         {
-            SinglePlcWriteRequest<String> request = PlcConnectionAdapter.newPlcWriteRequest(address, "A written value");
+            TypeSafePlcWriteRequest<String> request = PlcConnectionAdapter.newPlcWriteRequest(address, "A written value");
             WriteRequestItem<String> requestItem = request.getCheckedRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
             Assertions.assertTrue(String.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -287,7 +287,7 @@ public class PlcConnectionAdapterTest {
         }
         {
             Calendar calValue = Calendar.getInstance();
-            SinglePlcWriteRequest<Calendar> request = PlcConnectionAdapter.newPlcWriteRequest(address, calValue);
+            TypeSafePlcWriteRequest<Calendar> request = PlcConnectionAdapter.newPlcWriteRequest(address, calValue);
             WriteRequestItem<Calendar> requestItem = request.getCheckedRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
             Assertions.assertTrue(Calendar.class.isAssignableFrom(dataType), "class:" + request.getClass());
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
index 798c481..78bb6b1 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
@@ -33,10 +33,10 @@ import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 import org.apache.plc4x.java.api.model.Address;
 import org.apache.plc4x.java.api.types.ResponseCode;
 
@@ -104,8 +104,8 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
             responseItems.add(responseItem);
         }
         PlcReadResponse response;
-        if (readRequest instanceof SinglePlcReadRequest) {
-            response = new SinglePlcReadResponse((SinglePlcReadRequest) readRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+        if (readRequest instanceof TypeSafePlcReadRequest) {
+            response = new TypeSafePlcReadResponse((TypeSafePlcReadRequest) readRequest, responseItems.isEmpty() ? null : responseItems.get(0));
         } else {
             response = new PlcReadResponse(readRequest, responseItems);
         }
@@ -129,8 +129,8 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
             responseItems.add(responseItem);
         }
         PlcWriteResponse response;
-        if (writeRequest instanceof SinglePlcWriteRequest) {
-            response = new SinglePlcWriteResponse((SinglePlcWriteRequest) writeRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+        if (writeRequest instanceof TypeSafePlcWriteRequest) {
+            response = new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) writeRequest, responseItems.isEmpty() ? null : responseItems.get(0));
         } else {
             response = new PlcWriteResponse(writeRequest, responseItems);
         }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
index f6569fb..339540c 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
@@ -22,8 +22,6 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -48,18 +46,6 @@ public interface PlcReader {
      * @return a {@link CompletableFuture} giving async access to the returned value.
      */
     @SuppressWarnings("unchecked")
-    default <T> CompletableFuture<SinglePlcReadResponse<T>> read(SinglePlcReadRequest<T> readRequest) {
-        return (CompletableFuture<SinglePlcReadResponse<T>>) read((PlcReadRequest) readRequest);
-    }
-
-    /**
-     * Reads a requested value from a PLC.
-     *
-     * @param readRequest object describing the type and location of the value.
-     * @param <T>         type that is being requested.
-     * @return a {@link CompletableFuture} giving async access to the returned value.
-     */
-    @SuppressWarnings("unchecked")
     default <T> CompletableFuture<TypeSafePlcReadResponse<T>> read(TypeSafePlcReadRequest<T> readRequest) {
         return (CompletableFuture<TypeSafePlcReadResponse<T>>) read((PlcReadRequest) readRequest);
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
index 071bd3b..cf1140a 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
@@ -23,8 +23,6 @@ import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteResponse;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -49,18 +47,6 @@ public interface PlcWriter {
      * @return a {@link CompletableFuture} giving async access to the response of the write operation.
      */
     @SuppressWarnings("unchecked")
-    default <T> CompletableFuture<SinglePlcWriteResponse<T>> write(SinglePlcWriteRequest<T> writeRequest) {
-        return (CompletableFuture<SinglePlcWriteResponse<T>>) write((PlcWriteRequest) writeRequest);
-    }
-
-    /**
-     * Writes a given value to a PLC.
-     *
-     * @param writeRequest object describing the type, location and value that whould be written.
-     * @param <T>          type that is being requested.
-     * @return a {@link CompletableFuture} giving async access to the response of the write operation.
-     */
-    @SuppressWarnings("unchecked")
     default <T> CompletableFuture<TypeSafePlcWriteResponse<T>> write(TypeSafePlcWriteRequest<T> writeRequest) {
         return (CompletableFuture<TypeSafePlcWriteResponse<T>>) write((PlcWriteRequest) writeRequest);
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
deleted file mode 100644
index 604f9ae..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadRequest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.model.Address;
-
-/**
- * @deprecated methods integrated into super type
- */
-@Deprecated
-public class SinglePlcReadRequest<T> extends TypeSafePlcReadRequest<T> {
-
-    public SinglePlcReadRequest(Class<T> dataType) {
-        super(dataType);
-    }
-
-    public SinglePlcReadRequest(Class<T> dataType, ReadRequestItem<T> readRequestItem) {
-        super(dataType, readRequestItem);
-    }
-
-    public SinglePlcReadRequest(Class<T> dataType, Address address) {
-        super(dataType, address);
-    }
-
-    public SinglePlcReadRequest(Class<T> dataType, Address address, int size) {
-        super(dataType, address, size);
-    }
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
deleted file mode 100644
index 401d830..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcReadResponse.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-
-import java.util.Collections;
-
-/**
- * @deprecated methods integrated into super type
- */
-@Deprecated
-public class SinglePlcReadResponse<T> extends TypeSafePlcReadResponse<T> {
-
-    public SinglePlcReadResponse(TypeSafePlcReadRequest<T> request, ReadResponseItem<T> readResponseItem) {
-        super(request, Collections.singletonList(readResponseItem));
-    }
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
deleted file mode 100644
index 9db1587..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteRequest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.model.Address;
-
-import java.util.List;
-
-/**
- * @deprecated methods integrated into super type
- */
-@Deprecated
-public class SinglePlcWriteRequest<T> extends TypeSafePlcWriteRequest<T> {
-
-    public SinglePlcWriteRequest(Class<T> type) {
-        super(type);
-    }
-
-    public SinglePlcWriteRequest(Class<T> dataType, Address address, T... values) {
-        super(dataType, address, values);
-    }
-
-    public SinglePlcWriteRequest(Class<T> dataType, WriteRequestItem<T> requestItem) {
-        super(dataType, requestItem);
-    }
-
-    public SinglePlcWriteRequest(Class<T> dataType, List<WriteRequestItem<T>> writeRequestItems) {
-        super(dataType, writeRequestItems);
-    }
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
deleted file mode 100644
index 4340965..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/SinglePlcWriteResponse.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.api.messages.specific;
-
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * @deprecated methods integrated into super type
- */
-@Deprecated
-public class SinglePlcWriteResponse<T> extends TypeSafePlcWriteResponse<T> {
-
-    public SinglePlcWriteResponse(TypeSafePlcWriteRequest<T> request, WriteResponseItem<T> writeResponseItem) {
-        super(request, Collections.singletonList(writeResponseItem));
-    }
-}
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
index b8b9d34..534bb05 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
@@ -24,8 +24,8 @@ import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
 import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 import org.apache.plc4x.java.api.messages.mock.MockAddress;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.types.ResponseCode;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
@@ -116,7 +116,7 @@ class APIMessageTests {
     @Tag("fast")
     void plcReadRequestAddress() {
         MockAddress address = new MockAddress("mock:/DATA");
-        PlcReadRequest plcReadRequest = new SinglePlcReadRequest<>(Byte.class, address);
+        PlcReadRequest plcReadRequest = new TypeSafePlcReadRequest<>(Byte.class, address);
         assertTrue(plcReadRequest.getRequestItems().size() == 1, "Expected one request item");
         assertTrue(plcReadRequest.getNumberOfItems() == 1, "Expected one request item");
     }
@@ -171,7 +171,7 @@ class APIMessageTests {
     @Tag("fast")
     void plcWriteRequestObject() {
         MockAddress address = new MockAddress("mock:/DATA");
-        PlcWriteRequest plcWriteRequest = new SinglePlcWriteRequest<>(Byte.class, address, (byte) 0x33);
+        PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, address, (byte) 0x33);
         assertTrue(plcWriteRequest.getRequestItems().size() == 1, "Expected no request item");
         assertTrue(plcWriteRequest.getNumberOfItems() == 1, "Expected one request item");
         List values = plcWriteRequest.getRequestItems().get(0).getValues();
@@ -183,7 +183,7 @@ class APIMessageTests {
     void plcWriteRequestObjects() {
         MockAddress address = new MockAddress("mock:/DATA");
         Byte[] data = {(byte) 0x22, (byte) 0x66};
-        PlcWriteRequest plcWriteRequest = new SinglePlcWriteRequest<>(Byte.class, address, data);
+        PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, address, data);
         assertTrue(plcWriteRequest.getRequestItems().size() == 1, "Expected one request item");
         assertTrue(plcWriteRequest.getNumberOfItems() == 1, "Expected one request item");
         List values = plcWriteRequest.getRequestItems().get(0).getValues();
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 dcd9195..eb1eeb3 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
@@ -174,8 +174,8 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
                         }
                         responseItems.add(responseItem);
                     }
-                    if (plcReadRequest instanceof SinglePlcReadRequest) {
-                        response = new SinglePlcReadResponse((SinglePlcReadRequest) plcReadRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+                    if (plcReadRequest instanceof TypeSafePlcReadRequest) {
+                        response = new TypeSafePlcReadResponse((TypeSafePlcReadRequest) plcReadRequest, responseItems.isEmpty() ? null : responseItems.get(0));
                     } else if (plcReadRequest instanceof PlcReadRequest) {
                         response = new PlcReadResponse(plcReadRequest, responseItems);
                     } else {
@@ -212,8 +212,8 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
 
                     if (plcWriteRequest instanceof PlcWriteRequest) {
                         response = new PlcWriteResponse(plcWriteRequest, responseItems);
-                    } else if (plcWriteRequest instanceof SinglePlcWriteRequest) {
-                        response = new SinglePlcWriteResponse((SinglePlcWriteRequest) plcWriteRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+                    } else if (plcWriteRequest instanceof TypeSafePlcWriteRequest) {
+                        response = new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) plcWriteRequest, responseItems.isEmpty() ? null : responseItems.get(0));
                     } else {
                         response = null;
                     }
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java
index bc5aed8..86a659c 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java
@@ -21,8 +21,8 @@ package org.apache.plc4x.java.s7;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.model.Address;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,7 +61,7 @@ public class S7PlcReaderSample {
                 // Read synchronously ...
                 // NOTICE: the ".get()" immediately lets this thread pause till
                 // the response is processed and available.
-                SinglePlcReadResponse<Byte> plcReadResponse = plcReader.read(new SinglePlcReadRequest<>(Byte.class, inputs)).get();
+                TypeSafePlcReadResponse<Byte> plcReadResponse = plcReader.read(new TypeSafePlcReadRequest<>(Byte.class, inputs)).get();
                 System.out.println("Inputs: " + plcReadResponse.getResponseItem().get().getValues().get(0));
 
                 //////////////////////////////////////////////////////////
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcScanner.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcScanner.java
index df6d270..d78d307 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcScanner.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcScanner.java
@@ -21,8 +21,8 @@ package org.apache.plc4x.java.s7;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.model.Address;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 import org.slf4j.Logger;
@@ -62,8 +62,8 @@ public class S7PlcScanner {
                             } else {
                                 address = plcConnection.parseAddress(memoryArea.name() + "/" + i);
                             }
-                            SinglePlcReadResponse<Byte> plcReadResponse = plcReader.read(
-                                new SinglePlcReadRequest<>(Byte.class, address)).get();
+                            TypeSafePlcReadResponse<Byte> plcReadResponse = plcReader.read(
+                                new TypeSafePlcReadRequest<>(Byte.class, address)).get();
                             Byte data = plcReadResponse.getResponseItem().get().getValues().get(0);
                             if (data != null && data != 0) {
                                 System.out.println(String.format(
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcTestConsole.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcTestConsole.java
index 52465b7..2c7b65a 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcTestConsole.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcTestConsole.java
@@ -21,8 +21,8 @@ package org.apache.plc4x.java.s7;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.model.Address;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -57,7 +57,7 @@ public class S7PlcTestConsole {
                 while (!"exit".equalsIgnoreCase(line = scanner.next())) {
                     try {
                         Address address = plcConnection.parseAddress(line);
-                        SinglePlcReadResponse<Byte> plcReadResponse = plcReader.read(new SinglePlcReadRequest<>(Byte.class, address)).get();
+                        TypeSafePlcReadResponse<Byte> plcReadResponse = plcReader.read(new TypeSafePlcReadRequest<>(Byte.class, address)).get();
                         List<Byte> data = plcReadResponse.getResponseItem().get().getValues();
                         System.out.println("Response: " + data.get(0));
                     } catch (Exception e) {
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcWriterSample.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcWriterSample.java
index 4ed5077..966a7c1 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcWriterSample.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcWriterSample.java
@@ -21,8 +21,8 @@ package org.apache.plc4x.java.s7;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcWriter;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
 import org.apache.plc4x.java.api.model.Address;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -54,8 +54,8 @@ public class S7PlcWriterSample {
                 // Write synchronously ...
                 // NOTICE: the ".get()" immediately lets this thread pause till
                 // the response is processed and available.
-                SinglePlcWriteResponse<Float> plcWriteResponse = plcWriter.write(
-                    new SinglePlcWriteRequest<>(Float.class, inputs, 2.0f)).get();
+                TypeSafePlcWriteResponse<Float> plcWriteResponse = plcWriter.write(
+                    new TypeSafePlcWriteRequest<>(Float.class, inputs, 2.0f)).get();
                 System.out.println("Written: " + plcWriteResponse.getResponseItem().get().getResponseCode().name());
             }
         }
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
index 6c819ba..6a9dc62 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
@@ -19,8 +19,8 @@ under the License.
 package org.apache.plc4x.java.s7.netty;
 
 import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcReadRequest;
-import org.apache.plc4x.java.api.messages.specific.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.netty.NettyTestBase;
 import org.apache.plc4x.java.s7.model.S7Address;
 import org.apache.plc4x.java.s7.model.S7BitAddress;
@@ -66,14 +66,14 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
         // Read Request Tests
         {
             LinkedList<Object> out = new LinkedList<>();
-            SUT.encode(null, createMockedContainer(new SinglePlcReadRequest(type, address)), out);
+            SUT.encode(null, createMockedContainer(new TypeSafePlcReadRequest(type, address)), out);
             // TODO: finish the asserts
             assertThat(out).hasSize(1);
         }
         // Write Request Tests
         {
             LinkedList<Object> out = new LinkedList<>();
-            SUT.encode(null, createMockedContainer(new SinglePlcWriteRequest(type, address, fakeValueFor(type))), out);
+            SUT.encode(null, createMockedContainer(new TypeSafePlcWriteRequest(type, address, fakeValueFor(type))), out);
             // TODO: finish the asserts
             assertThat(out).hasSize(1);
         }
@@ -91,7 +91,7 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
                 Field requests = Plc4XS7Protocol.class.getDeclaredField("requests");
                 requests.setAccessible(true);
                 Map<Short, PlcRequestContainer> requestContainerMap = (Map<Short, PlcRequestContainer>) requests.get(SUT);
-                requestContainerMap.put(fakeTpduReference, createMockedContainer(new SinglePlcReadRequest(type, address)));
+                requestContainerMap.put(fakeTpduReference, createMockedContainer(new TypeSafePlcReadRequest(type, address)));
             }
             S7ResponseMessage msg = new S7ResponseMessage(
                 MessageType.ACK,
@@ -113,7 +113,7 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
                 Field requests = Plc4XS7Protocol.class.getDeclaredField("requests");
                 requests.setAccessible(true);
                 Map<Short, PlcRequestContainer> requestContainerMap = (Map<Short, PlcRequestContainer>) requests.get(SUT);
-                requestContainerMap.put(fakeTpduReference, createMockedContainer(new SinglePlcWriteRequest(type, address, fakeValueFor(type))));
+                requestContainerMap.put(fakeTpduReference, createMockedContainer(new TypeSafePlcWriteRequest(type, address, fakeValueFor(type))));
             }
             S7ResponseMessage msg = new S7ResponseMessage(
                 MessageType.ACK,

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 09/12: polished builders and code cleanup

Posted by sr...@apache.org.
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

commit fd31badef629271972ad75b6e9ad5ac0888bfd62
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 15:21:13 2018 +0100

    polished builders and code cleanup
---
 .../main/java/org/apache/plc4x/camel/Constants.java   |  1 -
 .../java/org/apache/plc4x/camel/PLC4XProducer.java    | 19 +++++++------------
 .../org/apache/plc4x/camel/PLC4XComponentTest.java    |  3 +--
 .../plc4x/java/api/messages/PlcReadRequest.java       |  6 ++++++
 .../plc4x/java/api/messages/PlcWriteRequest.java      | 14 ++++++++++++++
 .../java/api/messages/items/WriteRequestItem.java     |  7 -------
 6 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Constants.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Constants.java
index 987b001..65faa58 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Constants.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Constants.java
@@ -20,5 +20,4 @@ package org.apache.plc4x.camel;
 
 public class Constants {
     public static final String ADDRESS_HEADER = "address";
-    public static final String DATATYPE_HEADER = "datatype";
 }
diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
index a6e0735..92a1b5b 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
@@ -26,14 +26,13 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
 
 public class PLC4XProducer extends DefaultAsyncProducer {
     @SuppressWarnings("unused")
@@ -59,23 +58,19 @@ public class PLC4XProducer extends DefaultAsyncProducer {
         Message in = exchange.getIn();
         Address address = in.getHeader(Constants.ADDRESS_HEADER, Address.class);
         Object body = in.getBody();
-        CompletableFuture<?> completableFuture;
+        PlcWriteRequest.Builder builder = PlcWriteRequest.builder();
         if (body instanceof List) {
             List<?> bodyList = in.getBody(List.class);
-            List<WriteRequestItem<?>> collect = bodyList
+            bodyList
                 .stream()
                 .map(o -> (WriteRequestItem<?>) new WriteRequestItem(o.getClass(), address, o))
-                .collect(Collectors.toList());
-            PlcWriteRequest bulkPlcWriteRequest = new PlcWriteRequest(collect);
-            PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
-            completableFuture = plcWriter.write(bulkPlcWriteRequest);
+                .forEach(builder::addItem);
         } else {
-            Class<?> datatype = in.getHeader(Constants.DATATYPE_HEADER, Class.class);
             Object value = in.getBody(Object.class);
-            TypeSafePlcWriteRequest plcSimpleWriteRequest = new TypeSafePlcWriteRequest(datatype, address, value);
-            PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
-            completableFuture = plcWriter.write(plcSimpleWriteRequest);
+            builder.addItem(address, value);
         }
+        PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
+        CompletableFuture<? extends PlcWriteResponse> completableFuture = plcWriter.write(builder.build());
         int currentlyOpenRequests = openRequests.incrementAndGet();
         try {
             log.debug("Currently open requests including {}:{}", exchange, currentlyOpenRequests);
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
index 0e3e8ea..0685091 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
@@ -45,8 +45,7 @@ public class PLC4XComponentTest extends CamelTestSupport {
             public void configure() {
                 from("direct:plc4x")
                     .setHeader(Constants.ADDRESS_HEADER, constant(new S7Address(MemoryArea.INPUTS, (short) 0x44)))
-                    .setHeader(Constants.DATATYPE_HEADER, constant(Byte.class))
-                    .setBody(constant(0x0))
+                    .setBody(constant((byte) 0x0))
                     .to("plc4x:mock:10.10.10.1/1/1")
                     .to("mock:result");
             }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
index 6821efa..d591201 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
@@ -114,6 +114,12 @@ public class PlcReadRequest implements PlcRequest {
             return this;
         }
 
+        public Builder addItem(ReadRequestItem readRequestItem) {
+            checkType(readRequestItem.getDatatype());
+            requests.add(readRequestItem);
+            return this;
+        }
+
         private void checkType(Class dataType) {
             if (firstType == null) {
                 firstType = dataType;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index 1755018..7e52e17 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -24,6 +24,7 @@ import org.apache.plc4x.java.api.model.Address;
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
 public class PlcWriteRequest implements PlcRequest {
@@ -92,12 +93,25 @@ public class PlcWriteRequest implements PlcRequest {
 
         private List<WriteRequestItem> requests = new LinkedList<>();
 
+        @SuppressWarnings("unchecked")
+        public <T> PlcWriteRequest.Builder addItem(Address address, T value) {
+            Objects.requireNonNull(value);
+            checkType(value.getClass());
+            requests.add(new WriteRequestItem<>((Class<T>) value.getClass(), address, (T) value));
+            return this;
+        }
+
         public <T> PlcWriteRequest.Builder addItem(Class<T> dataType, Address address, T... values) {
             checkType(dataType);
             requests.add(new WriteRequestItem<>(dataType, address, values));
             return this;
         }
 
+        public <T> PlcWriteRequest.Builder addItem(WriteRequestItem writeRequestItem) {
+            checkType(writeRequestItem.getDatatype());
+            return this;
+        }
+
         private void checkType(Class dataType) {
             if (firstType == null) {
                 firstType = dataType;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteRequestItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteRequestItem.java
index 5ece7c0..4740d12 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteRequestItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteRequestItem.java
@@ -42,13 +42,6 @@ public class WriteRequestItem<T> {
         responseItem = null;
     }
 
-    public WriteRequestItem(Class<T> datatype, Address address, List<T> values) {
-        this.datatype = datatype;
-        this.address = address;
-        this.values = new ArrayList<>(values);
-        responseItem = null;
-    }
-
     public Class<T> getDatatype() {
         return datatype;
     }

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.