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:18 UTC

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

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>.