You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sk...@apache.org on 2018/10/28 12:44:33 UTC
[incubator-plc4x] 02/03: extracted AbstractPlcConnection class
This is an automated email from the ASF dual-hosted git repository.
skorikov pushed a commit to branch feature/refactor-abstract-connection
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit 14ab66e1422e120c03dcfad0ebc0687bce35b139
Author: Andrey Skorikov <an...@codecentric.de>
AuthorDate: Fri Oct 26 15:32:06 2018 +0200
extracted AbstractPlcConnection class
---
.../base/connection/AbstractPlcConnection.java | 77 ++++++++++++++++++++++
.../java/base/connection/NettyPlcConnection.java | 49 +-------------
.../org/apache/plc4x/java/test/TestConnection.java | 31 ++-------
3 files changed, 84 insertions(+), 73 deletions(-)
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
new file mode 100644
index 0000000..2a19470
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
@@ -0,0 +1,77 @@
+/*
+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.base.connection;
+
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcUnsupportedOperationException;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.metadata.PlcConnectionMetadata;
+
+/**
+ * Base class for implementing connections.
+ * Per default, all operations (read, write, subscribe) are unsupported.
+ * Concrete implementations should override the methods indicating connection capabilities
+ * and for obtaining respective request builders.
+ */
+public abstract class AbstractPlcConnection implements PlcConnection, PlcConnectionMetadata {
+
+ @Override
+ public PlcConnectionMetadata getMetadata() {
+ return this;
+ }
+
+ @Override
+ public boolean canRead() {
+ return false;
+ }
+
+ @Override
+ public boolean canWrite() {
+ return false;
+ }
+
+ @Override
+ public boolean canSubscribe() {
+ return false;
+ }
+
+ @Override
+ public PlcReadRequest.Builder readRequestBuilder() {
+ throw new PlcUnsupportedOperationException("The connection does not support reading");
+ }
+
+ @Override
+ public PlcWriteRequest.Builder writeRequestBuilder() {
+ throw new PlcUnsupportedOperationException("The connection does not support writing");
+ }
+
+ @Override
+ public PlcSubscriptionRequest.Builder subscriptionRequestBuilder() {
+ throw new PlcUnsupportedOperationException("The connection does not support subscription");
+ }
+
+ @Override
+ public PlcUnsubscriptionRequest.Builder unsubscriptionRequestBuilder() {
+ throw new PlcUnsupportedOperationException("The connection does not support subscription");
+ }
+
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java
index b271fb7..7dbb258 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java
@@ -22,21 +22,14 @@ import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.util.HashedWheelTimer;
import io.netty.util.Timer;
-import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.apache.plc4x.java.api.exceptions.PlcIoException;
-import org.apache.plc4x.java.api.exceptions.PlcUnsupportedOperationException;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.metadata.PlcConnectionMetadata;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
-public abstract class NettyPlcConnection implements PlcConnection, PlcConnectionMetadata {
+public abstract class NettyPlcConnection extends AbstractPlcConnection {
/**
* a {@link HashedWheelTimer} shall be only instantiated once.
@@ -107,46 +100,6 @@ public abstract class NettyPlcConnection implements PlcConnection, PlcConnection
return connected;
}
- @Override
- public PlcConnectionMetadata getMetadata() {
- return this;
- }
-
- @Override
- public boolean canRead() {
- return false;
- }
-
- @Override
- public boolean canWrite() {
- return false;
- }
-
- @Override
- public boolean canSubscribe() {
- return false;
- }
-
- @Override
- public PlcReadRequest.Builder readRequestBuilder() {
- throw new PlcUnsupportedOperationException("The connection does not support reading");
- }
-
- @Override
- public PlcWriteRequest.Builder writeRequestBuilder() {
- throw new PlcUnsupportedOperationException("The connection does not support writing");
- }
-
- @Override
- public PlcSubscriptionRequest.Builder subscriptionRequestBuilder() {
- throw new PlcUnsupportedOperationException("The connection does not support subscription");
- }
-
- @Override
- public PlcUnsubscriptionRequest.Builder unsubscriptionRequestBuilder() {
- throw new PlcUnsupportedOperationException("The connection does not support subscription");
- }
-
public Channel getChannel() {
return channel;
}
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestConnection.java b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestConnection.java
index 4a0199d..50ef026 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestConnection.java
+++ b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestConnection.java
@@ -20,11 +20,12 @@ package org.apache.plc4x.java.test;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.exceptions.PlcUnsupportedOperationException;
-import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.metadata.PlcConnectionMetadata;
+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.types.PlcResponseCode;
+import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
import org.apache.plc4x.java.base.messages.*;
import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
@@ -37,7 +38,7 @@ import java.util.concurrent.CompletableFuture;
* Connection to a test device.
* This class is not thread-safe.
*/
-class TestConnection implements PlcConnection, PlcConnectionMetadata, PlcReader, PlcWriter {
+class TestConnection extends AbstractPlcConnection implements PlcReader, PlcWriter {
private final TestDevice device;
private boolean connected = false;
@@ -61,11 +62,6 @@ class TestConnection implements PlcConnection, PlcConnectionMetadata, PlcReader,
}
@Override
- public PlcConnectionMetadata getMetadata() {
- return this;
- }
-
- @Override
public boolean canRead() {
return true;
}
@@ -76,11 +72,6 @@ class TestConnection implements PlcConnection, PlcConnectionMetadata, PlcReader,
}
@Override
- public boolean canSubscribe() {
- return false;
- }
-
- @Override
public PlcReadRequest.Builder readRequestBuilder() {
return new DefaultPlcReadRequest.Builder(this, new TestFieldHandler());
}
@@ -91,16 +82,6 @@ class TestConnection implements PlcConnection, PlcConnectionMetadata, PlcReader,
}
@Override
- public PlcSubscriptionRequest.Builder subscriptionRequestBuilder() {
- throw new PlcUnsupportedOperationException("The connection does not support subscription");
- }
-
- @Override
- public PlcUnsubscriptionRequest.Builder unsubscriptionRequestBuilder() {
- throw new PlcUnsupportedOperationException("The connection does not support subscription");
- }
-
- @Override
public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
if(!(readRequest instanceof InternalPlcReadRequest)) {
throw new IllegalArgumentException("Read request doesn't implement InternalPlcReadRequest");