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 2023/08/10 05:08:36 UTC
[plc4x] 01/04: feat(plc4j/spi): add protocolCode/transportCode and transportConfig as injectable parameters
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 943e4a1d415321cfbbf7a6a11d9f92ee33c65626
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Aug 9 15:15:45 2023 +0200
feat(plc4j/spi): add protocolCode/transportCode and transportConfig as injectable parameters
---
.../org/apache/plc4x/java/eip/base/EIPDriver.java | 2 +-
.../plc4x/java/profinet/ProfinetBrowseTests.java | 17 ++++++------
.../java/profinet/ProfinetDeviceContextTests.java | 21 ++++++++------
.../profinet/gsdml/ProfinetConfigurationTests.java | 32 ++++++++++++----------
.../java/s7/readwrite/S7HGeneratedDriverBase.java | 2 +-
.../spi/configuration/ConfigurationFactory.java | 32 ++++++++++++++++------
.../java/spi/connection/GeneratedDriverBase.java | 29 ++++++++++----------
.../java/spi/parser/ConnectionParserTest.java | 8 +++---
.../plc4x/java/transport/tcp/TcpTransport.java | 8 +++---
.../resources/protocols/opcua/DriverTestsuite.xml | 2 +-
10 files changed, 87 insertions(+), 66 deletions(-)
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java
index 686f033979..57002d7ead 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java
@@ -133,7 +133,7 @@ public class EIPDriver extends GeneratedDriverBase<EipPacket> {
// Create the configuration object.
this.configuration = (EIPConfiguration) new ConfigurationFactory().createConfiguration(
- getConfigurationType(), paramString);
+ getConfigurationType(), protocolCode, transportCode, transportConfig, paramString);
if (configuration == null) {
throw new PlcConnectionException("Unsupported configuration");
}
diff --git a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetBrowseTests.java b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetBrowseTests.java
index 28228fe3cb..94bc173806 100644
--- a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetBrowseTests.java
+++ b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetBrowseTests.java
@@ -32,15 +32,14 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class ProfinetBrowseTests {
@Test
- public void readProfinetBrowseTagsCheckStatus() {
+ public void readProfinetBrowseTagsCheckStatus() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources/&devices=[[device_name, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, )]]");
+ ProfinetConfiguration.class, "", "", "",
+ "gsddirectory=src/test/resources/&devices=[[device_name, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, )]]" );
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -66,9 +65,10 @@ public class ProfinetBrowseTests {
}
@Test
- public void readProfinetBrowseTagsCheckFloat() {
+ public void readProfinetBrowseTagsCheckFloat() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources/&devices=[[device_name, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, )]]");
+ ProfinetConfiguration.class, "", "", "",
+ "gsddirectory=src/test/resources/&devices=[[device_name, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, )]]");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -96,9 +96,10 @@ public class ProfinetBrowseTests {
}
@Test
- public void readProfinetBrowseTagsCheckBoolean() {
+ public void readProfinetBrowseTagsCheckBoolean() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources/&devices=[[device_name, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, )]]");
+ ProfinetConfiguration.class, "", "", "",
+ "gsddirectory=src/test/resources/&devices=[[device_name, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, )]]");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
diff --git a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetDeviceContextTests.java b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetDeviceContextTests.java
index 4a4791a0df..570ede8fd6 100644
--- a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetDeviceContextTests.java
+++ b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetDeviceContextTests.java
@@ -41,9 +41,10 @@ import static org.junit.jupiter.api.Assertions.assertInstanceOf;
public class ProfinetDeviceContextTests {
@Test
- public void readProfinetAllocatedSubModulesLengthCheck() {
+ public void readProfinetAllocatedSubModulesLengthCheck() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
+ ProfinetConfiguration.class, "", "", "",
+ "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -60,7 +61,7 @@ public class ProfinetDeviceContextTests {
devices.get(entry.getValue().getDevicename()).setIpAddress(entry.getValue().getIpaddress());
}
- ProfinetDevice device =devices.get("DEVICE_NAME_1");
+ ProfinetDevice device = devices.get("DEVICE_NAME_1");
device.setVendorDeviceId("CAFE", "0001");
ProfinetModule[] modules = device.getDeviceContext().getModules();
@@ -69,9 +70,10 @@ public class ProfinetDeviceContextTests {
}
@Test
- public void readProfinetAllocatedSubModulesTypeCheck() {
+ public void readProfinetAllocatedSubModulesTypeCheck() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
+ ProfinetConfiguration.class, "", "", "",
+ "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -102,9 +104,10 @@ public class ProfinetDeviceContextTests {
}
@Test
- public void readProfinetAllocatedSubModulesTypeCheckEmptyModule() {
+ public void readProfinetAllocatedSubModulesTypeCheckEmptyModule() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
+ ProfinetConfiguration.class, "", "", "",
+ "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -135,9 +138,9 @@ public class ProfinetDeviceContextTests {
}
@Test
- public void readExpectedSubModuleApiBlocks() {
+ public void readExpectedSubModuleApiBlocks() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
+ ProfinetConfiguration.class, "", "", "", "gsddirectory=src/test/resources/&devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, , PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
diff --git a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/gsdml/ProfinetConfigurationTests.java b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/gsdml/ProfinetConfigurationTests.java
index 26589e1bb0..4fb9a7b4c2 100644
--- a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/gsdml/ProfinetConfigurationTests.java
+++ b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/gsdml/ProfinetConfigurationTests.java
@@ -48,7 +48,8 @@ public class ProfinetConfigurationTests {
public void readGsdDirectory() {
String directory = "src/test/resources";
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, PLC4X, (PLC4X_1)]]&gsddirectory=" + directory);
+ ProfinetConfiguration.class, "", "", "",
+ "devices=[[device_name_1, PLC4X, (PLC4X_1)]]&gsddirectory=" + directory);
assertEquals(1, configuration.getGsdFiles().getGsdFiles().size());
}
@@ -58,7 +59,8 @@ public class ProfinetConfigurationTests {
String directory = "src/test/resources";
new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, PLC4X, (PLC4X_1)]]&gsddirectory=" + directory);
+ ProfinetConfiguration.class, "", "", "",
+ "devices=[[device_name_1, PLC4X, (PLC4X_1)]]&gsddirectory=" + directory);
Map<String, ProfinetISO15745Profile> gsdFiles = ProfinetConfiguration.getGsdFiles().getGsdFiles();
assertEquals(gsdFiles.size(), 1);
@@ -67,7 +69,7 @@ public class ProfinetConfigurationTests {
@Test
public void parseJoinedDeviceConfiguration() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "gsddirectory=src/test/resources&devices=[[device_name_1,device_access_1,(submodule_1,submodule_2)]]");
+ ProfinetConfiguration.class, "", "", "", "gsddirectory=src/test/resources&devices=[[device_name_1,device_access_1,(submodule_1,submodule_2)]]");
assertEquals(1, configuration.getDevices().getConfiguredDevices().size());
}
@@ -79,7 +81,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE_NAME_1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, device_access_1, (submodule_1, submodule_2)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device_name_1, device_access_1, (submodule_1, submodule_2)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> devices = configuration.getDevices().getConfiguredDevices();
@@ -93,7 +95,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE_NAME_1","DEVICE_NAME_2","DEVICE_NAME_3"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, PLC4X_1, (PLC4X_01,PLC4X_02,PLC4X_01,PLC4X_02)],[device_name_2, PLC4X_1, (PLC4X_01,PLC4X_02,PLC4X_01,PLC4X_02)],[device_name_3, PLC4X_1, (PLC4X_01,PLC4X_02,PLC4X_01,PLC4X_02)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device_name_1, PLC4X_1, (PLC4X_01,PLC4X_02,PLC4X_01,PLC4X_02)],[device_name_2, PLC4X_1, (PLC4X_01,PLC4X_02,PLC4X_01,PLC4X_02)],[device_name_3, PLC4X_1, (PLC4X_01,PLC4X_02,PLC4X_01,PLC4X_02)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> devices = configuration.getDevices().getConfiguredDevices();
@@ -106,7 +108,7 @@ public class ProfinetConfigurationTests {
public void readProfinetLowerCase() {
String[] deviceName = new String[] {"device_Name_1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, device_access_1, (submodule_1, submodule_2)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device_name_1, device_access_1, (submodule_1, submodule_2)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> devices = configuration.getDevices().getConfiguredDevices();
@@ -118,7 +120,7 @@ public class ProfinetConfigurationTests {
@Test
public void setIncorrectSubModule() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, PLC4X_1, (PLC4X_01, PLC4X_02, PLC4X_01, PLC4X_02)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device_name_1, PLC4X_1, (PLC4X_01, PLC4X_02, PLC4X_01, PLC4X_02)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -143,7 +145,7 @@ public class ProfinetConfigurationTests {
@Test
public void setCorrectSubModule() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -167,7 +169,7 @@ public class ProfinetConfigurationTests {
@Test
public void setCorrectSubModuleCaseInsensitive() {
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_dummy_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device_name_1, PLC4X_1, (PLC4X_DUMMY_MODULE, PLC4X_dummy_MODULE, PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -193,7 +195,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE_NAME_1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device_name_1, PLC4X 1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device_name_1, PLC4X 1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -221,7 +223,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE NAME 1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device name 1, PLC4X 1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device name 1, PLC4X 1, (PLC4X_DUMMY_MODULE, PLC4X_DUMMY_MODULE)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -248,7 +250,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE NAME 1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -277,7 +279,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE NAME 1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE,,1)]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE,,1)]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -309,7 +311,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE NAME 1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE,,1), 10.1.1.1]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE,,1), 10.1.1.1]]&gsddirectory=src/test/resources");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
Map<String, ProfinetDevice> devices = new HashMap<>();
@@ -334,7 +336,7 @@ public class ProfinetConfigurationTests {
String[] deviceNames = new String[] {"DEVICE NAME 1"};
ProfinetConfiguration configuration = new ConfigurationFactory().createConfiguration(
- ProfinetConfiguration.class, "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE,,1), 10.1.1.1]]&gsddirectory=src/test/resources");
+ ProfinetConfiguration.class, "", "", "", "devices=[[device name 1, PLC4X 1, (PLC4X DUMMY MODULE, PLC4X DUMMY MODULE,,1), 10.1.1.1]]&gsddirectory=src/test/resources");
NetworkInterface networkInterface = new DummyNetworkInterface("10.1.1.2", "255.255.255.0", "0.0.0.0");
Map<String, ConfigurationProfinetDevice> configuredDevices = configuration.getDevices().getConfiguredDevices();
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7HGeneratedDriverBase.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7HGeneratedDriverBase.java
index 954bd94aad..20c1485719 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7HGeneratedDriverBase.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7HGeneratedDriverBase.java
@@ -80,7 +80,7 @@ public class S7HGeneratedDriverBase extends GeneratedDriverBase<TPKTPacket> {
// Create the configuration object.
Configuration configuration = new ConfigurationFactory().createConfiguration(
- getConfigurationType(), paramString);
+ getConfigurationType(), protocolCode, transportCode, transportConfig, paramString);
if (configuration == null) {
throw new PlcConnectionException("Unsupported configuration");
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/ConfigurationFactory.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/ConfigurationFactory.java
index b2b16662e1..b0558ece38 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/ConfigurationFactory.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/ConfigurationFactory.java
@@ -22,12 +22,13 @@ import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
-import org.apache.plc4x.java.spi.configuration.annotations.*;
+import org.apache.plc4x.java.spi.configuration.annotations.ConfigurationParameter;
+import org.apache.plc4x.java.spi.configuration.annotations.ParameterConverter;
+import org.apache.plc4x.java.spi.configuration.annotations.Required;
import org.apache.plc4x.java.spi.configuration.annotations.defaults.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.ParameterizedType;
@@ -52,8 +53,8 @@ public class ConfigurationFactory {
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationFactory.class);
- // TODO Respect Path Params
- public <T extends Configuration> T createConfiguration(Class<T> pClazz, String configurationString) {
+ public <T extends Configuration> T createConfiguration(Class<T> pClazz, String protocolCode, String transportCode,
+ String transportConfig, String paramString) {
// Get a map of all configuration parameter fields.
// - Get a list of all fields in the given class.
Map<String, Field> fields = Arrays.stream(FieldUtils.getAllFields(pClazz))
@@ -76,14 +77,28 @@ public class ConfigurationFactory {
try {
instance = pClazz.getDeclaredConstructor().newInstance();
} catch (InvocationTargetException | InstantiationException |
- IllegalAccessException | NoSuchMethodException e) {
+ IllegalAccessException | NoSuchMethodException e) {
throw new IllegalArgumentException("Unable to Instantiate Configuration Class", e);
}
// Process the parameters passed in with the connection string.
try {
// Get a map of all parameters in the connection string.
- Map<String, List<String>> paramStringValues = splitQuery(configurationString);
+ Map<String, List<String>> paramStringValues = splitQuery(paramString);
+ paramStringValues = new HashMap<>(paramStringValues);
+ List<String> previousValue;
+ previousValue = paramStringValues.put("protocolCode", List.of(protocolCode));
+ if (previousValue != null) {
+ LOGGER.warn("protocolCode with value {} overridden by", protocolCode);
+ }
+ previousValue = paramStringValues.put("transportCode", List.of(transportCode));
+ if (previousValue != null) {
+ LOGGER.warn("transportCode with value {} overridden by", transportCode);
+ }
+ previousValue = paramStringValues.put("transportConfig", List.of(transportConfig));
+ if (previousValue != null) {
+ LOGGER.warn("transportConfig with value {} overridden by", transportConfig);
+ }
// Iterate over all fields and set the values to either the values specified
// in the param string or to defaults configured by annotations.
@@ -135,7 +150,7 @@ public class ConfigurationFactory {
if (configClass.isAssignableFrom(configuration.getClass())) {
try {
((HasConfiguration) obj).setConfiguration(configuration);
- } catch(Throwable t) {
+ } catch (Throwable t) {
LOGGER.error("Error setting the configuration", t);
throw new PlcRuntimeException("Error setting the configuration", t);
}
@@ -182,7 +197,8 @@ public class ConfigurationFactory {
if (converter.getType().isAssignableFrom(field.getType())) {
return converter.convert(valueString);
}
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
+ } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
+ NoSuchMethodException e) {
throw new IllegalArgumentException("Could not initialize parameter converter", e);
}
throw new IllegalArgumentException("Unsupported field type " + field.getType() + " for converter " + converterClass);
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java
index 63244c5a91..6159ce230a 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java
@@ -18,23 +18,23 @@
*/
package org.apache.plc4x.java.spi.connection;
-import static org.apache.plc4x.java.spi.configuration.ConfigurationFactory.*;
-
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.PlcDriver;
import org.apache.plc4x.java.api.authentication.PlcAuthentication;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.value.PlcValueHandler;
import org.apache.plc4x.java.spi.configuration.Configuration;
-import org.apache.plc4x.java.spi.generation.Message;
import org.apache.plc4x.java.spi.configuration.ConfigurationFactory;
+import org.apache.plc4x.java.spi.generation.Message;
import org.apache.plc4x.java.spi.optimizer.BaseOptimizer;
import org.apache.plc4x.java.spi.transport.Transport;
-import org.apache.plc4x.java.api.value.PlcValueHandler;
import java.util.ServiceLoader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static org.apache.plc4x.java.spi.configuration.ConfigurationFactory.configure;
+
public abstract class GeneratedDriverBase<BASE_PACKET extends Message> implements PlcDriver {
public static final String PROPERTY_PLC4X_FORCE_FIRE_DISCOVER_EVENT = "PLC4X_FORCE_FIRE_DISCOVER_EVENT";
@@ -110,11 +110,11 @@ public abstract class GeneratedDriverBase<BASE_PACKET extends Message> implement
Matcher matcher = URI_PATTERN.matcher(connectionString);
if (!matcher.matches()) {
throw new PlcConnectionException(
- "Connection string doesn't match the format '{protocol-code}:({transport-code})?//{transport-address}(?{parameter-string)?'");
+ "Connection string doesn't match the format '{protocol-code}:({transport-code})?//{transport-config}(?{parameter-string)?'");
}
final String protocolCode = matcher.group("protocolCode");
- final String transportCode = (matcher.group("transportCode") != null) ?
- matcher.group("transportCode") : getDefaultTransport();
+ String transportCodeMatch = matcher.group("transportCode");
+ final String transportCode = (transportCodeMatch != null) ? transportCodeMatch : getDefaultTransport();
final String transportConfig = matcher.group("transportConfig");
final String paramString = matcher.group("paramString");
@@ -126,8 +126,8 @@ public abstract class GeneratedDriverBase<BASE_PACKET extends Message> implement
}
// Create the configuration object.
- Configuration configuration = new ConfigurationFactory().createConfiguration(
- getConfigurationType(), paramString);
+ Configuration configuration = new ConfigurationFactory()
+ .createConfiguration(getConfigurationType(), protocolCode, transportCode, transportConfig, paramString);
if (configuration == null) {
throw new PlcConnectionException("Unsupported configuration");
}
@@ -151,7 +151,7 @@ public abstract class GeneratedDriverBase<BASE_PACKET extends Message> implement
// Create an instance of the communication channel which the driver should use.
ChannelFactory channelFactory = transport.createChannelFactory(transportConfig);
- if(channelFactory == null) {
+ if (channelFactory == null) {
throw new PlcConnectionException("Unable to get channel factory from url " + transportConfig);
}
configure(configuration, channelFactory);
@@ -161,25 +161,25 @@ public abstract class GeneratedDriverBase<BASE_PACKET extends Message> implement
// Make the "fire discover event" overridable via system property.
boolean fireDiscoverEvent = fireDiscoverEvent();
- if(System.getProperty(PROPERTY_PLC4X_FORCE_FIRE_DISCOVER_EVENT) != null) {
+ if (System.getProperty(PROPERTY_PLC4X_FORCE_FIRE_DISCOVER_EVENT) != null) {
fireDiscoverEvent = Boolean.parseBoolean(System.getProperty(PROPERTY_PLC4X_FORCE_FIRE_DISCOVER_EVENT));
}
// Make the "await setup complete" overridable via system property.
boolean awaitSetupComplete = awaitSetupComplete();
- if(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_SETUP_COMPLETE) != null) {
+ if (System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_SETUP_COMPLETE) != null) {
awaitSetupComplete = Boolean.parseBoolean(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_SETUP_COMPLETE));
}
// Make the "await disconnect complete" overridable via system property.
boolean awaitDisconnectComplete = awaitDisconnectComplete();
- if(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCONNECT_COMPLETE) != null) {
+ if (System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCONNECT_COMPLETE) != null) {
awaitDisconnectComplete = Boolean.parseBoolean(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCONNECT_COMPLETE));
}
// Make the "await disconnect complete" overridable via system property.
boolean awaitDiscoverComplete = awaitDiscoverComplete();
- if(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCOVER_COMPLETE) != null) {
+ if (System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCOVER_COMPLETE) != null) {
awaitDiscoverComplete = Boolean.parseBoolean(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCOVER_COMPLETE));
}
@@ -198,5 +198,4 @@ public abstract class GeneratedDriverBase<BASE_PACKET extends Message> implement
authentication);
}
-
}
diff --git a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/parser/ConnectionParserTest.java b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/parser/ConnectionParserTest.java
index 64c34644b8..0349273488 100644
--- a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/parser/ConnectionParserTest.java
+++ b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/parser/ConnectionParserTest.java
@@ -18,22 +18,22 @@
*/
package org.apache.plc4x.java.spi.parser;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.apache.plc4x.java.spi.configuration.Configuration;
import org.apache.plc4x.java.spi.configuration.ConfigurationFactory;
import org.apache.plc4x.java.spi.configuration.annotations.ConfigurationParameter;
-import org.apache.plc4x.java.spi.configuration.annotations.defaults.IntDefaultValue;
import org.apache.plc4x.java.spi.configuration.annotations.Required;
+import org.apache.plc4x.java.spi.configuration.annotations.defaults.IntDefaultValue;
import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
class ConnectionParserTest {
@Test
void parse() throws PlcConnectionException {
PropertiesDescriptor properties = new ConfigurationFactory().createConfiguration(
- PropertiesDescriptor.class, "rackId=2");
+ PropertiesDescriptor.class, "", "", "", "rackId=2");
assertEquals(2, properties.getRackId());
assertEquals(1, properties.getSlotId());
diff --git a/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java b/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java
index a83f86e6d2..47e28d4703 100644
--- a/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java
+++ b/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java
@@ -31,7 +31,7 @@ import java.util.regex.Pattern;
public class TcpTransport implements Transport, HasConfiguration<TcpTransportConfiguration> {
private static final Pattern TRANSPORT_TCP_PATTERN = Pattern.compile(
- "^((?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(?<hostname>[a-zA-Z0-9.\\-]+))(:(?<port>[0-9]{1,5}))?");
+ "^((?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(?<hostname>[a-zA-Z0-9.\\-]+))(:(?<port>[0-9]{1,5}))?.*");
private TcpTransportConfiguration configuration;
@@ -53,8 +53,8 @@ public class TcpTransport implements Transport, HasConfiguration<TcpTransportCon
@Override
public ChannelFactory createChannelFactory(String transportConfig) {
final Matcher matcher = TRANSPORT_TCP_PATTERN.matcher(transportConfig);
- if(!matcher.matches()) {
- throw new PlcRuntimeException("Invalid url for TCP transport");
+ if (!matcher.matches()) {
+ throw new PlcRuntimeException("Invalid url for TCP transport: " + transportConfig);
}
String ip = matcher.group("ip");
String hostname = matcher.group("hostname");
@@ -62,7 +62,7 @@ public class TcpTransport implements Transport, HasConfiguration<TcpTransportCon
// If the port wasn't specified, try to get a default port from the configuration.
int port;
- if(portString != null) {
+ if (portString != null) {
port = Integer.parseInt(portString);
} else if ((configuration != null) &&
(configuration.getDefaultPort() != TcpTransportConfiguration.NO_DEFAULT_PORT)) {
diff --git a/protocols/opcua/src/test/resources/protocols/opcua/DriverTestsuite.xml b/protocols/opcua/src/test/resources/protocols/opcua/DriverTestsuite.xml
index c2ad6fd086..3bf83d1eb9 100644
--- a/protocols/opcua/src/test/resources/protocols/opcua/DriverTestsuite.xml
+++ b/protocols/opcua/src/test/resources/protocols/opcua/DriverTestsuite.xml
@@ -48,7 +48,7 @@
<endpoint>
<PascalString>
<sLength dataType="int" bitLength="32">15</sLength>
- <stringValue dataType="string" bitLength="120" encoding="UTF-8">opc.test://hurz</stringValue>
+ <stringValue dataType="string" bitLength="120" encoding="UTF-8">opc.test://test</stringValue>
</PascalString>
</endpoint>
</OpcuaHelloRequest>