This is an automated email from the ASF dual-hosted git repository. zehnder pushed a commit to branch SP-1664 in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 9fda1aa025335802cd595c56e82a9c4bff86cd4b Author: Philipp Zehnder <[email protected]> AuthorDate: Tue Jun 6 21:35:52 2023 +0200 [#1664] Extract all opc labels into an enum class --- .../connect/iiot/ConnectAdapterIiotInit.java | 1 - .../connectors/opcua/adapter/OpcUaAdapter.java | 69 ++++++++++--------- .../configuration/SpOpcUaConfigBuilder.java | 78 +++++++++++++++------- .../connectors/opcua/adapter/utils/OpcUaUtil.java | 35 ++-------- .../connectors/opcua/sink/OpcUaSink.java | 32 ++++----- .../connectors/opcua/utils/OpcUaLabels.java | 45 +++++++++++++ .../strings.en | 20 +++--- .../org/apache/streampipes/sdk/helpers/Labels.java | 14 ++++ .../apache/streampipes/sdk/helpers/LabelsTest.java | 41 ++++++++++++ 9 files changed, 227 insertions(+), 108 deletions(-) diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java index 1c53e37c1..05e154f49 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java @@ -19,7 +19,6 @@ package org.apache.streampipes.connect.iiot; import org.apache.streampipes.connect.iiot.adapters.iolink.IfmAlMqttAdapter; -import org.apache.streampipes.connect.iiot.adapters.opcua.OpcUaAdapter; import org.apache.streampipes.connect.iiot.adapters.plc4x.modbus.Plc4xModbusAdapter; import org.apache.streampipes.connect.iiot.adapters.plc4x.s7.Plc4xS7Adapter; import org.apache.streampipes.connect.iiot.adapters.ros.RosBridgeAdapter; diff --git a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java index f642a3d91..60fd1b333 100644 --- a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java +++ b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java @@ -62,17 +62,26 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.AVAILABLE_NODES; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.NAMESPACE_INDEX; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.NODE_ID; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.OPC_HOST; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.OPC_HOST_OR_URL; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.OPC_SERVER_HOST; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.OPC_SERVER_PORT; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.OPC_SERVER_URL; -import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.OpcUaLabels.OPC_URL; import static org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUtil.getSchema; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.ACCESS_MODE; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.ADAPTER_TYPE; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.AVAILABLE_NODES; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.HOST_PORT; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.NAMESPACE_INDEX; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.NODE_ID; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_HOST; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_HOST_OR_URL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_HOST; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_PORT; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_URL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_URL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.PASSWORD; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.PULLING_INTERVAL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.PULL_MODE; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.SUBSCRIPTION_MODE; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.UNAUTHENTICATED; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.USERNAME; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.USERNAME_GROUP; public class OpcUaAdapter implements StreamPipesAdapter, IPullAdapter, SupportsRuntimeConfig { @@ -236,40 +245,40 @@ public class OpcUaAdapter implements StreamPipesAdapter, IPullAdapter, SupportsR .withAssets(Assets.DOCUMENTATION, Assets.ICON) .withLocales(Locales.EN) .withCategory(AdapterType.Generic, AdapterType.Manufacturing) - .requiredAlternatives(Labels.withId(OpcUaLabels.ADAPTER_TYPE.name()), - Alternatives.from(Labels.withId(OpcUaLabels.PULL_MODE.name()), + .requiredAlternatives(Labels.withId(ADAPTER_TYPE), + Alternatives.from(Labels.withId(PULL_MODE), StaticProperties.integerFreeTextProperty( - Labels.withId(OpcUaLabels.PULLING_INTERVAL.name()))), - Alternatives.from(Labels.withId(OpcUaLabels.SUBSCRIPTION_MODE.name()))) - .requiredAlternatives(Labels.withId(OpcUaLabels.ACCESS_MODE.name()), - Alternatives.from(Labels.withId(OpcUaLabels.UNAUTHENTICATED.name())), - Alternatives.from(Labels.withId(OpcUaLabels.USERNAME_GROUP.name()), + Labels.withId(PULLING_INTERVAL))), + Alternatives.from(Labels.withId(SUBSCRIPTION_MODE))) + .requiredAlternatives(Labels.withId(ACCESS_MODE), + Alternatives.from(Labels.withId(UNAUTHENTICATED)), + Alternatives.from(Labels.withId(USERNAME_GROUP), StaticProperties.group( - Labels.withId(OpcUaLabels.USERNAME_GROUP.name()), + Labels.withId(USERNAME_GROUP), StaticProperties.stringFreeTextProperty( - Labels.withId(OpcUaLabels.USERNAME.name())), - StaticProperties.secretValue(Labels.withId(OpcUaLabels.PASSWORD.name())) + Labels.withId(USERNAME)), + StaticProperties.secretValue(Labels.withId(PASSWORD)) )) ) - .requiredAlternatives(Labels.withId(OPC_HOST_OR_URL.name()), + .requiredAlternatives(Labels.withId(OPC_HOST_OR_URL), Alternatives.from( - Labels.withId(OPC_URL.name()), + Labels.withId(OPC_URL), StaticProperties.stringFreeTextProperty( - Labels.withId(OPC_SERVER_URL.name()), "opc.tcp://localhost:4840")) + Labels.withId(OPC_SERVER_URL), "opc.tcp://localhost:4840")) , - Alternatives.from(Labels.withId(OPC_HOST.name()), + Alternatives.from(Labels.withId(OPC_HOST), StaticProperties.group( - Labels.withId("host-port"), + Labels.withId(HOST_PORT), StaticProperties.stringFreeTextProperty( - Labels.withId(OPC_SERVER_HOST.name())), + Labels.withId(OPC_SERVER_HOST)), StaticProperties.stringFreeTextProperty( - Labels.withId(OPC_SERVER_PORT.name())) + Labels.withId(OPC_SERVER_PORT)) )) ) - .requiredTextParameter(Labels.withId(NAMESPACE_INDEX.name())) - .requiredTextParameter(Labels.withId(NODE_ID.name())) + .requiredTextParameter(Labels.withId(NAMESPACE_INDEX)) + .requiredTextParameter(Labels.withId(NODE_ID)) .requiredRuntimeResolvableTreeInput( - Labels.withId(AVAILABLE_NODES.name()), + Labels.withId(AVAILABLE_NODES), Arrays.asList(NAMESPACE_INDEX.name(), NODE_ID.name()) ) .buildConfiguration(); diff --git a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/configuration/SpOpcUaConfigBuilder.java b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/configuration/SpOpcUaConfigBuilder.java index 66d7633e9..c467afae9 100644 --- a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/configuration/SpOpcUaConfigBuilder.java +++ b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/configuration/SpOpcUaConfigBuilder.java @@ -23,6 +23,22 @@ import org.apache.streampipes.extensions.connectors.opcua.adapter.utils.OpcUaUti import java.util.List; +import static org.apache.kafka.common.config.ConfigDef.Type.PASSWORD; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.ACCESS_MODE; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.ADAPTER_TYPE; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.AVAILABLE_NODES; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.NAMESPACE_INDEX; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.NODE_ID; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_HOST_OR_URL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_HOST; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_PORT; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_URL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_URL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.PULLING_INTERVAL; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.PULL_MODE; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.UNAUTHENTICATED; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.USERNAME; + public class SpOpcUaConfigBuilder { /** @@ -35,61 +51,77 @@ public class SpOpcUaConfigBuilder { public static SpOpcUaConfig from(IStaticPropertyExtractor extractor) { String selectedAlternativeConnection = - extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.OPC_HOST_OR_URL.name()); + extractor.selectedAlternativeInternalId(OPC_HOST_OR_URL.name()); String selectedAlternativeAuthentication = - extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.ACCESS_MODE.name()); + extractor.selectedAlternativeInternalId(ACCESS_MODE.name()); - int namespaceIndex = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.NAMESPACE_INDEX.name(), int.class); - String nodeId = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.NODE_ID.name(), String.class); + int namespaceIndex = extractor.singleValueParameter(NAMESPACE_INDEX.name(), int.class); + String nodeId = extractor.singleValueParameter(NODE_ID.name(), String.class); - boolean usePullMode = extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.ADAPTER_TYPE.name()) - .equals(OpcUaUtil.OpcUaLabels.PULL_MODE.name()); - boolean useURL = selectedAlternativeConnection.equals(OpcUaUtil.OpcUaLabels.OPC_URL.name()); - boolean unauthenticated = selectedAlternativeAuthentication.equals(OpcUaUtil.OpcUaLabels.UNAUTHENTICATED.name()); + boolean usePullMode = extractor.selectedAlternativeInternalId(ADAPTER_TYPE.name()) + .equals(PULL_MODE.name()); + boolean useURL = selectedAlternativeConnection.equals(OPC_URL.name()); + boolean unauthenticated = selectedAlternativeAuthentication.equals(UNAUTHENTICATED.name()); Integer pullIntervalSeconds = null; if (usePullMode) { pullIntervalSeconds = - extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.PULLING_INTERVAL.name(), Integer.class); + extractor.singleValueParameter(PULLING_INTERVAL.name(), Integer.class); } List<String> selectedNodeNames = - extractor.selectedTreeNodesInternalNames(OpcUaUtil.OpcUaLabels.AVAILABLE_NODES.name(), String.class, true); + extractor.selectedTreeNodesInternalNames(AVAILABLE_NODES.name(), String.class, true); if (useURL && unauthenticated) { String serverAddress = - extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_URL.name(), String.class); + extractor.singleValueParameter(OPC_SERVER_URL.name(), String.class); serverAddress = OpcUaUtil.formatServerAddress(serverAddress); return new SpOpcUaConfig(serverAddress, namespaceIndex, nodeId, pullIntervalSeconds, selectedNodeNames); } else if (!useURL && unauthenticated) { String serverAddress = - extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_HOST.name(), String.class); + extractor.singleValueParameter(OPC_SERVER_HOST.name(), String.class); serverAddress = OpcUaUtil.formatServerAddress(serverAddress); - int port = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_PORT.name(), int.class); - - return new SpOpcUaConfig(serverAddress, port, namespaceIndex, nodeId, pullIntervalSeconds, selectedNodeNames); + int port = extractor.singleValueParameter(OPC_SERVER_PORT.name(), int.class); + + return new SpOpcUaConfig(serverAddress, + port, + namespaceIndex, + nodeId, + pullIntervalSeconds, + selectedNodeNames); } else { - String username = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.USERNAME.name(), String.class); - String password = extractor.secretValue(OpcUaUtil.OpcUaLabels.PASSWORD.name()); + String username = extractor.singleValueParameter(USERNAME.name(), String.class); + String password = extractor.secretValue(PASSWORD.name()); if (useURL) { String serverAddress = - extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_URL.name(), String.class); + extractor.singleValueParameter(OPC_SERVER_URL.name(), String.class); serverAddress = OpcUaUtil.formatServerAddress(serverAddress); - return new SpOpcUaConfig(serverAddress, namespaceIndex, nodeId, username, password, pullIntervalSeconds, + return new SpOpcUaConfig(serverAddress, + namespaceIndex, + nodeId, + username, + password, + pullIntervalSeconds, selectedNodeNames); } else { String serverAddress = - extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_HOST.name(), String.class); + extractor.singleValueParameter(OPC_SERVER_HOST.name(), String.class); serverAddress = OpcUaUtil.formatServerAddress(serverAddress); - int port = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_PORT.name(), int.class); - - return new SpOpcUaConfig(serverAddress, port, namespaceIndex, nodeId, username, password, pullIntervalSeconds, + int port = extractor.singleValueParameter(OPC_SERVER_PORT.name(), int.class); + + return new SpOpcUaConfig(serverAddress, + port, + namespaceIndex, + nodeId, + username, + password, + pullIntervalSeconds, selectedNodeNames); } } diff --git a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/utils/OpcUaUtil.java b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/utils/OpcUaUtil.java index 6acb0a70b..e7a250f85 100644 --- a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/utils/OpcUaUtil.java +++ b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/utils/OpcUaUtil.java @@ -23,10 +23,12 @@ import org.apache.streampipes.commons.exceptions.connect.AdapterException; import org.apache.streampipes.commons.exceptions.connect.ParseException; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; +import org.apache.streampipes.extensions.api.runtime.ResolvesContainerProvidedOptions; import org.apache.streampipes.extensions.connectors.opcua.adapter.OpcNode; import org.apache.streampipes.extensions.connectors.opcua.adapter.OpcUaNodeBrowser; import org.apache.streampipes.extensions.connectors.opcua.adapter.SpOpcUaClient; import org.apache.streampipes.extensions.connectors.opcua.adapter.configuration.SpOpcUaConfigBuilder; +import org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels; import org.apache.streampipes.model.connect.guess.FieldStatusInfo; import org.apache.streampipes.model.connect.guess.GuessSchema; import org.apache.streampipes.model.connect.guess.GuessTypeInfo; @@ -72,8 +74,8 @@ public class OpcUaUtil { } /*** - * OPC UA specific implementation of {@link Adapter} - * @param adapterStreamDescription + * OPC UA specific implementation of + * @param extractor * @return guess schema * @throws AdapterException * @throws ParseException @@ -157,9 +159,8 @@ public class OpcUaUtil { /*** - * OPC UA specific implementation of {@link - * ResolvesContainerProvidedOptions - * resolveOptions(String, StaticPropertyExtractor)}. + * OPC UA specific implementation of + * {@link ResolvesContainerProvidedOptions resolveOptions(String, StaticPropertyExtractor)}. * @param internalName The internal name of the Static Property * @param parameterExtractor to extract parameters from the OPC UA config * @return {@code List<Option>} with available node names for the given OPC UA configuration @@ -232,27 +233,5 @@ public class OpcUaUtil { } } - /*** - * Enum for all possible labels in the context of OPC UA adapters - */ - public enum OpcUaLabels { - OPC_HOST_OR_URL, - OPC_URL, - OPC_HOST, - OPC_SERVER_URL, - OPC_SERVER_HOST, - OPC_SERVER_PORT, - NAMESPACE_INDEX, - NODE_ID, - ACCESS_MODE, - USERNAME_GROUP, - USERNAME, - PASSWORD, - UNAUTHENTICATED, - AVAILABLE_NODES, - PULLING_INTERVAL, - ADAPTER_TYPE, - PULL_MODE, - SUBSCRIPTION_MODE; - } + } diff --git a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/sink/OpcUaSink.java b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/sink/OpcUaSink.java index 43e34491a..8532172b9 100644 --- a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/sink/OpcUaSink.java +++ b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/sink/OpcUaSink.java @@ -34,13 +34,13 @@ import org.apache.streampipes.sdk.helpers.Labels; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; -public class OpcUaSink implements IStreamPipesDataSink { +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.MAPPING_PROPERY; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.NAMESPACE_INDEX; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.NODE_ID; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_HOST; +import static org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaLabels.OPC_SERVER_PORT; - private static final String OPC_SERVER_KEY = "opc_host"; - private static final String OPC_PORT_KEY = "opc_port"; - private static final String OPC_NAMESPACE_INDEX_KEY = "opc_namespace_index"; - private static final String OPC_NODE_ID_KEY = "opc_node_id_index"; - private static final String MAPPING_PROPERTY_KEY = "mapping_property_key"; +public class OpcUaSink implements IStreamPipesDataSink { private OpcUa opcUa; @@ -55,12 +55,12 @@ public class OpcUaSink implements IStreamPipesDataSink { .requiredStream(StreamRequirementsBuilder .create() .requiredPropertyWithUnaryMapping(EpRequirements.anyProperty(), - Labels.withId(MAPPING_PROPERTY_KEY), + Labels.withId(MAPPING_PROPERY), PropertyScope.NONE).build()) - .requiredTextParameter(Labels.withId(OPC_SERVER_KEY)) - .requiredIntegerParameter(Labels.withId(OPC_PORT_KEY)) - .requiredIntegerParameter(Labels.withId(OPC_NAMESPACE_INDEX_KEY)) - .requiredTextParameter(Labels.withId(OPC_NODE_ID_KEY)) + .requiredTextParameter(Labels.withId(OPC_SERVER_HOST)) + .requiredIntegerParameter(Labels.withId(OPC_SERVER_PORT)) + .requiredIntegerParameter(Labels.withId(NAMESPACE_INDEX)) + .requiredTextParameter(Labels.withId(NODE_ID)) .build() ); } @@ -69,13 +69,13 @@ public class OpcUaSink implements IStreamPipesDataSink { public void onPipelineStarted(IDataSinkParameters parameters, EventSinkRuntimeContext runtimeContext) { var extractor = parameters.extractor(); - String hostname = extractor.singleValueParameter(OPC_SERVER_KEY, String.class); - Integer port = extractor.singleValueParameter(OPC_PORT_KEY, Integer.class); + String hostname = extractor.singleValueParameter(OPC_SERVER_HOST.name(), String.class); + Integer port = extractor.singleValueParameter(OPC_SERVER_PORT.name(), Integer.class); - String nodeId = extractor.singleValueParameter(OPC_NODE_ID_KEY, String.class); - Integer nameSpaceIndex = extractor.singleValueParameter(OPC_NAMESPACE_INDEX_KEY, Integer.class); + String nodeId = extractor.singleValueParameter(NODE_ID.name(), String.class); + Integer nameSpaceIndex = extractor.singleValueParameter(NAMESPACE_INDEX.name(), Integer.class); - String mappingPropertySelector = extractor.mappingPropertyValue(MAPPING_PROPERTY_KEY); + String mappingPropertySelector = extractor.mappingPropertyValue(NODE_ID.name()); String mappingPropertyType = ""; try { diff --git a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/utils/OpcUaLabels.java b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/utils/OpcUaLabels.java new file mode 100644 index 000000000..69815516b --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/utils/OpcUaLabels.java @@ -0,0 +1,45 @@ +/* + * 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.streampipes.extensions.connectors.opcua.utils; + +/*** + * Enum for all possible labels in the context of OPC UA adapters + */ +public enum OpcUaLabels { + OPC_HOST_OR_URL, + OPC_URL, + OPC_HOST, + OPC_SERVER_URL, + OPC_SERVER_HOST, + OPC_SERVER_PORT, + HOST_PORT, + NAMESPACE_INDEX, + NODE_ID, + ACCESS_MODE, + USERNAME_GROUP, + USERNAME, + PASSWORD, + UNAUTHENTICATED, + AVAILABLE_NODES, + PULLING_INTERVAL, + ADAPTER_TYPE, + PULL_MODE, + SUBSCRIPTION_MODE, + MAPPING_PROPERY; +} diff --git a/streampipes-extensions/streampipes-connectors-opcua/src/main/resources/org.apache.streampipes.sinks.databases.jvm.opcua/strings.en b/streampipes-extensions/streampipes-connectors-opcua/src/main/resources/org.apache.streampipes.sinks.databases.jvm.opcua/strings.en index 26b0561ef..4df4e7598 100644 --- a/streampipes-extensions/streampipes-connectors-opcua/src/main/resources/org.apache.streampipes.sinks.databases.jvm.opcua/strings.en +++ b/streampipes-extensions/streampipes-connectors-opcua/src/main/resources/org.apache.streampipes.sinks.databases.jvm.opcua/strings.en @@ -18,17 +18,17 @@ org.apache.streampipes.sinks.databases.jvm.opcua.title=OPC-UA org.apache.streampipes.sinks.databases.jvm.opcua.description=Writes values in an OPC-UA server -opc_host.title=Host Address -opc_host.description=The host address of the OPC-UA server (Example: opc-ua-server.com, opc.tcp://opc-ua-server.com) +OPC_SERVER_HOST.title=Host Address +OPC_SERVER_HOST.description=The host address of the OPC-UA server (Example: opc-ua-server.com, opc.tcp://opc-ua-server.com) -opc_port.title=Port -opc_port.description=The port of the OPC-UA server (Example: 4840) +OPC_SERVER_PORT.title=Port +OPC_SERVER_PORT.description=The port of the OPC-UA server (Example: 4840) -opc_namespace_index.title=Namespace Index -opc_namespace_index.description=The number of the namespace +NAMESPACE_INDEX.title=Namespace Index +NAMESPACE_INDEX.description=The number of the namespace -opc_node_id_index.title=Node Id -opc_node_id_index.description=Id of the node the result should be written to +NODE_ID.title=Node Id +NODE_ID.description=Id of the node the result should be written to -mapping_property_key.title=Event Property -mapping_property_key.description=The event property that should be written to the OPC-UA server +MAPPING_PROPERY.title=Event Property +MAPPING_PROPERY.description=The event property that should be written to the OPC-UA server diff --git a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java index fb8524eff..1a29aa0e4 100644 --- a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java +++ b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java @@ -49,6 +49,7 @@ public class Labels { public static Label from(String internalId, String label, String description) { return new Label(internalId, label, description); } + /** * @deprecated Externalize labels by using * {@link org.apache.streampipes.sdk.builder.AbstractProcessingElementBuilder#withLocales(Locales...)} @@ -69,13 +70,26 @@ public class Labels { * Creates a new label only with an internal id. * Static properties require a fully-specified label, see {@link #from(String, String, String)} * + * @deprecated Use {@link #withId(Enum)} instead + * * @param internalId The internal identifier of the element, e.g., "latitude-field-mapping" * @return */ + @Deprecated(since = "0.93.0") public static Label withId(String internalId) { return new Label(internalId, "", ""); } + /** + * Creates a label with the string value of an enum. + * Static properties require a fully-specified label, see {@link #from(String, String, String)} + * @param internalId The internal identifier of the element, e.g., "LATITUDE-FIELD-MAPPING" + * @return + */ + public static Label withId(Enum<?> internalId) { + return new Label(internalId.name(), "", ""); + } + @Deprecated /** * @deprecated Externalize labels by using diff --git a/streampipes-sdk/src/test/java/org/apache/streampipes/sdk/helpers/LabelsTest.java b/streampipes-sdk/src/test/java/org/apache/streampipes/sdk/helpers/LabelsTest.java new file mode 100644 index 000000000..471741267 --- /dev/null +++ b/streampipes-sdk/src/test/java/org/apache/streampipes/sdk/helpers/LabelsTest.java @@ -0,0 +1,41 @@ +/* + * 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.streampipes.sdk.helpers; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class LabelsTest { + private enum TestEnum { + TEST; + } + + @Test + public void withEnumId() { + var result = Labels.withId(TestEnum.TEST); + assertEquals(TestEnum.TEST.name(), result.getInternalId()); + } + + @Test + public void withStringId() { + var result = Labels.withId("test"); + assertEquals("test", result.getInternalId()); + } +} \ No newline at end of file
