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/05 10:34:21 UTC
[incubator-plc4x] 02/02: split plcRequest into single and bulk plc
request
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
commit cead5c1486e7b694ea1c9fe0abe3f2263f6126b1
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Jan 5 11:34:15 2018 +0100
split plcRequest into single and bulk plc request
---
.../java/org/apache/plc4x/camel/PLC4XProducer.java | 32 ++++++++---
.../apache/plc4x/edgent/PlcConnectionAdapter.java | 19 +++---
.../plc4x/edgent/PlcConnectionAdapterTest.java | 43 +++++++-------
.../apache/plc4x/edgent/mock/MockConnection.java | 39 ++++++++-----
.../plc4x/java/api/connection/PlcReader.java | 26 ++++++++-
.../plc4x/java/api/connection/PlcWriter.java | 27 ++++++++-
...PlcReadRequest.java => BulkPlcReadRequest.java} | 31 ++++++----
...cReadResponse.java => BulkPlcReadResponse.java} | 10 ++--
...cWriteRequest.java => BulkPlcWriteRequest.java} | 33 +++++++----
...riteResponse.java => BulkPlcWriteResponse.java} | 12 ++--
.../apache/plc4x/java/api/messages/PlcMessage.java | 4 +-
.../plc4x/java/api/messages/PlcReadRequest.java | 38 ++----------
.../plc4x/java/api/messages/PlcReadResponse.java | 20 +------
.../apache/plc4x/java/api/messages/PlcRequest.java | 2 +-
.../plc4x/java/api/messages/PlcWriteRequest.java | 38 ++----------
.../plc4x/java/api/messages/PlcWriteResponse.java | 20 +------
.../java/api/messages/SinglePlcReadRequest.java | 67 ++++++++++++++++++++++
...eadResponse.java => SinglePlcReadResponse.java} | 20 ++++---
...riteRequest.java => SinglePlcWriteRequest.java} | 40 +++++++------
...teResponse.java => SinglePlcWriteResponse.java} | 21 ++++---
.../plc4x/java/s7/netty/Plc4XS7Protocol.java | 41 +++++++------
.../apache/plc4x/java/s7/S7PlcReaderSample.java | 9 ++-
.../org/apache/plc4x/java/s7/S7PlcScanner.java | 10 ++--
.../org/apache/plc4x/java/s7/S7PlcTestConsole.java | 8 +--
.../apache/plc4x/java/s7/S7PlcWriterSample.java | 10 ++--
.../plc4x/java/s7/netty/Plc4XS7ProtocolTest.java | 17 +++---
26 files changed, 363 insertions(+), 274 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 e11d1e5..aca485c 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,12 +25,15 @@ 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.PlcWriteResponse;
+import org.apache.plc4x.java.api.messages.BulkPlcWriteRequest;
+import org.apache.plc4x.java.api.messages.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
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")
@@ -54,15 +57,28 @@ public class PLC4XProducer extends DefaultAsyncProducer {
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
Address address = in.getHeader(Constants.ADDRESS_HEADER, Address.class);
- Class<?> datatype = in.getHeader(Constants.DATATYPE_HEADER, Class.class);
- Object value = in.getBody(Object.class);
- PlcWriteRequest plcSimpleWriteRequest = new PlcWriteRequest(datatype, address, value);
- PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
- CompletableFuture<PlcWriteResponse> completableFuture = plcWriter.write(plcSimpleWriteRequest);
+ Object body = in.getBody();
+ CompletableFuture<?> completableFuture;
+ if (body instanceof List) {
+ List<?> bodyList = in.getBody(List.class);
+ List<WriteRequestItem> collect = bodyList
+ .stream()
+ .map(o -> new WriteRequestItem(o.getClass(), address, o))
+ .collect(Collectors.toList());
+ BulkPlcWriteRequest bulkPlcWriteRequest = new BulkPlcWriteRequest(collect);
+ PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
+ completableFuture = plcWriter.write(bulkPlcWriteRequest);
+ } else {
+ Class<?> datatype = in.getHeader(Constants.DATATYPE_HEADER, Class.class);
+ Object value = in.getBody(Object.class);
+ SinglePlcWriteRequest plcSimpleWriteRequest = new SinglePlcWriteRequest(datatype, address, value);
+ PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
+ completableFuture = plcWriter.write(plcSimpleWriteRequest);
+ }
int currentlyOpenRequests = openRequests.incrementAndGet();
try {
log.debug("Currently open requests including {}:{}", exchange, currentlyOpenRequests);
- PlcWriteResponse plcWriteResponse = completableFuture.get();
+ Object plcWriteResponse = completableFuture.get();
if (exchange.getPattern().isOutCapable()) {
Message out = exchange.getOut();
out.copyFrom(exchange.getIn());
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 ab55af8..3021ed6 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
@@ -27,8 +27,9 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
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.PlcReadRequest;
import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.SinglePlcReadRequest;
+import org.apache.plc4x.java.api.messages.SinglePlcWriteRequest;
import org.apache.plc4x.java.api.model.Address;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -111,9 +112,8 @@ public class PlcConnectionAdapter implements AutoCloseable {
connection = getConnection();
address = connection.parseAddress(addressStr);
PlcReader reader = connection.getReader().get();
- PlcReadRequest<T> readRequest = PlcConnectionAdapter.newPlcReadRequest(datatype, address);
- T value = (T) reader.read(readRequest).get().getResponseItems().get(0).getValues().get(0);
- return value;
+ SinglePlcReadRequest<T> readRequest = PlcConnectionAdapter.newPlcReadRequest(datatype, address);
+ return reader.read(readRequest).get().getResponseItems().get(0).getValues().get(0);
} catch (Exception e) {
logger.error("reading from plc device {} {} failed", connection, address, e);
return null;
@@ -183,15 +183,14 @@ public class PlcConnectionAdapter implements AutoCloseable {
throw new IllegalArgumentException("Not a legal plc data type: " + cls.getSimpleName());
}
- @SuppressWarnings("unchecked")
- static <T> PlcWriteRequest<T> newPlcWriteRequest(Address address, T value) {
+ static <T> SinglePlcWriteRequest<T> newPlcWriteRequest(Address address, T value) {
+ @SuppressWarnings("unchecked")
Class<T> cls = (Class<T>) value.getClass();
- return new PlcWriteRequest<>(cls, address, value);
+ return new SinglePlcWriteRequest<>(cls, address, value);
}
- @SuppressWarnings("unchecked")
- static <T> PlcReadRequest<T> newPlcReadRequest(Class<T> datatype, Address address) {
- return new PlcReadRequest<>(datatype, address);
+ static <T> SinglePlcReadRequest<T> newPlcReadRequest(Class<T> datatype, Address address) {
+ return new SinglePlcReadRequest<>(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 36e4d1c..c78e231 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,10 +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.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.*;
import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
import org.apache.plc4x.java.api.model.Address;
@@ -112,25 +109,25 @@ public class PlcConnectionAdapterTest {
() -> PlcConnectionAdapter.checkDatatype(Double.class));
}
- private <T> void checkRead(MockConnection connection, PlcReadRequest<T> request, T value) throws InterruptedException, ExecutionException {
+ 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);
- CompletableFuture<PlcReadResponse<T>> cf = connection.read(request);
+ CompletableFuture<SinglePlcReadResponse<T>> cf = connection.read(request);
Assertions.assertTrue(cf.isDone());
- PlcReadResponse<T> response = cf.get();
+ SinglePlcReadResponse<T> response = cf.get();
Assertions.assertEquals(value, response.getResponseItems().get(0).getValues().get(0));
}
@SuppressWarnings("unchecked")
- private <T> void checkWrite(MockConnection connection, PlcWriteRequest<T> request, T value) throws InterruptedException, ExecutionException {
+ private <T> void checkWrite(MockConnection connection, SinglePlcWriteRequest<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<PlcWriteResponse<T>> cf = connection.write(request);
+ CompletableFuture<SinglePlcWriteResponse<T>> cf = connection.write(request);
Assertions.assertTrue(cf.isDone());
PlcWriteResponse response = cf.get();
@@ -155,7 +152,7 @@ public class PlcConnectionAdapterTest {
MockConnection connection = (MockConnection) adapter.getConnection();
{
- PlcReadRequest<Boolean> request = PlcConnectionAdapter.newPlcReadRequest(Boolean.class, address);
+ SinglePlcReadRequest<Boolean> request = PlcConnectionAdapter.newPlcReadRequest(Boolean.class, address);
ReadRequestItem<Boolean> requestItem = request.getReadRequestItems().get(0);
Class<Boolean> dataType = requestItem.getDatatype();
Assertions.assertTrue(dataType == Boolean.class, "class:" + request.getClass());
@@ -164,7 +161,7 @@ public class PlcConnectionAdapterTest {
checkRead(connection, request, false);
}
{
- PlcReadRequest<Byte> request = PlcConnectionAdapter.newPlcReadRequest(Byte.class, address);
+ SinglePlcReadRequest<Byte> request = PlcConnectionAdapter.newPlcReadRequest(Byte.class, address);
ReadRequestItem<Byte> requestItem = request.getReadRequestItems().get(0);
Class<Byte> dataType = requestItem.getDatatype();
Assertions.assertTrue(dataType == Byte.class, "class:" + request.getClass());
@@ -173,7 +170,7 @@ public class PlcConnectionAdapterTest {
checkRead(connection, request, (byte) 0x23);
}
{
- PlcReadRequest<Short> request = PlcConnectionAdapter.newPlcReadRequest(Short.class, address);
+ SinglePlcReadRequest<Short> request = PlcConnectionAdapter.newPlcReadRequest(Short.class, address);
ReadRequestItem<Short> requestItem = request.getReadRequestItems().get(0);
Class<Short> dataType = requestItem.getDatatype();
Assertions.assertTrue(dataType == Short.class, "class:" + request.getClass());
@@ -182,7 +179,7 @@ public class PlcConnectionAdapterTest {
checkRead(connection, request, (short) 23);
}
{
- PlcReadRequest<Integer> request = PlcConnectionAdapter.newPlcReadRequest(Integer.class, address);
+ SinglePlcReadRequest<Integer> request = PlcConnectionAdapter.newPlcReadRequest(Integer.class, address);
ReadRequestItem<Integer> requestItem = request.getReadRequestItems().get(0);
Class<Integer> dataType = requestItem.getDatatype();
Assertions.assertTrue(dataType == Integer.class, "class:" + request.getClass());
@@ -191,7 +188,7 @@ public class PlcConnectionAdapterTest {
checkRead(connection, request, -133);
}
{
- PlcReadRequest<Float> request = PlcConnectionAdapter.newPlcReadRequest(Float.class, address);
+ SinglePlcReadRequest<Float> request = PlcConnectionAdapter.newPlcReadRequest(Float.class, address);
ReadRequestItem<Float> requestItem = request.getReadRequestItems().get(0);
Class<Float> dataType = requestItem.getDatatype();
Assertions.assertTrue(dataType == Float.class, "class:" + request.getClass());
@@ -200,7 +197,7 @@ public class PlcConnectionAdapterTest {
checkRead(connection, request, -143.5f);
}
{
- PlcReadRequest<String> request = PlcConnectionAdapter.newPlcReadRequest(String.class, address);
+ SinglePlcReadRequest<String> request = PlcConnectionAdapter.newPlcReadRequest(String.class, address);
ReadRequestItem<String> requestItem = request.getReadRequestItems().get(0);
Class<String> dataType = requestItem.getDatatype();
Assertions.assertTrue(dataType == String.class, "class:" + request.getClass());
@@ -209,7 +206,7 @@ public class PlcConnectionAdapterTest {
checkRead(connection, request, "OneMoreTime");
}
{
- PlcReadRequest<Calendar> request = PlcConnectionAdapter.newPlcReadRequest(Calendar.class, address);
+ SinglePlcReadRequest<Calendar> request = PlcConnectionAdapter.newPlcReadRequest(Calendar.class, address);
ReadRequestItem<Calendar> requestItem = request.getReadRequestItems().get(0);
Class<Calendar> dataType = requestItem.getDatatype();
Assertions.assertTrue(dataType == Calendar.class, "class:" + request.getClass());
@@ -233,7 +230,7 @@ public class PlcConnectionAdapterTest {
MockConnection connection = (MockConnection) adapter.getConnection();
{
- PlcWriteRequest<Boolean> request = PlcConnectionAdapter.newPlcWriteRequest(address, true);
+ SinglePlcWriteRequest<Boolean> request = PlcConnectionAdapter.newPlcWriteRequest(address, true);
WriteRequestItem<Boolean> requestItem = request.getRequestItems().get(0);
Class<Boolean> dataType = requestItem.getDatatype();
Assertions.assertTrue(Boolean.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -241,7 +238,7 @@ public class PlcConnectionAdapterTest {
checkWrite(connection, request, true);
}
{
- PlcWriteRequest<Byte> request = PlcConnectionAdapter.newPlcWriteRequest(address, (byte) 0x113);
+ SinglePlcWriteRequest<Byte> request = PlcConnectionAdapter.newPlcWriteRequest(address, (byte) 0x113);
WriteRequestItem<Byte> requestItem = request.getRequestItems().get(0);
Class<Byte> dataType = requestItem.getDatatype();
Assertions.assertTrue(Byte.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -249,7 +246,7 @@ public class PlcConnectionAdapterTest {
checkWrite(connection, request, (byte) 0x113);
}
{
- PlcWriteRequest<Short> request = PlcConnectionAdapter.newPlcWriteRequest(address, (short) 113);
+ SinglePlcWriteRequest<Short> request = PlcConnectionAdapter.newPlcWriteRequest(address, (short) 113);
WriteRequestItem<Short> requestItem = request.getRequestItems().get(0);
Class<Short> dataType = requestItem.getDatatype();
Assertions.assertTrue(Short.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -257,7 +254,7 @@ public class PlcConnectionAdapterTest {
checkWrite(connection, request, (short) 113);
}
{
- PlcWriteRequest<Integer> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1033);
+ SinglePlcWriteRequest<Integer> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1033);
WriteRequestItem<Integer> requestItem = request.getRequestItems().get(0);
Class<Integer> dataType = requestItem.getDatatype();
Assertions.assertTrue(Integer.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -265,7 +262,7 @@ public class PlcConnectionAdapterTest {
checkWrite(connection, request, 1033);
}
{
- PlcWriteRequest<Float> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1043.5f);
+ SinglePlcWriteRequest<Float> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1043.5f);
WriteRequestItem<Float> requestItem = request.getRequestItems().get(0);
Class<Float> dataType = requestItem.getDatatype();
Assertions.assertTrue(Float.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -273,7 +270,7 @@ public class PlcConnectionAdapterTest {
checkWrite(connection, request, 1043.5f);
}
{
- PlcWriteRequest<String> request = PlcConnectionAdapter.newPlcWriteRequest(address, "A written value");
+ SinglePlcWriteRequest<String> request = PlcConnectionAdapter.newPlcWriteRequest(address, "A written value");
WriteRequestItem<String> requestItem = request.getRequestItems().get(0);
Class<String> dataType = requestItem.getDatatype();
Assertions.assertTrue(String.class.isAssignableFrom(dataType), "class:" + request.getClass());
@@ -282,7 +279,7 @@ public class PlcConnectionAdapterTest {
}
{
Calendar calValue = Calendar.getInstance();
- PlcWriteRequest<Calendar> request = PlcConnectionAdapter.newPlcWriteRequest(address, calValue);
+ SinglePlcWriteRequest<Calendar> request = PlcConnectionAdapter.newPlcWriteRequest(address, calValue);
WriteRequestItem<Calendar> requestItem = request.getRequestItems().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 c81ce11..2bd3ab2 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,10 +25,7 @@ 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.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.*;
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;
@@ -85,11 +82,11 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
@SuppressWarnings("unchecked")
@Override
- public <T> CompletableFuture<PlcReadResponse<T>> read(PlcReadRequest<T> readRequest) {
+ public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
curReadCnt++;
if (readExceptionTriggerCount > 0 && curReadCnt == readExceptionTriggerCount) {
curReadCnt = 0;
- CompletableFuture<PlcReadResponse<T>> cf = new CompletableFuture<>();
+ CompletableFuture<PlcReadResponse> cf = new CompletableFuture<>();
cf.completeExceptionally(new PlcIoException(readExceptionMsg));
return cf;
}
@@ -99,26 +96,42 @@ public class MockConnection extends AbstractPlcConnection implements PlcReader,
Collections.singletonList(getDataValue(requestItem.getAddress())));
responseItems.add(responseItem);
}
- PlcReadResponse response = new PlcReadResponse(readRequest, responseItems);
+ PlcReadResponse response;
+ if (readRequest instanceof BulkPlcReadRequest) {
+ response = new BulkPlcReadResponse((BulkPlcReadRequest) readRequest, responseItems);
+ } else if (readRequest instanceof SinglePlcReadRequest) {
+ response = new SinglePlcReadResponse((SinglePlcReadRequest) readRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+ } else {
+ response = null;
+ }
return CompletableFuture.completedFuture(response);
}
+ @SuppressWarnings("unchecked")
@Override
- public <T> CompletableFuture<PlcWriteResponse<T>> write(PlcWriteRequest<T> writeRequest) {
+ public CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest) {
curWriteCnt++;
if (writeExceptionTriggerCount > 0 && curWriteCnt == writeExceptionTriggerCount) {
curWriteCnt = 0;
- CompletableFuture<PlcWriteResponse<T>> cf = new CompletableFuture<>();
+ CompletableFuture<PlcWriteResponse> cf = new CompletableFuture<>();
cf.completeExceptionally(new PlcIoException(writeExceptionMsg));
return cf;
}
- List<WriteResponseItem<T>> responseItems = new LinkedList<>();
- for (WriteRequestItem<T> requestItem : writeRequest.getRequestItems()) {
+ List<WriteResponseItem> responseItems = new LinkedList<>();
+ for (WriteRequestItem requestItem : writeRequest.getRequestItems()) {
setDataValue(requestItem.getAddress(), requestItem.getValues());
- WriteResponseItem<T> responseItem = new WriteResponseItem<>(requestItem, ResponseCode.OK);
+ WriteResponseItem<?> responseItem = new WriteResponseItem<>(requestItem, ResponseCode.OK);
responseItems.add(responseItem);
}
- PlcWriteResponse<T> response = new PlcWriteResponse<>(writeRequest, responseItems);
+ PlcWriteResponse response;
+ if (writeRequest instanceof BulkPlcWriteRequest) {
+ response = new BulkPlcWriteResponse((BulkPlcWriteRequest) writeRequest, responseItems);
+ } else if (writeRequest instanceof SinglePlcWriteRequest) {
+ response = new SinglePlcWriteResponse((SinglePlcWriteRequest) writeRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+ } else {
+ response = null;
+ }
+
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 d6faa78..2888b61 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,7 @@ under the License.
*/
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.*;
import java.util.concurrent.CompletableFuture;
@@ -28,6 +27,13 @@ import java.util.concurrent.CompletableFuture;
*/
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.
+ */
+ CompletableFuture<? extends PlcReadResponse> read(PlcReadRequest readRequest);
/**
* Reads a requested value from a PLC.
@@ -36,6 +42,20 @@ public interface PlcReader {
* @param <T> type that is being requested.
* @return a {@link CompletableFuture} giving async access to the returned value.
*/
- <T> CompletableFuture<PlcReadResponse<T>> read(PlcReadRequest<T> readRequest);
+ @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.
+ * @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);
+ }
}
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 53add5b..afb70e4 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,7 @@ under the License.
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.*;
import java.util.concurrent.CompletableFuture;
@@ -33,9 +32,31 @@ 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.
+ */
+ CompletableFuture<? extends PlcWriteResponse> 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.
*/
- <T> CompletableFuture<PlcWriteResponse<T>> write(PlcWriteRequest<T> writeRequest);
+ @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.
+ * @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);
+ }
}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/UncheckedPlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcReadRequest.java
similarity index 58%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/UncheckedPlcReadRequest.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcReadRequest.java
index a60995f..631a99d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/UncheckedPlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcReadRequest.java
@@ -21,28 +21,37 @@ package org.apache.plc4x.java.api.messages;
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;
@SuppressWarnings("unchecked")
-public class UncheckedPlcReadRequest extends PlcReadRequest<Object> {
+public class BulkPlcReadRequest implements PlcReadRequest {
- public UncheckedPlcReadRequest() {
- }
+ private final List<ReadRequestItem> readRequestItems;
- public UncheckedPlcReadRequest(Class dataType, Address address) {
- super(dataType, address);
+ public BulkPlcReadRequest() {
+ this.readRequestItems = new LinkedList<>();
}
- public UncheckedPlcReadRequest(Class dataType, Address address, int size) {
- super(dataType, address, size);
+ public BulkPlcReadRequest(Class dataType, Address address) {
+ this();
+ addItem(new ReadRequestItem(dataType, address));
}
- public UncheckedPlcReadRequest(List list) {
- super(list);
+ public BulkPlcReadRequest(Class dataType, Address address, int size) {
+ this();
+ addItem(new ReadRequestItem(dataType, address, size));
}
- @Override
public void addItem(ReadRequestItem readRequestItem) {
- super.addItem(readRequestItem);
+ readRequestItems.add(readRequestItem);
+ }
+
+ public List<ReadRequestItem> getReadRequestItems() {
+ return readRequestItems;
+ }
+
+ public int getNumberOfItems() {
+ return readRequestItems.size();
}
}
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/BulkPlcReadResponse.java
similarity index 77%
copy from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
copy to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcReadResponse.java
index 7b31cb3..420d325 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/BulkPlcReadResponse.java
@@ -22,12 +22,12 @@ import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
import java.util.List;
-public class PlcReadResponse<T> implements PlcResponse {
+public class BulkPlcReadResponse implements PlcReadResponse {
- private final PlcReadRequest request;
- private final List<ReadResponseItem<T>> responseItems;
+ private final BulkPlcReadRequest request;
+ private final List<ReadResponseItem> responseItems;
- public PlcReadResponse(PlcReadRequest request, List<ReadResponseItem<T>> responseItems) {
+ public BulkPlcReadResponse(BulkPlcReadRequest request, List<ReadResponseItem> responseItems) {
this.request = request;
this.responseItems = responseItems;
}
@@ -36,7 +36,7 @@ public class PlcReadResponse<T> implements PlcResponse {
return request;
}
- public List<ReadResponseItem<T>> getResponseItems() {
+ public List<ReadResponseItem> getResponseItems() {
return responseItems;
}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/UncheckedPlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcWriteRequest.java
similarity index 54%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/UncheckedPlcWriteRequest.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcWriteRequest.java
index 83ac035..ff64054 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/UncheckedPlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcWriteRequest.java
@@ -21,28 +21,41 @@ package org.apache.plc4x.java.api.messages;
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;
@SuppressWarnings("unchecked")
-public class UncheckedPlcWriteRequest extends PlcWriteRequest<Object> {
+public class BulkPlcWriteRequest implements PlcWriteRequest {
- public UncheckedPlcWriteRequest() {
+ private final List<WriteRequestItem> requestItems;
+
+ public BulkPlcWriteRequest() {
+ this.requestItems = new LinkedList<>();
}
- public UncheckedPlcWriteRequest(Class<Object> dataType, Address address, Object value) {
- super(dataType, address, value);
+ public BulkPlcWriteRequest(Class dataType, Address address, Object value) {
+ this();
+ addItem(new WriteRequestItem(dataType, address, value));
}
- public UncheckedPlcWriteRequest(Class<Object> dataType, Address address, Object[] values) {
- super(dataType, address, values);
+ public BulkPlcWriteRequest(Class dataType, Address address, Object[] values) {
+ this();
+ addItem(new WriteRequestItem(dataType, address, values));
}
- public UncheckedPlcWriteRequest(List<WriteRequestItem<Object>> writeRequestItems) {
- super(writeRequestItems);
+ public BulkPlcWriteRequest(List<WriteRequestItem> requestItems) {
+ this.requestItems = requestItems;
}
- @Override
public void addItem(WriteRequestItem requestItem) {
- super.addItem(requestItem);
+ requestItems.add(requestItem);
+ }
+
+ public List<WriteRequestItem> getRequestItems() {
+ return requestItems;
+ }
+
+ public int getNumberOfItems() {
+ return requestItems.size();
}
}
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/BulkPlcWriteResponse.java
similarity index 73%
copy from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
copy to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/BulkPlcWriteResponse.java
index 58b8ce7..8e51652 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/BulkPlcWriteResponse.java
@@ -22,21 +22,21 @@ import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
import java.util.List;
-public class PlcWriteResponse<T> implements PlcResponse {
+public class BulkPlcWriteResponse implements PlcWriteResponse {
- private final PlcWriteRequest<T> request;
- private final List<WriteResponseItem<T>> responseItems;
+ private final BulkPlcWriteRequest request;
+ private final List<WriteResponseItem> responseItems;
- public PlcWriteResponse(PlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
+ public BulkPlcWriteResponse(BulkPlcWriteRequest request, List<WriteResponseItem> responseItems) {
this.request = request;
this.responseItems = responseItems;
}
- public PlcWriteRequest<T> getRequest() {
+ public BulkPlcWriteRequest getRequest() {
return request;
}
- public List<WriteResponseItem<T>> getResponseItems() {
+ public List<WriteResponseItem> getResponseItems() {
return responseItems;
}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcMessage.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcMessage.java
index d720136..aed337d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcMessage.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcMessage.java
@@ -20,9 +20,7 @@ package org.apache.plc4x.java.api.messages;
/**
* Base type for all forms of messages passed between plc and plc4x system.
- * @param <T> type that is being handled.
*/
-@SuppressWarnings("unused")
-public interface PlcMessage<T> {
+public interface PlcMessage {
}
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 dbf8d59..d016947 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,44 +19,14 @@ 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.model.Address;
-import java.util.LinkedList;
import java.util.List;
-public class PlcReadRequest<T> implements PlcRequest<T> {
+public interface PlcReadRequest extends PlcRequest {
+ void addItem(ReadRequestItem readRequestItem);
- private final List<ReadRequestItem<T>> readRequestItems;
-
- public PlcReadRequest() {
- this.readRequestItems = new LinkedList<>();
- }
-
- public PlcReadRequest(Class<T> dataType, Address address) {
- this();
- addItem(new ReadRequestItem<>(dataType, address));
- }
-
- public PlcReadRequest(Class<T> dataType, Address address, int size) {
- this();
- addItem(new ReadRequestItem<>(dataType, address, size));
- }
-
- public PlcReadRequest(List<ReadRequestItem<T>> readRequestItems) {
- this.readRequestItems = readRequestItems;
- }
-
- public void addItem(ReadRequestItem<T> readRequestItem) {
- readRequestItems.add(readRequestItem);
- }
-
- public List<ReadRequestItem<T>> getReadRequestItems() {
- return readRequestItems;
- }
-
- public int getNumItems() {
- return readRequestItems.size();
- }
+ List<? extends ReadRequestItem> getReadRequestItems();
+ int getNumberOfItems();
}
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 7b31cb3..43b3b88 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
@@ -22,22 +22,8 @@ import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
import java.util.List;
-public class PlcReadResponse<T> implements PlcResponse {
-
- private final PlcReadRequest request;
- private final List<ReadResponseItem<T>> responseItems;
-
- public PlcReadResponse(PlcReadRequest request, List<ReadResponseItem<T>> responseItems) {
- this.request = request;
- this.responseItems = responseItems;
- }
-
- public PlcReadRequest getRequest() {
- return request;
- }
-
- public List<ReadResponseItem<T>> getResponseItems() {
- return responseItems;
- }
+public interface PlcReadResponse extends PlcResponse {
+ PlcReadRequest getRequest();
+ List<? extends ReadResponseItem> getResponseItems();
}
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 40a4b75..f2367f9 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
@@ -21,6 +21,6 @@ package org.apache.plc4x.java.api.messages;
/**
* Base type for all messages sent from the plc4x system to a connected plc.
*/
-public interface PlcRequest<T> extends PlcMessage<T> {
+public interface PlcRequest extends PlcMessage {
}
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 c5cfd93..e39d3f9 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,43 +19,13 @@ 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.model.Address;
-import java.util.LinkedList;
import java.util.List;
-public class PlcWriteRequest<T> implements PlcRequest<T> {
+public interface PlcWriteRequest extends PlcRequest {
+ void addItem(WriteRequestItem writeRequestItem);
- private final List<WriteRequestItem<T>> requestItems;
-
- public PlcWriteRequest() {
- this.requestItems = new LinkedList<>();
- }
-
- public PlcWriteRequest(Class<T> dataType, Address address, T value) {
- this();
- addItem(new WriteRequestItem<>(dataType, address, value));
- }
-
- public PlcWriteRequest(Class<T> dataType, Address address, T[] values) {
- this();
- addItem(new WriteRequestItem<>(dataType, address, values));
- }
-
- public PlcWriteRequest(List<WriteRequestItem<T>> requestItems) {
- this.requestItems = requestItems;
- }
-
- public void addItem(WriteRequestItem<T> requestItem) {
- requestItems.add(requestItem);
- }
-
- public List<WriteRequestItem<T>> getRequestItems() {
- return requestItems;
- }
-
- public int getNumItems() {
- return requestItems.size();
- }
+ List<? extends WriteRequestItem> getRequestItems();
+ int getNumberOfItems();
}
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 58b8ce7..de88b18 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
@@ -22,22 +22,8 @@ import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
import java.util.List;
-public class PlcWriteResponse<T> implements PlcResponse {
-
- private final PlcWriteRequest<T> request;
- private final List<WriteResponseItem<T>> responseItems;
-
- public PlcWriteResponse(PlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
- this.request = request;
- this.responseItems = responseItems;
- }
-
- public PlcWriteRequest<T> getRequest() {
- return request;
- }
-
- public List<WriteResponseItem<T>> getResponseItems() {
- return responseItems;
- }
+public interface PlcWriteResponse extends PlcResponse {
+ PlcWriteRequest getRequest();
+ List<? extends WriteResponseItem> getResponseItems();
}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/SinglePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/SinglePlcReadRequest.java
new file mode 100644
index 0000000..e06acf0
--- /dev/null
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/SinglePlcReadRequest.java
@@ -0,0 +1,67 @@
+/*
+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;
+
+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;
+
+public class SinglePlcReadRequest<T> implements PlcReadRequest {
+
+ private ReadRequestItem<T> readRequestItem;
+
+ public SinglePlcReadRequest() {
+ }
+
+ public SinglePlcReadRequest(Class<T> dataType, Address address) {
+ readRequestItem = new ReadRequestItem<>(dataType, address);
+ }
+
+ public SinglePlcReadRequest(Class<T> dataType, Address address, int size) {
+ readRequestItem = new ReadRequestItem<>(dataType, address, size);
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void addItem(ReadRequestItem readRequestItem) {
+ if (this.readRequestItem != null && readRequestItem != null) {
+ throw new IllegalStateException(SinglePlcReadRequest.class.getName() + " can only contain on readRequestItem");
+ }
+ this.readRequestItem = (ReadRequestItem<T>) readRequestItem;
+ }
+
+ @Override
+ public List<ReadRequestItem<T>> getReadRequestItems() {
+ return readRequestItem != null ? Collections.singletonList(readRequestItem) : Collections.emptyList();
+ }
+
+ public ReadRequestItem<T> getReadRequestItem() {
+ return readRequestItem;
+ }
+
+ public void setReadRequestItem(ReadRequestItem<T> readRequestItem) {
+ this.readRequestItem = readRequestItem;
+ }
+
+ public int getNumberOfItems() {
+ return readRequestItem != null ? 1 : 0;
+ }
+}
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/SinglePlcReadResponse.java
similarity index 62%
copy from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
copy to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/SinglePlcReadResponse.java
index 7b31cb3..eeb027a 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/SinglePlcReadResponse.java
@@ -20,24 +20,30 @@ package org.apache.plc4x.java.api.messages;
import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import java.util.Collections;
import java.util.List;
-public class PlcReadResponse<T> implements PlcResponse {
+public class SinglePlcReadResponse<T> implements PlcReadResponse {
- private final PlcReadRequest request;
- private final List<ReadResponseItem<T>> responseItems;
+ private final SinglePlcReadRequest<T> request;
+ private final ReadResponseItem<T> responseItem;
- public PlcReadResponse(PlcReadRequest request, List<ReadResponseItem<T>> responseItems) {
+ public SinglePlcReadResponse(SinglePlcReadRequest<T> request, ReadResponseItem<T> responseItem) {
this.request = request;
- this.responseItems = responseItems;
+ this.responseItem = responseItem;
}
- public PlcReadRequest getRequest() {
+ @Override
+ public SinglePlcReadRequest<T> getRequest() {
return request;
}
+ @Override
public List<ReadResponseItem<T>> getResponseItems() {
- return responseItems;
+ return responseItem != null ? Collections.singletonList(responseItem) : Collections.emptyList();
}
+ public ReadResponseItem<T> getResponseItem() {
+ return responseItem;
+ }
}
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/SinglePlcWriteRequest.java
similarity index 50%
copy from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
copy to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/SinglePlcWriteRequest.java
index c5cfd93..085cc04 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/SinglePlcWriteRequest.java
@@ -21,41 +21,47 @@ package org.apache.plc4x.java.api.messages;
import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
import org.apache.plc4x.java.api.model.Address;
-import java.util.LinkedList;
+import java.util.Collections;
import java.util.List;
-public class PlcWriteRequest<T> implements PlcRequest<T> {
+public class SinglePlcWriteRequest<T> implements PlcWriteRequest {
- private final List<WriteRequestItem<T>> requestItems;
+ private WriteRequestItem<T> writeRequestItem;
- public PlcWriteRequest() {
- this.requestItems = new LinkedList<>();
+ public SinglePlcWriteRequest() {
}
- public PlcWriteRequest(Class<T> dataType, Address address, T value) {
- this();
+ public SinglePlcWriteRequest(Class<T> dataType, Address address, T value) {
addItem(new WriteRequestItem<>(dataType, address, value));
}
- public PlcWriteRequest(Class<T> dataType, Address address, T[] values) {
- this();
+ public SinglePlcWriteRequest(Class<T> dataType, Address address, T[] values) {
addItem(new WriteRequestItem<>(dataType, address, values));
}
- public PlcWriteRequest(List<WriteRequestItem<T>> requestItems) {
- this.requestItems = requestItems;
+ @Override
+ @SuppressWarnings("unchecked")
+ public void addItem(WriteRequestItem writeRequestItem) {
+ if (this.writeRequestItem != null && writeRequestItem != null) {
+ throw new IllegalStateException(SinglePlcReadRequest.class.getName() + " can only contain on readRequestItem");
+ }
+ this.writeRequestItem = (WriteRequestItem<T>) writeRequestItem;
}
- public void addItem(WriteRequestItem<T> requestItem) {
- requestItems.add(requestItem);
+ @Override
+ public List<WriteRequestItem<T>> getRequestItems() {
+ return (writeRequestItem != null) ? Collections.singletonList(writeRequestItem) : Collections.emptyList();
}
- public List<WriteRequestItem<T>> getRequestItems() {
- return requestItems;
+ public WriteRequestItem<T> getWriteRequestItem() {
+ return writeRequestItem;
}
- public int getNumItems() {
- return requestItems.size();
+ public void setWriteRequestItem(WriteRequestItem<T> writeRequestItem) {
+ this.writeRequestItem = writeRequestItem;
}
+ public int getNumberOfItems() {
+ return writeRequestItem != null ? 1 : 0;
+ }
}
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/SinglePlcWriteResponse.java
similarity index 62%
copy from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
copy to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/SinglePlcWriteResponse.java
index 58b8ce7..0155a18 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/SinglePlcWriteResponse.java
@@ -20,24 +20,31 @@ package org.apache.plc4x.java.api.messages;
import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import java.util.Collections;
import java.util.List;
-public class PlcWriteResponse<T> implements PlcResponse {
+public class SinglePlcWriteResponse<T> implements PlcWriteResponse {
- private final PlcWriteRequest<T> request;
- private final List<WriteResponseItem<T>> responseItems;
+ private final SinglePlcWriteRequest<T> request;
+ private final WriteResponseItem<T> responseItem;
- public PlcWriteResponse(PlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
+ public SinglePlcWriteResponse(SinglePlcWriteRequest<T> request, WriteResponseItem<T> responseItem) {
this.request = request;
- this.responseItems = responseItems;
+ this.responseItem = responseItem;
}
- public PlcWriteRequest<T> getRequest() {
+ @Override
+ public SinglePlcWriteRequest<T> getRequest() {
return request;
}
+ @Override
public List<WriteResponseItem<T>> getResponseItems() {
- return responseItems;
+ return responseItem != null ? Collections.singletonList(responseItem) : Collections.emptyList();
+ }
+
+ public WriteResponseItem<T> getResponseItem() {
+ return 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 c9b44c2..ab7bd37 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
@@ -29,7 +29,6 @@ import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
import org.apache.plc4x.java.api.model.Address;
import org.apache.plc4x.java.api.types.ResponseCode;
-import org.apache.plc4x.java.s7.connection.S7PlcConnection;
import org.apache.plc4x.java.s7.model.S7Address;
import org.apache.plc4x.java.s7.model.S7BitAddress;
import org.apache.plc4x.java.s7.model.S7DataBlockAddress;
@@ -42,8 +41,6 @@ import org.apache.plc4x.java.s7.netty.model.params.items.VarParameterItem;
import org.apache.plc4x.java.s7.netty.model.payloads.VarPayload;
import org.apache.plc4x.java.s7.netty.model.payloads.items.VarPayloadItem;
import org.apache.plc4x.java.s7.netty.model.types.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
@@ -63,7 +60,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
if (msg.getRequest() instanceof PlcReadRequest) {
List<VarParameterItem> parameterItems = new LinkedList<>();
- PlcReadRequest<?> readRequest = (PlcReadRequest<?>) msg.getRequest();
+ PlcReadRequest readRequest = (PlcReadRequest) msg.getRequest();
for (ReadRequestItem requestItem : readRequest.getReadRequestItems()) {
// Try to get the correct S7 transport size for the given data type.
// (Map PLC4X data type to S7 data type)
@@ -90,7 +87,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
List<VarParameterItem> parameterItems = new LinkedList<>();
List<VarPayloadItem> payloadItems = new LinkedList<>();
- PlcWriteRequest<?> writeRequest = (PlcWriteRequest<?>) msg.getRequest();
+ PlcWriteRequest writeRequest = (PlcWriteRequest) msg.getRequest();
for (WriteRequestItem requestItem : writeRequest.getRequestItems()) {
// Try to get the correct S7 transport size for the given data type.
// (Map PLC4X data type to S7 data type)
@@ -141,7 +138,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
// Handle the response to a read request.
if (requestContainer.getRequest() instanceof PlcReadRequest) {
- PlcReadRequest<?> plcReadRequest = (PlcReadRequest<?>) requestContainer.getRequest();
+ PlcReadRequest plcReadRequest = (PlcReadRequest) requestContainer.getRequest();
List<ReadResponseItem> responseItems = new LinkedList<>();
VarPayload payload = responseMessage.getPayload(VarPayload.class);
@@ -157,11 +154,11 @@ 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.getReadRequestItems().get(i);
ResponseCode responseCode = decodeResponseCode(payloadItem.getReturnCode());
- ReadResponseItem<?> responseItem;
+ ReadResponseItem responseItem;
// Something went wrong.
if (responseCode != ResponseCode.OK) {
responseItem = new ReadResponseItem<>(requestItem, responseCode, null);
@@ -169,18 +166,24 @@ 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);
}
- response = new PlcReadResponse(plcReadRequest, responseItems);
+ if (plcReadRequest instanceof BulkPlcReadRequest) {
+ response = new BulkPlcReadResponse((BulkPlcReadRequest) plcReadRequest, responseItems);
+ } else if (plcReadRequest instanceof SinglePlcReadRequest) {
+ response = new SinglePlcReadResponse((SinglePlcReadRequest) plcReadRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+ } else {
+ response = null;
+ }
}
// Handle the response to a write request.
else if (requestContainer.getRequest() instanceof PlcWriteRequest) {
- PlcWriteRequest<?> plcWriteRequest = (PlcWriteRequest) requestContainer.getRequest();
+ PlcWriteRequest plcWriteRequest = (PlcWriteRequest) requestContainer.getRequest();
List<WriteResponseItem> responseItems = new LinkedList<>();
VarPayload payload = responseMessage.getPayload(VarPayload.class);
// If the numbers of items don't match, we're in big trouble as the only
@@ -204,7 +207,13 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
responseItems.add(responseItem);
}
- response = new PlcWriteResponse(plcWriteRequest, responseItems);
+ if (plcWriteRequest instanceof BulkPlcWriteRequest) {
+ response = new BulkPlcWriteResponse((BulkPlcWriteRequest) plcWriteRequest, responseItems);
+ } else if (plcWriteRequest instanceof SinglePlcWriteRequest) {
+ response = new SinglePlcWriteResponse((SinglePlcWriteRequest) plcWriteRequest, responseItems.isEmpty() ? null : responseItems.get(0));
+ } else {
+ response = null;
+ }
}
// Confirm the response being handled.
@@ -245,7 +254,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) {
@@ -264,7 +273,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) {
@@ -359,7 +368,7 @@ public class Plc4XS7Protocol extends MessageToMessageCodec<S7Message, PlcRequest
return null;
}
List<Object> result = new LinkedList<>();
- for (int i = 0; i < s7Data.length;) {
+ for (int i = 0; i < s7Data.length; ) {
if (datatype == Boolean.class) {
result.add((s7Data[i] & 0x01) == 0x01);
i += 1;
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 864c9f3..068ef71 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.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.messages.SinglePlcReadRequest;
+import org.apache.plc4x.java.api.messages.SinglePlcReadResponse;
import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
import org.apache.plc4x.java.api.model.Address;
import org.slf4j.Logger;
@@ -63,9 +63,8 @@ public class S7PlcReaderSample {
// Read synchronously ...
// NOTICE: the ".get()" immediately lets this thread pause till
// the response is processed and available.
- PlcReadResponse<Byte> plcReadResponse = plcReader.read(new PlcReadRequest<>(Byte.class, inputs)).get();
- List<ReadResponseItem<Byte>> responseItems = plcReadResponse.getResponseItems();
- System.out.println("Inputs: " + responseItems.get(0).getValues().get(0));
+ SinglePlcReadResponse<Byte> plcReadResponse = plcReader.read(new SinglePlcReadRequest<>(Byte.class, inputs)).get();
+ System.out.println("Inputs: " + plcReadResponse.getResponseItem().getValues().get(0));
//////////////////////////////////////////////////////////
// Read asynchronously ...
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 4f072e6..79e1e79 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.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.messages.SinglePlcReadRequest;
+import org.apache.plc4x.java.api.messages.SinglePlcReadResponse;
import org.apache.plc4x.java.api.model.Address;
import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
import org.slf4j.Logger;
@@ -62,9 +62,9 @@ public class S7PlcScanner {
} else {
address = plcConnection.parseAddress(memoryArea.name() + "/" + i);
}
- PlcReadResponse<Byte> plcReadResponse = plcReader.read(
- new PlcReadRequest<>(Byte.class, address)).get();
- Byte data = plcReadResponse.getResponseItems().get(0).getValues().get(0);
+ SinglePlcReadResponse<Byte> plcReadResponse = plcReader.read(
+ new SinglePlcReadRequest<>(Byte.class, address)).get();
+ Byte data = plcReadResponse.getResponseItem().getValues().get(0);
if (data != null && data != 0) {
System.out.println(String.format(
"Response: Memory Area: %s Index: %d Value: %02X", memoryArea.name(), i, data));
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 96e155e..784f436 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.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.messages.SinglePlcReadRequest;
+import org.apache.plc4x.java.api.messages.SinglePlcReadResponse;
import org.apache.plc4x.java.api.model.Address;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,8 +57,8 @@ public class S7PlcTestConsole {
while (!"exit".equalsIgnoreCase(line = scanner.next())) {
try {
Address address = plcConnection.parseAddress(line);
- PlcReadResponse<Byte> plcReadResponse = plcReader.read(new PlcReadRequest<>(Byte.class, address)).get();
- List<Byte> data = plcReadResponse.getResponseItems().get(0).getValues();
+ SinglePlcReadResponse<Byte> plcReadResponse = plcReader.read(new SinglePlcReadRequest<>(Byte.class, address)).get();
+ List<Byte> data = plcReadResponse.getResponseItem().getValues();
System.out.println("Response: " + data.get(0));
} catch (Exception e) {
e.printStackTrace();
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 159e588..f789158 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.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.PlcWriteResponse;
+import org.apache.plc4x.java.api.messages.SinglePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.SinglePlcWriteResponse;
import org.apache.plc4x.java.api.model.Address;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,9 +54,9 @@ public class S7PlcWriterSample {
// Write synchronously ...
// NOTICE: the ".get()" immediately lets this thread pause till
// the response is processed and available.
- PlcWriteResponse<Float> plcWriteResponse = plcWriter.write(
- new PlcWriteRequest<>(Float.class, inputs, 2.0f)).get();
- System.out.println("Written: " + plcWriteResponse.getResponseItems().get(0).getResponseCode().name());
+ SinglePlcWriteResponse<Float> plcWriteResponse = plcWriter.write(
+ new SinglePlcWriteRequest<>(Float.class, inputs, 2.0f)).get();
+ System.out.println("Written: " + plcWriteResponse.getResponseItem().getResponseCode().name());
}
}
// Catch any exception or the application won't be able to finish if something goes wrong.
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 4556f10..1fcdd36 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
@@ -18,10 +18,7 @@ under the License.
*/
package org.apache.plc4x.java.s7.netty;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcRequest;
-import org.apache.plc4x.java.api.messages.PlcRequestContainer;
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.*;
import org.apache.plc4x.java.netty.NettyTestBase;
import org.apache.plc4x.java.s7.model.S7Address;
import org.apache.plc4x.java.s7.model.S7BitAddress;
@@ -67,14 +64,14 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
// Read Request Tests
{
LinkedList<Object> out = new LinkedList<>();
- SUT.encode(null, createMockedContainer(new PlcReadRequest<>(type, address)), out);
+ SUT.encode(null, createMockedContainer(new SinglePlcReadRequest(type, address)), out);
// TODO: finish the asserts
assertThat(out).hasSize(1);
}
// Write Request Tests
{
LinkedList<Object> out = new LinkedList<>();
- SUT.encode(null, createMockedContainer(new PlcWriteRequest(type, address, fakeValueFor(type))), out);
+ SUT.encode(null, createMockedContainer(new SinglePlcWriteRequest(type, address, fakeValueFor(type))), out);
// TODO: finish the asserts
assertThat(out).hasSize(1);
}
@@ -97,7 +94,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 PlcReadRequest(type, address)));
+ requestContainerMap.put(fakeTpduReference, createMockedContainer(new SinglePlcReadRequest(type, address)));
}
S7ResponseMessage msg = new S7ResponseMessage(
MessageType.ACK,
@@ -119,7 +116,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 PlcWriteRequest(type, address, fakeValueFor(type))));
+ requestContainerMap.put(fakeTpduReference, createMockedContainer(new SinglePlcWriteRequest(type, address, fakeValueFor(type))));
}
S7ResponseMessage msg = new S7ResponseMessage(
MessageType.ACK,
@@ -220,9 +217,9 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
requestEnricher.accept(initialRequest);
}
when(mock.getRequest()).thenReturn(initialRequest);
- if (initialRequest.getClass() == PlcReadRequest.class) {
+ if (PlcReadRequest.class.isAssignableFrom(initialRequest.getClass())) {
return mock;
- } else if (initialRequest.getClass() == PlcWriteRequest.class) {
+ } else if (PlcWriteRequest.class.isAssignableFrom(initialRequest.getClass())) {
return mock;
} else {
throw new IllegalArgumentException("Unsupported Type: " + initialRequest.getClass());
--
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.