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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2421de1  added AdsConnectionFactory + added some tests for 
serialPlcConnection
2421de1 is described below

commit 2421de1c341a7388e1546c1d0df00d668f52aef0
Author: Sebastian Rühl <sru...@apache.org>
AuthorDate: Thu Mar 8 17:22:10 2018 +0100

    added AdsConnectionFactory
    + added some tests for serialPlcConnection
---
 .../org/apache/plc4x/java/ads/AdsPlcDriver.java    | 33 ++++-------
 .../java/ads/connection/AdsConnectionFactory.java  | 51 ++++++++++++++++
 .../ads/connection/AdsSerialPlcConnection.java     | 12 +++-
 .../java/ads/connection/AdsTcpPlcConnection.java   | 24 ++++++--
 .../apache/plc4x/java/ads/AdsPlcDriverTest.java    | 22 +++++++
 .../ads/connection/AdsSerialPlcConnectionTest.java | 69 ++++++++++++++++++++++
 .../ads/connection/AdsTcpPlcConnectionTests.java   |  2 +-
 7 files changed, 186 insertions(+), 27 deletions(-)

diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/AdsPlcDriver.java 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/AdsPlcDriver.java
index bab0506..24f23d6 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/AdsPlcDriver.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/AdsPlcDriver.java
@@ -21,8 +21,7 @@ package org.apache.plc4x.java.ads;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
-import org.apache.plc4x.java.ads.connection.AdsSerialPlcConnection;
-import org.apache.plc4x.java.ads.connection.AdsTcpPlcConnection;
+import org.apache.plc4x.java.ads.connection.AdsConnectionFactory;
 import org.apache.plc4x.java.api.PlcDriver;
 import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.connection.PlcConnection;
@@ -49,6 +48,16 @@ public class AdsPlcDriver implements PlcDriver {
     public static final Pattern SERIAL_PATTERN = 
Pattern.compile("(?<serialDefinition>serial:.*)");
     public static final Pattern ADS_URI_PATTERN = Pattern.compile("^ads:/?/?(" 
+ INET_ADDRESS_PATTERN + "|" + SERIAL_PATTERN + ")/" + ADS_ADDRESS_PATTERN);
 
+    private AdsConnectionFactory adsConnectionFactory;
+
+    public AdsPlcDriver() {
+        this.adsConnectionFactory = new AdsConnectionFactory();
+    }
+
+    public AdsPlcDriver(AdsConnectionFactory adsConnectionFactory) {
+        this.adsConnectionFactory = adsConnectionFactory;
+    }
+
     @Override
     public String getProtocolCode() {
         return "ads";
@@ -79,26 +88,10 @@ public class AdsPlcDriver implements PlcDriver {
 
         if (serialDefinition != null) {
             String serialPort = 
serialDefinition.substring(serialDefinition.indexOf(':'));
-            if (sourceAmsNetId == null || sourceAmsPort == null) {
-                return new AdsSerialPlcConnection(serialPort, targetAmsNetId, 
targetAmsPort);
-            } else {
-                return new AdsSerialPlcConnection(serialPort, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
-            }
+            return adsConnectionFactory.adsSerialPlcConnectionOf(serialPort, 
targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
         } else {
             try {
-                if (sourceAmsNetId == null || sourceAmsPort == null) {
-                    if (port == null) {
-                        return new 
AdsTcpPlcConnection(InetAddress.getByName(host), targetAmsNetId, targetAmsPort);
-                    } else {
-                        return new 
AdsTcpPlcConnection(InetAddress.getByName(host), port, targetAmsNetId, 
targetAmsPort);
-                    }
-                } else {
-                    if (port == null) {
-                        return new 
AdsTcpPlcConnection(InetAddress.getByName(host), targetAmsNetId, targetAmsPort, 
sourceAmsNetId, sourceAmsPort);
-                    } else {
-                        return new 
AdsTcpPlcConnection(InetAddress.getByName(host), port, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
-                    }
-                }
+                return 
adsConnectionFactory.adsTcpPlcConnectionOf(InetAddress.getByName(host), port, 
targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
             } catch (UnknownHostException e) {
                 throw new PlcConnectionException(e);
             }
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsConnectionFactory.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsConnectionFactory.java
new file mode 100644
index 0000000..c383529
--- /dev/null
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsConnectionFactory.java
@@ -0,0 +1,51 @@
+/*
+ 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.ads.connection;
+
+import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
+import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
+
+import java.net.InetAddress;
+
+public class AdsConnectionFactory {
+
+    public AdsTcpPlcConnection adsTcpPlcConnectionOf(InetAddress address, 
Integer port, AmsNetId targetAmsNetId, AmsPort targetAmsPort, AmsNetId 
sourceAmsNetId, AmsPort sourceAmsPort) {
+        if (sourceAmsNetId == null || sourceAmsPort == null) {
+            if (port == null) {
+                return AdsTcpPlcConnection.of(address, targetAmsNetId, 
targetAmsPort);
+            } else {
+                return AdsTcpPlcConnection.of(address, port, targetAmsNetId, 
targetAmsPort);
+            }
+        } else {
+            if (port == null) {
+                return AdsTcpPlcConnection.of(address, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
+            } else {
+                return AdsTcpPlcConnection.of(address, port, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
+            }
+        }
+    }
+
+    public AdsSerialPlcConnection adsSerialPlcConnectionOf(String serialPort, 
AmsNetId targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, 
AmsPort sourceAmsPort) {
+        if (sourceAmsNetId == null || sourceAmsPort == null) {
+            return AdsSerialPlcConnection.of(serialPort, targetAmsNetId, 
targetAmsPort);
+        } else {
+            return AdsSerialPlcConnection.of(serialPort, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
+        }
+    }
+}
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
index 13d14e2..1786e1a 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
@@ -32,14 +32,22 @@ import java.util.concurrent.CompletableFuture;
 
 public class AdsSerialPlcConnection extends AdsAbstractPlcConnection {
 
-    public AdsSerialPlcConnection(String serialPort, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort) {
+    private AdsSerialPlcConnection(String serialPort, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort) {
         this(serialPort, targetAmsNetId, targetAmsPort, generateAMSNetId(), 
generateAMSPort());
     }
 
-    public AdsSerialPlcConnection(String serialPort, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort sourceAmsPort) {
+    private AdsSerialPlcConnection(String serialPort, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort sourceAmsPort) {
         super(new SerialChannelFactory(serialPort), targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
     }
 
+    public static AdsSerialPlcConnection of(String serialPort, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort) {
+        return new AdsSerialPlcConnection(serialPort, targetAmsNetId, 
targetAmsPort);
+    }
+
+    public static AdsSerialPlcConnection of(String serialPort, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort 
sourceAmsPort) {
+        return new AdsSerialPlcConnection(serialPort, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
+    }
+
     @Override
     protected ChannelHandler getChannelHandler(CompletableFuture<Void> 
sessionSetupCompleteFuture) {
         return new ChannelInitializer() {
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
index 47a9f10..ad502c3 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
@@ -35,22 +35,38 @@ public class AdsTcpPlcConnection extends 
AdsAbstractPlcConnection {
 
     private static final int TCP_PORT = 48898;
 
-    public AdsTcpPlcConnection(InetAddress address, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort) {
+    private AdsTcpPlcConnection(InetAddress address, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort) {
         this(address, targetAmsNetId, targetAmsPort, generateAMSNetId(), 
generateAMSPort());
     }
 
-    public AdsTcpPlcConnection(InetAddress address, Integer port, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort) {
+    private AdsTcpPlcConnection(InetAddress address, Integer port, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort) {
         this(address, port, targetAmsNetId, targetAmsPort, generateAMSNetId(), 
generateAMSPort());
     }
 
-    public AdsTcpPlcConnection(InetAddress address, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort sourceAmsPort) {
+    private AdsTcpPlcConnection(InetAddress address, AmsNetId targetAmsNetId, 
AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort sourceAmsPort) {
         this(address, null, targetAmsNetId, targetAmsPort, sourceAmsNetId, 
sourceAmsPort);
     }
 
-    public AdsTcpPlcConnection(InetAddress address, Integer port, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort 
sourceAmsPort) {
+    private AdsTcpPlcConnection(InetAddress address, Integer port, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort 
sourceAmsPort) {
         super(new TcpSocketChannelFactory(address, port != null ? port : 
TCP_PORT), targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
     }
 
+    public static AdsTcpPlcConnection of(InetAddress address, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort) {
+        return new AdsTcpPlcConnection(address, targetAmsNetId, targetAmsPort);
+    }
+
+    public static AdsTcpPlcConnection of(InetAddress address, Integer port, 
AmsNetId targetAmsNetId, AmsPort targetAmsPort) {
+        return new AdsTcpPlcConnection(address, port, targetAmsNetId, 
targetAmsPort);
+    }
+
+    public static AdsTcpPlcConnection of(InetAddress address, AmsNetId 
targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort 
sourceAmsPort) {
+        return new AdsTcpPlcConnection(address, null, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
+    }
+
+    public static AdsTcpPlcConnection of(InetAddress address, Integer port, 
AmsNetId targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, 
AmsPort sourceAmsPort) {
+        return new AdsTcpPlcConnection(address, port, targetAmsNetId, 
targetAmsPort, sourceAmsNetId, sourceAmsPort);
+    }
+
     @Override
     protected ChannelHandler getChannelHandler(CompletableFuture<Void> 
sessionSetupCompleteFuture) {
         return new ChannelInitializer() {
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/AdsPlcDriverTest.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/AdsPlcDriverTest.java
index 99e47c7..d873f6a 100644
--- 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/AdsPlcDriverTest.java
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/AdsPlcDriverTest.java
@@ -20,19 +20,23 @@ package org.apache.plc4x.java.ads;
 
 
 import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.ads.connection.AdsConnectionFactory;
 import org.apache.plc4x.java.ads.connection.AdsTcpPlcConnection;
 import org.apache.plc4x.java.ads.util.TcpHexDumper;
 import 
org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
+import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.junit.Rule;
 import org.junit.Test;
 
 import java.util.regex.Pattern;
+import java.util.stream.Stream;
 
 import static org.apache.plc4x.java.ads.AdsPlcDriver.*;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
 
 public class AdsPlcDriverTest {
 
@@ -60,6 +64,24 @@ public class AdsPlcDriverTest {
         assertMatching(ADS_URI_PATTERN, 
"ads://serial:/dev/ttyUSB0/0.0.0.0.0.0:13");
     }
 
+    @Test
+    public void testDriverWithCompleteUrls() throws Exception {
+        AdsPlcDriver SUT = new AdsPlcDriver(mock(AdsConnectionFactory.class));
+        Stream.of(
+            "ads://www.google.de/0.0.0.0.0.0:13",
+            "ads://www.google.de:443/0.0.0.0.0.0:13",
+            "ads://serial:/dev/com1/0.0.0.0.0.0:13",
+            "ads://serial:COM1/0.0.0.0.0.0:13",
+            "ads://serial:/dev/ttyUSB0/0.0.0.0.0.0:13"
+        ).forEach(url -> {
+            try {
+                SUT.connect(url);
+            } catch (PlcConnectionException e) {
+                throw new PlcRuntimeException(e);
+            }
+        });
+    }
+
     private void assertMatching(Pattern pattern, String match) {
         if (!pattern.matcher(match).matches()) {
             fail(pattern + "doesn't match " + match);
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
new file mode 100644
index 0000000..0df3ce5
--- /dev/null
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
@@ -0,0 +1,69 @@
+/*
+ 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.ads.connection;
+
+import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
+import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
+import org.apache.plc4x.java.ads.model.AdsAddress;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class AdsSerialPlcConnectionTest {
+
+    private AdsSerialPlcConnection SUT;
+
+    @Before
+    public void setUp() throws Exception {
+        SUT = AdsSerialPlcConnection.of("/dev/tty0", 
AmsNetId.of("0.0.0.0.0.0"), AmsPort.of(13));
+    }
+
+    @After
+    public void tearDown() {
+        SUT = null;
+    }
+
+    @Test
+    public void initialState() {
+        assertEquals(SUT.getTargetAmsNetId().toString(), "0.0.0.0.0.0");
+        assertEquals(SUT.getTargetAmsPort().toString(), "13");
+    }
+
+    @Test
+    public void emptyParseAddress() throws Exception {
+        try {
+            SUT.parseAddress("");
+        } catch (IllegalArgumentException exception) {
+            assertTrue("Unexpected exception", 
exception.getMessage().startsWith("address  doesn't match "));
+        }
+    }
+
+    @Test
+    public void parseAddress() throws Exception {
+        try {
+            AdsAddress address = (AdsAddress) SUT.parseAddress("1/1");
+            assertEquals(address.getIndexGroup(), 1);
+            assertEquals(address.getIndexOffset(), 1);
+        } catch (IllegalArgumentException exception) {
+            fail("valid data block address");
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
index 1ebb6d8..b56cb75 100644
--- 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
@@ -36,7 +36,7 @@ public class AdsTcpPlcConnectionTests {
 
     @Before
     public void setUp() throws Exception {
-        adsTcpPlcConnection = new 
AdsTcpPlcConnection(InetAddress.getByName("localhost"), 
AmsNetId.of("0.0.0.0.0.0"), AmsPort.of(13));
+        adsTcpPlcConnection = 
AdsTcpPlcConnection.of(InetAddress.getByName("localhost"), 
AmsNetId.of("0.0.0.0.0.0"), AmsPort.of(13));
     }
 
     @After

-- 
To stop receiving notification emails like this one, please contact
sru...@apache.org.

Reply via email to