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

[incubator-plc4x] branch refactoring/java_generify updated: polished builders and code cleanup

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

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


The following commit(s) were added to refs/heads/refactoring/java_generify by this push:
     new fd31bad  polished builders and code cleanup
fd31bad is described below

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