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 17:04:21 UTC

[incubator-plc4x] branch master updated: refactored much common code to a abstract class

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9f6fc95  refactored much common code to a abstract class
9f6fc95 is described below

commit 9f6fc95b43b2ee6e6a5e51ae3e0010ab44c05703
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 11 18:04:16 2018 +0100

    refactored much common code to a abstract class
---
 .../plc4x/java/api/messages/PlcReadRequest.java    | 66 +-------------------
 .../plc4x/java/api/messages/PlcReadResponse.java   | 48 ++-------------
 .../apache/plc4x/java/api/messages/PlcRequest.java | 70 +++++++++++++++++++++-
 .../plc4x/java/api/messages/PlcResponse.java       | 54 ++++++++++++++++-
 .../plc4x/java/api/messages/PlcWriteRequest.java   | 64 +-------------------
 .../plc4x/java/api/messages/PlcWriteResponse.java  | 47 ++-------------
 6 files changed, 137 insertions(+), 212 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 d591201..4c7f2a9 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
@@ -22,85 +22,34 @@ import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.model.Address;
 
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
 
-public class PlcReadRequest implements PlcRequest {
-
-    private final List<ReadRequestItem<?>> requestItems;
+public class PlcReadRequest extends PlcRequest<ReadRequestItem<?>> {
 
     public PlcReadRequest() {
-        this.requestItems = new LinkedList<>();
     }
 
     public PlcReadRequest(ReadRequestItem<?> requestItem) {
-        this();
         requestItems.add(requestItem);
     }
 
     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<?>> requestItems) {
-        this.requestItems = requestItems;
-    }
-
-    public void addItem(ReadRequestItem<?> readRequestItem) {
-        getRequestItems().add(readRequestItem);
-    }
-
-    public List<ReadRequestItem<?>> getRequestItems() {
-        return requestItems;
-    }
-
-    public Optional<? extends ReadRequestItem<?>> getRequestItem() {
-        if (isMultiValue()) {
-            throw new IllegalStateException("too many items " + getNumberOfItems());
-        }
-        if (isEmpty()) {
-            return Optional.empty();
-        }
-        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 getRequestItems().size();
-    }
-
-    public boolean isMultiValue() {
-        return getNumberOfItems() > 1;
-    }
-
-    public boolean isEmpty() {
-        return getNumberOfItems() < 1;
+        super(requestItems);
     }
 
     public static Builder builder() {
         return new Builder();
     }
 
-    public static class Builder {
-
-        private Class firstType;
-
-        private boolean mixed = false;
-
-        private List<ReadRequestItem> requests = new LinkedList<>();
+    public static class Builder extends PlcRequest.Builder<ReadRequestItem<?>> {
 
         public Builder addItem(Class<?> dataType, Address address) {
             checkType(dataType);
@@ -120,15 +69,6 @@ public class PlcReadRequest implements PlcRequest {
             return this;
         }
 
-        private void checkType(Class dataType) {
-            if (firstType == null) {
-                firstType = dataType;
-            }
-            if (firstType != dataType) {
-                mixed = true;
-            }
-        }
-
         @SuppressWarnings("unchecked")
         public PlcReadRequest build() {
             if (requests.size() < 1) {
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 c0cd8c4..4edf80a 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
@@ -20,62 +20,24 @@ 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 org.apache.plc4x.java.api.messages.items.WriteResponseItem;
 
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class PlcReadResponse implements PlcResponse {
-
-    private final PlcReadRequest request;
-
-    private final List<? extends ReadResponseItem<?>> responseItems;
+public class PlcReadResponse extends PlcResponse<PlcReadRequest, ReadResponseItem<?>, ReadRequestItem<?>> {
 
     public PlcReadResponse(PlcReadRequest request, ReadResponseItem<?> responseItems) {
-        this.request = request;
-        this.responseItems = Collections.singletonList(responseItems);
+        super(request, Collections.singletonList(responseItems));
     }
 
     public PlcReadResponse(PlcReadRequest request, List<? extends 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());
-        }
-        if (isEmpty()) {
-            return Optional.empty();
-        }
-        return Optional.<ReadResponseItem<?>>of(getResponseItems().get(0));
-    }
-
-    public int getNumberOfItems() {
-        return getResponseItems().size();
-    }
-
-    public boolean isMultiValue() {
-        return getNumberOfItems() > 1;
-    }
-
-    public boolean isEmpty() {
-        return getNumberOfItems() < 1;
+        super(request, responseItems);
     }
 
     @SuppressWarnings("unchecked")
     public <T> Optional<ReadResponseItem<T>> getValue(ReadRequestItem<T> item) {
-        return getResponseItems().stream()
-            .filter(x -> x.getRequestItem().equals(item))
-            .map(e -> (ReadResponseItem<T>) e)
-            .findAny();
+        return (Optional) super.getValue(item);
     }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java
index f2367f9..04a62ce 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java
@@ -18,9 +18,77 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages;
 
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Optional;
+
 /**
  * Base type for all messages sent from the plc4x system to a connected plc.
  */
-public interface PlcRequest extends PlcMessage {
+public abstract class PlcRequest<REQUEST_ITEM> implements PlcMessage {
+
+    protected final List<REQUEST_ITEM> requestItems;
+
+    public PlcRequest() {
+        this.requestItems = new LinkedList<>();
+    }
+
+    public PlcRequest(List<REQUEST_ITEM> requestItems) {
+        this.requestItems = requestItems;
+    }
+
+    public void addItem(REQUEST_ITEM readRequestItem) {
+        getRequestItems().add(readRequestItem);
+    }
+
+    public List<REQUEST_ITEM> getRequestItems() {
+        return requestItems;
+    }
+
+    public Optional<? extends REQUEST_ITEM> getRequestItem() {
+        if (isMultiValue()) {
+            throw new IllegalStateException("too many items " + getNumberOfItems());
+        }
+        if (isEmpty()) {
+            return Optional.empty();
+        }
+        return Optional.of(getRequestItems().get(0));
+    }
+
+    public void setRequestItem(REQUEST_ITEM 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 abstract class Builder<REQUEST_ITEM> {
+
+        Class firstType;
+
+        boolean mixed = false;
+
+        List<REQUEST_ITEM> requests = new LinkedList<>();
 
+        void checkType(Class dataType) {
+            if (firstType == null) {
+                firstType = dataType;
+            }
+            if (firstType != dataType) {
+                mixed = true;
+            }
+        }
+    }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java
index 6bec32d..5bf0b46 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java
@@ -18,10 +18,62 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages;
 
+import org.apache.plc4x.java.api.messages.items.RequestItem;
+import org.apache.plc4x.java.api.messages.items.ResponseItem;
+
+import java.util.List;
+import java.util.Optional;
+
 /**
  * Base type for all response messages sent as response for a prior request
  * from a plc to the plc4x system.
  */
-public interface PlcResponse extends PlcMessage {
+public abstract class PlcResponse<REQUEST, RESPONSE_ITEM extends ResponseItem, REQUEST_ITEM extends RequestItem> implements PlcMessage {
+
+    private final REQUEST request;
+
+    private final List<? extends RESPONSE_ITEM> responseItems;
+
+    public PlcResponse(REQUEST request, List<? extends RESPONSE_ITEM> responseItems) {
+        this.request = request;
+        this.responseItems = responseItems;
+    }
+
+    public REQUEST getRequest() {
+        return request;
+    }
+
+    public List<? extends RESPONSE_ITEM> getResponseItems() {
+        return responseItems;
+    }
+
+    public Optional<? extends RESPONSE_ITEM> getResponseItem() {
+        if (isMultiValue()) {
+            throw new IllegalStateException("too many items " + getNumberOfItems());
+        }
+        if (isEmpty()) {
+            return Optional.empty();
+        }
+        return Optional.of(getResponseItems().get(0));
+    }
+
+    public int getNumberOfItems() {
+        return getResponseItems().size();
+    }
+
+    public boolean isMultiValue() {
+        return getNumberOfItems() > 1;
+    }
+
+    public boolean isEmpty() {
+        return getNumberOfItems() < 1;
+    }
+
+    public Optional<RESPONSE_ITEM> getValue(REQUEST_ITEM item) {
+        return getResponseItems().stream()
+            .filter(x -> x.getRequestItem().equals(item))
+            .map(e -> (RESPONSE_ITEM) e)
+            .findAny();
+    }
 
 }
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 7e52e17..7a6c1a4 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
@@ -22,76 +22,27 @@ 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.LinkedList;
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 
-public class PlcWriteRequest implements PlcRequest {
-
-    private final List<WriteRequestItem<?>> requestItems;
+public class PlcWriteRequest extends PlcRequest<WriteRequestItem<?>> {
 
     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 (isMultiValue()) {
-            throw new IllegalStateException("too many items " + getNumberOfItems());
-        }
-        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;
+        super(requestItems);
     }
 
     public static PlcWriteRequest.Builder builder() {
         return new Builder();
     }
 
-    public static class Builder {
-
-        private Class firstType;
-
-        private boolean mixed = false;
-
-        private List<WriteRequestItem> requests = new LinkedList<>();
+    public static class Builder extends PlcRequest.Builder<WriteRequestItem<?>> {
 
         @SuppressWarnings("unchecked")
         public <T> PlcWriteRequest.Builder addItem(Address address, T value) {
@@ -112,15 +63,6 @@ public class PlcWriteRequest implements PlcRequest {
             return this;
         }
 
-        private void checkType(Class dataType) {
-            if (firstType == null) {
-                firstType = dataType;
-            }
-            if (firstType != dataType) {
-                mixed = true;
-            }
-        }
-
         @SuppressWarnings("unchecked")
         public PlcWriteRequest build() {
             if (requests.size() < 1) {
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 ac80b78..39da986 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
@@ -25,57 +25,18 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class PlcWriteResponse implements PlcResponse {
-
-    private final PlcWriteRequest request;
-
-    private final List<? extends WriteResponseItem<?>> responseItems;
+public class PlcWriteResponse extends PlcResponse<PlcWriteRequest, WriteResponseItem<?>, WriteRequestItem<?>> {
 
     public PlcWriteResponse(PlcWriteRequest request, WriteResponseItem<?> responseItem) {
-        this.request = request;
-        this.responseItems = Collections.singletonList(responseItem);
+        super(request, Collections.singletonList(responseItem));
     }
 
     public PlcWriteResponse(PlcWriteRequest request, List<? extends 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());
-        }
-        if (isEmpty()) {
-            return Optional.empty();
-        }
-        return Optional.<WriteResponseItem<?>>of(getResponseItems().get(0));
-    }
-
-    public int getNumberOfItems() {
-        return getResponseItems().size();
-    }
-
-    public boolean isMultiValue() {
-        return getNumberOfItems() > 1;
-    }
-
-    public boolean isEmpty() {
-        return getNumberOfItems() < 1;
+        super(request, responseItems);
     }
 
     @SuppressWarnings("unchecked")
     public <T> Optional<WriteResponseItem<T>> getValue(WriteRequestItem<T> item) {
-        return getResponseItems().stream()
-            .filter(x -> x.getRequestItem().equals(item))
-            .map(e -> (WriteResponseItem<T>) e)
-            .findAny();
+        return (Optional) super.getValue(item);
     }
 }

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