From 9cf1473059e92237c52dc73cdf39682f40d0546e Mon Sep 17 00:00:00 2001 From: Philipp Zehnder Date: Wed, 6 Mar 2024 08:24:35 +0100 Subject: [PATCH] #2144 Enhance Static Properties by UI validation V2 (#2443) * #2144 updated port number fields to Integer type for ui validation * #2144 added migration for Plc4xModbusAdapter * #2144 added migration for Plc4xModbusAdapter * #2144 added migration V2 for OpcUaAdapter * #2144 added migration V2 for OpcUaAdapter * #2144 added migration for RosBridgeAdapter * checkstyle changes * #2144 Added migration test for Plc4xModbusAdapter * #2144 Added migration test for RosBridgeAdapter * #2144 Added migration test for OpcUaAdapterMigrationV2 * fix(#2144): Fix label generation for migrated elements * fix(#2144): Set default static property values for adapter instance * fix(#2144): Set default static property values for adapter instance * Updated OpcUaAdapterMigrationTest (#2454) * fix(#2144): Rename test for opc migration v2 * fix(#2144): Add methods to provide default if not set by user * fix(#2144): Change logic of opc ua migration * fix(#2144): Update modbus adapater migration * fix(#2144): Update ros bridge adapter migration * fix(#2144): Change default value of replaceTitles --------- Co-authored-by: Isaak --- .../management/locales/LabelGenerator.java | 16 ++- .../streampipes-connect-adapters-iiot/pom.xml | 5 + .../IIoTAdaptersExtensionModuleExport.java | 5 +- .../RosBridgeAdapterMigrationV1.java | 64 +++++++++++ .../iiot/adapters/ros/RosBridgeAdapter.java | 10 +- .../RosBridgeAdapterMigrationV1Test.java | 61 +++++++++++ .../RosBridgeAdapterVersionedConfig.java | 61 +++++++++++ .../opcua/OpcUaConnectorsModuleExport.java | 4 +- .../opcua/adapter/OpcUaAdapter.java | 2 +- .../opcua/config/SharedUserConfiguration.java | 2 +- .../migration/OpcUaAdapterMigrationV2.java | 99 +++++++++++++++++ .../OpcUaAdapterMigrationV2Test.java | 77 +++++++++++++ .../config/OpcUaAdapterVersionedConfig.java | 102 ++++++++++++++++++ .../streampipes-connectors-plc/pom.xml | 6 ++ .../plc/PlcConnectorsModuleExport.java | 4 +- .../Plc4xModbusAdapterMigrationV1.java | 64 +++++++++++ .../adapter/modbus/Plc4xModbusAdapter.java | 20 ++-- .../Plc4xModbusAdapterMigrationTest.java | 60 +++++++++++ .../Plc4xModbusAdapterVersionedConfig.java | 63 +++++++++++ .../FreeTextStaticProperty.java | 57 +++++++++- .../model/staticproperty/StaticProperty.java | 43 ++++++++ .../StaticPropertyAlternative.java | 35 ++++++ .../StaticPropertyAlternatives.java | 32 ++++++ .../staticproperty/StaticPropertyGroup.java | 38 +++++++ .../migration/MigrateExtensionsResource.java | 85 ++++++++++----- .../streampipes/sdk/StaticProperties.java | 7 ++ 26 files changed, 969 insertions(+), 53 deletions(-) create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/migrations/RosBridgeAdapterMigrationV1.java create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/test/java/org/apache/streampipes/connect/iiot/adapters/migrations/RosBridgeAdapterMigrationV1Test.java create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/test/java/org/apache/streampipes/connect/iiot/adapters/migrations/config/RosBridgeAdapterVersionedConfig.java create mode 100644 streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/migration/OpcUaAdapterMigrationV2.java create mode 100644 streampipes-extensions/streampipes-connectors-opcua/src/test/java/org/apache/streampipes/extensions/connectors/opcua/migration/OpcUaAdapterMigrationV2Test.java create mode 100644 streampipes-extensions/streampipes-connectors-opcua/src/test/java/org/apache/streampipes/extensions/connectors/opcua/migration/config/OpcUaAdapterVersionedConfig.java create mode 100644 streampipes-extensions/streampipes-connectors-plc/src/main/java/org/apache/streampipes/extensions/connectors/plc/adapter/migration/Plc4xModbusAdapterMigrationV1.java create mode 100644 streampipes-extensions/streampipes-connectors-plc/src/test/java/org/apache/streampipes/extensions/connectors/plc/adapter/migration/Plc4xModbusAdapterMigrationTest.java create mode 100644 streampipes-extensions/streampipes-connectors-plc/src/test/java/org/apache/streampipes/extensions/connectors/plc/adapter/migration/config/Plc4xModbusAdapterVersionedConfig.java diff --git a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java index a1be4db1d0..dafe5f2799 100644 --- a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java +++ b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java @@ -50,15 +50,25 @@ public class LabelGenerator { private T desc; - public LabelGenerator(T desc) { + private boolean replaceTitles; + + public LabelGenerator(T desc, boolean replaceTitles) { this.desc = desc; + this.replaceTitles = replaceTitles; + } + + public LabelGenerator(T desc) { + this(desc, true); } public T generateLabels() throws IOException { if (existsLocalesFile()) { Properties props = laodResourceAndMakeProperties(); - desc.setName(getTitle(props, desc.getAppId())); - desc.setDescription(getDescription(props, desc.getAppId())); + + if (replaceTitles) { + desc.setName(getTitle(props, desc.getAppId())); + desc.setDescription(getDescription(props, desc.getAppId())); + } if (isAdapter()) { ((AdapterDescription) desc).getConfig() diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml index f2917f08b7..6abe50afd5 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml @@ -106,6 +106,11 @@ junit test + + org.mockito + mockito-core + test + diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/IIoTAdaptersExtensionModuleExport.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/IIoTAdaptersExtensionModuleExport.java index 9714149241..49ff96c34f 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/IIoTAdaptersExtensionModuleExport.java +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/IIoTAdaptersExtensionModuleExport.java @@ -19,6 +19,7 @@ package org.apache.streampipes.connect.iiot; import org.apache.streampipes.connect.iiot.adapters.iolink.IfmAlMqttAdapter; +import org.apache.streampipes.connect.iiot.adapters.migrations.RosBridgeAdapterMigrationV1; import org.apache.streampipes.connect.iiot.adapters.ros.RosBridgeAdapter; import org.apache.streampipes.connect.iiot.adapters.simulator.machine.MachineDataSimulatorAdapter; import org.apache.streampipes.connect.iiot.protocol.stream.FileReplayAdapter; @@ -52,6 +53,8 @@ public List> pipelineElements() { @Override public List> migrators() { - return Collections.emptyList(); + return List.of( + new RosBridgeAdapterMigrationV1() + ); } } diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/migrations/RosBridgeAdapterMigrationV1.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/migrations/RosBridgeAdapterMigrationV1.java new file mode 100644 index 0000000000..3d41e7fbf5 --- /dev/null +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/migrations/RosBridgeAdapterMigrationV1.java @@ -0,0 +1,64 @@ +/* + * 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.connect.iiot.adapters.migrations; + +import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; +import org.apache.streampipes.extensions.api.migration.IAdapterMigrator; +import org.apache.streampipes.model.connect.adapter.AdapterDescription; +import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceTagPrefix; +import org.apache.streampipes.model.migration.MigrationResult; +import org.apache.streampipes.model.migration.ModelMigratorConfig; +import org.apache.streampipes.model.staticproperty.FreeTextStaticProperty; +import org.apache.streampipes.model.staticproperty.StaticProperty; +import org.apache.streampipes.vocabulary.XSD; + +import static org.apache.streampipes.connect.iiot.adapters.ros.RosBridgeAdapter.ROS_PORT_KEY; + +public class RosBridgeAdapterMigrationV1 implements IAdapterMigrator { + + @Override + public ModelMigratorConfig config() { + return new ModelMigratorConfig( + "org.apache.streampipes.connect.iiot.adapters.ros", + SpServiceTagPrefix.ADAPTER, + 0, + 1); + } + + @Override + public MigrationResult migrate(AdapterDescription element, + IStaticPropertyExtractor extractor) throws RuntimeException { + + var portProperty = extractPortProperty(element); + portProperty.setRequiredDatatype(XSD.INTEGER); + + return MigrationResult.success(element); + } + + protected FreeTextStaticProperty extractPortProperty(AdapterDescription adapterDescription) { + return (FreeTextStaticProperty) adapterDescription.getConfig().stream() + .filter(this::isPortConfig) + .findFirst() + .orElseThrow(); + } + + private boolean isPortConfig(StaticProperty config) { + return config.getInternalName().equals(ROS_PORT_KEY); + } +} \ No newline at end of file diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/ros/RosBridgeAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/ros/RosBridgeAdapter.java index 675461ecbe..9ff1d9ecb2 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/ros/RosBridgeAdapter.java +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/ros/RosBridgeAdapter.java @@ -60,9 +60,9 @@ public class RosBridgeAdapter implements StreamPipesAdapter, ResolvesContainerPr public static final String ID = "org.apache.streampipes.connect.iiot.adapters.ros"; - private static final String ROS_HOST_KEY = "ROS_HOST_KEY"; - private static final String ROS_PORT_KEY = "ROS_PORT_KEY"; - private static final String TOPIC_KEY = "TOPIC_KEY"; + public static final String ROS_HOST_KEY = "ROS_HOST_KEY"; + public static final String ROS_PORT_KEY = "ROS_PORT_KEY"; + public static final String TOPIC_KEY = "TOPIC_KEY"; private String topic; private String host; @@ -92,12 +92,12 @@ public List