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

riemer pushed a commit to branch 1618-migrate-data-sinks-in-databases-jvm-module
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to 
refs/heads/1618-migrate-data-sinks-in-databases-jvm-module by this push:
     new b03d09193 Migrate data sinks in databases-jvm module (#1618)
b03d09193 is described below

commit b03d0919399a848551d348022b70dd77d24f517e
Author: Dominik Riemer <[email protected]>
AuthorDate: Fri May 26 22:51:27 2023 +0200

    Migrate data sinks in databases-jvm module (#1618)
---
 .../sinks/databases/jvm/DatabasesJvmInit.java      | 20 ++---
 .../sinks/databases/jvm/couchdb/CouchDb.java       | 59 ---------------
 .../databases/jvm/couchdb/CouchDbParameters.java   | 61 ---------------
 .../{CouchDbController.java => CouchDbSink.java}   | 43 ++++++++---
 .../sinks/databases/jvm/ditto/DittoController.java | 81 --------------------
 .../sinks/databases/jvm/ditto/DittoParameters.java | 75 -------------------
 .../jvm/ditto/{Ditto.java => DittoSink.java}       | 62 ++++++++++++---
 .../sinks/databases/jvm/iotdb/IotDbController.java | 80 --------------------
 .../sinks/databases/jvm/iotdb/IotDbParameters.java | 87 ----------------------
 .../jvm/iotdb/{IotDb.java => IotDbSink.java}       | 76 +++++++++++++++----
 .../sinks/databases/jvm/opcua/OpcUa.java           | 47 ++++++------
 .../sinks/databases/jvm/opcua/OpcUaParameters.java | 67 ++++-------------
 .../opcua/{UpcUaController.java => OpcUaSink.java} | 33 +++++---
 .../sinks/databases/jvm/postgresql/PostgreSql.java |  9 +--
 .../jvm/postgresql/PostgreSqlParameters.java       |  3 -
 ...stgreSqlController.java => PostgreSqlSink.java} | 82 +++++++++++---------
 .../databases/jvm/iotdb/TestIotDbParameters.java   | 52 -------------
 17 files changed, 264 insertions(+), 673 deletions(-)

diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/DatabasesJvmInit.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/DatabasesJvmInit.java
index 23b2da117..313551c26 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/DatabasesJvmInit.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/DatabasesJvmInit.java
@@ -28,11 +28,11 @@ import 
org.apache.streampipes.messaging.jms.SpJmsProtocolFactory;
 import org.apache.streampipes.messaging.kafka.SpKafkaProtocolFactory;
 import org.apache.streampipes.messaging.mqtt.SpMqttProtocolFactory;
 import org.apache.streampipes.service.extensions.ExtensionsModelSubmitter;
-import org.apache.streampipes.sinks.databases.jvm.couchdb.CouchDbController;
-import org.apache.streampipes.sinks.databases.jvm.ditto.DittoController;
-import org.apache.streampipes.sinks.databases.jvm.iotdb.IotDbController;
-import org.apache.streampipes.sinks.databases.jvm.opcua.UpcUaController;
-import 
org.apache.streampipes.sinks.databases.jvm.postgresql.PostgreSqlController;
+import org.apache.streampipes.sinks.databases.jvm.couchdb.CouchDbSink;
+import org.apache.streampipes.sinks.databases.jvm.ditto.DittoSink;
+import org.apache.streampipes.sinks.databases.jvm.iotdb.IotDbSink;
+import org.apache.streampipes.sinks.databases.jvm.opcua.OpcUaSink;
+import org.apache.streampipes.sinks.databases.jvm.postgresql.PostgreSqlSink;
 import org.apache.streampipes.sinks.databases.jvm.redis.RedisController;
 
 public class DatabasesJvmInit extends ExtensionsModelSubmitter {
@@ -48,11 +48,11 @@ public class DatabasesJvmInit extends 
ExtensionsModelSubmitter {
             "",
             8090)
         .registerPipelineElements(
-            new CouchDbController(),
-            new UpcUaController(),
-            new PostgreSqlController(),
-            new IotDbController(),
-            new DittoController(),
+            new CouchDbSink(),
+            new OpcUaSink(),
+            new PostgreSqlSink(),
+            new IotDbSink(),
+            new DittoSink(),
             new RedisController())
         .registerMessagingFormats(
             new JsonDataFormatFactory(),
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDb.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDb.java
deleted file mode 100644
index c25c71154..000000000
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDb.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.sinks.databases.jvm.couchdb;
-
-import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.model.runtime.EventConverter;
-import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
-import org.apache.streampipes.wrapper.runtime.EventSink;
-
-import org.lightcouch.CouchDbClient;
-import org.lightcouch.CouchDbProperties;
-
-public class CouchDb implements EventSink<CouchDbParameters> {
-
-  private CouchDbClient couchDbClient;
-
-  @Override
-  public void onInvocation(CouchDbParameters parameters, 
EventSinkRuntimeContext runtimeContext) throws
-      SpRuntimeException {
-    this.couchDbClient = new CouchDbClient(new CouchDbProperties(
-        parameters.getDatabaseName(),
-        true,
-        "http",
-        parameters.getCouchDbHost(),
-        parameters.getCouchDbPort(),
-        parameters.getUser(),
-        parameters.getPassword()
-    ));
-  }
-
-  @Override
-  public void onEvent(Event inputEvent) {
-    couchDbClient.save(new EventConverter(inputEvent).toInputEventMap());
-  }
-
-  @Override
-  public void onDetach() throws SpRuntimeException {
-    this.couchDbClient.shutdown();
-  }
-
-
-}
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbParameters.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbParameters.java
deleted file mode 100644
index ee2321fa7..000000000
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbParameters.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.sinks.databases.jvm.couchdb;
-
-import org.apache.streampipes.model.graph.DataSinkInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventSinkBindingParams;
-
-public class CouchDbParameters extends EventSinkBindingParams {
-
-  private String couchDbHost;
-  private Integer couchDbPort;
-  private String databaseName;
-  private String user;
-  private String password;
-
-  public CouchDbParameters(DataSinkInvocation graph, String couchDbHost, 
Integer couchDbPort, String databaseName,
-                           String user, String password) {
-    super(graph);
-    this.couchDbHost = couchDbHost;
-    this.couchDbPort = couchDbPort;
-    this.databaseName = databaseName;
-    this.user = user;
-    this.password = password;
-  }
-
-  public String getCouchDbHost() {
-    return couchDbHost;
-  }
-
-  public Integer getCouchDbPort() {
-    return couchDbPort;
-  }
-
-  public String getDatabaseName() {
-    return databaseName;
-  }
-
-  public String getUser() {
-    return user;
-  }
-
-  public String getPassword() {
-    return password;
-  }
-}
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbController.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbSink.java
similarity index 70%
rename from 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbController.java
rename to 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbSink.java
index 9adf5c7f4..775ddf131 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbController.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/couchdb/CouchDbSink.java
@@ -18,20 +18,25 @@
 
 package org.apache.streampipes.sinks.databases.jvm.couchdb;
 
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.model.DataSinkType;
 import org.apache.streampipes.model.graph.DataSinkDescription;
-import org.apache.streampipes.model.graph.DataSinkInvocation;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.runtime.EventConverter;
 import org.apache.streampipes.sdk.builder.DataSinkBuilder;
 import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor;
 import org.apache.streampipes.sdk.helpers.EpRequirements;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventSink;
-import 
org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventSinkDeclarer;
+import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
+import org.apache.streampipes.wrapper.standalone.SinkParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink;
 
-public class CouchDbController extends 
StandaloneEventSinkDeclarer<CouchDbParameters> {
+import org.lightcouch.CouchDbClient;
+import org.lightcouch.CouchDbProperties;
+
+public class CouchDbSink extends StreamPipesDataSink {
 
   private static final String DATABASE_HOST_KEY = "db_host";
   private static final String DATABASE_PORT_KEY = "db_port";
@@ -39,6 +44,8 @@ public class CouchDbController extends 
StandaloneEventSinkDeclarer<CouchDbParame
   private static final String DATABASE_USER_KEY = "db_user";
   private static final String DATABASE_PASSORD_KEY = "db_password";
 
+  private CouchDbClient couchDbClient;
+
   @Override
   public DataSinkDescription declareModel() {
     return 
DataSinkBuilder.create("org.apache.streampipes.sinks.databases.jvm.couchdb")
@@ -55,11 +62,10 @@ public class CouchDbController extends 
StandaloneEventSinkDeclarer<CouchDbParame
         .build();
   }
 
-
   @Override
-  public ConfiguredEventSink<CouchDbParameters> 
onInvocation(DataSinkInvocation graph,
-                                                             
DataSinkParameterExtractor extractor) {
-
+  public void onInvocation(SinkParams parameters,
+                           EventSinkRuntimeContext runtimeContext) throws 
SpRuntimeException {
+    var extractor = parameters.extractor();
     String hostname = extractor.singleValueParameter(DATABASE_HOST_KEY, 
String.class);
     Integer port = extractor.singleValueParameter(DATABASE_PORT_KEY, 
Integer.class);
     String dbName = extractor.singleValueParameter(DATABASE_NAME_KEY, 
String.class);
@@ -71,9 +77,24 @@ public class CouchDbController extends 
StandaloneEventSinkDeclarer<CouchDbParame
     String user = null;
     String password = null;
 
-    CouchDbParameters params = new CouchDbParameters(graph, hostname, port, 
dbName, user, password);
+    this.couchDbClient = new CouchDbClient(new CouchDbProperties(
+        dbName,
+        true,
+        "http",
+       hostname,
+        port,
+        user,
+        password
+    ));
+  }
 
-    return new ConfiguredEventSink<>(params, CouchDb::new);
+  @Override
+  public void onEvent(Event event) throws SpRuntimeException {
+    couchDbClient.save(new EventConverter(event).toInputEventMap());
   }
 
+  @Override
+  public void onDetach() throws SpRuntimeException {
+    this.couchDbClient.shutdown();
+  }
 }
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoController.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoController.java
deleted file mode 100644
index ece4ee68e..000000000
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoController.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.sinks.databases.jvm.ditto;
-
-import org.apache.streampipes.model.DataSinkType;
-import org.apache.streampipes.model.graph.DataSinkDescription;
-import org.apache.streampipes.model.graph.DataSinkInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.DataSinkBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventSink;
-import 
org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventSinkDeclarer;
-
-import java.util.List;
-
-public class DittoController extends 
StandaloneEventSinkDeclarer<DittoParameters> {
-
-  private static final String DITTO_API_ENDPOINT_KEY = "dittoApiEndpointKey";
-  private static final String DITTO_USER_KEY = "dittoUserKey";
-  private static final String DITTO_PASSWORD_KEY = "dittoPasswordKey";
-
-  private static final String DITTO_THING_ID_KEY = "dittoThingIdKey";
-  private static final String DITTO_FEATURE_ID_KEY = "dittoFeatureIdKey";
-
-  private static final String SELECTED_FIELDS_KEY = "selectedFieldsKey";
-
-  @Override
-  public DataSinkDescription declareModel() {
-    return 
DataSinkBuilder.create("org.apache.streampipes.sinks.databases.ditto")
-        .category(DataSinkType.FORWARD)
-        .withLocales(Locales.EN)
-        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-        
.requiredStream(StreamRequirementsBuilder.create().requiredPropertyWithNaryMapping(
-            EpRequirements.anyProperty(),
-            Labels.withId(SELECTED_FIELDS_KEY),
-            PropertyScope.NONE).build())
-        .requiredTextParameter(Labels.withId(DITTO_API_ENDPOINT_KEY))
-        .requiredTextParameter(Labels.withId(DITTO_USER_KEY))
-        .requiredSecret(Labels.withId(DITTO_PASSWORD_KEY))
-        .requiredTextParameter(Labels.withId(DITTO_THING_ID_KEY))
-        .requiredTextParameter(Labels.withId(DITTO_FEATURE_ID_KEY))
-        .build();
-  }
-
-  @Override
-  public ConfiguredEventSink<DittoParameters> onInvocation(DataSinkInvocation 
graph,
-                                                           
DataSinkParameterExtractor extractor) {
-    String dittoApiEndpoint = extractor.textParameter(DITTO_API_ENDPOINT_KEY);
-    String dittoUser = extractor.textParameter(DITTO_USER_KEY);
-    String dittoPassword = extractor.secretValue(DITTO_PASSWORD_KEY);
-    String dittoThingId = extractor.textParameter(DITTO_THING_ID_KEY);
-    String dittoFeatureId = extractor.textParameter(DITTO_FEATURE_ID_KEY);
-
-    List<String> selectedFieldSelectors = 
extractor.mappingPropertyValues(SELECTED_FIELDS_KEY);
-    DittoParameters params = new DittoParameters(graph, dittoApiEndpoint, 
dittoUser,
-        dittoPassword, dittoThingId, dittoFeatureId, selectedFieldSelectors);
-
-    return new ConfiguredEventSink<>(params, Ditto::new);
-  }
-
-}
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoParameters.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoParameters.java
deleted file mode 100644
index 5fd7dcc01..000000000
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoParameters.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.sinks.databases.jvm.ditto;
-
-import org.apache.streampipes.model.graph.DataSinkInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventSinkBindingParams;
-
-import java.util.List;
-
-public class DittoParameters extends EventSinkBindingParams {
-
-  private String dittoApiEndpoint;
-  private String dittoUser;
-  private String dittoPassword;
-
-  private String thingId;
-  private String featureId;
-
-  private List<String> selectedFields;
-
-  public DittoParameters(DataSinkInvocation graph,
-                         String dittoApiEndpoint,
-                         String dittoUser,
-                         String dittoPassword,
-                         String thingId,
-                         String featureId,
-                         List<String> selectedFields) {
-    super(graph);
-    this.dittoApiEndpoint = dittoApiEndpoint;
-    this.dittoUser = dittoUser;
-    this.dittoPassword = dittoPassword;
-    this.thingId = thingId;
-    this.featureId = featureId;
-    this.selectedFields = selectedFields;
-  }
-
-  public String getDittoApiEndpoint() {
-    return dittoApiEndpoint;
-  }
-
-  public String getDittoUser() {
-    return dittoUser;
-  }
-
-  public String getDittoPassword() {
-    return dittoPassword;
-  }
-
-  public String getThingId() {
-    return thingId;
-  }
-
-  public String getFeatureId() {
-    return featureId;
-  }
-
-  public List<String> getSelectedFields() {
-    return selectedFields;
-  }
-}
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/Ditto.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoSink.java
similarity index 60%
rename from 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/Ditto.java
rename to 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoSink.java
index 13d9d9f85..d4b8086cd 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/Ditto.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/ditto/DittoSink.java
@@ -18,9 +18,19 @@
 package org.apache.streampipes.sinks.databases.jvm.ditto;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataSinkType;
+import org.apache.streampipes.model.graph.DataSinkDescription;
 import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.sdk.builder.DataSinkBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
-import org.apache.streampipes.wrapper.runtime.EventSink;
+import org.apache.streampipes.wrapper.standalone.SinkParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink;
 
 import org.eclipse.ditto.client.DittoClient;
 import org.eclipse.ditto.client.DittoClients;
@@ -41,7 +51,16 @@ import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 
-public class Ditto implements EventSink<DittoParameters> {
+public class DittoSink extends StreamPipesDataSink {
+
+  private static final String DITTO_API_ENDPOINT_KEY = "dittoApiEndpointKey";
+  private static final String DITTO_USER_KEY = "dittoUserKey";
+  private static final String DITTO_PASSWORD_KEY = "dittoPasswordKey";
+
+  private static final String DITTO_THING_ID_KEY = "dittoThingIdKey";
+  private static final String DITTO_FEATURE_ID_KEY = "dittoFeatureIdKey";
+
+  private static final String SELECTED_FIELDS_KEY = "selectedFieldsKey";
 
   private DittoClient client;
   private String thingId;
@@ -49,22 +68,45 @@ public class Ditto implements EventSink<DittoParameters> {
 
   private List<String> selectedFields;
 
+
+  @Override
+  public DataSinkDescription declareModel() {
+    return 
DataSinkBuilder.create("org.apache.streampipes.sinks.databases.ditto")
+        .category(DataSinkType.FORWARD)
+        .withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        
.requiredStream(StreamRequirementsBuilder.create().requiredPropertyWithNaryMapping(
+            EpRequirements.anyProperty(),
+            Labels.withId(SELECTED_FIELDS_KEY),
+            PropertyScope.NONE).build())
+        .requiredTextParameter(Labels.withId(DITTO_API_ENDPOINT_KEY))
+        .requiredTextParameter(Labels.withId(DITTO_USER_KEY))
+        .requiredSecret(Labels.withId(DITTO_PASSWORD_KEY))
+        .requiredTextParameter(Labels.withId(DITTO_THING_ID_KEY))
+        .requiredTextParameter(Labels.withId(DITTO_FEATURE_ID_KEY))
+        .build();
+  }
+
   @Override
-  public void onInvocation(DittoParameters parameters, EventSinkRuntimeContext 
runtimeContext)
-      throws SpRuntimeException {
+  public void onInvocation(SinkParams parameters,
+                           EventSinkRuntimeContext runtimeContext) throws 
SpRuntimeException {
+    var extractor = parameters.extractor();
+    String dittoApiEndpoint = extractor.textParameter(DITTO_API_ENDPOINT_KEY);
+    String dittoUser = extractor.textParameter(DITTO_USER_KEY);
+    String dittoPassword = extractor.secretValue(DITTO_PASSWORD_KEY);
 
-    this.thingId = parameters.getThingId();
-    this.featureId = parameters.getFeatureId();
-    this.selectedFields = parameters.getSelectedFields();
+    this.thingId = extractor.textParameter(DITTO_THING_ID_KEY);
+    this.featureId = extractor.textParameter(DITTO_FEATURE_ID_KEY);
+    this.selectedFields = extractor.mappingPropertyValues(SELECTED_FIELDS_KEY);
 
     MessagingConfiguration configuration = 
WebSocketMessagingConfiguration.newBuilder()
-        .endpoint(parameters.getDittoApiEndpoint())
+        .endpoint(dittoApiEndpoint)
         .build();
     WebSocketMessagingProvider provider = 
WebSocketMessagingProvider.newInstance(configuration,
         AuthenticationProviders
             .basic(BasicAuthenticationConfiguration.newBuilder()
-                .username(parameters.getDittoUser())
-                .password(parameters.getDittoPassword())
+                .username(dittoUser)
+                .password(dittoPassword)
                 .build()),
         Executors.newFixedThreadPool(4));
     this.client = DittoClients.newInstance(provider);
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbController.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbController.java
deleted file mode 100644
index 7bc974bba..000000000
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbController.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.sinks.databases.jvm.iotdb;
-
-import org.apache.streampipes.model.DataSinkType;
-import org.apache.streampipes.model.graph.DataSinkDescription;
-import org.apache.streampipes.model.graph.DataSinkInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.DataSinkBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventSink;
-import 
org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventSinkDeclarer;
-
-public class IotDbController extends 
StandaloneEventSinkDeclarer<IotDbParameters> {
-
-  private static final String HOST_KEY = "db_host";
-  private static final String PORT_KEY = "db_port";
-
-  private static final String DATABASE_KEY = "db_database";
-  private static final String DEVICE_KEY = "db_device";
-
-  private static final String USER_KEY = "db_user";
-  private static final String PASSWORD_KEY = "db_password";
-
-  private static final String TIMESTAMP_MAPPING_KEY = "timestamp_mapping";
-
-  @Override
-  public DataSinkDescription declareModel() {
-    return 
DataSinkBuilder.create("org.apache.streampipes.sinks.databases.jvm.iotdb").withLocales(Locales.EN)
-        .withAssets(Assets.DOCUMENTATION, 
Assets.ICON).category(DataSinkType.DATABASE).requiredStream(
-            StreamRequirementsBuilder.create()
-                
.requiredPropertyWithUnaryMapping(EpRequirements.timestampReq(), 
Labels.withId(TIMESTAMP_MAPPING_KEY),
-                    
PropertyScope.NONE).build()).requiredTextParameter(Labels.withId(HOST_KEY))
-        .requiredIntegerParameter(Labels.withId(PORT_KEY), 
6667).requiredTextParameter(Labels.withId(USER_KEY), "root")
-        
.requiredSecret(Labels.withId(PASSWORD_KEY)).requiredTextParameter(Labels.withId(DATABASE_KEY))
-        .requiredTextParameter(Labels.withId(DEVICE_KEY)).build();
-  }
-
-  @Override
-  public ConfiguredEventSink<IotDbParameters> onInvocation(DataSinkInvocation 
graph,
-                                                           
DataSinkParameterExtractor extractor) {
-
-    final String host = extractor.singleValueParameter(HOST_KEY, String.class);
-    final Integer port = extractor.singleValueParameter(PORT_KEY, 
Integer.class);
-
-    final String database = extractor.singleValueParameter(DATABASE_KEY, 
String.class);
-    final String device = extractor.singleValueParameter(DEVICE_KEY, 
String.class);
-
-    final String user = extractor.singleValueParameter(USER_KEY, String.class);
-    final String password = extractor.secretValue(PASSWORD_KEY);
-
-    final String timestampField = 
extractor.mappingPropertyValue(TIMESTAMP_MAPPING_KEY);
-
-    final IotDbParameters params =
-        new IotDbParameters(graph, host, port, user, password, database, 
device, timestampField);
-
-    return new ConfiguredEventSink<>(params, IotDb::new);
-  }
-}
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbParameters.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbParameters.java
deleted file mode 100644
index 4f41610c8..000000000
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbParameters.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.sinks.databases.jvm.iotdb;
-
-import org.apache.streampipes.model.graph.DataSinkInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventSinkBindingParams;
-
-public class IotDbParameters extends EventSinkBindingParams {
-
-  private final String host;
-  private final Integer port;
-
-  private final String user;
-  private final String password;
-
-  private final String database;
-  // entity
-  private final String device;
-
-  private final String timestampField;
-
-  public IotDbParameters(DataSinkInvocation graph,
-                         String host,
-                         Integer port,
-                         String user,
-                         String password,
-                         String database,
-                         String device,
-                         String timestampField) {
-    super(graph);
-
-    this.host = host;
-    this.port = port;
-
-    this.user = user;
-    this.password = password;
-
-    this.database = database;
-    this.device = device;
-
-    this.timestampField = timestampField;
-  }
-
-  public String getHost() {
-    return host;
-  }
-
-  public Integer getPort() {
-    return port;
-  }
-
-  public String getUser() {
-    return user;
-  }
-
-  public String getPassword() {
-    return password;
-  }
-
-  public String getDatabase() {
-    return database;
-  }
-
-  public String getDevice() {
-    return device;
-  }
-
-  public String getTimestampField() {
-    return timestampField;
-  }
-}
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDb.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbSink.java
similarity index 55%
rename from 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDb.java
rename to 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbSink.java
index df8300f71..2af93034b 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDb.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/iotdb/IotDbSink.java
@@ -18,25 +18,48 @@
 
 package org.apache.streampipes.sinks.databases.jvm.iotdb;
 
-import org.apache.streampipes.logging.api.Logger;
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataSinkType;
+import org.apache.streampipes.model.graph.DataSinkDescription;
 import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.model.runtime.field.AbstractField;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.sdk.builder.DataSinkBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
-import org.apache.streampipes.wrapper.runtime.EventSink;
+import org.apache.streampipes.wrapper.standalone.SinkParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink;
 
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.session.pool.SessionPool;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.Binary;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-public class IotDb implements EventSink<IotDbParameters> {
+public class IotDbSink extends StreamPipesDataSink {
 
-  private static Logger logger;
+  private static final Logger LOG = LoggerFactory.getLogger(IotDbSink.class);
+
+  private static final String HOST_KEY = "db_host";
+  private static final String PORT_KEY = "db_port";
+
+  private static final String DATABASE_KEY = "db_database";
+  private static final String DEVICE_KEY = "db_device";
+
+  private static final String USER_KEY = "db_user";
+  private static final String PASSWORD_KEY = "db_password";
+
+  private static final String TIMESTAMP_MAPPING_KEY = "timestamp_mapping";
 
   private String timestampFieldId;
   private String deviceId;
@@ -50,20 +73,47 @@ public class IotDb implements EventSink<IotDbParameters> {
   private SessionPool sessionPool;
 
   @Override
-  public void onInvocation(IotDbParameters parameters, EventSinkRuntimeContext 
runtimeContext) {
-    logger = parameters.getGraph().getLogger(IotDb.class);
+  public DataSinkDescription declareModel() {
+    return 
DataSinkBuilder.create("org.apache.streampipes.sinks.databases.jvm.iotdb").withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, 
Assets.ICON).category(DataSinkType.DATABASE).requiredStream(
+            StreamRequirementsBuilder.create()
+                
.requiredPropertyWithUnaryMapping(EpRequirements.timestampReq(), 
Labels.withId(TIMESTAMP_MAPPING_KEY),
+                    
PropertyScope.NONE).build()).requiredTextParameter(Labels.withId(HOST_KEY))
+        .requiredIntegerParameter(Labels.withId(PORT_KEY), 
6667).requiredTextParameter(Labels.withId(USER_KEY), "root")
+        
.requiredSecret(Labels.withId(PASSWORD_KEY)).requiredTextParameter(Labels.withId(DATABASE_KEY))
+        .requiredTextParameter(Labels.withId(DEVICE_KEY)).build();
+  }
+
+  @Override
+  public void onInvocation(SinkParams parameters,
+                           EventSinkRuntimeContext runtimeContext) throws 
SpRuntimeException {
+    var extractor = parameters.extractor();
+    final String host = extractor.singleValueParameter(HOST_KEY, String.class);
+    final Integer port = extractor.singleValueParameter(PORT_KEY, 
Integer.class);
+
+    final String database = extractor.singleValueParameter(DATABASE_KEY, 
String.class);
+    final String device = extractor.singleValueParameter(DEVICE_KEY, 
String.class);
+
+    final String user = extractor.singleValueParameter(USER_KEY, String.class);
+    final String password = extractor.secretValue(PASSWORD_KEY);
 
-    deviceId = "root." + parameters.getDatabase() + "." + 
parameters.getDevice();
-    timestampFieldId = parameters.getTimestampField();
+    timestampFieldId = extractor.mappingPropertyValue(TIMESTAMP_MAPPING_KEY);
+    deviceId = "root." + database + "." + device;
 
     // In our case, the pool size is set to 2.
     // One connection is for current requests, and the other is a backup for 
fast-recovery when connection dies.
-    sessionPool = new 
SessionPool.Builder().maxSize(2).enableCompression(false).host(parameters.getHost())
-        
.port(parameters.getPort()).user(parameters.getUser()).password(parameters.getPassword()).build();
+    sessionPool = new SessionPool.Builder()
+        .maxSize(2)
+        .enableCompression(false)
+        .host(host)
+        .port(port)
+        .user(user)
+        .password(password)
+        .build();
   }
 
   @Override
-  public void onEvent(Event event) {
+  public void onEvent(Event event) throws SpRuntimeException {
     if (event == null) {
       return;
     }
@@ -117,13 +167,13 @@ public class IotDb implements EventSink<IotDbParameters> {
     try {
       sessionPool.insertRecord(deviceId, timestamp, measurements, types, 
values);
     } catch (IoTDBConnectionException | StatementExecutionException e) {
-      logger.error("Failed to save event to IoTDB, because: " + 
e.getMessage());
+      LOG.error("Failed to save event to IoTDB, because: " + e.getMessage());
       e.printStackTrace();
     }
   }
 
   @Override
-  public void onDetach() {
+  public void onDetach() throws SpRuntimeException {
     sessionPool.close();
   }
 }
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUa.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUa.java
index 2004bb908..5f2b3d25c 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUa.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUa.java
@@ -19,12 +19,9 @@
 package org.apache.streampipes.sinks.databases.jvm.opcua;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.logging.api.Logger;
 import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.model.runtime.field.PrimitiveField;
 import org.apache.streampipes.vocabulary.XSD;
-import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
-import org.apache.streampipes.wrapper.runtime.EventSink;
 
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
 import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
@@ -37,6 +34,8 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode;
 import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
 import org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Arrays;
 import java.util.HashMap;
@@ -44,9 +43,9 @@ import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
-public class OpcUa implements EventSink<OpcUaParameters> {
+public class OpcUa {
 
-  private static Logger log;
+  private static final Logger LOG = LoggerFactory.getLogger(OpcUa.class);
 
   private OpcUaClient opcUaClient;
   private OpcUaParameters params;
@@ -78,21 +77,19 @@ public class OpcUa implements EventSink<OpcUaParameters> {
     compatibleDataTypes.put(String.class, new Class[]{String.class});
   }
 
-  @Override
-  public void onInvocation(OpcUaParameters parameters, EventSinkRuntimeContext 
runtimeContext) throws
+  public void onInvocation(OpcUaParameters parameters) throws
       SpRuntimeException {
-    log = parameters.getGraph().getLogger(OpcUa.class);
 
-    if (!parameters.getHostName().startsWith("opc.tcp://")) {
-      serverUrl = "opc.tcp://" + parameters.getHostName() + ":" + 
parameters.getPort();
+    if (!parameters.hostname().startsWith("opc.tcp://")) {
+      serverUrl = "opc.tcp://" + parameters.hostname() + ":" + 
parameters.port();
     } else {
-      serverUrl = parameters.getHostName() + ":" + parameters.getPort();
+      serverUrl = parameters.hostname() + ":" + parameters.port();
     }
-    if (isInteger(parameters.getNodeId())) {
-      int integerNodeId = Integer.parseInt(parameters.getNodeId());
-      node = new NodeId(parameters.getNameSpaceIndex(), integerNodeId);
+    if (isInteger(parameters.nodeId())) {
+      int integerNodeId = Integer.parseInt(parameters.nodeId());
+      node = new NodeId(parameters.nameSpaceIndex(), integerNodeId);
     } else {
-      node = new NodeId(parameters.getNameSpaceIndex(), 
parameters.getNodeId());
+      node = new NodeId(parameters.nameSpaceIndex(), parameters.nodeId());
     }
 
 
@@ -126,7 +123,7 @@ public class OpcUa implements EventSink<OpcUaParameters> {
     try {
       Variant value = 
opcUaClient.getAddressSpace().getVariableNode(node).readValue().getValue();
       targetDataType = value.getValue().getClass();
-      sourceDataType = XSDMatchings.get(params.getMappingPropertyType());
+      sourceDataType = XSDMatchings.get(params.mappingPropertyType());
       if (!sourceDataType.equals(targetDataType)) {
         if 
(!Arrays.stream(compatibleDataTypes.get(sourceDataType)).anyMatch(dt -> 
dt.equals(targetDataType))) {
           throw new SpRuntimeException("Data Type of event of target node are 
not compatible");
@@ -138,13 +135,12 @@ public class OpcUa implements EventSink<OpcUaParameters> {
 
   }
 
-  @Override
   public void onEvent(Event inputEvent) {
 
     Variant v = getValue(inputEvent);
 
     if (v == null) {
-      log.error("Mapping property type: " + 
this.params.getMappingPropertyType() + " is not supported");
+      LOG.error("Mapping property type: " + this.params.mappingPropertyType() 
+ " is not supported");
     } else {
 
       DataValue value = new DataValue(v);
@@ -154,23 +150,22 @@ public class OpcUa implements EventSink<OpcUaParameters> {
         StatusCode status = f.get();
         if (status.isBad()) {
           if (status.getValue() == 0x80740000L) {
-            log.error("Type missmatch! Tried to write value of type: " + 
this.params.getMappingPropertyType()
+            LOG.error("Type missmatch! Tried to write value of type: " + 
this.params.mappingPropertyType()
                 + " but server did not accept this");
           } else if (status.getValue() == 0x803B0000L) {
-            log.error("Wrong access level. Not allowed to write to nodes");
+            LOG.error("Wrong access level. Not allowed to write to nodes");
           }
-          log.error(
+          LOG.error(
               "Value: " + value.getValue().toString() + " could not be written 
to node Id: "
-                  + this.params.getNodeId() + " on " + "OPC-UA server: " + 
this.serverUrl);
+                  + this.params.nodeId() + " on " + "OPC-UA server: " + 
this.serverUrl);
         }
       } catch (InterruptedException | ExecutionException e) {
-        log.error("Exception: Value: " + value.getValue().toString() + " could 
not be written to node Id: "
-            + this.params.getNodeId() + " on " + "OPC-UA server: " + 
this.serverUrl);
+        LOG.error("Exception: Value: " + value.getValue().toString() + " could 
not be written to node Id: "
+            + this.params.nodeId() + " on " + "OPC-UA server: " + 
this.serverUrl);
       }
     }
   }
 
-  @Override
   public void onDetach() throws SpRuntimeException {
     opcUaClient.disconnect();
   }
@@ -178,7 +173,7 @@ public class OpcUa implements EventSink<OpcUaParameters> {
   private Variant getValue(Event inputEvent) {
     Variant result = null;
     PrimitiveField propertyPrimitive =
-        
inputEvent.getFieldBySelector(this.params.getMappingPropertySelector()).getAsPrimitive();
+        
inputEvent.getFieldBySelector(this.params.mappingPropertySelector()).getAsPrimitive();
 
     if (targetDataType.equals(Integer.class)) {
       result = new Variant(propertyPrimitive.getAsInt());
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUaParameters.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUaParameters.java
index 639aa2ba4..ce831afb2 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUaParameters.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUaParameters.java
@@ -18,21 +18,16 @@
 
 package org.apache.streampipes.sinks.databases.jvm.opcua;
 
-import org.apache.streampipes.model.graph.DataSinkInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventSinkBindingParams;
-
-public class OpcUaParameters extends EventSinkBindingParams {
-
-  private String hostname;
-  private Integer port;
-  private String nodeId;
-  private Integer nameSpaceIndex;
-  private String mappingPropertySelector;
-  private String mappingPropertyType;
-
-  public OpcUaParameters(DataSinkInvocation graph, String hostname, Integer 
port, String nodeId, Integer nameSpaceIndex,
+public final class OpcUaParameters {
+  private final String hostname;
+  private final Integer port;
+  private final String nodeId;
+  private final Integer nameSpaceIndex;
+  private final String mappingPropertySelector;
+  private final String mappingPropertyType;
+
+  public OpcUaParameters(String hostname, Integer port, String nodeId, Integer 
nameSpaceIndex,
                          String mappingPropertySelector, String 
mappingPropertyType) {
-    super(graph);
     this.hostname = hostname;
     this.port = port;
     this.nodeId = nodeId;
@@ -41,59 +36,27 @@ public class OpcUaParameters extends EventSinkBindingParams 
{
     this.mappingPropertyType = mappingPropertyType;
   }
 
-  public String getHostName() {
+  public String hostname() {
     return hostname;
   }
 
-  public void setHostName(String hostname) {
-    this.hostname = hostname;
-  }
-
-  public Integer getPort() {
+  public Integer port() {
     return port;
   }
 
-  public void setPort(Integer port) {
-    this.port = port;
-  }
-
-  public String getNodeId() {
+  public String nodeId() {
     return nodeId;
   }
 
-  public void setNodeId(String nodeId) {
-    this.nodeId = nodeId;
-  }
-
-  public Integer getNameSpaceIndex() {
+  public Integer nameSpaceIndex() {
     return nameSpaceIndex;
   }
 
-  public void setNameSpaceIndex(Integer nameSpaceIndex) {
-    this.nameSpaceIndex = nameSpaceIndex;
-  }
-
-  public String getHostname() {
-    return hostname;
-  }
-
-  public void setHostname(String hostname) {
-    this.hostname = hostname;
-  }
-
-  public String getMappingPropertySelector() {
+  public String mappingPropertySelector() {
     return mappingPropertySelector;
   }
 
-  public void setMappingPropertySelector(String mappingPropertySelector) {
-    this.mappingPropertySelector = mappingPropertySelector;
-  }
-
-  public String getMappingPropertyType() {
+  public String mappingPropertyType() {
     return mappingPropertyType;
   }
-
-  public void setMappingPropertyType(String mappingPropertyType) {
-    this.mappingPropertyType = mappingPropertyType;
-  }
 }
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/UpcUaController.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUaSink.java
similarity index 79%
rename from 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/UpcUaController.java
rename to 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUaSink.java
index 336bf66b9..a66d89f97 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/UpcUaController.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/opcua/OpcUaSink.java
@@ -21,19 +21,19 @@ package org.apache.streampipes.sinks.databases.jvm.opcua;
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.model.DataSinkType;
 import org.apache.streampipes.model.graph.DataSinkDescription;
-import org.apache.streampipes.model.graph.DataSinkInvocation;
+import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.model.schema.PropertyScope;
 import org.apache.streampipes.sdk.builder.DataSinkBuilder;
 import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor;
 import org.apache.streampipes.sdk.helpers.EpRequirements;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventSink;
-import 
org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventSinkDeclarer;
+import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
+import org.apache.streampipes.wrapper.standalone.SinkParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink;
 
-public class UpcUaController extends 
StandaloneEventSinkDeclarer<OpcUaParameters> {
+public class OpcUaSink extends StreamPipesDataSink {
 
   private static final String OPC_SERVER_KEY = "opc_host";
   private static final String OPC_PORT_KEY = "opc_port";
@@ -41,6 +41,7 @@ public class UpcUaController extends 
StandaloneEventSinkDeclarer<OpcUaParameters
   private static final String OPC_NODE_ID_KEY = "opc_node_id_index";
   private static final String MAPPING_PROPERTY_KEY = "mapping_property_key";
 
+  private OpcUa opcUa;
 
   @Override
   public DataSinkDescription declareModel() {
@@ -60,11 +61,10 @@ public class UpcUaController extends 
StandaloneEventSinkDeclarer<OpcUaParameters
         .build();
   }
 
-
   @Override
-  public ConfiguredEventSink<OpcUaParameters> onInvocation(DataSinkInvocation 
graph,
-                                                           
DataSinkParameterExtractor extractor) {
-
+  public void onInvocation(SinkParams parameters,
+                           EventSinkRuntimeContext runtimeContext) throws 
SpRuntimeException {
+    var extractor = parameters.extractor();
     String hostname = extractor.singleValueParameter(OPC_SERVER_KEY, 
String.class);
     Integer port = extractor.singleValueParameter(OPC_PORT_KEY, Integer.class);
 
@@ -80,11 +80,20 @@ public class UpcUaController extends 
StandaloneEventSinkDeclarer<OpcUaParameters
       e.printStackTrace();
     }
 
-
-    OpcUaParameters params = new OpcUaParameters(graph, hostname, port, 
nodeId, nameSpaceIndex,
+    OpcUaParameters params = new OpcUaParameters(hostname, port, nodeId, 
nameSpaceIndex,
         mappingPropertySelector, mappingPropertyType);
 
-    return new ConfiguredEventSink<>(params, OpcUa::new);
+    this.opcUa = new OpcUa();
+    this.opcUa.onInvocation(params);
+  }
+
+  @Override
+  public void onEvent(Event event) throws SpRuntimeException {
+    this.opcUa.onEvent(event);
   }
 
+  @Override
+  public void onDetach() throws SpRuntimeException {
+    this.opcUa.onDetach();
+  }
 }
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSql.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSql.java
index bef2f4ec5..268342d6d 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSql.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSql.java
@@ -23,17 +23,14 @@ import org.apache.streampipes.logging.api.Logger;
 import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.sinks.databases.jvm.jdbcclient.JdbcClient;
 import 
org.apache.streampipes.sinks.databases.jvm.jdbcclient.model.SupportedDbEngines;
-import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
-import org.apache.streampipes.wrapper.runtime.EventSink;
 
-public class PostgreSql extends JdbcClient implements 
EventSink<PostgreSqlParameters> {
+public class PostgreSql extends JdbcClient {
 
   private PostgreSqlParameters params;
 
   private Logger log;
 
-  @Override
-  public void onInvocation(PostgreSqlParameters parameters, 
EventSinkRuntimeContext runtimeContext)
+  public void onInvocation(PostgreSqlParameters parameters)
       throws SpRuntimeException {
 
     this.params = parameters;
@@ -60,7 +57,6 @@ public class PostgreSql extends JdbcClient implements 
EventSink<PostgreSqlParame
         queryParameter);
   }
 
-  @Override
   public void onEvent(Event event) {
     try {
       save(event);
@@ -71,7 +67,6 @@ public class PostgreSql extends JdbcClient implements 
EventSink<PostgreSqlParame
     }
   }
 
-  @Override
   public void onDetach() throws SpRuntimeException {
     closeAll();
   }
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlParameters.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlParameters.java
index 5e1596e9a..d00af3ffd 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlParameters.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlParameters.java
@@ -23,9 +23,6 @@ import 
org.apache.streampipes.sinks.databases.jvm.jdbcclient.model.JdbcConnectio
 
 public class PostgreSqlParameters extends JdbcConnectionParameters {
 
-
-  private boolean sslEnabled;
-
   public PostgreSqlParameters(DataSinkInvocation graph, String postgreSqlHost, 
Integer postgreSqlPort,
                               String databaseName, String tableName, String 
user, String password, Boolean sslEnabled) {
     super(
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlController.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlSink.java
similarity index 58%
rename from 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlController.java
rename to 
streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlSink.java
index 9378c1874..6638a7f99 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlController.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/postgresql/PostgreSqlSink.java
@@ -18,22 +18,23 @@
 
 package org.apache.streampipes.sinks.databases.jvm.postgresql;
 
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.model.DataSinkType;
 import org.apache.streampipes.model.graph.DataSinkDescription;
-import org.apache.streampipes.model.graph.DataSinkInvocation;
+import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.sdk.builder.DataSinkBuilder;
 import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor;
 import org.apache.streampipes.sdk.helpers.EpRequirements;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.helpers.Tuple2;
 import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventSink;
-import 
org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventSinkDeclarer;
+import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
+import org.apache.streampipes.wrapper.standalone.SinkParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink;
 
-public class PostgreSqlController extends 
StandaloneEventSinkDeclarer<PostgreSqlParameters> {
+public class PostgreSqlSink extends StreamPipesDataSink {
 
   private static final String DATABASE_HOST_KEY = "db_host";
   private static final String DATABASE_PORT_KEY = "db_port";
@@ -45,32 +46,34 @@ public class PostgreSqlController extends 
StandaloneEventSinkDeclarer<PostgreSql
   private static final String SSL_ENABLED = "ssl_enabled";
   private static final String SSL_DISABLED = "ssl_disabled";
 
+  private PostgreSql postgreSql;
+
   @Override
   public DataSinkDescription declareModel() {
     return 
DataSinkBuilder.create("org.apache.streampipes.sinks.databases.jvm.postgresql")
-            .withLocales(Locales.EN)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .category(DataSinkType.DATABASE)
-            .requiredStream(StreamRequirementsBuilder.create()
-                    .requiredProperty(EpRequirements.anyProperty())
-                    .build())
-            .requiredTextParameter(Labels.withId(DATABASE_HOST_KEY))
-            .requiredIntegerParameter(Labels.withId(DATABASE_PORT_KEY), 5432)
-            .requiredTextParameter(Labels.withId(DATABASE_NAME_KEY))
-            .requiredTextParameter(Labels.withId(DATABASE_TABLE_KEY))
-            .requiredTextParameter(Labels.withId(DATABASE_USER_KEY))
-            .requiredSecret(Labels.withId(DATABASE_PASSWORD_KEY))
-            .requiredSingleValueSelection(Labels.withId(SSL_MODE),
-                    Options.from(
-                      new Tuple2<>("Yes", SSL_ENABLED),
-                      new Tuple2<>("No", SSL_DISABLED)))
-            .build();
+        .withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .category(DataSinkType.DATABASE)
+        .requiredStream(StreamRequirementsBuilder.create()
+            .requiredProperty(EpRequirements.anyProperty())
+            .build())
+        .requiredTextParameter(Labels.withId(DATABASE_HOST_KEY))
+        .requiredIntegerParameter(Labels.withId(DATABASE_PORT_KEY), 5432)
+        .requiredTextParameter(Labels.withId(DATABASE_NAME_KEY))
+        .requiredTextParameter(Labels.withId(DATABASE_TABLE_KEY))
+        .requiredTextParameter(Labels.withId(DATABASE_USER_KEY))
+        .requiredSecret(Labels.withId(DATABASE_PASSWORD_KEY))
+        .requiredSingleValueSelection(Labels.withId(SSL_MODE),
+            Options.from(
+                new Tuple2<>("Yes", SSL_ENABLED),
+                new Tuple2<>("No", SSL_DISABLED)))
+        .build();
   }
 
   @Override
-  public ConfiguredEventSink<PostgreSqlParameters> 
onInvocation(DataSinkInvocation graph,
-                                                                
DataSinkParameterExtractor extractor) {
-
+  public void onInvocation(SinkParams parameters,
+                           EventSinkRuntimeContext runtimeContext) throws 
SpRuntimeException {
+    var extractor = parameters.extractor();
     String hostname = extractor.singleValueParameter(DATABASE_HOST_KEY, 
String.class);
     Integer port = extractor.singleValueParameter(DATABASE_PORT_KEY, 
Integer.class);
     String dbName = extractor.singleValueParameter(DATABASE_NAME_KEY, 
String.class);
@@ -79,15 +82,26 @@ public class PostgreSqlController extends 
StandaloneEventSinkDeclarer<PostgreSql
     String password = extractor.secretValue(DATABASE_PASSWORD_KEY);
     String sslSelection = extractor.selectedSingleValueInternalName(SSL_MODE, 
String.class);
 
-    PostgreSqlParameters params = new PostgreSqlParameters(graph,
-            hostname,
-            port,
-            dbName,
-            tableName,
-            user,
-            password,
-            sslSelection.equals(SSL_ENABLED));
+    PostgreSqlParameters params = new 
PostgreSqlParameters(parameters.getGraph(),
+        hostname,
+        port,
+        dbName,
+        tableName,
+        user,
+        password,
+        sslSelection.equals(SSL_ENABLED));
+
+    this.postgreSql = new PostgreSql();
+    postgreSql.onInvocation(params);
+  }
+
+  @Override
+  public void onEvent(Event event) throws SpRuntimeException {
+    postgreSql.onEvent(event);
+  }
 
-    return new ConfiguredEventSink<>(params, PostgreSql::new);
+  @Override
+  public void onDetach() throws SpRuntimeException {
+    postgreSql.onDetach();
   }
 }
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/test/java/org/apache/streampipes/sinks/databases/jvm/iotdb/TestIotDbParameters.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/test/java/org/apache/streampipes/sinks/databases/jvm/iotdb/TestIotDbParameters.java
deleted file mode 100644
index 1bf309252..000000000
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/test/java/org/apache/streampipes/sinks/databases/jvm/iotdb/TestIotDbParameters.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.sinks.databases.jvm.iotdb;
-
-import org.apache.streampipes.model.graph.DataSinkInvocation;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import static org.mockito.Mockito.mock;
-
-public class TestIotDbParameters {
-
-  @Test
-  public void testIotDbParameters() {
-    final String host = "localhost";
-    final Integer port = 6667;
-    final String user = "user";
-    final String password = "password";
-    final String database = "database";
-    final String device = "device";
-    final String timestampField = "timestampField";
-
-    final IotDbParameters parameters =
-        new IotDbParameters(mock(DataSinkInvocation.class), host, port, user, 
password, database, device,
-            timestampField);
-
-    Assert.assertEquals(host, parameters.getHost());
-    Assert.assertEquals(port, parameters.getPort());
-    Assert.assertEquals(user, parameters.getUser());
-    Assert.assertEquals(password, parameters.getPassword());
-    Assert.assertEquals(database, parameters.getDatabase());
-    Assert.assertEquals(device, parameters.getDevice());
-    Assert.assertEquals(timestampField, parameters.getTimestampField());
-  }
-}
\ No newline at end of file

Reply via email to