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:21 UTC
[incubator-plc4x] 09/12: polished builders and code cleanup
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>.