You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ze...@apache.org on 2022/12/07 17:02:46 UTC

[streampipes] branch dev updated (d8687e56f -> fd20ba661)

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

zehnder pushed a change to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


    from d8687e56f Set inherited of parent pom to false
     new 83a51757d [#820] enable checkstyle for adapters in extensions
     new fd20ba661 [hotfix] Update checkstyle plugin as described in #851

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../streampipes-connect-adapters-iiot/pom.xml      |   7 +-
 .../connect/iiot/ConnectAdapterIiotInit.java       |  63 +-
 .../connect/iiot/adapters/PullAdapter.java         | 120 ++--
 .../connect/iiot/adapters/PullRestAdapter.java     |  65 +-
 .../iiot/adapters/influxdb/InfluxDbClient.java     | 493 ++++++++--------
 .../iiot/adapters/influxdb/InfluxDbSetAdapter.java | 256 ++++----
 .../adapters/influxdb/InfluxDbStreamAdapter.java   | 306 +++++-----
 .../opcua/MiloOpcUaConfigurationProvider.java      |  52 +-
 .../connect/iiot/adapters/opcua/OpcNode.java       | 195 +++---
 .../connect/iiot/adapters/opcua/OpcUaAdapter.java  | 412 ++++++-------
 .../iiot/adapters/opcua/OpcUaNodeBrowser.java      |  18 +-
 .../connect/iiot/adapters/opcua/SpOpcUaClient.java | 228 +++----
 .../opcua/configuration/SpOpcUaConfig.java         |  51 +-
 .../opcua/configuration/SpOpcUaConfigBuilder.java  |  38 +-
 .../adapters/opcua/utils/OpcUaNodeVariants.java    |  39 +-
 .../iiot/adapters/opcua/utils/OpcUaTypes.java      |  57 +-
 .../iiot/adapters/opcua/utils/OpcUaUtil.java       |  35 +-
 .../adapters/plc4x/modbus/ModbusConfigFile.java    |  78 +--
 .../adapters/plc4x/modbus/Plc4xModbusAdapter.java  | 590 +++++++++---------
 .../plc4x/passive/Plc4xPassiveAdapter.java         | 157 ++---
 .../iiot/adapters/plc4x/s7/Plc4xS7Adapter.java     | 568 +++++++++---------
 .../iiot/adapters/ros/RosBridgeAdapter.java        | 326 +++++-----
 .../simulator/machine/MachineDataSimulator.java    | 235 ++++----
 .../machine/MachineDataSimulatorUtils.java         | 205 +++----
 .../machine/MachineDataStreamAdapter.java          |  99 ++--
 .../connect/iiot/protocol/set/FileProtocol.java    | 195 +++---
 .../connect/iiot/protocol/set/HttpProtocol.java    | 172 +++---
 .../iiot/protocol/stream/BrokerEventProcessor.java |   3 +-
 .../iiot/protocol/stream/FileStreamProtocol.java   | 130 ++--
 .../iiot/protocol/stream/HttpServerProtocol.java   |  47 +-
 .../iiot/protocol/stream/HttpStreamProtocol.java   | 211 +++----
 .../iiot/protocol/stream/KafkaProtocol.java        | 353 +++++------
 .../connect/iiot/protocol/stream/MqttProtocol.java |  19 +-
 .../connect/iiot/protocol/stream/NatsProtocol.java |  19 +-
 .../connect/iiot/protocol/stream/PullProtocol.java | 105 ++--
 .../protocol/stream/pulsar/PulsarProtocol.java     |  69 ++-
 .../iiot/protocol/stream/pulsar/PulsarUtils.java   |   4 +-
 .../protocol/stream/rocketmq/RocketMQConsumer.java |   6 +-
 .../protocol/stream/rocketmq/RocketMQProtocol.java | 229 +++----
 .../protocol/stream/rocketmq/RocketMQUtils.java    |  17 +-
 .../connect/iiot/utils/FileProtocolUtils.java      |  69 +--
 .../streampipes-connect-adapters/pom.xml           |   7 +-
 .../streampipes/connect/ConnectAdapterInit.java    |  38 +-
 .../streampipes/connect/adapters/PullAdapter.java  | 106 ++--
 .../connect/adapters/PullRestAdapter.java          |  66 ++-
 .../adapters/coindesk/CoindeskBitcoinAdapter.java  |  30 +-
 .../connect/adapters/coindesk/model/Bpi.java       |  60 +-
 .../adapters/coindesk/model/CoindeskRawModel.java  |  64 +-
 .../connect/adapters/coindesk/model/EUR.java       | 103 ++--
 .../connect/adapters/coindesk/model/GBP.java       | 100 ++--
 .../connect/adapters/coindesk/model/Time.java      |  60 +-
 .../connect/adapters/coindesk/model/USD.java       | 100 ++--
 .../connect/adapters/flic/FlicMQTTAdapter.java     | 214 +++----
 .../connect/adapters/flic/FlicOutput.java          |  41 +-
 .../connect/adapters/flic/FlicUtils.java           |  62 +-
 .../connect/adapters/gdelt/GdeltAdapter.java       | 327 +++++-----
 .../connect/adapters/iex/IexCloudAdapter.java      |  12 +-
 .../connect/adapters/iex/IexCloudNewsAdapter.java  |  60 +-
 .../connect/adapters/iex/IexCloudStockAdapter.java |  34 +-
 .../connect/adapters/iex/model/IexNewsData.java    | 180 +++---
 .../connect/adapters/iex/model/IexStockData.java   | 656 ++++++++++-----------
 .../connect/adapters/image/ImageZipAdapter.java    | 113 ++--
 .../connect/adapters/image/ImageZipUtils.java      |  16 +-
 .../adapters/image/ZipFileImageIterator.java       | 117 ++--
 .../adapters/image/set/ImageSetAdapter.java        | 117 ++--
 .../adapters/image/stream/ImageStreamAdapter.java  | 119 ++--
 .../connect/adapters/iss/IssAdapter.java           | 211 +++----
 .../connect/adapters/iss/model/IssModel.java       |  60 +-
 .../connect/adapters/iss/model/IssPosition.java    |  40 +-
 .../connect/adapters/netio/NetioMQTTAdapter.java   | 239 ++++----
 .../connect/adapters/netio/NetioRestAdapter.java   | 334 ++++++-----
 .../connect/adapters/netio/NetioUtils.java         | 282 ++++-----
 .../adapters/netio/model/NetioAllPowerOutputs.java |  32 +-
 .../adapters/netio/model/NetioGlobalMeasure.java   |  96 +--
 .../adapters/netio/model/NetioPowerOutput.java     | 144 ++---
 .../adapters/sensemap/OpenSenseMapAdapter.java     | 578 +++++++++---------
 .../connect/adapters/sensemap/SensorNames.java     | 213 ++++---
 .../adapters/sensemap/model/CurrentLocation.java   |  52 +-
 .../connect/adapters/sensemap/model/Geometry.java  |  52 +-
 .../adapters/sensemap/model/LastMeasurement.java   |  40 +-
 .../connect/adapters/sensemap/model/Loc.java       |  40 +-
 .../connect/adapters/sensemap/model/SenseBox.java  | 184 +++---
 .../connect/adapters/sensemap/model/Sensor.java    | 120 ++--
 .../simulator/random/RandomDataSetAdapter.java     |  19 +-
 .../simulator/random/RandomDataSimulatorUtils.java |  22 +-
 .../simulator/random/RandomDataStreamAdapter.java  |  21 +-
 .../connect/adapters/slack/SlackAdapter.java       |  35 +-
 .../connect/adapters/slack/SlackConsumer.java      |   3 +-
 .../connect/adapters/ti/TISensorTag.java           | 325 +++++-----
 .../adapters/wikipedia/WikipediaAdapter.java       | 104 ++--
 .../wikipedia/WikipediaEditedArticlesAdapter.java  |   8 +-
 .../wikipedia/WikipediaModelConverter.java         |  17 +-
 .../wikipedia/WikipediaNewArticlesAdapter.java     |   8 +-
 .../adapters/wikipedia/WikipediaSseConsumer.java   |   2 +-
 .../connect/adapters/wikipedia/model/Length.java   |  40 +-
 .../connect/adapters/wikipedia/model/Meta.java     | 180 +++---
 .../connect/adapters/wikipedia/model/Revision.java |  40 +-
 .../adapters/wikipedia/model/WikipediaModel.java   | 338 +++++------
 .../streampipes/connect/config/ConfigKeys.java     |  12 +-
 .../connect/config/ConnectWorkerConfig.java        |   6 +-
 100 files changed, 6658 insertions(+), 6382 deletions(-)


[streampipes] 01/02: [#820] enable checkstyle for adapters in extensions

Posted by ze...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit 83a51757d46d2ae38a18789917a268c4a4bb4343
Author: Philipp Zehnder <te...@users.noreply.github.com>
AuthorDate: Mon Dec 5 14:58:57 2022 +0100

    [#820] enable checkstyle for adapters in extensions
---
 .../streampipes-connect-adapters-iiot/pom.xml      |  20 +-
 .../connect/iiot/ConnectAdapterIiotInit.java       |  63 +-
 .../connect/iiot/adapters/PullAdapter.java         | 120 ++--
 .../connect/iiot/adapters/PullRestAdapter.java     |  65 +-
 .../iiot/adapters/influxdb/InfluxDbClient.java     | 493 ++++++++--------
 .../iiot/adapters/influxdb/InfluxDbSetAdapter.java | 256 ++++----
 .../adapters/influxdb/InfluxDbStreamAdapter.java   | 306 +++++-----
 .../opcua/MiloOpcUaConfigurationProvider.java      |  52 +-
 .../connect/iiot/adapters/opcua/OpcNode.java       | 195 +++---
 .../connect/iiot/adapters/opcua/OpcUaAdapter.java  | 412 ++++++-------
 .../iiot/adapters/opcua/OpcUaNodeBrowser.java      |  18 +-
 .../connect/iiot/adapters/opcua/SpOpcUaClient.java | 228 +++----
 .../opcua/configuration/SpOpcUaConfig.java         |  51 +-
 .../opcua/configuration/SpOpcUaConfigBuilder.java  |  38 +-
 .../adapters/opcua/utils/OpcUaNodeVariants.java    |  39 +-
 .../iiot/adapters/opcua/utils/OpcUaTypes.java      |  57 +-
 .../iiot/adapters/opcua/utils/OpcUaUtil.java       |  35 +-
 .../adapters/plc4x/modbus/ModbusConfigFile.java    |  78 +--
 .../adapters/plc4x/modbus/Plc4xModbusAdapter.java  | 590 +++++++++---------
 .../plc4x/passive/Plc4xPassiveAdapter.java         | 157 ++---
 .../iiot/adapters/plc4x/s7/Plc4xS7Adapter.java     | 568 +++++++++---------
 .../iiot/adapters/ros/RosBridgeAdapter.java        | 326 +++++-----
 .../simulator/machine/MachineDataSimulator.java    | 235 ++++----
 .../machine/MachineDataSimulatorUtils.java         | 205 +++----
 .../machine/MachineDataStreamAdapter.java          |  99 ++--
 .../connect/iiot/protocol/set/FileProtocol.java    | 195 +++---
 .../connect/iiot/protocol/set/HttpProtocol.java    | 172 +++---
 .../iiot/protocol/stream/BrokerEventProcessor.java |   3 +-
 .../iiot/protocol/stream/FileStreamProtocol.java   | 130 ++--
 .../iiot/protocol/stream/HttpServerProtocol.java   |  47 +-
 .../iiot/protocol/stream/HttpStreamProtocol.java   | 211 +++----
 .../iiot/protocol/stream/KafkaProtocol.java        | 353 +++++------
 .../connect/iiot/protocol/stream/MqttProtocol.java |  19 +-
 .../connect/iiot/protocol/stream/NatsProtocol.java |  19 +-
 .../connect/iiot/protocol/stream/PullProtocol.java | 105 ++--
 .../protocol/stream/pulsar/PulsarProtocol.java     |  69 ++-
 .../iiot/protocol/stream/pulsar/PulsarUtils.java   |   4 +-
 .../protocol/stream/rocketmq/RocketMQConsumer.java |   6 +-
 .../protocol/stream/rocketmq/RocketMQProtocol.java | 229 +++----
 .../protocol/stream/rocketmq/RocketMQUtils.java    |  17 +-
 .../connect/iiot/utils/FileProtocolUtils.java      |  69 +--
 .../streampipes-connect-adapters/pom.xml           |  20 +-
 .../streampipes/connect/ConnectAdapterInit.java    |  38 +-
 .../streampipes/connect/adapters/PullAdapter.java  | 106 ++--
 .../connect/adapters/PullRestAdapter.java          |  66 ++-
 .../adapters/coindesk/CoindeskBitcoinAdapter.java  |  30 +-
 .../connect/adapters/coindesk/model/Bpi.java       |  60 +-
 .../adapters/coindesk/model/CoindeskRawModel.java  |  64 +-
 .../connect/adapters/coindesk/model/EUR.java       | 103 ++--
 .../connect/adapters/coindesk/model/GBP.java       | 100 ++--
 .../connect/adapters/coindesk/model/Time.java      |  60 +-
 .../connect/adapters/coindesk/model/USD.java       | 100 ++--
 .../connect/adapters/flic/FlicMQTTAdapter.java     | 214 +++----
 .../connect/adapters/flic/FlicOutput.java          |  41 +-
 .../connect/adapters/flic/FlicUtils.java           |  62 +-
 .../connect/adapters/gdelt/GdeltAdapter.java       | 327 +++++-----
 .../connect/adapters/iex/IexCloudAdapter.java      |  12 +-
 .../connect/adapters/iex/IexCloudNewsAdapter.java  |  60 +-
 .../connect/adapters/iex/IexCloudStockAdapter.java |  34 +-
 .../connect/adapters/iex/model/IexNewsData.java    | 180 +++---
 .../connect/adapters/iex/model/IexStockData.java   | 656 ++++++++++-----------
 .../connect/adapters/image/ImageZipAdapter.java    | 113 ++--
 .../connect/adapters/image/ImageZipUtils.java      |  16 +-
 .../adapters/image/ZipFileImageIterator.java       | 117 ++--
 .../adapters/image/set/ImageSetAdapter.java        | 117 ++--
 .../adapters/image/stream/ImageStreamAdapter.java  | 119 ++--
 .../connect/adapters/iss/IssAdapter.java           | 211 +++----
 .../connect/adapters/iss/model/IssModel.java       |  60 +-
 .../connect/adapters/iss/model/IssPosition.java    |  40 +-
 .../connect/adapters/netio/NetioMQTTAdapter.java   | 239 ++++----
 .../connect/adapters/netio/NetioRestAdapter.java   | 334 ++++++-----
 .../connect/adapters/netio/NetioUtils.java         | 282 ++++-----
 .../adapters/netio/model/NetioAllPowerOutputs.java |  32 +-
 .../adapters/netio/model/NetioGlobalMeasure.java   |  96 +--
 .../adapters/netio/model/NetioPowerOutput.java     | 144 ++---
 .../adapters/sensemap/OpenSenseMapAdapter.java     | 578 +++++++++---------
 .../connect/adapters/sensemap/SensorNames.java     | 213 ++++---
 .../adapters/sensemap/model/CurrentLocation.java   |  52 +-
 .../connect/adapters/sensemap/model/Geometry.java  |  52 +-
 .../adapters/sensemap/model/LastMeasurement.java   |  40 +-
 .../connect/adapters/sensemap/model/Loc.java       |  40 +-
 .../connect/adapters/sensemap/model/SenseBox.java  | 184 +++---
 .../connect/adapters/sensemap/model/Sensor.java    | 120 ++--
 .../simulator/random/RandomDataSetAdapter.java     |  19 +-
 .../simulator/random/RandomDataSimulatorUtils.java |  22 +-
 .../simulator/random/RandomDataStreamAdapter.java  |  21 +-
 .../connect/adapters/slack/SlackAdapter.java       |  35 +-
 .../connect/adapters/slack/SlackConsumer.java      |   3 +-
 .../connect/adapters/ti/TISensorTag.java           | 325 +++++-----
 .../adapters/wikipedia/WikipediaAdapter.java       | 104 ++--
 .../wikipedia/WikipediaEditedArticlesAdapter.java  |   8 +-
 .../wikipedia/WikipediaModelConverter.java         |  17 +-
 .../wikipedia/WikipediaNewArticlesAdapter.java     |   8 +-
 .../adapters/wikipedia/WikipediaSseConsumer.java   |   2 +-
 .../connect/adapters/wikipedia/model/Length.java   |  40 +-
 .../connect/adapters/wikipedia/model/Meta.java     | 180 +++---
 .../connect/adapters/wikipedia/model/Revision.java |  40 +-
 .../adapters/wikipedia/model/WikipediaModel.java   | 338 +++++------
 .../streampipes/connect/config/ConfigKeys.java     |  12 +-
 .../connect/config/ConnectWorkerConfig.java        |   6 +-
 100 files changed, 6684 insertions(+), 6382 deletions(-)

diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
index 547b293bc..3c6ed5a30 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
@@ -17,7 +17,8 @@
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
 
@@ -263,6 +264,23 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>validate</id>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <logViolationsToConsole>true</logViolationsToConsole>
+                    <failOnViolation>true</failOnViolation>
+                </configuration>
+            </plugin>
         </plugins>
         <finalName>streampipes-connect-adapters-iiot</finalName>
     </build>
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 449c7db6c..8599bc436 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
@@ -27,7 +27,12 @@ import org.apache.streampipes.connect.iiot.adapters.ros.RosBridgeAdapter;
 import org.apache.streampipes.connect.iiot.adapters.simulator.machine.MachineDataStreamAdapter;
 import org.apache.streampipes.connect.iiot.protocol.set.FileProtocol;
 import org.apache.streampipes.connect.iiot.protocol.set.HttpProtocol;
-import org.apache.streampipes.connect.iiot.protocol.stream.*;
+import org.apache.streampipes.connect.iiot.protocol.stream.FileStreamProtocol;
+import org.apache.streampipes.connect.iiot.protocol.stream.HttpServerProtocol;
+import org.apache.streampipes.connect.iiot.protocol.stream.HttpStreamProtocol;
+import org.apache.streampipes.connect.iiot.protocol.stream.KafkaProtocol;
+import org.apache.streampipes.connect.iiot.protocol.stream.MqttProtocol;
+import org.apache.streampipes.connect.iiot.protocol.stream.NatsProtocol;
 import org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol;
 import org.apache.streampipes.connect.iiot.protocol.stream.rocketmq.RocketMQProtocol;
 import org.apache.streampipes.container.extensions.ExtensionsModelSubmitter;
@@ -35,33 +40,33 @@ import org.apache.streampipes.container.model.SpServiceDefinition;
 import org.apache.streampipes.container.model.SpServiceDefinitionBuilder;
 
 public class ConnectAdapterIiotInit extends ExtensionsModelSubmitter {
-	public static void main(String[] args) {
-		new ConnectAdapterIiotInit().init();
-	}
+  public static void main(String[] args) {
+    new ConnectAdapterIiotInit().init();
+  }
 
-	@Override
-	public SpServiceDefinition provideServiceDefinition() {
-		return SpServiceDefinitionBuilder.create("connect-adapter-iiot",
-						"StreamPipes connect worker containing adapters relevant for the IIoT",
-						"",
-						8001)
-				.registerAdapter(new MachineDataStreamAdapter())
-				.registerAdapter(new RosBridgeAdapter())
-				.registerAdapter(new OpcUaAdapter())
-				.registerAdapter(new InfluxDbStreamAdapter())
-				.registerAdapter(new InfluxDbSetAdapter())
-				.registerAdapter(new Plc4xS7Adapter())
-				.registerAdapter(new Plc4xModbusAdapter())
-				.registerAdapter(new FileProtocol())
-				.registerAdapter(new HttpProtocol())
-				.registerAdapter(new FileStreamProtocol())
-				.registerAdapter(new KafkaProtocol())
-				.registerAdapter(new MqttProtocol())
-				.registerAdapter(new NatsProtocol())
-				.registerAdapter(new HttpStreamProtocol())
-				.registerAdapter(new PulsarProtocol())
-				.registerAdapter(new RocketMQProtocol())
-				.registerAdapter(new HttpServerProtocol())
-				.build();
-	}
+  @Override
+  public SpServiceDefinition provideServiceDefinition() {
+    return SpServiceDefinitionBuilder.create("connect-adapter-iiot",
+            "StreamPipes connect worker containing adapters relevant for the IIoT",
+            "",
+            8001)
+        .registerAdapter(new MachineDataStreamAdapter())
+        .registerAdapter(new RosBridgeAdapter())
+        .registerAdapter(new OpcUaAdapter())
+        .registerAdapter(new InfluxDbStreamAdapter())
+        .registerAdapter(new InfluxDbSetAdapter())
+        .registerAdapter(new Plc4xS7Adapter())
+        .registerAdapter(new Plc4xModbusAdapter())
+        .registerAdapter(new FileProtocol())
+        .registerAdapter(new HttpProtocol())
+        .registerAdapter(new FileStreamProtocol())
+        .registerAdapter(new KafkaProtocol())
+        .registerAdapter(new MqttProtocol())
+        .registerAdapter(new NatsProtocol())
+        .registerAdapter(new HttpStreamProtocol())
+        .registerAdapter(new PulsarProtocol())
+        .registerAdapter(new RocketMQProtocol())
+        .registerAdapter(new HttpServerProtocol())
+        .build();
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullAdapter.java
index 4e3a69353..770fd6ea2 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullAdapter.java
@@ -25,84 +25,90 @@ import org.apache.streampipes.container.monitoring.SpMonitoringManager;
 import org.apache.streampipes.model.StreamPipesErrorMessage;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.monitoring.SpLogEntry;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.concurrent.*;
-
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 public abstract class PullAdapter extends SpecificDataStreamAdapter {
 
-    protected static final Logger logger = LoggerFactory.getLogger(PullAdapter.class);
+  protected static final Logger LOGGER = LoggerFactory.getLogger(PullAdapter.class);
 
-    private ScheduledExecutorService scheduler;
-    private ScheduledExecutorService errorThreadscheduler;
+  private ScheduledExecutorService scheduler;
+  private ScheduledExecutorService errorThreadscheduler;
 
 
-    public PullAdapter() {
-        super();
-    }
+  public PullAdapter() {
+    super();
+  }
 
-    public PullAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
+  public PullAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
 
-    protected abstract void pullData() throws ExecutionException, RuntimeException, InterruptedException, TimeoutException;
+  protected abstract void pullData()
+      throws ExecutionException, RuntimeException, InterruptedException, TimeoutException;
 
-    protected abstract PollingSettings getPollingInterval();
+  protected abstract PollingSettings getPollingInterval();
 
-    @Override
-    public void startAdapter() throws AdapterException {
-        before();
+  @Override
+  public void startAdapter() throws AdapterException {
+    before();
 
-        final Runnable errorThread = this::executeAdpaterLogic;
+    final Runnable errorThread = this::executeAdpaterLogic;
 
-        scheduler = Executors.newScheduledThreadPool(1);
-        scheduler.schedule(errorThread, 0, TimeUnit.MILLISECONDS);
+    scheduler = Executors.newScheduledThreadPool(1);
+    scheduler.schedule(errorThread, 0, TimeUnit.MILLISECONDS);
 
-    }
+  }
 
-    private void executeAdpaterLogic() {
-        final Runnable task = () -> {
-            try {
-                pullData();
-            } catch (ExecutionException | InterruptedException e) {
-                SpMonitoringManager.INSTANCE.addErrorMessage(
-                    adapterDescription.getElementId(),
-                    SpLogEntry.from(System.currentTimeMillis(), StreamPipesErrorMessage.from(e)));
-            } catch (TimeoutException e) {
-                logger.warn("Timeout occurred", e);
-            }
-        };
-
-        scheduler = Executors.newScheduledThreadPool(1);
-        ScheduledFuture<?> handle = scheduler.scheduleAtFixedRate(task, 1,
-                getPollingInterval().getValue(), getPollingInterval().getTimeUnit());
-
-        try {
-            handle.get();
-        } catch (ExecutionException | InterruptedException e) {
-            logger.error("Error", e);
-        }
-    }
+  private void executeAdpaterLogic() {
+    final Runnable task = () -> {
+      try {
+        pullData();
+      } catch (ExecutionException | InterruptedException e) {
+        SpMonitoringManager.INSTANCE.addErrorMessage(
+            adapterDescription.getElementId(),
+            SpLogEntry.from(System.currentTimeMillis(), StreamPipesErrorMessage.from(e)));
+      } catch (TimeoutException e) {
+        LOGGER.warn("Timeout occurred", e);
+      }
+    };
+
+    scheduler = Executors.newScheduledThreadPool(1);
+    ScheduledFuture<?> handle = scheduler.scheduleAtFixedRate(task, 1,
+        getPollingInterval().getValue(), getPollingInterval().getTimeUnit());
 
-    @Override
-    public void stopAdapter() throws AdapterException {
-        after();
-        scheduler.shutdownNow();
+    try {
+      handle.get();
+    } catch (ExecutionException | InterruptedException e) {
+      LOGGER.error("Error", e);
     }
+  }
 
-    /**
-     * Called before adapter is started (e.g. initialize connections)
-     */
-    protected void before() throws AdapterException {
+  @Override
+  public void stopAdapter() throws AdapterException {
+    after();
+    scheduler.shutdownNow();
+  }
 
-    }
+  /**
+   * Called before adapter is started (e.g. initialize connections)
+   */
+  protected void before() throws AdapterException {
 
-    /**
-     * Called before adapter is stopped (e.g. shutdown connections)
-     */
-    protected void after() throws AdapterException {
+  }
 
-    }
+  /**
+   * Called before adapter is stopped (e.g. shutdown connections)
+   */
+  protected void after() throws AdapterException {
+
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullRestAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullRestAdapter.java
index 50a5612d9..6d4f10972 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullRestAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/PullRestAdapter.java
@@ -18,54 +18,55 @@
 
 package org.apache.streampipes.connect.iiot.adapters;
 
-import com.google.gson.Gson;
-import org.apache.http.client.fluent.Request;
 import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 
-public abstract class PullRestAdapter extends PullAdapter {
+import com.google.gson.Gson;
+import org.apache.http.client.fluent.Request;
 
-    public PullRestAdapter() {
-        super();
-    }
+public abstract class PullRestAdapter extends PullAdapter {
 
-    public PullRestAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
+  public PullRestAdapter() {
+    super();
+  }
 
-    protected static String getDataFromEndpointString(String url) throws AdapterException {
-        String result = null;
+  public PullRestAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
 
+  protected static String getDataFromEndpointString(String url) throws AdapterException {
+    String result = null;
 
-        logger.info("Started Request to open sensemap endpoint: " + url);
-        try {
-            result = Request.Get(url)
-                    .connectTimeout(1000)
-                    .socketTimeout(100000)
-                    .execute().returnContent().asString();
 
+    LOGGER.info("Started Request to open sensemap endpoint: " + url);
+    try {
+      result = Request.Get(url)
+          .connectTimeout(1000)
+          .socketTimeout(100000)
+          .execute().returnContent().asString();
 
-            if (result.startsWith("ï")) {
-                result = result.substring(3);
-            }
 
-            logger.info("Received data from request");
+      if (result.startsWith("ï")) {
+        result = result.substring(3);
+      }
 
-        } catch (Exception e) {
-            String errorMessage = "Error while connecting to the open sensemap api";
-            logger.error(errorMessage, e);
-            throw new AdapterException(errorMessage);
-        }
+      LOGGER.info("Received data from request");
 
-        return result;
+    } catch (Exception e) {
+      String errorMessage = "Error while connecting to the open sensemap api";
+      LOGGER.error(errorMessage, e);
+      throw new AdapterException(errorMessage);
     }
 
-    protected static <T> T getDataFromEndpoint(String url, Class<T> clazz) throws AdapterException {
+    return result;
+  }
 
-        String rawJson = getDataFromEndpointString(url);
-        T all = new Gson().fromJson(rawJson, clazz);
+  protected static <T> T getDataFromEndpoint(String url, Class<T> clazz) throws AdapterException {
 
-        return all;
-    }
+    String rawJson = getDataFromEndpointString(url);
+    T all = new Gson().fromJson(rawJson, clazz);
+
+    return all;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbClient.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbClient.java
index f3e861dd3..dbb48e847 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbClient.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbClient.java
@@ -18,12 +18,6 @@
 
 package org.apache.streampipes.connect.iiot.adapters.influxdb;
 
-import org.influxdb.InfluxDB;
-import org.influxdb.InfluxDBFactory;
-import org.influxdb.InfluxDBIOException;
-import org.influxdb.dto.Pong;
-import org.influxdb.dto.Query;
-import org.influxdb.dto.QueryResult;
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -32,6 +26,13 @@ import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.utils.Datatypes;
 
+import org.influxdb.InfluxDB;
+import org.influxdb.InfluxDBFactory;
+import org.influxdb.InfluxDBIOException;
+import org.influxdb.dto.Pong;
+import org.influxdb.dto.Query;
+import org.influxdb.dto.QueryResult;
+
 import java.time.Instant;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAccessor;
@@ -44,278 +45,278 @@ import static org.apache.streampipes.vocabulary.SO.DateTime;
 
 public class InfluxDbClient {
 
-    private InfluxDB influxDb;
-
-    static final String HOST = "influxDbHost";
-    static final String PORT = "influxDbPort";
-    static final String DATABASE = "influxDbDatabase";
-    static final String MEASUREMENT = "influxDbMeasurement";
-    static final String USERNAME = "influxDbUsername";
-    static final String PASSWORD = "influxDbPassword";
-
-    static final String REPLACE_NULL_VALUES = "replaceNullValues";
-    static final String DO_REPLACE = "doReplace";
-    static final String DO_NOT_REPLACE = "doNotReplace";
+  private InfluxDB influxDb;
 
-    private String host;
-    private int port;
-    private String database;
-    private String measurement;
-    private String username;
-    private String password;
+  static final String HOST = "influxDbHost";
+  static final String PORT = "influxDbPort";
+  static final String DATABASE = "influxDbDatabase";
+  static final String MEASUREMENT = "influxDbMeasurement";
+  static final String USERNAME = "influxDbUsername";
+  static final String PASSWORD = "influxDbPassword";
 
-    private boolean replaceNullValues;
+  static final String REPLACE_NULL_VALUES = "replaceNullValues";
+  static final String DO_REPLACE = "doReplace";
+  static final String DO_NOT_REPLACE = "doNotReplace";
 
-    private List<Column> columns;
-    private String columnsString;
+  private final String host;
+  private final int port;
+  private final String database;
+  private final String measurement;
+  private final String username;
+  private final String password;
 
-    private boolean connected;
+  private final boolean replaceNullValues;
 
-    public static class Column {
-        private String name;
-        private Datatypes datatypes;
+  private List<Column> columns;
+  private String columnsString;
 
-        Column(String name, Datatypes datatypes) {
-            this.name = name;
-            this.datatypes = datatypes;
-        }
+  private boolean connected;
 
-        String getName() {
-            return name;
-        }
+  public static class Column {
+    private final String name;
+    private final Datatypes datatypes;
 
-        Datatypes getDatatypes() {
-            return datatypes;
-        }
+    Column(String name, Datatypes datatypes) {
+      this.name = name;
+      this.datatypes = datatypes;
     }
 
-    InfluxDbClient(String host,
-                          int port,
-                          String database,
-                          String measurement,
-                          String username,
-                          String password,
-                          boolean replaceNullValues) {
-        this.host = host;
-        this.port = port;
-        this.database = database;
-        this.measurement = measurement;
-        this.username = username;
-        this.password = password;
-        this.replaceNullValues = replaceNullValues;
-
-        this.connected = false;
+    String getName() {
+      return name;
     }
 
-    public void connect() throws AdapterException {
-        String urlAndPort = host + ":" + port;
-        try {
-            // Connect to the server and check if the server is available
-            influxDb = InfluxDBFactory.connect(urlAndPort, username, password);
-            Pong living = influxDb.ping();
-            if (living.getVersion().equalsIgnoreCase("unknown")) {
-                throw new AdapterException("Could not connect to InfluxDb Server: " + urlAndPort);
-            }
-
-            // Checking whether the database exists
-            if (!databaseExists(database)) {
-                throw new AdapterException("Database " + database + " could not be found.");
-            }
-
-            // Checking, whether the measurement exists
-            if (!measurementExists(measurement)) {
-                throw new AdapterException("Measurement " + measurement + " could not be found.");
-            }
-
-            connected = true;
-        } catch (InfluxDBIOException e) {
-            throw new AdapterException("Problem connecting with the server: " + e.getMessage());
-        }
+    Datatypes getDatatypes() {
+      return datatypes;
     }
-
-    public void disconnect() {
-        if (connected) {
-            influxDb.close();
-            connected = false;
-        }
+  }
+
+  InfluxDbClient(String host,
+                 int port,
+                 String database,
+                 String measurement,
+                 String username,
+                 String password,
+                 boolean replaceNullValues) {
+    this.host = host;
+    this.port = port;
+    this.database = database;
+    this.measurement = measurement;
+    this.username = username;
+    this.password = password;
+    this.replaceNullValues = replaceNullValues;
+
+    this.connected = false;
+  }
+
+  public void connect() throws AdapterException {
+    String urlAndPort = host + ":" + port;
+    try {
+      // Connect to the server and check if the server is available
+      influxDb = InfluxDBFactory.connect(urlAndPort, username, password);
+      Pong living = influxDb.ping();
+      if (living.getVersion().equalsIgnoreCase("unknown")) {
+        throw new AdapterException("Could not connect to InfluxDb Server: " + urlAndPort);
+      }
+
+      // Checking whether the database exists
+      if (!databaseExists(database)) {
+        throw new AdapterException("Database " + database + " could not be found.");
+      }
+
+      // Checking, whether the measurement exists
+      if (!measurementExists(measurement)) {
+        throw new AdapterException("Measurement " + measurement + " could not be found.");
+      }
+
+      connected = true;
+    } catch (InfluxDBIOException e) {
+      throw new AdapterException("Problem connecting with the server: " + e.getMessage());
     }
+  }
 
-    private boolean databaseExists(String dbName) {
-        QueryResult queryResult = influxDb.query(new Query("SHOW DATABASES", ""));
-        for (List<Object> a : queryResult.getResults().get(0).getSeries().get(0).getValues()) {
-            if (a.get(0).equals(dbName)) {
-                return true;
-            }
-        }
-        return false;
+  public void disconnect() {
+    if (connected) {
+      influxDb.close();
+      connected = false;
     }
-
-    private boolean measurementExists(String measurement) {
-        // Database must exist
-        QueryResult queryResult = influxDb.query(new Query("SHOW MEASUREMENTS", database));
-        for (List<Object> a : queryResult.getResults().get(0).getSeries().get(0).getValues()) {
-            if (a.get(0).equals(measurement)) {
-                return true;
-            }
-        }
-        return false;
+  }
+
+  private boolean databaseExists(String dbName) {
+    QueryResult queryResult = influxDb.query(new Query("SHOW DATABASES", ""));
+    for (List<Object> a : queryResult.getResults().get(0).getSeries().get(0).getValues()) {
+      if (a.get(0).equals(dbName)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  private boolean measurementExists(String measurement) {
+    // Database must exist
+    QueryResult queryResult = influxDb.query(new Query("SHOW MEASUREMENTS", database));
+    for (List<Object> a : queryResult.getResults().get(0).getSeries().get(0).getValues()) {
+      if (a.get(0).equals(measurement)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public GuessSchema getSchema() throws AdapterException {
+    connect();
+    loadColumns();
+
+    EventSchema eventSchema = new EventSchema();
+    GuessSchema guessSchema = new GuessSchema();
+    List<EventProperty> allProperties = new ArrayList<>();
+
+    for (Column column : columns) {
+      PrimitivePropertyBuilder property = PrimitivePropertyBuilder
+          .create(column.getDatatypes(), column.getName())
+          .label(column.getName());
+      // Setting the timestamp field to the correct domainProperty
+      if (column.getName().equals("time")) {
+        property.domainProperty(DateTime);
+      }
+      allProperties.add(property.build());
     }
 
-    public GuessSchema getSchema() throws AdapterException {
-        connect();
-        loadColumns();
-
-        EventSchema eventSchema = new EventSchema();
-        GuessSchema guessSchema = new GuessSchema();
-        List<EventProperty> allProperties = new ArrayList<>();
-
-        for (Column column : columns) {
-            PrimitivePropertyBuilder property = PrimitivePropertyBuilder
-                    .create(column.getDatatypes(), column.getName())
-                    .label(column.getName());
-            // Setting the timestamp field to the correct domainProperty
-            if (column.getName().equals("time")) {
-                property.domainProperty(DateTime);
-            }
-            allProperties.add(property.build());
-        }
+    eventSchema.setEventProperties(allProperties);
+    guessSchema.setEventSchema(eventSchema);
 
-        eventSchema.setEventProperties(allProperties);
-        guessSchema.setEventSchema(eventSchema);
+    disconnect();
+    return guessSchema;
+  }
 
-        disconnect();
-        return guessSchema;
+  // Client must be connected before calling this method
+  void loadColumns() throws AdapterException {
+    if (!connected) {
+      throw new AdapterException("Client must be connected to the server in order to load the columns.");
     }
-
-    // Client must be connected before calling this method
-    void loadColumns() throws AdapterException {
-        if (!connected) {
-            throw new AdapterException("Client must be connected to the server in order to load the columns.");
-        }
-        List<List<Object>> fieldKeys = query("SHOW FIELD KEYS FROM " + measurement);
-        List<List<Object>> tagKeys = query("SHOW TAG KEYS FROM " + measurement);
+    List<List<Object>> fieldKeys = query("SHOW FIELD KEYS FROM " + measurement);
+    List<List<Object>> tagKeys = query("SHOW TAG KEYS FROM " + measurement);
 //        if (fieldKeys.size() == 0 || tagKeys.size() == 0) {
-        if (fieldKeys.size() == 0) {
-            throw new AdapterException("Error while checking the Schema (does the measurement exist?)");
-        }
-
-        columns = new ArrayList<>();
-        columns.add(new Column("time", Datatypes.Long));
-
-        for (List o : fieldKeys) {
-            // o.get(0): Name, o.get(1): Datatype
-            // Data types: https://docs.influxdata.com/influxdb/v1.7/write_protocols/line_protocol_reference/#data-types
-            String name = o.get(0).toString();
-            Datatypes datatype;
-            switch (o.get(1).toString()) {
-                case "float":
-                    datatype = Datatypes.Float;
-                    break;
-                case "boolean":
-                    datatype = Datatypes.Boolean;
-                    break;
-                case "integer":
-                    datatype = Datatypes.Integer;
-                    break;
-                default:
-                    datatype = Datatypes.String;
-                    break;
-            }
-            columns.add(new Column(name, datatype));
-        }
-        for (List o : tagKeys) {
-            // All tag keys are strings
-            String name = o.get(0).toString();
-            columns.add(new Column(name, Datatypes.String));
-        }
+    if (fieldKeys.size() == 0) {
+      throw new AdapterException("Error while checking the Schema (does the measurement exist?)");
+    }
 
-        // Update the column String
-        // Do it only here, because it is needed every time for the query (performance)
-        StringBuilder sb = new StringBuilder();
-        for (Column column : columns) {
-            sb.append(column.getName()).append(", ");
-        }
-        sb.setLength(sb.length() - 2);
-        columnsString = sb.toString();
+    columns = new ArrayList<>();
+    columns.add(new Column("time", Datatypes.Long));
+
+    for (List o : fieldKeys) {
+      // o.get(0): Name, o.get(1): Datatype
+      // Data types: https://docs.influxdata.com/influxdb/v1.7/write_protocols/line_protocol_reference/#data-types
+      String name = o.get(0).toString();
+      Datatypes datatype;
+      switch (o.get(1).toString()) {
+        case "float":
+          datatype = Datatypes.Float;
+          break;
+        case "boolean":
+          datatype = Datatypes.Boolean;
+          break;
+        case "integer":
+          datatype = Datatypes.Integer;
+          break;
+        default:
+          datatype = Datatypes.String;
+          break;
+      }
+      columns.add(new Column(name, datatype));
+    }
+    for (List o : tagKeys) {
+      // All tag keys are strings
+      String name = o.get(0).toString();
+      columns.add(new Column(name, Datatypes.String));
     }
 
-    // Returns a list with the entries of the query. If there are no entries, it returns an empty list
-    List<List<Object>> query(String query) {
-        if (!connected) {
-            throw new RuntimeException("InfluxDbClient not connected");
-        }
-        QueryResult queryResult = influxDb.query(new Query(query, database));
-        if (queryResult.getResults().get(0).getSeries() != null) {
-            return queryResult.getResults().get(0).getSeries().get(0).getValues();
-        } else {
-            return new ArrayList<>();
-        }
+    // Update the column String
+    // Do it only here, because it is needed every time for the query (performance)
+    StringBuilder sb = new StringBuilder();
+    for (Column column : columns) {
+      sb.append(column.getName()).append(", ");
     }
+    sb.setLength(sb.length() - 2);
+    columnsString = sb.toString();
+  }
+
+  // Returns a list with the entries of the query. If there are no entries, it returns an empty list
+  List<List<Object>> query(String query) {
+    if (!connected) {
+      throw new RuntimeException("InfluxDbClient not connected");
+    }
+    QueryResult queryResult = influxDb.query(new Query(query, database));
+    if (queryResult.getResults().get(0).getSeries() != null) {
+      return queryResult.getResults().get(0).getSeries().get(0).getValues();
+    } else {
+      return new ArrayList<>();
+    }
+  }
 
-    // Returns null, if replaceNullValues == false and if in items is a null value
-    // Otherwise it returns a Map containing the runtimenames and the correctly parsed values
-    Map<String, Object> extractEvent(List<Object> items) throws SpRuntimeException {
-        if (items.size() != columns.size()) {
-            throw new SpRuntimeException("Converter: Item list length is not the same as column list length");
-        }
-        Map<String, Object> out = new HashMap<>();
-
-        // First element is the timestamp, which will be converted to milli seconds
-        TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_INSTANT.parse((String)items.get(0));
-        Instant time = Instant.from(temporalAccessor);
-        out.put("time", time.toEpochMilli());
-
-        for (int i = 1; i < items.size(); i++) {
-            // The order of columns and items is the same, because the order in columnsString (which is used for the
-            // query) is based on the order of columns
-            if (items.get(i) != null) {
-                out.put(columns.get(i).getName(), items.get(i));
-            } else {
-                if (replaceNullValues) {
-                    // Replace null values with defaults
-                    switch (columns.get(i).getDatatypes()) {
-                        case String:
-                            out.put(columns.get(i).getName(), "");
-                            break;
-                        case Integer:
-                            out.put(columns.get(i).getName(), 0);
-                            break;
-                        case Float:
-                            out.put(columns.get(i).getName(), 0.0f);
-                            break;
-                        case Boolean:
-                            out.put(columns.get(i).getName(), false);
-                            break;
-                        default:
-                            throw new SpRuntimeException("Unexpected value: " + columns.get(i).getDatatypes());
-                    }
-                } else {
-                    // One field == null is enough to skip this event
-                    // Or maybe throw an exception instead?
-                    return null;
-                }
-            }
+  // Returns null, if replaceNullValues == false and if in items is a null value
+  // Otherwise it returns a Map containing the runtimenames and the correctly parsed values
+  Map<String, Object> extractEvent(List<Object> items) throws SpRuntimeException {
+    if (items.size() != columns.size()) {
+      throw new SpRuntimeException("Converter: Item list length is not the same as column list length");
+    }
+    Map<String, Object> out = new HashMap<>();
+
+    // First element is the timestamp, which will be converted to milli seconds
+    TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_INSTANT.parse((String) items.get(0));
+    Instant time = Instant.from(temporalAccessor);
+    out.put("time", time.toEpochMilli());
+
+    for (int i = 1; i < items.size(); i++) {
+      // The order of columns and items is the same, because the order in columnsString (which is used for the
+      // query) is based on the order of columns
+      if (items.get(i) != null) {
+        out.put(columns.get(i).getName(), items.get(i));
+      } else {
+        if (replaceNullValues) {
+          // Replace null values with defaults
+          switch (columns.get(i).getDatatypes()) {
+            case String:
+              out.put(columns.get(i).getName(), "");
+              break;
+            case Integer:
+              out.put(columns.get(i).getName(), 0);
+              break;
+            case Float:
+              out.put(columns.get(i).getName(), 0.0f);
+              break;
+            case Boolean:
+              out.put(columns.get(i).getName(), false);
+              break;
+            default:
+              throw new SpRuntimeException("Unexpected value: " + columns.get(i).getDatatypes());
+          }
+        } else {
+          // One field == null is enough to skip this event
+          // Or maybe throw an exception instead?
+          return null;
         }
-        return out;
+      }
     }
+    return out;
+  }
 
-    // Converts a string date from ISO_INSTANT format in a unix timestamp in nanoseconds
-    static String getTimestamp(String date) {
-        TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_INSTANT.parse(date);
+  // Converts a string date from ISO_INSTANT format in a unix timestamp in nanoseconds
+  static String getTimestamp(String date) {
+    TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_INSTANT.parse(date);
 
-        Instant time = Instant.from(temporalAccessor);
-        return time.getEpochSecond() + String.format("%09d", time.getNano());
-    }
+    Instant time = Instant.from(temporalAccessor);
+    return time.getEpochSecond() + String.format("%09d", time.getNano());
+  }
 
-    String getColumnsString() {
-        return columnsString;
-    }
+  String getColumnsString() {
+    return columnsString;
+  }
 
-    String getMeasurement() {
-        return measurement;
-    }
+  String getMeasurement() {
+    return measurement;
+  }
 
-    boolean isConnected() {
-        return connected;
-    }
+  boolean isConnected() {
+    return connected;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbSetAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbSetAdapter.java
index a31cb5ed6..ad554f950 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbSetAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbSetAdapter.java
@@ -20,10 +20,10 @@ package org.apache.streampipes.connect.iiot.adapters.influxdb;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
-import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.connect.adapter.model.specific.SpecificDataSetAdapter;
 import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
+import org.apache.streampipes.connect.api.exception.AdapterException;
+import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterSetDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataSetAdapterBuilder;
@@ -38,141 +38,141 @@ import java.util.Map;
 
 public class InfluxDbSetAdapter extends SpecificDataSetAdapter {
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.adapters.influxdb.set";
-    public static final int BATCH_SIZE = 8192;
-
-    private InfluxDbClient influxDbClient;
-    private Thread fetchDataThread;
-
-    public static class FetchDataThread implements Runnable {
-
-        InfluxDbSetAdapter influxDbSetAdapter;
-        InfluxDbClient influxDbClient;
-
-        public FetchDataThread(InfluxDbSetAdapter influxDbSetAdapter) throws AdapterException {
-            this.influxDbSetAdapter = influxDbSetAdapter;
-            this.influxDbClient = influxDbSetAdapter.getInfluxDbClient();
-
-            influxDbClient.connect();
-            influxDbClient.loadColumns();
-        }
+  public static final String ID = "org.apache.streampipes.connect.iiot.adapters.influxdb.set";
+  public static final int BATCH_SIZE = 8192;
 
-        @Override
-        public void run() {
-            if (!influxDbClient.isConnected()) {
-                System.out.println("Cannot start PollingThread, when the client is not connected");
-                return;
-            }
-
-            String oldestTimestamp = "0";
-            while (!Thread.interrupted()) {
-                // Get the next n elements, where the time is > than the last timestamp and send them (if there are some)
-                List<List<Object>> queryResult = influxDbClient.
-                        query("SELECT " + influxDbClient.getColumnsString() + " FROM " + influxDbClient.getMeasurement()
-                                + " WHERE time > " + oldestTimestamp + " ORDER BY time ASC LIMIT " + BATCH_SIZE);
-
-                for (List<Object> event : queryResult) {
-                    try {
-                        influxDbSetAdapter.send(influxDbClient.extractEvent(event));
-                    } catch (SpRuntimeException e) {
-                        System.out.println(e.getMessage());
-                    }
-                }
-                if (queryResult.size() < BATCH_SIZE) {
-                    // The last events or no event at all => Stop
-                    break;
-                } else {
-                    // Get the new timestamp for the new round
-                    oldestTimestamp = InfluxDbClient.getTimestamp((String) queryResult.get(queryResult.size() - 1).get(0));
-                }
-            }
-            influxDbClient.disconnect();
-        }
-    }
+  private InfluxDbClient influxDbClient;
+  private Thread fetchDataThread;
 
-    public InfluxDbSetAdapter() {
-    }
+  public static class FetchDataThread implements Runnable {
 
-    public InfluxDbSetAdapter(SpecificAdapterSetDescription specificAdapterSetDescription) {
-        super(specificAdapterSetDescription);
+    InfluxDbSetAdapter influxDbSetAdapter;
+    InfluxDbClient influxDbClient;
 
-        getConfigurations(specificAdapterSetDescription);
-    }
+    public FetchDataThread(InfluxDbSetAdapter influxDbSetAdapter) throws AdapterException {
+      this.influxDbSetAdapter = influxDbSetAdapter;
+      this.influxDbClient = influxDbSetAdapter.getInfluxDbClient();
 
-    @Override
-    public SpecificAdapterSetDescription declareModel() {
-        SpecificAdapterSetDescription description = SpecificDataSetAdapterBuilder.create(ID)
-                .withAssets(Assets.ICON, Assets.DOCUMENTATION)
-                .withLocales(Locales.EN)
-                .requiredTextParameter(Labels.withId(InfluxDbClient.HOST))
-                .requiredIntegerParameter(Labels.withId(InfluxDbClient.PORT))
-                .requiredTextParameter(Labels.withId(InfluxDbClient.DATABASE))
-                .requiredTextParameter(Labels.withId(InfluxDbClient.MEASUREMENT))
-                .requiredTextParameter(Labels.withId(InfluxDbClient.USERNAME))
-                .requiredSecret(Labels.withId(InfluxDbClient.PASSWORD))
-                .requiredSingleValueSelection(Labels.withId(InfluxDbClient.REPLACE_NULL_VALUES),
-                        Options.from(
-                                new Tuple2<>("Yes", InfluxDbClient.DO_REPLACE),
-                                new Tuple2<>("No", InfluxDbClient.DO_NOT_REPLACE)))
-                .build();
-
-        description.setAppId(ID);
-        return description;
-    }
-
-    @Override
-    public void startAdapter() throws AdapterException {
-        fetchDataThread = new Thread(new FetchDataThread(this));
-        fetchDataThread.start();
+      influxDbClient.connect();
+      influxDbClient.loadColumns();
     }
 
     @Override
-    public void stopAdapter() throws AdapterException {
-        fetchDataThread.interrupt();
-        try {
-            fetchDataThread.join();
-        } catch (InterruptedException e) {
-            throw new AdapterException("Unexpected Error while joining polling thread: " + e.getMessage());
+    public void run() {
+      if (!influxDbClient.isConnected()) {
+        System.out.println("Cannot start PollingThread, when the client is not connected");
+        return;
+      }
+
+      String oldestTimestamp = "0";
+      while (!Thread.interrupted()) {
+        // Get the next n elements, where the time is > than the last timestamp and send them (if there are some)
+        List<List<Object>> queryResult = influxDbClient.
+            query("SELECT " + influxDbClient.getColumnsString() + " FROM " + influxDbClient.getMeasurement()
+                + " WHERE time > " + oldestTimestamp + " ORDER BY time ASC LIMIT " + BATCH_SIZE);
+
+        for (List<Object> event : queryResult) {
+          try {
+            influxDbSetAdapter.send(influxDbClient.extractEvent(event));
+          } catch (SpRuntimeException e) {
+            System.out.println(e.getMessage());
+          }
         }
+        if (queryResult.size() < BATCH_SIZE) {
+          // The last events or no event at all => Stop
+          break;
+        } else {
+          // Get the new timestamp for the new round
+          oldestTimestamp = InfluxDbClient.getTimestamp((String) queryResult.get(queryResult.size() - 1).get(0));
+        }
+      }
+      influxDbClient.disconnect();
     }
-
-    @Override
-    public Adapter getInstance(SpecificAdapterSetDescription adapterDescription) {
-        return new InfluxDbSetAdapter(adapterDescription);
-    }
-
-    @Override
-    public GuessSchema getSchema(SpecificAdapterSetDescription adapterDescription)
-            throws AdapterException, ParseException {
-        getConfigurations(adapterDescription);
-        return influxDbClient.getSchema();
-    }
-
-    @Override
-    public String getId() {
-        return ID;
-    }
-
-    private void send(Map<String, Object> map) {
-        adapterPipeline.process(map);
-    }
-
-    private void getConfigurations(SpecificAdapterSetDescription adapterDescription) {
-        ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
-
-        String replace = extractor.selectedSingleValueInternalName(InfluxDbClient.REPLACE_NULL_VALUES);
-
-        influxDbClient = new InfluxDbClient(
-                extractor.singleValue(InfluxDbClient.HOST, String.class),
-                extractor.singleValue(InfluxDbClient.PORT, Integer.class),
-                extractor.singleValue(InfluxDbClient.DATABASE, String.class),
-                extractor.singleValue(InfluxDbClient.MEASUREMENT, String.class),
-                extractor.singleValue(InfluxDbClient.USERNAME, String.class),
-                extractor.secretValue(InfluxDbClient.PASSWORD),
-                replace.equals(InfluxDbClient.DO_REPLACE));
-    }
-
-    public InfluxDbClient getInfluxDbClient() {
-        return influxDbClient;
+  }
+
+  public InfluxDbSetAdapter() {
+  }
+
+  public InfluxDbSetAdapter(SpecificAdapterSetDescription specificAdapterSetDescription) {
+    super(specificAdapterSetDescription);
+
+    getConfigurations(specificAdapterSetDescription);
+  }
+
+  @Override
+  public SpecificAdapterSetDescription declareModel() {
+    SpecificAdapterSetDescription description = SpecificDataSetAdapterBuilder.create(ID)
+        .withAssets(Assets.ICON, Assets.DOCUMENTATION)
+        .withLocales(Locales.EN)
+        .requiredTextParameter(Labels.withId(InfluxDbClient.HOST))
+        .requiredIntegerParameter(Labels.withId(InfluxDbClient.PORT))
+        .requiredTextParameter(Labels.withId(InfluxDbClient.DATABASE))
+        .requiredTextParameter(Labels.withId(InfluxDbClient.MEASUREMENT))
+        .requiredTextParameter(Labels.withId(InfluxDbClient.USERNAME))
+        .requiredSecret(Labels.withId(InfluxDbClient.PASSWORD))
+        .requiredSingleValueSelection(Labels.withId(InfluxDbClient.REPLACE_NULL_VALUES),
+            Options.from(
+                new Tuple2<>("Yes", InfluxDbClient.DO_REPLACE),
+                new Tuple2<>("No", InfluxDbClient.DO_NOT_REPLACE)))
+        .build();
+
+    description.setAppId(ID);
+    return description;
+  }
+
+  @Override
+  public void startAdapter() throws AdapterException {
+    fetchDataThread = new Thread(new FetchDataThread(this));
+    fetchDataThread.start();
+  }
+
+  @Override
+  public void stopAdapter() throws AdapterException {
+    fetchDataThread.interrupt();
+    try {
+      fetchDataThread.join();
+    } catch (InterruptedException e) {
+      throw new AdapterException("Unexpected Error while joining polling thread: " + e.getMessage());
     }
+  }
+
+  @Override
+  public Adapter getInstance(SpecificAdapterSetDescription adapterDescription) {
+    return new InfluxDbSetAdapter(adapterDescription);
+  }
+
+  @Override
+  public GuessSchema getSchema(SpecificAdapterSetDescription adapterDescription)
+      throws AdapterException, ParseException {
+    getConfigurations(adapterDescription);
+    return influxDbClient.getSchema();
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  private void send(Map<String, Object> map) {
+    adapterPipeline.process(map);
+  }
+
+  private void getConfigurations(SpecificAdapterSetDescription adapterDescription) {
+    ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
+
+    String replace = extractor.selectedSingleValueInternalName(InfluxDbClient.REPLACE_NULL_VALUES);
+
+    influxDbClient = new InfluxDbClient(
+        extractor.singleValue(InfluxDbClient.HOST, String.class),
+        extractor.singleValue(InfluxDbClient.PORT, Integer.class),
+        extractor.singleValue(InfluxDbClient.DATABASE, String.class),
+        extractor.singleValue(InfluxDbClient.MEASUREMENT, String.class),
+        extractor.singleValue(InfluxDbClient.USERNAME, String.class),
+        extractor.secretValue(InfluxDbClient.PASSWORD),
+        replace.equals(InfluxDbClient.DO_REPLACE));
+  }
+
+  public InfluxDbClient getInfluxDbClient() {
+    return influxDbClient;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbStreamAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbStreamAdapter.java
index dcea694ae..89a533b30 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbStreamAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/influxdb/InfluxDbStreamAdapter.java
@@ -20,10 +20,10 @@ package org.apache.streampipes.connect.iiot.adapters.influxdb;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
-import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
 import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
+import org.apache.streampipes.connect.api.exception.AdapterException;
+import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
@@ -38,173 +38,173 @@ import java.util.Map;
 
 public class InfluxDbStreamAdapter extends SpecificDataStreamAdapter {
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.adapters.influxdb.stream";
+  public static final String ID = "org.apache.streampipes.connect.iiot.adapters.influxdb.stream";
 
-    private static final String POLLING_INTERVAL = "pollingInterval";
+  private static final String POLLING_INTERVAL = "pollingInterval";
 
-    private InfluxDbClient influxDbClient;
-
-    private Thread pollingThread;
-    private int pollingInterval;
+  private InfluxDbClient influxDbClient;
 
-    public static class PollingThread implements Runnable {
-        private int pollingInterval;
-
-        private InfluxDbClient influxDbClient;
-        private InfluxDbStreamAdapter influxDbStreamAdapter;
-
-        PollingThread(InfluxDbStreamAdapter influxDbStreamAdapter, int pollingInterval) throws AdapterException {
-            this.pollingInterval = pollingInterval;
-            this.influxDbStreamAdapter = influxDbStreamAdapter;
-            this.influxDbClient = influxDbStreamAdapter.getInfluxDbClient();
-
-            influxDbClient.connect();
-            influxDbClient.loadColumns();
-        }
-
-        @Override
-        public void run() {
-            if (!influxDbClient.isConnected()) {
-                System.out.println("Cannot start PollingThread, when the client is not connected");
-                return;
-            }
-            // Checking the most recent timestamp
-            // Timestamp is a string, because a long might not be big enough (it includes nano seconds)
-            String lastTimestamp;
-            try {
-                lastTimestamp = getNewestTimestamp();
-            } catch (SpRuntimeException e) {
-                System.out.println(e.getMessage());
-                return;
-            }
-
-            while (!Thread.interrupted()) {
-                try {
-                    Thread.sleep(pollingInterval);
-                } catch (InterruptedException e) {
-                    break;
-                }
-                List<List<Object>> queryResult = influxDbClient.query("SELECT " + influxDbClient.getColumnsString()
-                        + " FROM " + influxDbClient.getMeasurement() + " WHERE time > " + lastTimestamp + " ORDER BY time ASC ");
-                if (queryResult.size() > 0) {
-                    // The last element has the highest timestamp (ordered asc) -> Set the new latest timestamp
-                    lastTimestamp = InfluxDbClient.getTimestamp((String)queryResult.get(queryResult.size() - 1).get(0));
-
-                    for (List<Object> value : queryResult) {
-                        try {
-                            Map<String, Object> out = influxDbClient.extractEvent(value);
-                            if (out != null) {
-                                influxDbStreamAdapter.send(out);
-                            }
-                        } catch (SpRuntimeException e) {
-                            System.out.println("Error: " + e.getMessage());
-                        }
-                    }
-                }
-            }
-            influxDbClient.disconnect();
-        }
-
-        // Returns the newest timestamp in the measurement as unix timestamp in Nanoseconds.
-        // If no entry is found, a SpRuntimeException is thrown
-        String getNewestTimestamp() throws SpRuntimeException {
-            List<List<Object>> queryResult = influxDbClient.query("SELECT * FROM " + influxDbClient.getMeasurement()
-                    + " ORDER BY time DESC LIMIT 1");
-            if (queryResult.size() > 0) {
-                return InfluxDbClient.getTimestamp((String)queryResult.get(0).get(0));
-            } else {
-                throw new SpRuntimeException("No entry found in query");
-            }
-        }
-    }
-
-    private InfluxDbClient getInfluxDbClient() {
-        return influxDbClient;
-    }
+  private Thread pollingThread;
+  private int pollingInterval;
 
-    public InfluxDbStreamAdapter() {
-    }
-
-    public InfluxDbStreamAdapter(SpecificAdapterStreamDescription specificAdapterStreamDescription) {
-        super(specificAdapterStreamDescription);
+  public static class PollingThread implements Runnable {
+    private int pollingInterval;
 
-        getConfigurations(specificAdapterStreamDescription);
-    }
+    private InfluxDbClient influxDbClient;
+    private InfluxDbStreamAdapter influxDbStreamAdapter;
 
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .requiredTextParameter(Labels.withId(InfluxDbClient.HOST))
-                .requiredIntegerParameter(Labels.withId(InfluxDbClient.PORT))
-                .requiredTextParameter(Labels.withId(InfluxDbClient.DATABASE))
-                .requiredTextParameter(Labels.withId(InfluxDbClient.MEASUREMENT))
-                .requiredTextParameter(Labels.withId(InfluxDbClient.USERNAME))
-                .requiredSecret(Labels.withId(InfluxDbClient.PASSWORD))
-                .requiredIntegerParameter(Labels.withId(POLLING_INTERVAL))
-                .requiredSingleValueSelection(Labels.withId(InfluxDbClient.REPLACE_NULL_VALUES),
-                        Options.from(
-                                new Tuple2<>("Yes", InfluxDbClient.DO_REPLACE),
-                                new Tuple2<>("No", InfluxDbClient.DO_NOT_REPLACE)))
-                .build();
-
-        description.setAppId(ID);
-        return description;
-    }
+    PollingThread(InfluxDbStreamAdapter influxDbStreamAdapter, int pollingInterval) throws AdapterException {
+      this.pollingInterval = pollingInterval;
+      this.influxDbStreamAdapter = influxDbStreamAdapter;
+      this.influxDbClient = influxDbStreamAdapter.getInfluxDbClient();
 
-    @Override
-    public void startAdapter() throws AdapterException {
-        pollingThread = new Thread(new PollingThread(this, pollingInterval));
-        pollingThread.start();
+      influxDbClient.connect();
+      influxDbClient.loadColumns();
     }
 
     @Override
-    public void stopAdapter() throws AdapterException {
-        // Signaling the thread to stop and then disconnect from the server
-        pollingThread.interrupt();
+    public void run() {
+      if (!influxDbClient.isConnected()) {
+        System.out.println("Cannot start PollingThread, when the client is not connected");
+        return;
+      }
+      // Checking the most recent timestamp
+      // Timestamp is a string, because a long might not be big enough (it includes nano seconds)
+      String lastTimestamp;
+      try {
+        lastTimestamp = getNewestTimestamp();
+      } catch (SpRuntimeException e) {
+        System.out.println(e.getMessage());
+        return;
+      }
+
+      while (!Thread.interrupted()) {
         try {
-            pollingThread.join();
+          Thread.sleep(pollingInterval);
         } catch (InterruptedException e) {
-            throw new AdapterException("Unexpected Error while joining polling thread: " + e.getMessage());
+          break;
         }
-    }
-
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new InfluxDbStreamAdapter(adapterDescription);
-    }
+        List<List<Object>> queryResult = influxDbClient.query("SELECT " + influxDbClient.getColumnsString()
+            + " FROM " + influxDbClient.getMeasurement() + " WHERE time > " + lastTimestamp + " ORDER BY time ASC ");
+        if (queryResult.size() > 0) {
+          // The last element has the highest timestamp (ordered asc) -> Set the new latest timestamp
+          lastTimestamp = InfluxDbClient.getTimestamp((String) queryResult.get(queryResult.size() - 1).get(0));
 
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
-            throws AdapterException, ParseException {
-        getConfigurations(adapterDescription);
-        return influxDbClient.getSchema();
-    }
-
-    @Override
-    public String getId() {
-        return ID;
+          for (List<Object> value : queryResult) {
+            try {
+              Map<String, Object> out = influxDbClient.extractEvent(value);
+              if (out != null) {
+                influxDbStreamAdapter.send(out);
+              }
+            } catch (SpRuntimeException e) {
+              System.out.println("Error: " + e.getMessage());
+            }
+          }
+        }
+      }
+      influxDbClient.disconnect();
     }
 
-    private void send(Map<String, Object> map) {
-        adapterPipeline.process(map);
+    // Returns the newest timestamp in the measurement as unix timestamp in Nanoseconds.
+    // If no entry is found, a SpRuntimeException is thrown
+    String getNewestTimestamp() throws SpRuntimeException {
+      List<List<Object>> queryResult = influxDbClient.query("SELECT * FROM " + influxDbClient.getMeasurement()
+          + " ORDER BY time DESC LIMIT 1");
+      if (queryResult.size() > 0) {
+        return InfluxDbClient.getTimestamp((String) queryResult.get(0).get(0));
+      } else {
+        throw new SpRuntimeException("No entry found in query");
+      }
     }
-
-    private void getConfigurations(SpecificAdapterStreamDescription adapterDescription) {
-        ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
-
-        pollingInterval = extractor.singleValue(POLLING_INTERVAL, Integer.class);
-        String replace = extractor.selectedSingleValueInternalName(InfluxDbClient.REPLACE_NULL_VALUES);
-
-        influxDbClient = new InfluxDbClient(
-                extractor.singleValue(InfluxDbClient.HOST, String.class),
-                extractor.singleValue(InfluxDbClient.PORT, Integer.class),
-                extractor.singleValue(InfluxDbClient.DATABASE, String.class),
-                extractor.singleValue(InfluxDbClient.MEASUREMENT, String.class),
-                extractor.singleValue(InfluxDbClient.USERNAME, String.class),
-                extractor.secretValue(InfluxDbClient.PASSWORD),
-                replace.equals(InfluxDbClient.DO_REPLACE));
-
+  }
+
+  private InfluxDbClient getInfluxDbClient() {
+    return influxDbClient;
+  }
+
+  public InfluxDbStreamAdapter() {
+  }
+
+  public InfluxDbStreamAdapter(SpecificAdapterStreamDescription specificAdapterStreamDescription) {
+    super(specificAdapterStreamDescription);
+
+    getConfigurations(specificAdapterStreamDescription);
+  }
+
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredTextParameter(Labels.withId(InfluxDbClient.HOST))
+        .requiredIntegerParameter(Labels.withId(InfluxDbClient.PORT))
+        .requiredTextParameter(Labels.withId(InfluxDbClient.DATABASE))
+        .requiredTextParameter(Labels.withId(InfluxDbClient.MEASUREMENT))
+        .requiredTextParameter(Labels.withId(InfluxDbClient.USERNAME))
+        .requiredSecret(Labels.withId(InfluxDbClient.PASSWORD))
+        .requiredIntegerParameter(Labels.withId(POLLING_INTERVAL))
+        .requiredSingleValueSelection(Labels.withId(InfluxDbClient.REPLACE_NULL_VALUES),
+            Options.from(
+                new Tuple2<>("Yes", InfluxDbClient.DO_REPLACE),
+                new Tuple2<>("No", InfluxDbClient.DO_NOT_REPLACE)))
+        .build();
+
+    description.setAppId(ID);
+    return description;
+  }
+
+  @Override
+  public void startAdapter() throws AdapterException {
+    pollingThread = new Thread(new PollingThread(this, pollingInterval));
+    pollingThread.start();
+  }
+
+  @Override
+  public void stopAdapter() throws AdapterException {
+    // Signaling the thread to stop and then disconnect from the server
+    pollingThread.interrupt();
+    try {
+      pollingThread.join();
+    } catch (InterruptedException e) {
+      throw new AdapterException("Unexpected Error while joining polling thread: " + e.getMessage());
     }
+  }
+
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new InfluxDbStreamAdapter(adapterDescription);
+  }
+
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
+      throws AdapterException, ParseException {
+    getConfigurations(adapterDescription);
+    return influxDbClient.getSchema();
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  private void send(Map<String, Object> map) {
+    adapterPipeline.process(map);
+  }
+
+  private void getConfigurations(SpecificAdapterStreamDescription adapterDescription) {
+    ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
+
+    pollingInterval = extractor.singleValue(POLLING_INTERVAL, Integer.class);
+    String replace = extractor.selectedSingleValueInternalName(InfluxDbClient.REPLACE_NULL_VALUES);
+
+    influxDbClient = new InfluxDbClient(
+        extractor.singleValue(InfluxDbClient.HOST, String.class),
+        extractor.singleValue(InfluxDbClient.PORT, Integer.class),
+        extractor.singleValue(InfluxDbClient.DATABASE, String.class),
+        extractor.singleValue(InfluxDbClient.MEASUREMENT, String.class),
+        extractor.singleValue(InfluxDbClient.USERNAME, String.class),
+        extractor.secretValue(InfluxDbClient.PASSWORD),
+        replace.equals(InfluxDbClient.DO_REPLACE));
+
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/MiloOpcUaConfigurationProvider.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/MiloOpcUaConfigurationProvider.java
index 7145858ea..55ccc0907 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/MiloOpcUaConfigurationProvider.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/MiloOpcUaConfigurationProvider.java
@@ -20,6 +20,7 @@ package org.apache.streampipes.connect.iiot.adapters.opcua;
 
 import org.apache.streampipes.commons.exceptions.SpConfigurationException;
 import org.apache.streampipes.connect.iiot.adapters.opcua.configuration.SpOpcUaConfig;
+
 import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
 import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfigBuilder;
 import org.eclipse.milo.opcua.sdk.client.api.identity.UsernameProvider;
@@ -36,24 +37,25 @@ import java.util.concurrent.ExecutionException;
 
 public class MiloOpcUaConfigurationProvider {
 
-  public OpcUaClientConfig makeClientConfig(SpOpcUaConfig spOpcConfig) throws ExecutionException, InterruptedException, SpConfigurationException, URISyntaxException {
+  public OpcUaClientConfig makeClientConfig(SpOpcUaConfig spOpcConfig)
+      throws ExecutionException, InterruptedException, SpConfigurationException, URISyntaxException {
     String opcServerUrl = spOpcConfig.getOpcServerURL();
     List<EndpointDescription> endpoints = DiscoveryClient.getEndpoints(opcServerUrl).get();
     String host = opcServerUrl.split("://")[1].split(":")[0];
 
     EndpointDescription tmpEndpoint = endpoints
-            .stream()
-            .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
-            .findFirst()
-            .orElseThrow(() -> new SpConfigurationException("No endpoint with security policy none"));
+        .stream()
+        .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
+        .findFirst()
+        .orElseThrow(() -> new SpConfigurationException("No endpoint with security policy none"));
 
     tmpEndpoint = updateEndpointUrl(tmpEndpoint, host);
     endpoints = Collections.singletonList(tmpEndpoint);
 
     EndpointDescription endpoint = endpoints
-            .stream()
-            .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
-            .findFirst().orElseThrow(() -> new SpConfigurationException("no desired endpoints returned"));
+        .stream()
+        .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
+        .findFirst().orElseThrow(() -> new SpConfigurationException("no desired endpoints returned"));
 
     return buildConfig(endpoint, spOpcConfig);
   }
@@ -70,33 +72,33 @@ public class MiloOpcUaConfigurationProvider {
 
   private OpcUaClientConfigBuilder defaultBuilder(EndpointDescription endpoint) {
     return OpcUaClientConfig.builder()
-            .setApplicationName(LocalizedText.english("eclipse milo opc-ua client"))
-            .setApplicationUri("urn:eclipse:milo:examples:client")
-            .setEndpoint(endpoint);
+        .setApplicationName(LocalizedText.english("eclipse milo opc-ua client"))
+        .setApplicationUri("urn:eclipse:milo:examples:client")
+        .setEndpoint(endpoint);
   }
 
   private EndpointDescription updateEndpointUrl(
-          EndpointDescription original, String hostname) throws URISyntaxException {
+      EndpointDescription original, String hostname) throws URISyntaxException {
 
     URI uri = new URI(original.getEndpointUrl()).parseServerAuthority();
 
     String endpointUrl = String.format(
-            "%s://%s:%s%s",
-            uri.getScheme(),
-            hostname,
-            uri.getPort(),
-            uri.getPath()
+        "%s://%s:%s%s",
+        uri.getScheme(),
+        hostname,
+        uri.getPort(),
+        uri.getPath()
     );
 
     return new EndpointDescription(
-            endpointUrl,
-            original.getServer(),
-            original.getServerCertificate(),
-            original.getSecurityMode(),
-            original.getSecurityPolicyUri(),
-            original.getUserIdentityTokens(),
-            original.getTransportProfileUri(),
-            original.getSecurityLevel()
+        endpointUrl,
+        original.getServer(),
+        original.getServerCertificate(),
+        original.getSecurityMode(),
+        original.getSecurityPolicyUri(),
+        original.getUserIdentityTokens(),
+        original.getTransportProfileUri(),
+        original.getSecurityLevel()
     );
   }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcNode.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcNode.java
index 99c8da6d1..7bbe9e3e6 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcNode.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcNode.java
@@ -18,109 +18,112 @@
 
 package org.apache.streampipes.connect.iiot.adapters.opcua;
 
-import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 import org.apache.streampipes.sdk.utils.Datatypes;
 
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+
 /**
  * OpcNode is a StreamPipes internal model of an OPC UA node.
  * It's main purpose is to ease the handling of nodes within StreamPipes.
  */
 
 public class OpcNode {
-    String label;
-    Datatypes type;
-    NodeId nodeId;
-    int opcUnitId;
-    private boolean readable;
-
-    /**
-     * Constructor for class OpcNode without an OPC UA unit identifier. <br>
-     * Unit identifier is set to zero as default.
-     *
-     * @param label name of the OPC UA node
-     * @param type datatype of the OPC UA node
-     * @param nodeId identifier of the OPC UA node
-     */
-    public OpcNode(String label, Datatypes type, NodeId nodeId) {
-        this.label = label;
-        this.type = type;
-        this.nodeId = nodeId;
-        this.opcUnitId = 0;
-    }
-
-    /**
-     * Constructor for class OpcNode with an OPC UA unit identifier. <br>
-     * This identifier references to an OPC UA measurement unit, e.g. degree celsius. <br>
-     * With {@link OpcNode#getQudtURI()} the OPC UA internal ID is mapped to the QUDT unit ontology <br>
-     *
-     * @param label name of the OPC UA node
-     * @param type datatype of the OPC UA node
-     * @param nodeId identifier of the OPC UA node
-     * @param opcUnitId OPC UA internal unit identifier
-     */
-    public OpcNode(String label, Datatypes type, NodeId nodeId, Integer opcUnitId){
-        this.label = label;
-        this.type = type;
-        this.nodeId = nodeId;
-        this.opcUnitId = opcUnitId;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public Datatypes getType() {
-        return type;
-    }
-
-    public void setType(Datatypes type) {
-        this.type = type;
-    }
-
-    public NodeId getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(NodeId nodeId) {
-        this.nodeId = nodeId;
-    }
-
-    public int getOpcUnitId() {return this.opcUnitId;}
-
-    public boolean hasUnitId() {
-        // zero is the default case when no unit id is present
-        return this.opcUnitId !=0;
-    }
-
-    public boolean isReadable() {
-        return readable;
-    }
-
-    public void setReadable(boolean readable) {
-        this.readable = readable;
-    }
-
-    /**
-     * Returns the corresponding QUDT URI if the {@code opcUnitId} is given,
-     * otherwise it returns an empty string. <br>
-     * Currently, there are only two examples added. <br>
-     * Other units have to be added manually, please have a look at the <a href="http://opcfoundation.org/UA/EngineeringUnits/UNECE/UNECE_to_OPCUA.csv"> OPC UA unitID mapping table</a>. <br>
-     *
-     * @return QUDT URI as string of the given unit
-     */
-
-    public String getQudtURI(){
-        switch (this.opcUnitId){
-            case 17476:
-                return "http://qudt.org/vocab/unit#DEG";
-            case 4408652:
-                return "http://qudt.org/vocab/unit#DegreeCelsius";
-            default:
-                return "";
-        }
+  String label;
+  Datatypes type;
+  NodeId nodeId;
+  int opcUnitId;
+  private boolean readable;
+
+  /**
+   * Constructor for class OpcNode without an OPC UA unit identifier. <br>
+   * Unit identifier is set to zero as default.
+   *
+   * @param label  name of the OPC UA node
+   * @param type   datatype of the OPC UA node
+   * @param nodeId identifier of the OPC UA node
+   */
+  public OpcNode(String label, Datatypes type, NodeId nodeId) {
+    this.label = label;
+    this.type = type;
+    this.nodeId = nodeId;
+    this.opcUnitId = 0;
+  }
+
+  /**
+   * Constructor for class OpcNode with an OPC UA unit identifier. <br>
+   * This identifier references to an OPC UA measurement unit, e.g. degree celsius. <br>
+   * With {@link OpcNode#getQudtURI()} the OPC UA internal ID is mapped to the QUDT unit ontology <br>
+   *
+   * @param label     name of the OPC UA node
+   * @param type      datatype of the OPC UA node
+   * @param nodeId    identifier of the OPC UA node
+   * @param opcUnitId OPC UA internal unit identifier
+   */
+  public OpcNode(String label, Datatypes type, NodeId nodeId, Integer opcUnitId) {
+    this.label = label;
+    this.type = type;
+    this.nodeId = nodeId;
+    this.opcUnitId = opcUnitId;
+  }
+
+  public String getLabel() {
+    return label;
+  }
+
+  public void setLabel(String label) {
+    this.label = label;
+  }
+
+  public Datatypes getType() {
+    return type;
+  }
+
+  public void setType(Datatypes type) {
+    this.type = type;
+  }
+
+  public NodeId getNodeId() {
+    return nodeId;
+  }
+
+  public void setNodeId(NodeId nodeId) {
+    this.nodeId = nodeId;
+  }
+
+  public int getOpcUnitId() {
+    return this.opcUnitId;
+  }
+
+  public boolean hasUnitId() {
+    // zero is the default case when no unit id is present
+    return this.opcUnitId != 0;
+  }
+
+  public boolean isReadable() {
+    return readable;
+  }
+
+  public void setReadable(boolean readable) {
+    this.readable = readable;
+  }
+
+  /**
+   * Returns the corresponding QUDT URI if the {@code opcUnitId} is given,
+   * otherwise it returns an empty string. <br>
+   * Currently, there are only two examples added. <br>
+   * Other units have to be added manually, please have a look at the <a href="http://opcfoundation.org/UA/EngineeringUnits/UNECE/UNECE_to_OPCUA.csv"> OPC UA unitID mapping table</a>. <br>
+   *
+   * @return QUDT URI as string of the given unit
+   */
+
+  public String getQudtURI() {
+    switch (this.opcUnitId) {
+      case 17476:
+        return "http://qudt.org/vocab/unit#DEG";
+      case 4408652:
+        return "http://qudt.org/vocab/unit#DegreeCelsius";
+      default:
+        return "";
     }
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaAdapter.java
index 293e2daf0..6ecc00456 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaAdapter.java
@@ -40,6 +40,7 @@ import org.apache.streampipes.sdk.helpers.Alternatives;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
+
 import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
@@ -48,7 +49,11 @@ import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -56,224 +61,225 @@ import java.util.stream.Collectors;
 
 public class OpcUaAdapter extends PullAdapter implements SupportsRuntimeConfig {
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.adapters.opcua";
-    private static final Logger LOG = LoggerFactory.getLogger(OpcUaAdapter.class);
-
-    private int pullingIntervalMilliSeconds;
-    private SpOpcUaClient spOpcUaClient;
-    private List<OpcNode> allNodes;
-    private List<NodeId> allNodeIds;
-    private int numberProperties;
-    private final Map<String, Object> event;
-
-    /**
-     * This variable is used to map the node ids during the subscription to the labels of the nodes
-     */
-    private final Map<String, String> nodeIdToLabelMapping;
-
-    public OpcUaAdapter() {
-        super();
-        this.numberProperties = 0;
-        this.event = new HashMap<>();
-        this.nodeIdToLabelMapping = new HashMap<>();
-    }
-
-    public OpcUaAdapter(SpecificAdapterStreamDescription adapterStreamDescription) {
-        super(adapterStreamDescription);
-        this.numberProperties = 0;
-        this.event = new HashMap<>();
-        this.nodeIdToLabelMapping = new HashMap<>();
+  public static final String ID = "org.apache.streampipes.connect.iiot.adapters.opcua";
+  private static final Logger LOG = LoggerFactory.getLogger(OpcUaAdapter.class);
+
+  private int pullingIntervalMilliSeconds;
+  private SpOpcUaClient spOpcUaClient;
+  private List<OpcNode> allNodes;
+  private List<NodeId> allNodeIds;
+  private int numberProperties;
+  private final Map<String, Object> event;
+
+  /**
+   * This variable is used to map the node ids during the subscription to the labels of the nodes
+   */
+  private final Map<String, String> nodeIdToLabelMapping;
+
+  public OpcUaAdapter() {
+    super();
+    this.numberProperties = 0;
+    this.event = new HashMap<>();
+    this.nodeIdToLabelMapping = new HashMap<>();
+  }
+
+  public OpcUaAdapter(SpecificAdapterStreamDescription adapterStreamDescription) {
+    super(adapterStreamDescription);
+    this.numberProperties = 0;
+    this.event = new HashMap<>();
+    this.nodeIdToLabelMapping = new HashMap<>();
+  }
+
+  @Override
+  protected void before() throws AdapterException {
+
+    this.allNodeIds = new ArrayList<>();
+    List<String> deleteKeys = this.adapterDescription
+        .getSchemaRules()
+        .stream()
+        .filter(rule -> rule instanceof DeleteRuleDescription)
+        .map(rule -> ((DeleteRuleDescription) rule).getRuntimeKey())
+        .collect(Collectors.toList());
+
+    try {
+      this.spOpcUaClient.connect();
+      OpcUaNodeBrowser browserClient =
+          new OpcUaNodeBrowser(this.spOpcUaClient.getClient(), this.spOpcUaClient.getSpOpcConfig());
+      this.allNodes = browserClient.findNodes(deleteKeys);
+
+
+      for (OpcNode node : this.allNodes) {
+        this.allNodeIds.add(node.nodeId);
+      }
+
+      if (spOpcUaClient.inPullMode()) {
+        this.pullingIntervalMilliSeconds = spOpcUaClient.getPullIntervalMilliSeconds();
+      } else {
+        this.numberProperties = this.allNodeIds.size();
+        this.spOpcUaClient.createListSubscription(this.allNodeIds, this);
+      }
+
+      this.allNodes.forEach(node -> this.nodeIdToLabelMapping.put(node.getNodeId().toString(), node.getLabel()));
+
+
+    } catch (Exception e) {
+      throw new AdapterException("The Connection to the OPC UA server could not be established.", e.getCause());
     }
+  }
 
-    @Override
-    protected void before() throws AdapterException {
-
-        this.allNodeIds = new ArrayList<>();
-        List<String> deleteKeys = this.adapterDescription
-          .getSchemaRules()
-          .stream()
-          .filter(rule -> rule instanceof DeleteRuleDescription)
-          .map(rule -> ((DeleteRuleDescription) rule).getRuntimeKey())
-          .collect(Collectors.toList());
-
-        try {
-            this.spOpcUaClient.connect();
-            OpcUaNodeBrowser browserClient =
-                    new OpcUaNodeBrowser(this.spOpcUaClient.getClient(), this.spOpcUaClient.getSpOpcConfig());
-            this.allNodes = browserClient.findNodes(deleteKeys);
-
-
-            for (OpcNode node : this.allNodes) {
-                this.allNodeIds.add(node.nodeId);
-            }
-
-            if (spOpcUaClient.inPullMode()) {
-                this.pullingIntervalMilliSeconds = spOpcUaClient.getPullIntervalMilliSeconds();
-            } else {
-                this.numberProperties = this.allNodeIds.size();
-                this.spOpcUaClient.createListSubscription(this.allNodeIds, this);
-            }
+  @Override
+  public void startAdapter() throws AdapterException {
 
-            this.allNodes.forEach(node -> this.nodeIdToLabelMapping.put(node.getNodeId().toString(), node.getLabel()));
+    this.spOpcUaClient = new SpOpcUaClient(SpOpcUaConfigBuilder.from(this.adapterDescription));
 
-
-        } catch (Exception e) {
-            throw new AdapterException("The Connection to the OPC UA server could not be established.", e.getCause());
-        }
-    }
-
-    @Override
-    public void startAdapter() throws AdapterException {
-
-        this.spOpcUaClient = new SpOpcUaClient(SpOpcUaConfigBuilder.from(this.adapterDescription));
-
-        if (this.spOpcUaClient.inPullMode()) {
-            super.startAdapter();
-        } else {
-            this.before();
-        }
+    if (this.spOpcUaClient.inPullMode()) {
+      super.startAdapter();
+    } else {
+      this.before();
     }
+  }
 
-    @Override
-    public void stopAdapter() throws AdapterException {
-        // close connection
-        this.spOpcUaClient.disconnect();
-
-        if (this.spOpcUaClient.inPullMode()) {
-            super.stopAdapter();
-        }
-    }
+  @Override
+  public void stopAdapter() throws AdapterException {
+    // close connection
+    this.spOpcUaClient.disconnect();
 
-    @Override
-    protected void pullData() throws ExecutionException, RuntimeException, InterruptedException, TimeoutException {
-        var response =
-          this.spOpcUaClient.getClient().readValues(0, TimestampsToReturn.Both, this.allNodeIds);
-        boolean badStatusCodeReceived = false;
-        boolean emptyValueReceived = false;
-            List<DataValue> returnValues = response.get(this.getPollingInterval().getValue(), this.getPollingInterval().getTimeUnit());
-            if (returnValues.size() == 0) {
-                emptyValueReceived = true;
-                LOG.warn("Empty value object returned - event will not be sent");
-            } else {
-                for (int i = 0; i < returnValues.size(); i++) {
-                    var status = returnValues.get(i).getStatusCode();
-                    if (StatusCode.GOOD.equals(status)) {
-                        Object value = returnValues.get(i).getValue().getValue();
-                        this.event.put(this.allNodes.get(i).getLabel(), value);
-                    } else {
-                        badStatusCodeReceived = true;
-                        LOG.warn("Received status code {} for node label: {} - event will not be sent",
-                                status,
-                                this.allNodes.get(i).getLabel());
-                    }
-                }
-            }
-            if (!badStatusCodeReceived && !emptyValueReceived) {
-                adapterPipeline.process(this.event);
-            }
+    if (this.spOpcUaClient.inPullMode()) {
+      super.stopAdapter();
     }
-
-    public void onSubscriptionValue(UaMonitoredItem item, DataValue value) {
-
-        String key = this.nodeIdToLabelMapping.get(item.getReadValueId().getNodeId().toString());
-
-        OpcNode currNode = this.allNodes.stream()
-                .filter(node -> key.equals(node.getLabel()))
-                .findFirst()
-                .orElse(null);
-
-        if (currNode != null) {
-            event.put(currNode.getLabel(), value.getValue().getValue());
-
-            // ensure that event is complete and all opc ua subscriptions transmitted at least one value
-            if (event.keySet().size() >= this.numberProperties) {
-                Map<String, Object> newEvent = new HashMap<>();
-                // deep copy of event to prevent preprocessor error
-                for (String k : event.keySet()) {
-                    newEvent.put(k, event.get(k));
-                }
-                adapterPipeline.process(newEvent);
-            }
+  }
+
+  @Override
+  protected void pullData() throws ExecutionException, RuntimeException, InterruptedException, TimeoutException {
+    var response =
+        this.spOpcUaClient.getClient().readValues(0, TimestampsToReturn.Both, this.allNodeIds);
+    boolean badStatusCodeReceived = false;
+    boolean emptyValueReceived = false;
+    List<DataValue> returnValues =
+        response.get(this.getPollingInterval().getValue(), this.getPollingInterval().getTimeUnit());
+    if (returnValues.size() == 0) {
+      emptyValueReceived = true;
+      LOG.warn("Empty value object returned - event will not be sent");
+    } else {
+      for (int i = 0; i < returnValues.size(); i++) {
+        var status = returnValues.get(i).getStatusCode();
+        if (StatusCode.GOOD.equals(status)) {
+          Object value = returnValues.get(i).getValue().getValue();
+          this.event.put(this.allNodes.get(i).getLabel(), value);
         } else {
-           LOG.error("No event is produced, because subscription item {} could not be found within all nodes", item);
+          badStatusCodeReceived = true;
+          LOG.warn("Received status code {} for node label: {} - event will not be sent",
+              status,
+              this.allNodes.get(i).getLabel());
         }
+      }
     }
-
-    @Override
-    protected PollingSettings getPollingInterval() {
-        return PollingSettings.from(TimeUnit.MILLISECONDS, this.pullingIntervalMilliSeconds);
+    if (!badStatusCodeReceived && !emptyValueReceived) {
+      adapterPipeline.process(this.event);
     }
+  }
 
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder
-                .create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .category(AdapterType.Generic, AdapterType.Manufacturing)
-                .requiredAlternatives(Labels.withId(OpcUaLabels.ADAPTER_TYPE.name()),
-                        Alternatives.from(Labels.withId(OpcUaLabels.PULL_MODE.name()),
-                                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()),
-                                StaticProperties.group(
-                                        Labels.withId(OpcUaLabels.USERNAME_GROUP.name()),
-                                        StaticProperties.stringFreeTextProperty(
-                                                Labels.withId(OpcUaLabels.USERNAME.name())),
-                                        StaticProperties.secretValue(Labels.withId(OpcUaLabels.PASSWORD.name()))
-                                ))
-                )
-                .requiredAlternatives(Labels.withId(OpcUaLabels.OPC_HOST_OR_URL.name()),
-                        Alternatives.from(
-                                Labels.withId(OpcUaLabels.OPC_URL.name()),
-                                StaticProperties.stringFreeTextProperty(
-                                        Labels.withId(OpcUaLabels.OPC_SERVER_URL.name()), "opc.tcp://localhost:4840"))
-                        ,
-                        Alternatives.from(Labels.withId(OpcUaLabels.OPC_HOST.name()),
-                                StaticProperties.group(
-                                        Labels.withId("host-port"),
-                                        StaticProperties.stringFreeTextProperty(
-                                                Labels.withId(OpcUaLabels.OPC_SERVER_HOST.name())),
-                                        StaticProperties.stringFreeTextProperty(
-                                                Labels.withId(OpcUaLabels.OPC_SERVER_PORT.name()))
-                                ))
-                )
-                .requiredTextParameter(Labels.withId(OpcUaLabels.NAMESPACE_INDEX.name()))
-                .requiredTextParameter(Labels.withId(OpcUaLabels.NODE_ID.name()))
-                .requiredRuntimeResolvableTreeInput(
-                        Labels.withId(OpcUaLabels.AVAILABLE_NODES.name()),
-                        Arrays.asList(OpcUaLabels.NAMESPACE_INDEX.name(), OpcUaLabels.NODE_ID.name())
-                )
-                .build();
-
-        description.setAppId(ID);
-
-        return description;
-    }
+  public void onSubscriptionValue(UaMonitoredItem item, DataValue value) {
 
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new OpcUaAdapter(adapterDescription);
-    }
+    String key = this.nodeIdToLabelMapping.get(item.getReadValueId().getNodeId().toString());
 
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
-            throws AdapterException, ParseException {
-        return OpcUaUtil.getSchema(adapterDescription);
-    }
+    OpcNode currNode = this.allNodes.stream()
+        .filter(node -> key.equals(node.getLabel()))
+        .findFirst()
+        .orElse(null);
 
-    @Override
-    public String getId() {
-        return ID;
-    }
+    if (currNode != null) {
+      event.put(currNode.getLabel(), value.getValue().getValue());
 
-    @Override
-    public StaticProperty resolveConfiguration(String staticPropertyInternalName,
-                                               StaticPropertyExtractor extractor) throws SpConfigurationException {
-        return OpcUaUtil.resolveConfiguration(staticPropertyInternalName, extractor);
+      // ensure that event is complete and all opc ua subscriptions transmitted at least one value
+      if (event.keySet().size() >= this.numberProperties) {
+        Map<String, Object> newEvent = new HashMap<>();
+        // deep copy of event to prevent preprocessor error
+        for (String k : event.keySet()) {
+          newEvent.put(k, event.get(k));
+        }
+        adapterPipeline.process(newEvent);
+      }
+    } else {
+      LOG.error("No event is produced, because subscription item {} could not be found within all nodes", item);
     }
+  }
+
+  @Override
+  protected PollingSettings getPollingInterval() {
+    return PollingSettings.from(TimeUnit.MILLISECONDS, this.pullingIntervalMilliSeconds);
+  }
+
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder
+        .create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Generic, AdapterType.Manufacturing)
+        .requiredAlternatives(Labels.withId(OpcUaLabels.ADAPTER_TYPE.name()),
+            Alternatives.from(Labels.withId(OpcUaLabels.PULL_MODE.name()),
+                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()),
+                StaticProperties.group(
+                    Labels.withId(OpcUaLabels.USERNAME_GROUP.name()),
+                    StaticProperties.stringFreeTextProperty(
+                        Labels.withId(OpcUaLabels.USERNAME.name())),
+                    StaticProperties.secretValue(Labels.withId(OpcUaLabels.PASSWORD.name()))
+                ))
+        )
+        .requiredAlternatives(Labels.withId(OpcUaLabels.OPC_HOST_OR_URL.name()),
+            Alternatives.from(
+                Labels.withId(OpcUaLabels.OPC_URL.name()),
+                StaticProperties.stringFreeTextProperty(
+                    Labels.withId(OpcUaLabels.OPC_SERVER_URL.name()), "opc.tcp://localhost:4840"))
+            ,
+            Alternatives.from(Labels.withId(OpcUaLabels.OPC_HOST.name()),
+                StaticProperties.group(
+                    Labels.withId("host-port"),
+                    StaticProperties.stringFreeTextProperty(
+                        Labels.withId(OpcUaLabels.OPC_SERVER_HOST.name())),
+                    StaticProperties.stringFreeTextProperty(
+                        Labels.withId(OpcUaLabels.OPC_SERVER_PORT.name()))
+                ))
+        )
+        .requiredTextParameter(Labels.withId(OpcUaLabels.NAMESPACE_INDEX.name()))
+        .requiredTextParameter(Labels.withId(OpcUaLabels.NODE_ID.name()))
+        .requiredRuntimeResolvableTreeInput(
+            Labels.withId(OpcUaLabels.AVAILABLE_NODES.name()),
+            Arrays.asList(OpcUaLabels.NAMESPACE_INDEX.name(), OpcUaLabels.NODE_ID.name())
+        )
+        .build();
+
+    description.setAppId(ID);
+
+    return description;
+  }
+
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new OpcUaAdapter(adapterDescription);
+  }
+
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
+      throws AdapterException, ParseException {
+    return OpcUaUtil.getSchema(adapterDescription);
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  @Override
+  public StaticProperty resolveConfiguration(String staticPropertyInternalName,
+                                             StaticPropertyExtractor extractor) throws SpConfigurationException {
+    return OpcUaUtil.resolveConfiguration(staticPropertyInternalName, extractor);
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaNodeBrowser.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaNodeBrowser.java
index c1cbc202e..16be0f149 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaNodeBrowser.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/OpcUaNodeBrowser.java
@@ -21,6 +21,7 @@ package org.apache.streampipes.connect.iiot.adapters.opcua;
 import org.apache.streampipes.connect.iiot.adapters.opcua.configuration.SpOpcUaConfig;
 import org.apache.streampipes.connect.iiot.adapters.opcua.utils.OpcUaTypes;
 import org.apache.streampipes.model.staticproperty.TreeInputNode;
+
 import org.eclipse.milo.opcua.sdk.client.AddressSpace;
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
 import org.eclipse.milo.opcua.sdk.client.nodes.UaNode;
@@ -55,7 +56,7 @@ public class OpcUaNodeBrowser {
 
   public List<OpcNode> findNodes() throws UaException {
     var opcNodes = new ArrayList<OpcNode>();
-    for(String selectedNodeName: this.spOpcConfig.getSelectedNodeNames()) {
+    for (String selectedNodeName : this.spOpcConfig.getSelectedNodeNames()) {
       opcNodes.add(toOpcNode(selectedNodeName));
     }
 
@@ -64,11 +65,11 @@ public class OpcUaNodeBrowser {
 
   public List<OpcNode> findNodes(List<String> runtimeNameFilters) throws UaException {
     return findNodes()
-      .stream()
-      .filter(node -> runtimeNameFilters
         .stream()
-        .noneMatch(f -> f.equals(node.getLabel())))
-      .collect(Collectors.toList());
+        .filter(node -> runtimeNameFilters
+            .stream()
+            .noneMatch(f -> f.equals(node.getLabel())))
+        .collect(Collectors.toList());
   }
 
   public List<TreeInputNode> buildNodeTreeFromOrigin() throws UaException, ExecutionException, InterruptedException {
@@ -91,7 +92,7 @@ public class OpcUaNodeBrowser {
     NodeId nodeId = NodeId.parse(nodeName);
     UaNode node = addressSpace.getNode(nodeId);
 
-    LOG.info("Using node of type {}", node.getNodeClass().toString() );
+    LOG.info("Using node of type {}", node.getNodeClass().toString());
 
     if (node instanceof UaVariableNode) {
       UInteger value = (UInteger) ((UaVariableNode) node).getDataType().getIdentifier();
@@ -116,7 +117,7 @@ public class OpcUaNodeBrowser {
       });
 
       Stream<CompletableFuture<Void>> futures =
-              tree.getChildren().stream().map(child -> buildTreeAsync(client, child));
+          tree.getChildren().stream().map(child -> buildTreeAsync(client, child));
 
       return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
     });
@@ -127,6 +128,7 @@ public class OpcUaNodeBrowser {
   }
 
   private boolean isDataNode(UaNode node) {
-    return (node.getNodeClass().equals(NodeClass.Variable) || (node.getNodeClass().equals(NodeClass.VariableType))) && node instanceof UaVariableNode;
+    return (node.getNodeClass().equals(NodeClass.Variable) || (node.getNodeClass().equals(NodeClass.VariableType)))
+        && node instanceof UaVariableNode;
   }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/SpOpcUaClient.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/SpOpcUaClient.java
index 299c4f04f..dd81ecde7 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/SpOpcUaClient.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/SpOpcUaClient.java
@@ -21,6 +21,7 @@ package org.apache.streampipes.connect.iiot.adapters.opcua;
 
 import org.apache.streampipes.commons.exceptions.SpConfigurationException;
 import org.apache.streampipes.connect.iiot.adapters.opcua.configuration.SpOpcUaConfig;
+
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
 import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
 import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
@@ -55,137 +56,138 @@ import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.
  */
 public class SpOpcUaClient {
 
-    private static final Logger LOG = LoggerFactory.getLogger(SpOpcUaClient.class);
-
-    private OpcUaClient client;
-    private final SpOpcUaConfig spOpcConfig;
+  private static final Logger LOG = LoggerFactory.getLogger(SpOpcUaClient.class);
+
+  private OpcUaClient client;
+  private final SpOpcUaConfig spOpcConfig;
+
+  private static final AtomicLong clientHandles = new AtomicLong(1L);
+
+  public SpOpcUaClient(SpOpcUaConfig config) {
+    this.spOpcConfig = config;
+  }
+
+  /***
+   *
+   * @return current {@link org.eclipse.milo.opcua.sdk.client.OpcUaClient}
+   */
+  public OpcUaClient getClient() {
+    return this.client;
+  }
+
+  /***
+   * Establishes appropriate connection to OPC UA endpoint depending on the {@link SpOpcUaClient} instance
+   *
+   * @throws UaException An exception occurring during OPC connection
+   */
+  public void connect()
+      throws UaException, ExecutionException, InterruptedException, SpConfigurationException, URISyntaxException {
+    OpcUaClientConfig clientConfig = new MiloOpcUaConfigurationProvider().makeClientConfig(spOpcConfig);
+    this.client = OpcUaClient.create(clientConfig);
+    client.connect().get();
+  }
+
+  public void disconnect() {
+    client.disconnect();
+  }
+
+  /***
+   * Register subscriptions for given OPC UA nodes
+   * @param nodes List of {@link org.eclipse.milo.opcua.stack.core.types.builtin.NodeId}
+   * @param opcUaAdapter current instance of {@link OpcUaAdapter}
+   * @throws Exception
+   */
+  public void createListSubscription(List<NodeId> nodes,
+                                     OpcUaAdapter opcUaAdapter) throws Exception {
+    client.getSubscriptionManager().addSubscriptionListener(new UaSubscriptionManager.SubscriptionListener() {
+      @Override
+      public void onSubscriptionTransferFailed(UaSubscription subscription, StatusCode statusCode) {
+        LOG.warn("Transfer for subscriptionId={} failed: {}", subscription.getSubscriptionId(), statusCode);
+        try {
+          initSubscription(nodes, opcUaAdapter);
+        } catch (Exception e) {
+          LOG.error("Re-creating the subscription failed", e);
+        }
+      }
+    });
 
-    private static final AtomicLong clientHandles = new AtomicLong(1L);
+    initSubscription(nodes, opcUaAdapter);
+  }
 
-    public SpOpcUaClient(SpOpcUaConfig config) {
-        this.spOpcConfig = config;
-    }
 
-    /***
-     *
-     * @return current {@link org.eclipse.milo.opcua.sdk.client.OpcUaClient}
+  public void initSubscription(List<NodeId> nodes, OpcUaAdapter opcUaAdapter) throws Exception {
+    /*
+     * create a subscription @ 1000ms
      */
-    public OpcUaClient getClient() {
-        return this.client;
-    }
+    UaSubscription subscription = this.client.getSubscriptionManager().createSubscription(1000.0).get();
 
-    /***
-     * Establishes appropriate connection to OPC UA endpoint depending on the {@link SpOpcUaClient} instance
-     *
-     * @throws UaException An exception occurring during OPC connection
-     */
-    public void connect() throws UaException, ExecutionException, InterruptedException, SpConfigurationException, URISyntaxException {
-        OpcUaClientConfig clientConfig = new MiloOpcUaConfigurationProvider().makeClientConfig(spOpcConfig);
-        this.client = OpcUaClient.create(clientConfig);
-        client.connect().get();
-    }
+    List<CompletableFuture<DataValue>> values = new ArrayList<>();
 
-    public void disconnect() {
-        client.disconnect();
+    for (NodeId node : nodes) {
+      values.add(this.client.readValue(0, TimestampsToReturn.Both, node));
     }
 
-    /***
-     * Register subscriptions for given OPC UA nodes
-     * @param nodes List of {@link org.eclipse.milo.opcua.stack.core.types.builtin.NodeId}
-     * @param opcUaAdapter current instance of {@link OpcUaAdapter}
-     * @throws Exception
-     */
-    public void createListSubscription(List<NodeId> nodes,
-                                       OpcUaAdapter opcUaAdapter) throws Exception {
-        client.getSubscriptionManager().addSubscriptionListener(new UaSubscriptionManager.SubscriptionListener() {
-            @Override
-            public void onSubscriptionTransferFailed(UaSubscription subscription, StatusCode statusCode) {
-                LOG.warn("Transfer for subscriptionId={} failed: {}", subscription.getSubscriptionId(), statusCode);
-                try {
-                    initSubscription(nodes, opcUaAdapter);
-                } catch (Exception e) {
-                    LOG.error("Re-creating the subscription failed", e);
-                }
-            }
-        });
-
-        initSubscription(nodes, opcUaAdapter);
+    for (CompletableFuture<DataValue> value : values) {
+      if (value.get().getValue().toString().contains("null")) {
+        LOG.error("Node has no value");
+      }
     }
 
 
-    public void initSubscription(List<NodeId> nodes, OpcUaAdapter opcUaAdapter) throws Exception {
-        /*
-         * create a subscription @ 1000ms
-         */
-        UaSubscription subscription = this.client.getSubscriptionManager().createSubscription(1000.0).get();
-
-        List<CompletableFuture<DataValue>> values = new ArrayList<>();
-
-        for (NodeId node : nodes) {
-            values.add(this.client.readValue(0, TimestampsToReturn.Both, node));
-        }
-
-        for (CompletableFuture<DataValue> value : values) {
-            if (value.get().getValue().toString().contains("null")) {
-                LOG.error("Node has no value");
-            }
-        }
-
-
-        List<ReadValueId> readValues = new ArrayList<>();
-        // Read a specific value attribute
-        for (NodeId node : nodes) {
-            readValues.add(new ReadValueId(node, AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE));
-        }
+    List<ReadValueId> readValues = new ArrayList<>();
+    // Read a specific value attribute
+    for (NodeId node : nodes) {
+      readValues.add(new ReadValueId(node, AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE));
+    }
 
-        List<MonitoredItemCreateRequest> requests = new ArrayList<>();
+    List<MonitoredItemCreateRequest> requests = new ArrayList<>();
 
-        for (ReadValueId readValue : readValues) {
-            // important: client handle must be unique per item
-            UInteger clientHandle = uint(clientHandles.getAndIncrement());
+    for (ReadValueId readValue : readValues) {
+      // important: client handle must be unique per item
+      UInteger clientHandle = uint(clientHandles.getAndIncrement());
 
-            MonitoringParameters parameters = new MonitoringParameters(
-                    clientHandle,
-                    1000.0,     // sampling interval
-                    null,      // filter, null means use default
-                    uint(10),   // queue size
-                    true         // discard oldest
-            );
+      MonitoringParameters parameters = new MonitoringParameters(
+          clientHandle,
+          1000.0,     // sampling interval
+          null,      // filter, null means use default
+          uint(10),   // queue size
+          true         // discard oldest
+      );
 
-            requests.add(new MonitoredItemCreateRequest(readValue, MonitoringMode.Reporting, parameters));
-        }
-
-        UaSubscription.ItemCreationCallback onItemCreated = new UaSubscription.ItemCreationCallback() {
-            @Override
-            public void onItemCreated(UaMonitoredItem item, int i) {
-                item.setValueConsumer(opcUaAdapter::onSubscriptionValue);
-            }
-        };
-        List<UaMonitoredItem> items = subscription.createMonitoredItems(
-                TimestampsToReturn.Both,
-                requests,
-                onItemCreated
-        ).get();
-
-        for (UaMonitoredItem item : items) {
-            NodeId tagId = item.getReadValueId().getNodeId();
-            if (item.getStatusCode().isGood()) {
-                LOG.info("item created for nodeId="+ tagId);
-            } else {
-                LOG.error("failed to create item for " + item.getReadValueId().getNodeId() + item.getStatusCode());
-            }
-        }
+      requests.add(new MonitoredItemCreateRequest(readValue, MonitoringMode.Reporting, parameters));
     }
 
-    public boolean inPullMode() {
-        return !(spOpcConfig.getPullIntervalMilliSeconds() == null);
+    UaSubscription.ItemCreationCallback onItemCreated = new UaSubscription.ItemCreationCallback() {
+      @Override
+      public void onItemCreated(UaMonitoredItem item, int i) {
+        item.setValueConsumer(opcUaAdapter::onSubscriptionValue);
+      }
+    };
+    List<UaMonitoredItem> items = subscription.createMonitoredItems(
+        TimestampsToReturn.Both,
+        requests,
+        onItemCreated
+    ).get();
+
+    for (UaMonitoredItem item : items) {
+      NodeId tagId = item.getReadValueId().getNodeId();
+      if (item.getStatusCode().isGood()) {
+        LOG.info("item created for nodeId=" + tagId);
+      } else {
+        LOG.error("failed to create item for " + item.getReadValueId().getNodeId() + item.getStatusCode());
+      }
     }
+  }
 
-    public int getPullIntervalMilliSeconds() {
-        return spOpcConfig.getPullIntervalMilliSeconds();
-    }
+  public boolean inPullMode() {
+    return !(spOpcConfig.getPullIntervalMilliSeconds() == null);
+  }
 
-    public SpOpcUaConfig getSpOpcConfig() {
-        return spOpcConfig;
-    }
+  public int getPullIntervalMilliSeconds() {
+    return spOpcConfig.getPullIntervalMilliSeconds();
+  }
+
+  public SpOpcUaConfig getSpOpcConfig() {
+    return spOpcConfig;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfig.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfig.java
index a17548e5d..dcd65a1c8 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfig.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfig.java
@@ -20,6 +20,7 @@ package org.apache.streampipes.connect.iiot.adapters.opcua.configuration;
 
 import org.apache.streampipes.connect.iiot.adapters.opcua.utils.OpcUaUtil;
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
+
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 
 import java.util.List;
@@ -44,11 +45,11 @@ public class SpOpcUaConfig {
   /**
    * Constructor for security level {@code None}, OPC server given by url and subscription-based
    *
-   * @param opcServerURL complete OPC UA server url
-   * @param namespaceIndex namespace index of the given node
-   * @param nodeId node identifier
+   * @param opcServerURL             complete OPC UA server url
+   * @param namespaceIndex           namespace index of the given node
+   * @param nodeId                   node identifier
    * @param pullIntervalMilliSeconds duration of pull interval in milliseconds, {@code null} if in subscription mode
-   * @param selectedNodeNames list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)} (String, StaticPropertyExtractor)}
+   * @param selectedNodeNames        list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)} (String, StaticPropertyExtractor)}
    */
   public SpOpcUaConfig(String opcServerURL,
                        int namespaceIndex,
@@ -73,12 +74,12 @@ public class SpOpcUaConfig {
   /**
    * Constructor for security level {@code None} and OPC server given by hostname and port number
    *
-   * @param opcServer OPC UA hostname
-   * @param opcServerPort OPC UA port number
-   * @param namespaceIndex namespace index of the given node
-   * @param nodeId node identifier
+   * @param opcServer                OPC UA hostname
+   * @param opcServerPort            OPC UA port number
+   * @param namespaceIndex           namespace index of the given node
+   * @param nodeId                   node identifier
    * @param pullIntervalMilliSeconds duration of pull interval in milliseconds, {@code null} if in subscription mode
-   * @param selectedNodeNames list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)}
+   * @param selectedNodeNames        list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)}
    */
   public SpOpcUaConfig(String opcServer,
                        int opcServerPort,
@@ -86,19 +87,19 @@ public class SpOpcUaConfig {
                        String nodeId,
                        Integer pullIntervalMilliSeconds,
                        List<String> selectedNodeNames) {
-    this( opcServer + ":" + opcServerPort, namespaceIndex, nodeId, pullIntervalMilliSeconds, selectedNodeNames);
+    this(opcServer + ":" + opcServerPort, namespaceIndex, nodeId, pullIntervalMilliSeconds, selectedNodeNames);
   }
 
   /**
    * Constructor for security level {@code Sign} and OPC server given by url
    *
-   * @param opcServerURL complete OPC UA server url
-   * @param namespaceIndex namespace index of the given node
-   * @param nodeId node identifier
-   * @param username username to authenticate at the OPC UA server
-   * @param password corresponding password to given user name
+   * @param opcServerURL             complete OPC UA server url
+   * @param namespaceIndex           namespace index of the given node
+   * @param nodeId                   node identifier
+   * @param username                 username to authenticate at the OPC UA server
+   * @param password                 corresponding password to given user name
    * @param pullIntervalMilliSeconds duration of pull interval in milliseconds, {@code null} if in subscription mode
-   * @param selectedNodeNames list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)}
+   * @param selectedNodeNames        list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)}
    */
   public SpOpcUaConfig(String opcServerURL,
                        int namespaceIndex,
@@ -116,14 +117,14 @@ public class SpOpcUaConfig {
   /**
    * Constructor for OPC UA security level {@code Sign} and OPC server given by hostname and port number
    *
-   * @param opcServer OPC UA hostname
-   * @param opcServerPort OPC UA port number
-   * @param namespaceIndex namespace index of the given node
-   * @param nodeId node identifier
-   * @param username username to authenticate at the OPC UA server
-   * @param password corresponding password to given user name
+   * @param opcServer                OPC UA hostname
+   * @param opcServerPort            OPC UA port number
+   * @param namespaceIndex           namespace index of the given node
+   * @param nodeId                   node identifier
+   * @param username                 username to authenticate at the OPC UA server
+   * @param password                 corresponding password to given user name
    * @param pullIntervalMilliSeconds duration of pull interval in milliseconds, {@code null} if in subscription mode
-   * @param selectedNodeNames list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)}
+   * @param selectedNodeNames        list of node names provided from {@link OpcUaUtil#resolveConfiguration(String, StaticPropertyExtractor)}
    */
   public SpOpcUaConfig(String opcServer,
                        int opcServerPort,
@@ -133,7 +134,7 @@ public class SpOpcUaConfig {
                        String password,
                        int pullIntervalMilliSeconds,
                        List<String> selectedNodeNames) {
-    this (opcServer, opcServerPort, namespaceIndex, nodeId, pullIntervalMilliSeconds, selectedNodeNames);
+    this(opcServer, opcServerPort, namespaceIndex, nodeId, pullIntervalMilliSeconds, selectedNodeNames);
     this.unauthenticated = false;
     this.username = username;
     this.password = password;
@@ -206,7 +207,7 @@ public class SpOpcUaConfig {
   public static boolean isInteger(String s) {
     try {
       Integer.parseInt(s);
-    } catch(NumberFormatException | NullPointerException e) {
+    } catch (NumberFormatException | NullPointerException e) {
       return false;
     }
     // only got here if we didn't return false
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfigBuilder.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfigBuilder.java
index f37d5a117..e0faeba0f 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfigBuilder.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/configuration/SpOpcUaConfigBuilder.java
@@ -29,36 +29,42 @@ public class SpOpcUaConfigBuilder {
 
   /**
    * Creates {@link SpOpcUaConfig}  instance in accordance with the given {@link org.apache.streampipes.sdk.extractor.StaticPropertyExtractor}.
+   *
    * @param extractor extractor for user inputs
    * @return {@link SpOpcUaConfig}  instance based on information from {@code extractor}
    */
   public static SpOpcUaConfig from(StaticPropertyExtractor extractor) {
 
-    String selectedAlternativeConnection = extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.OPC_HOST_OR_URL.name());
-    String selectedAlternativeAuthentication = extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.ACCESS_MODE.name());
+    String selectedAlternativeConnection =
+        extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.OPC_HOST_OR_URL.name());
+    String selectedAlternativeAuthentication =
+        extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.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);
 
-    boolean usePullMode = extractor.selectedAlternativeInternalId(OpcUaUtil.OpcUaLabels.ADAPTER_TYPE.name()).equals(OpcUaUtil.OpcUaLabels.PULL_MODE.name());
+    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 unauthenticated = selectedAlternativeAuthentication.equals(OpcUaUtil.OpcUaLabels.UNAUTHENTICATED.name());
 
     Integer pullIntervalSeconds = null;
     if (usePullMode) {
-      pullIntervalSeconds = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.PULLING_INTERVAL.name(), Integer.class);
+      pullIntervalSeconds =
+          extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.PULLING_INTERVAL.name(), Integer.class);
     }
 
-    List<String> selectedNodeNames = extractor.selectedTreeNodesInternalNames(OpcUaUtil.OpcUaLabels.AVAILABLE_NODES.name(), String.class, true);
+    List<String> selectedNodeNames =
+        extractor.selectedTreeNodesInternalNames(OpcUaUtil.OpcUaLabels.AVAILABLE_NODES.name(), String.class, true);
 
-    if (useURL && unauthenticated){
+    if (useURL && unauthenticated) {
 
       String serverAddress = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_URL.name(), String.class);
       serverAddress = OpcUaUtil.formatServerAddress(serverAddress);
 
       return new SpOpcUaConfig(serverAddress, namespaceIndex, nodeId, pullIntervalSeconds, selectedNodeNames);
 
-    } else if(!useURL && unauthenticated){
+    } else if (!useURL && unauthenticated) {
       String serverAddress = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_HOST.name(), String.class);
       serverAddress = OpcUaUtil.formatServerAddress(serverAddress);
       int port = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_PORT.name(), int.class);
@@ -70,16 +76,20 @@ public class SpOpcUaConfigBuilder {
       String password = extractor.secretValue(OpcUaUtil.OpcUaLabels.PASSWORD.name());
 
       if (useURL) {
-        String serverAddress = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_URL.name(), String.class);
+        String serverAddress =
+            extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_URL.name(), String.class);
         serverAddress = OpcUaUtil.formatServerAddress(serverAddress);
 
-        return new SpOpcUaConfig(serverAddress, namespaceIndex, nodeId, username, password, pullIntervalSeconds, selectedNodeNames);
+        return new SpOpcUaConfig(serverAddress, namespaceIndex, nodeId, username, password, pullIntervalSeconds,
+            selectedNodeNames);
       } else {
-        String serverAddress = extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.OPC_SERVER_HOST.name(), String.class);
+        String serverAddress =
+            extractor.singleValueParameter(OpcUaUtil.OpcUaLabels.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, selectedNodeNames);
+        return new SpOpcUaConfig(serverAddress, port, namespaceIndex, nodeId, username, password, pullIntervalSeconds,
+            selectedNodeNames);
       }
     }
   }
@@ -89,10 +99,10 @@ public class SpOpcUaConfigBuilder {
    * @param adapterDescription description of current adapter
    * @return {@link SpOpcUaConfig}  instance based on information from {@code adapterDescription}
    */
-  public static SpOpcUaConfig from(AdapterDescription adapterDescription){
+  public static SpOpcUaConfig from(AdapterDescription adapterDescription) {
 
     StaticPropertyExtractor extractor =
-            StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
+        StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
 
     return from(extractor);
   }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaNodeVariants.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaNodeVariants.java
index 51700c489..b75c5ef3b 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaNodeVariants.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaNodeVariants.java
@@ -23,30 +23,31 @@ import javax.annotation.Nullable;
 /**
  * Enum that maintains different variants of OPC UA nodes. <br>
  * Not yet completed. <br>
- *
  */
 public enum OpcUaNodeVariants {
-    Property(68),
-    EUInformation(887);
+  Property(68),
+  EUInformation(887);
 
-    // ID as specified in OPC UA standard
-    private final int id;
+  // ID as specified in OPC UA standard
+  private final int id;
 
-    private OpcUaNodeVariants(int id){
-        this.id = id;
-    }
+  private OpcUaNodeVariants(int id) {
+    this.id = id;
+  }
 
-    public int getId() { return this.id;}
+  public int getId() {
+    return this.id;
+  }
 
-    @Nullable
-    public static OpcUaNodeVariants from(int id){
-        switch (id){
-            case 68:
-                return Property;
-            case 887:
-                return EUInformation;
-            default:
-                return null;
-        }
+  @Nullable
+  public static OpcUaNodeVariants from(int id) {
+    switch (id) {
+      case 68:
+        return Property;
+      case 887:
+        return EUInformation;
+      default:
+        return null;
     }
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaTypes.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaTypes.java
index 0dc1efc39..388de51d0 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaTypes.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaTypes.java
@@ -18,40 +18,41 @@
 
 package org.apache.streampipes.connect.iiot.adapters.opcua.utils;
 
+import org.apache.streampipes.sdk.utils.Datatypes;
 
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
-import org.apache.streampipes.sdk.utils.Datatypes;
 
 public class OpcUaTypes {
 
-    /**
-     * Maps OPC UA data types to internal StreamPipes data types
-     * @param o data type id as UInteger
-     * @return StreamPipes internal data type
-     */
-    public static Datatypes getType(UInteger o) {
-        if (UInteger.valueOf(4).equals(o) |
-                UInteger.valueOf(5).equals(o) |
-                UInteger.valueOf(6).equals(o) |
-                UInteger.valueOf(7).equals(o) |
-                UInteger.valueOf(8).equals(o) |
-                UInteger.valueOf(9).equals(o) |
-                UInteger.valueOf(27).equals(o)) {
-            return Datatypes.Integer;
-        } else if (UInteger.valueOf(8).equals(o) ) {
-            return Datatypes.Long;
-        } else if (UInteger.valueOf(11).equals(o)) {
-            return Datatypes.Double;
-        } else if (UInteger.valueOf(10).equals(o) | UInteger.valueOf(26).equals(o) | UInteger.valueOf(50).equals(o)) {
-            return Datatypes.Float;
-        } else if (UInteger.valueOf(1).equals(o)) {
-            return Datatypes.Boolean;
-        } else if (UInteger.valueOf(12).equals(o)) {
-            return Datatypes.String;
-        }
-
-        return Datatypes.String;
+  /**
+   * Maps OPC UA data types to internal StreamPipes data types
+   *
+   * @param o data type id as UInteger
+   * @return StreamPipes internal data type
+   */
+  public static Datatypes getType(UInteger o) {
+    if (UInteger.valueOf(4).equals(o)
+        | UInteger.valueOf(5).equals(o)
+        | UInteger.valueOf(6).equals(o)
+        | UInteger.valueOf(7).equals(o)
+        | UInteger.valueOf(8).equals(o)
+        | UInteger.valueOf(9).equals(o)
+        | UInteger.valueOf(27).equals(o)) {
+      return Datatypes.Integer;
+    } else if (UInteger.valueOf(8).equals(o)) {
+      return Datatypes.Long;
+    } else if (UInteger.valueOf(11).equals(o)) {
+      return Datatypes.Double;
+    } else if (UInteger.valueOf(10).equals(o) | UInteger.valueOf(26).equals(o) | UInteger.valueOf(50).equals(o)) {
+      return Datatypes.Float;
+    } else if (UInteger.valueOf(1).equals(o)) {
+      return Datatypes.Boolean;
+    } else if (UInteger.valueOf(12).equals(o)) {
+      return Datatypes.String;
     }
 
+    return Datatypes.String;
+  }
+
 }
 
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaUtil.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaUtil.java
index 739dc1928..080d1692a 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaUtil.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/opcua/utils/OpcUaUtil.java
@@ -34,6 +34,7 @@ import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.model.staticproperty.RuntimeResolvableTreeInputStaticProperty;
 import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
+
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
 import org.eclipse.milo.opcua.stack.core.UaException;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
@@ -78,7 +79,7 @@ public class OpcUaUtil {
    * @throws ParseException
    */
   public static GuessSchema getSchema(SpecificAdapterStreamDescription adapterStreamDescription)
-    throws AdapterException, ParseException {
+      throws AdapterException, ParseException {
     GuessSchema guessSchema = new GuessSchema();
     EventSchema eventSchema = new EventSchema();
     List<Map<String, GuessTypeInfo>> eventPreview = new ArrayList<>();
@@ -90,22 +91,22 @@ public class OpcUaUtil {
     try {
       spOpcUaClient.connect();
       OpcUaNodeBrowser nodeBrowser =
-        new OpcUaNodeBrowser(spOpcUaClient.getClient(), spOpcUaClient.getSpOpcConfig());
+          new OpcUaNodeBrowser(spOpcUaClient.getClient(), spOpcUaClient.getSpOpcConfig());
       List<OpcNode> selectedNodes = nodeBrowser.findNodes();
 
       if (!selectedNodes.isEmpty()) {
         for (OpcNode opcNode : selectedNodes) {
           if (opcNode.hasUnitId()) {
             allProperties.add(PrimitivePropertyBuilder
-              .create(opcNode.getType(), opcNode.getLabel())
-              .label(opcNode.getLabel())
-              .measurementUnit(new URI(opcNode.getQudtURI()))
-              .build());
+                .create(opcNode.getType(), opcNode.getLabel())
+                .label(opcNode.getLabel())
+                .measurementUnit(new URI(opcNode.getQudtURI()))
+                .build());
           } else {
             allProperties.add(PrimitivePropertyBuilder
-              .create(opcNode.getType(), opcNode.getLabel())
-              .label(opcNode.getLabel())
-              .build());
+                .create(opcNode.getType(), opcNode.getLabel())
+                .label(opcNode.getLabel())
+                .build());
           }
         }
       }
@@ -157,17 +158,19 @@ public class OpcUaUtil {
 
   /***
    * OPC UA specific implementation of {@link
-   * org.apache.streampipes.container.api.ResolvesContainerProvidedOptions#
+   * org.apache.streampipes.container.api.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
    */
-  public static RuntimeResolvableTreeInputStaticProperty resolveConfiguration(String internalName,
-                                                                              StaticPropertyExtractor parameterExtractor) throws SpConfigurationException {
+  public static RuntimeResolvableTreeInputStaticProperty
+      resolveConfiguration(String internalName,
+                           StaticPropertyExtractor parameterExtractor)
+      throws SpConfigurationException {
 
     RuntimeResolvableTreeInputStaticProperty config = parameterExtractor
-      .getStaticPropertyByName(internalName, RuntimeResolvableTreeInputStaticProperty.class);
+        .getStaticPropertyByName(internalName, RuntimeResolvableTreeInputStaticProperty.class);
     // access mode and host/url have to be selected
     try {
       parameterExtractor.selectedAlternativeInternalId(OpcUaLabels.OPC_HOST_OR_URL.name());
@@ -181,7 +184,7 @@ public class OpcUaUtil {
     try {
       spOpcUaClient.connect();
       OpcUaNodeBrowser nodeBrowser =
-        new OpcUaNodeBrowser(spOpcUaClient.getClient(), spOpcUaClient.getSpOpcConfig());
+          new OpcUaNodeBrowser(spOpcUaClient.getClient(), spOpcUaClient.getSpOpcConfig());
       config.setNodes(nodeBrowser.buildNodeTreeFromOrigin());
 
       return config;
@@ -219,8 +222,8 @@ public class OpcUaUtil {
     for (OpcNode opcNode : opcNodes) {
       try {
         UInteger dataTypeId =
-          (UInteger) client.getAddressSpace().getVariableNode(opcNode.getNodeId()).getDataType()
-            .getIdentifier();
+            (UInteger) client.getAddressSpace().getVariableNode(opcNode.getNodeId()).getDataType()
+                .getIdentifier();
         OpcUaTypes.getType(dataTypeId);
         opcNode.setType(OpcUaTypes.getType(dataTypeId));
       } catch (UaException e) {
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/ModbusConfigFile.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/ModbusConfigFile.java
index 349bf7033..fbda391ec 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/ModbusConfigFile.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/ModbusConfigFile.java
@@ -19,43 +19,43 @@
 package org.apache.streampipes.connect.iiot.adapters.plc4x.modbus;
 
 public class ModbusConfigFile {
-	
-	private String name;
-	
-	private String dataType;
-	
-	private String logicalAddress;
-	
-	public ModbusConfigFile() {
-	}
-	
-	public ModbusConfigFile(String name, String dataType, String logicalAddress) {
-		this.name = name;
-		this.setDataType(dataType);
-		this.setLogicalAddress(logicalAddress);
-	}
-	
-	public String getName() {
-		return name;
-	}
-	
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getDataType() {
-		return dataType;
-	}
-
-	public void setDataType(String dataType) {
-		this.dataType = dataType;
-	}
-
-	public String getLogicalAddress() {
-		return logicalAddress;
-	}
-
-	public void setLogicalAddress(String logicalAddress) {
-		this.logicalAddress = logicalAddress;
-	}
+
+  private String name;
+
+  private String dataType;
+
+  private String logicalAddress;
+
+  public ModbusConfigFile() {
+  }
+
+  public ModbusConfigFile(String name, String dataType, String logicalAddress) {
+    this.name = name;
+    this.setDataType(dataType);
+    this.setLogicalAddress(logicalAddress);
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getDataType() {
+    return dataType;
+  }
+
+  public void setDataType(String dataType) {
+    this.dataType = dataType;
+  }
+
+  public String getLogicalAddress() {
+    return logicalAddress;
+  }
+
+  public void setLogicalAddress(String logicalAddress) {
+    this.logicalAddress = logicalAddress;
+  }
 }
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/Plc4xModbusAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/Plc4xModbusAdapter.java
index 3b0a4a6d7..176fd49fb 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/Plc4xModbusAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/modbus/Plc4xModbusAdapter.java
@@ -18,16 +18,11 @@
 
 package org.apache.streampipes.connect.iiot.adapters.plc4x.modbus;
 
-import org.apache.plc4x.java.PlcDriverManager;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.types.PlcResponseCode;
+
 import org.apache.streampipes.connect.adapter.Adapter;
+import org.apache.streampipes.connect.adapter.util.PollingSettings;
 import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.connect.api.exception.ParseException;
-import org.apache.streampipes.connect.adapter.util.PollingSettings;
 import org.apache.streampipes.connect.iiot.adapters.PullAdapter;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
@@ -47,296 +42,301 @@ import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
 
-import java.util.*;
+import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
 
-public class Plc4xModbusAdapter extends PullAdapter{
-
-	/**
-	 * A unique id to identify the Plc4xModbusAdapter
-	 */
-	public static final String ID = "org.apache.streampipes.connect.iiot.adapters.plc4x.modbus";
-
-	/**
-	 * Keys of user configuration parameters
-	 */
-	private static final String PLC_IP = "plc_ip";
-	private static final String PLC_PORT = "plc_port";
-
-	private static final String PLC_NODES = "plc_nodes";
-	private static final String PLC_NODE_ID = "plc_node_id";
-	private static final String PLC_NODE_RUNTIME_NAME = "plc_node_runtime_name";
-	private static final String PLC_NODE_ADDRESS = "plc_node_address";
-	private static final String PLC_NODE_TYPE = "plc_node_type";
-	private static final String CONFIGURE = "configure";
-
-	/**
-	 * Values of user configuration parameters
-	 */
-	private String ip;
-	private int port;
-	private int slaveID;
-	private List<Map<String, String>> nodes;
-
-	/**
-	 * Connection to the PLC
-	 */
-	private PlcConnection plcConnection;
-
-	/**
-	 * Empty constructor and a constructor with SpecificAdapterStreamDescription are mandatory
-	 */
-	public Plc4xModbusAdapter() {
-	}
-
-	public Plc4xModbusAdapter(SpecificAdapterStreamDescription adapterDescription) {
-		super(adapterDescription);
-	}
-
-	/**
-	 * Describe the adapter adapter and define what user inputs are required. Currently users can just select one node,
-	 * this will be extended in the future
-	 * @return description of adapter
-	 */
-	@Override
-	public SpecificAdapterStreamDescription declareModel() {
-		SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
-				.withLocales(Locales.EN)
-				.withAssets(Assets.DOCUMENTATION, Assets.ICON)
-				.category(AdapterType.Manufacturing)
-				.requiredTextParameter(Labels.withId(PLC_IP))
-				.requiredTextParameter(Labels.withId(PLC_PORT))
-				.requiredTextParameter(Labels.withId(PLC_NODE_ID))
-				.requiredCollection(Labels.withId(PLC_NODES),
-//    					StaticProperties.collection(Labels.withId(PLC_NODES),
-						StaticProperties.stringFreeTextProperty(Labels.withId(PLC_NODE_RUNTIME_NAME)),
-						StaticProperties.integerFreeTextProperty(Labels.withId(PLC_NODE_ADDRESS)),
-						StaticProperties.singleValueSelection(Labels.withId(PLC_NODE_TYPE),
-								Options.from("DiscreteInput", "Coil", "InputRegister", "HoldingRegister")))
-//			)
-				.build();
-		description.setAppId(ID);
-
-		return description;
-	}
-
-	/**
-	 * Extracts the user configuration from the SpecificAdapterStreamDescription and sets the local variables
-	 * @param adapterDescription description of the adapter
-	 * @throws AdapterException
-	 */
-	private void getConfigurations(SpecificAdapterStreamDescription adapterDescription)
-			throws AdapterException{
-
-		StaticPropertyExtractor extractor = StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
-
-		this.ip = extractor.singleValueParameter(PLC_IP, String.class);
-		this.port = extractor.singleValueParameter(PLC_PORT, Integer.class);
-		this.slaveID = extractor.singleValueParameter(PLC_NODE_ID, Integer.class);
-
-		this.nodes = new ArrayList<>();
-		CollectionStaticProperty sp = (CollectionStaticProperty) extractor.getStaticPropertyByName(PLC_NODES);
-		Set<Integer> ids = new HashSet<>();
-		Set<String> names = new HashSet<>();
-		for (StaticProperty member : sp.getMembers()) {
-			StaticPropertyExtractor memberExtractor =
-					StaticPropertyExtractor.from(((StaticPropertyGroup) member).getStaticProperties(), new ArrayList<>());
-
-			// ensure that NODE_ADDRESS and NODE_RUNTIME_TIME appear only once to prevent duplicates
-			if (ids.add(memberExtractor.singleValueParameter(PLC_NODE_ADDRESS, Integer.class)) == false ||
-					names.add(memberExtractor.textParameter(PLC_NODE_RUNTIME_NAME)) == false) {
-
-				throw new AdapterException("NodeID or RuntimeName is specified twice." +
-						"Please prevent duplicate names.");
-			}
-
-			Map map = new HashMap();
-			map.put(PLC_NODE_RUNTIME_NAME, memberExtractor.textParameter(PLC_NODE_RUNTIME_NAME));
-			map.put(PLC_NODE_ADDRESS, memberExtractor.singleValueParameter(PLC_NODE_ADDRESS, Integer.class));
-			map.put(PLC_NODE_TYPE, memberExtractor.selectedSingleValue(PLC_NODE_TYPE, String.class));
-
-			this.nodes.add(map);
-		}
-
-	}
-
-
-	/**
-	 * Transforms chosen data type to StreamPipes supported data type
-	 * @param plcType
-	 * @return
-	 * @throws AdapterException     *
-	 */
-	private Datatypes getStreamPipesDataType(String plcType)
-			throws AdapterException{
-
-		String type = plcType.substring(plcType.lastIndexOf(":") + 1);
-
-		switch (type) {
-			case "DISCRETEINPUT":
-			case "COIL": return Datatypes.Boolean;
-			case "INPUTREGISTER":
-			case "HOLDINGREGISTER": return Datatypes.Integer;
-			default:
-				throw new AdapterException("Datatype " + plcType + " is not supported");
-		}
-	}
-
-	/**
-	 * Takes the user input and creates the event schema. The event schema describes the properties of the event stream.
-	 * @param
-	 * @return
-	 * @throws AdapterException, ParseException
-	 */
-	@Override
-	public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
-			throws AdapterException, ParseException {
-
-		// Extract user input
-		getConfigurations(adapterDescription);
-
-		GuessSchema guessSchema = new GuessSchema();
-
-		EventSchema eventSchema = new EventSchema();
-		List<EventProperty> allProperties = new ArrayList<>();
-
-		for (Map<String, String> node: this.nodes) {
-			Datatypes datatype = getStreamPipesDataType(node.get(PLC_NODE_TYPE).toUpperCase());
-
-			allProperties.add(
-					PrimitivePropertyBuilder
-							.create(datatype, node.get(PLC_NODE_RUNTIME_NAME))
-							.label(node.get(PLC_NODE_RUNTIME_NAME))
-							.description("FieldAddress: " + node.get(PLC_NODE_TYPE) + " " + String.valueOf(node.get(PLC_NODE_ADDRESS)))
-							.build());
-		}
-
-		eventSchema.setEventProperties(allProperties);
-		guessSchema.setEventSchema(eventSchema);
-		return guessSchema;
-	}
-
-	/**
-	 * This method is executed when the adapter is started. A connection to the PLC is initialized
-	 * @throws AdapterException
-	 */
-	@Override
-	protected void before()
-			throws AdapterException{
-
-		// Extract user input
-		getConfigurations(adapterDescription);
-
-		try {
-			this.plcConnection = new PlcDriverManager().getConnection("modbus:tcp://" + this.ip + ":" + this.port
-					+ "?unit-identifier=" + this.slaveID);
-
-			if (!this.plcConnection.getMetadata().canRead()) {
-				throw new AdapterException("The Modbus device on IP: " + this.ip + " does not support reading data");
-			}
-		}
-		catch (PlcConnectionException pce){
-			throw new AdapterException("Could not establish a connection to Modbus device on IP: " + this.ip);
-		}
-	}
-
-	/**
-	 * is called iteratively according to the polling interval defined in getPollInterval.
-	 */
-	@Override
-	protected void pullData() {
-
-		// create PLC read request
-		PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
-		for (Map<String, String> node : this.nodes) {
-
-			switch (node.get(PLC_NODE_TYPE)){
-				case "Coil":
-					builder.addItem(node.get(PLC_NODE_RUNTIME_NAME),
-							"coil:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));break;
-				case "HoldingRegister":
-					builder.addItem(node.get(PLC_NODE_RUNTIME_NAME),
-							"holding-register:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));break;
-				case "DiscreteInput":
-					builder.addItem(node.get(PLC_NODE_RUNTIME_NAME),
-							"discrete-input:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));break;
-				case "InputRegister":
-					builder.addItem(node.get(PLC_NODE_RUNTIME_NAME),
-							"input-register:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));break;
-			}
-		}
-		PlcReadRequest readRequest = builder.build();
-
-
-		// Execute the request
-		PlcReadResponse response = null;
-
-		try {
-			response = readRequest.execute().get();
-		}
-		catch (InterruptedException ie) {
-			ie.printStackTrace();
-		}
-		catch (ExecutionException ee) {
-			ee.printStackTrace();
-		}
-
-		// Create an event containing the value of the PLC
-		Map<String, Object> event = new HashMap<>();
-		for (Map<String, String> node :  this.nodes) {
-
-			if (response.getResponseCode(node.get(PLC_NODE_RUNTIME_NAME)) == PlcResponseCode.OK) {
-
-				switch (node.get(PLC_NODE_TYPE)) {
-					case "Coil":
-						event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getBoolean(node.get(PLC_NODE_RUNTIME_NAME)));
-						break;
-					case "DiscreteInput":
-						event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getBoolean(node.get(PLC_NODE_RUNTIME_NAME)));
-						break;
-					case "InputRegister":
-						event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getInteger(node.get(PLC_NODE_RUNTIME_NAME)));
-						break;
-					case "HoldingRegister":
-						event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getInteger(node.get(PLC_NODE_RUNTIME_NAME)));
-						break;
-				}
-			} else {
-				logger.error("Error[" + node.get(PLC_NODE_RUNTIME_NAME) + "]: " +
-						response.getResponseCode(node.get(PLC_NODE_RUNTIME_NAME)));
-			}
-		}
-
-		// publish the final event
-		adapterPipeline.process(event);
-	}
-
-	/**
-	 * return polling interval for this adapter, default is set to one second
-	 * @return
-	 */
-	@Override
-	protected PollingSettings getPollingInterval() {
-		return PollingSettings.from(TimeUnit.SECONDS, 1);
-	}
-
-	/**
-	 * Required by StreamPipes to return a new adapter instance by calling the constructor with SpecificAdapterStreamDescription
-	 * @param adapterDescription
-	 * @return
-	 */
-	@Override
-	public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-		return new Plc4xModbusAdapter(adapterDescription);
-	}
-
-	/**
-	 * Required by StreamPipes, return the ID of the adapter
-	 */
-	@Override
-	public String getId() {
-		return ID;
-	}
+public class Plc4xModbusAdapter extends PullAdapter {
+
+  /**
+   * A unique id to identify the Plc4xModbusAdapter
+   */
+  public static final String ID = "org.apache.streampipes.connect.iiot.adapters.plc4x.modbus";
+
+  /**
+   * Keys of user configuration parameters
+   */
+  private static final String PLC_IP = "plc_ip";
+  private static final String PLC_PORT = "plc_port";
+
+  private static final String PLC_NODES = "plc_nodes";
+  private static final String PLC_NODE_ID = "plc_node_id";
+  private static final String PLC_NODE_RUNTIME_NAME = "plc_node_runtime_name";
+  private static final String PLC_NODE_ADDRESS = "plc_node_address";
+  private static final String PLC_NODE_TYPE = "plc_node_type";
+  private static final String CONFIGURE = "configure";
+
+  /**
+   * Values of user configuration parameters
+   */
+  private String ip;
+  private int port;
+  private int slaveID;
+  private List<Map<String, String>> nodes;
+
+  /**
+   * Connection to the PLC
+   */
+  private PlcConnection plcConnection;
+
+  /**
+   * Empty constructor and a constructor with SpecificAdapterStreamDescription are mandatory
+   */
+  public Plc4xModbusAdapter() {
+  }
+
+  public Plc4xModbusAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
+
+  /**
+   * Describe the adapter adapter and define what user inputs are required. Currently users can just select one node,
+   * this will be extended in the future
+   *
+   * @return description of adapter
+   */
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID).withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON).category(AdapterType.Manufacturing)
+        .requiredTextParameter(Labels.withId(PLC_IP)).requiredTextParameter(Labels.withId(PLC_PORT))
+        .requiredTextParameter(Labels.withId(PLC_NODE_ID)).requiredCollection(Labels.withId(PLC_NODES),
+            StaticProperties.stringFreeTextProperty(Labels.withId(PLC_NODE_RUNTIME_NAME)),
+            StaticProperties.integerFreeTextProperty(Labels.withId(PLC_NODE_ADDRESS)),
+            StaticProperties.singleValueSelection(Labels.withId(PLC_NODE_TYPE),
+                Options.from("DiscreteInput", "Coil", "InputRegister", "HoldingRegister")))
+        .build();
+    description.setAppId(ID);
+
+    return description;
+  }
+
+  /**
+   * Extracts the user configuration from the SpecificAdapterStreamDescription and sets the local variables
+   *
+   * @param adapterDescription description of the adapter
+   * @throws AdapterException
+   */
+  private void getConfigurations(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
+
+    StaticPropertyExtractor extractor = StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
+
+    this.ip = extractor.singleValueParameter(PLC_IP, String.class);
+    this.port = extractor.singleValueParameter(PLC_PORT, Integer.class);
+    this.slaveID = extractor.singleValueParameter(PLC_NODE_ID, Integer.class);
+
+    this.nodes = new ArrayList<>();
+    CollectionStaticProperty sp = (CollectionStaticProperty) extractor.getStaticPropertyByName(PLC_NODES);
+    Set<Integer> ids = new HashSet<>();
+    Set<String> names = new HashSet<>();
+    for (StaticProperty member : sp.getMembers()) {
+      StaticPropertyExtractor memberExtractor =
+          StaticPropertyExtractor.from(((StaticPropertyGroup) member).getStaticProperties(), new ArrayList<>());
+
+      // ensure that NODE_ADDRESS and NODE_RUNTIME_TIME appear only once to prevent duplicates
+      if (!ids.add(memberExtractor.singleValueParameter(PLC_NODE_ADDRESS, Integer.class))
+          || !names.add(memberExtractor.textParameter(PLC_NODE_RUNTIME_NAME))) {
+
+        throw new AdapterException("NodeID or RuntimeName is specified twice." + "Please prevent duplicate names.");
+      }
+
+      Map map = new HashMap();
+      map.put(PLC_NODE_RUNTIME_NAME, memberExtractor.textParameter(PLC_NODE_RUNTIME_NAME));
+      map.put(PLC_NODE_ADDRESS, memberExtractor.singleValueParameter(PLC_NODE_ADDRESS, Integer.class));
+      map.put(PLC_NODE_TYPE, memberExtractor.selectedSingleValue(PLC_NODE_TYPE, String.class));
+
+      this.nodes.add(map);
+    }
+
+  }
+
+
+  /**
+   * Transforms chosen data type to StreamPipes supported data type
+   *
+   * @param plcType
+   * @return
+   */
+  private Datatypes getStreamPipesDataType(String plcType) throws AdapterException {
+
+    String type = plcType.substring(plcType.lastIndexOf(":") + 1);
+
+    switch (type) {
+      case "DISCRETEINPUT":
+      case "COIL":
+        return Datatypes.Boolean;
+      case "INPUTREGISTER":
+      case "HOLDINGREGISTER":
+        return Datatypes.Integer;
+      default:
+        throw new AdapterException("Datatype " + plcType + " is not supported");
+    }
+  }
+
+  /**
+   * Takes the user input and creates the event schema. The event schema describes the properties of the event stream.
+   */
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
+      throws AdapterException, ParseException {
+
+    // Extract user input
+    getConfigurations(adapterDescription);
+
+    GuessSchema guessSchema = new GuessSchema();
+
+    EventSchema eventSchema = new EventSchema();
+    List<EventProperty> allProperties = new ArrayList<>();
+
+    for (Map<String, String> node : this.nodes) {
+      Datatypes datatype = getStreamPipesDataType(node.get(PLC_NODE_TYPE).toUpperCase());
+
+      allProperties.add(PrimitivePropertyBuilder.create(datatype, node.get(PLC_NODE_RUNTIME_NAME))
+          .label(node.get(PLC_NODE_RUNTIME_NAME))
+          .description("FieldAddress: " + node.get(PLC_NODE_TYPE) + " " + String.valueOf(node.get(PLC_NODE_ADDRESS)))
+          .build());
+    }
+
+    eventSchema.setEventProperties(allProperties);
+    guessSchema.setEventSchema(eventSchema);
+    return guessSchema;
+  }
+
+  /**
+   * This method is executed when the adapter is started. A connection to the PLC is initialized
+   *
+   * @throws AdapterException
+   */
+  @Override
+  protected void before() throws AdapterException {
+
+    // Extract user input
+    getConfigurations(adapterDescription);
+
+    try {
+      this.plcConnection = new PlcDriverManager().getConnection(
+          "modbus:tcp://" + this.ip + ":" + this.port + "?unit-identifier=" + this.slaveID);
+
+      if (!this.plcConnection.getMetadata().canRead()) {
+        throw new AdapterException("The Modbus device on IP: " + this.ip + " does not support reading data");
+      }
+    } catch (PlcConnectionException pce) {
+      throw new AdapterException("Could not establish a connection to Modbus device on IP: " + this.ip);
+    }
+  }
+
+  /**
+   * is called iteratively according to the polling interval defined in getPollInterval.
+   */
+  @Override
+  protected void pullData() {
+
+    // create PLC read request
+    PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
+    for (Map<String, String> node : this.nodes) {
+
+      switch (node.get(PLC_NODE_TYPE)) {
+        case "Coil":
+          builder.addItem(node.get(PLC_NODE_RUNTIME_NAME), "coil:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));
+          break;
+        case "HoldingRegister":
+          builder.addItem(node.get(PLC_NODE_RUNTIME_NAME),
+              "holding-register:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));
+          break;
+        case "DiscreteInput":
+          builder.addItem(node.get(PLC_NODE_RUNTIME_NAME),
+              "discrete-input:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));
+          break;
+        case "InputRegister":
+          builder.addItem(node.get(PLC_NODE_RUNTIME_NAME),
+              "input-register:" + String.valueOf(node.get(PLC_NODE_ADDRESS)));
+          break;
+      }
+    }
+    PlcReadRequest readRequest = builder.build();
+
+
+    // Execute the request
+    PlcReadResponse response = null;
+
+    try {
+      response = readRequest.execute().get();
+    } catch (InterruptedException ie) {
+      ie.printStackTrace();
+    } catch (ExecutionException ee) {
+      ee.printStackTrace();
+    }
+
+    // Create an event containing the value of the PLC
+    Map<String, Object> event = new HashMap<>();
+    for (Map<String, String> node : this.nodes) {
+
+      if (response.getResponseCode(node.get(PLC_NODE_RUNTIME_NAME)) == PlcResponseCode.OK) {
+
+        switch (node.get(PLC_NODE_TYPE)) {
+          case "Coil":
+            event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getBoolean(node.get(PLC_NODE_RUNTIME_NAME)));
+            break;
+          case "DiscreteInput":
+            event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getBoolean(node.get(PLC_NODE_RUNTIME_NAME)));
+            break;
+          case "InputRegister":
+            event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getInteger(node.get(PLC_NODE_RUNTIME_NAME)));
+            break;
+          case "HoldingRegister":
+            event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getInteger(node.get(PLC_NODE_RUNTIME_NAME)));
+            break;
+        }
+      } else {
+        LOGGER.error("Error[" + node.get(PLC_NODE_RUNTIME_NAME) + "]: "
+            + response.getResponseCode(node.get(PLC_NODE_RUNTIME_NAME)));
+      }
+    }
+
+    // publish the final event
+    adapterPipeline.process(event);
+  }
+
+  /**
+   * return polling interval for this adapter, default is set to one second
+   *
+   * @return
+   */
+  @Override
+  protected PollingSettings getPollingInterval() {
+    return PollingSettings.from(TimeUnit.SECONDS, 1);
+  }
+
+  /**
+   * Required by StreamPipes to return a new adapter instance by calling the constructor with
+   * SpecificAdapterStreamDescription
+   *
+   * @param adapterDescription
+   * @return
+   */
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new Plc4xModbusAdapter(adapterDescription);
+  }
+
+  /**
+   * Required by StreamPipes, return the ID of the adapter
+   */
+  @Override
+  public String getId() {
+    return ID;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/passive/Plc4xPassiveAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/passive/Plc4xPassiveAdapter.java
index d4e916f88..28880c959 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/passive/Plc4xPassiveAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/passive/Plc4xPassiveAdapter.java
@@ -19,9 +19,9 @@
 package org.apache.streampipes.connect.iiot.adapters.plc4x.passive;
 
 import org.apache.streampipes.connect.adapter.Adapter;
+import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
 import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.connect.api.exception.ParseException;
-import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -36,81 +36,82 @@ import java.util.List;
 
 public class Plc4xPassiveAdapter extends SpecificDataStreamAdapter {
 
-    /**
-     * A unique id to identify the adapter
-     */
-    public static final String ID = " org.apache.streampipes.connect.iiot.adapters.plc4x.passive";
-
-    public Plc4xPassiveAdapter() {
-    }
-
-    public Plc4xPassiveAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
-
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID, "PLC4X Passive", "")
-                .iconUrl("plc4x.png")
-                .category(AdapterType.Manufacturing)
-                .build();
-        description.setAppId(ID);
-
-        return description;
-    }
-
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException, ParseException {
-        GuessSchema guessSchema = new GuessSchema();
-
-        EventSchema eventSchema = new EventSchema();
-        List<EventProperty> allProperties = new ArrayList<>();
-
-        allProperties.add(
-                PrimitivePropertyBuilder
-                        .create(Datatypes.String, "sourceId")
-                        .label("Source Id")
-                        .description("")
-                        .build());
-
-        allProperties.add(
-                PrimitivePropertyBuilder
-                        .create(Datatypes.String, "propertyId")
-                        .label("Property Id")
-                        .description("")
-                        .build());
-
-        // We need to define the type of the value, I choose a numerical value
-        allProperties.add(
-                PrimitivePropertyBuilder
-                        .create(Datatypes.Float, "value")
-                        .label("Value")
-                        .description("")
-                        .build());
-
-
-        eventSchema.setEventProperties(allProperties);
-        guessSchema.setEventSchema(eventSchema);
-        return guessSchema;
-    }
-
-    @Override
-    public void startAdapter() throws AdapterException {
-        // TODO
-    }
-
-    @Override
-    public void stopAdapter() throws AdapterException {
-        // TODO
-    }
-
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new Plc4xPassiveAdapter(adapterDescription);
-    }
-
-    @Override
-    public String getId() {
-        return ID;
-    }
+  /**
+   * A unique id to identify the adapter
+   */
+  public static final String ID = " org.apache.streampipes.connect.iiot.adapters.plc4x.passive";
+
+  public Plc4xPassiveAdapter() {
+  }
+
+  public Plc4xPassiveAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
+
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID, "PLC4X Passive", "")
+        .iconUrl("plc4x.png")
+        .category(AdapterType.Manufacturing)
+        .build();
+    description.setAppId(ID);
+
+    return description;
+  }
+
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
+      throws AdapterException, ParseException {
+    GuessSchema guessSchema = new GuessSchema();
+
+    EventSchema eventSchema = new EventSchema();
+    List<EventProperty> allProperties = new ArrayList<>();
+
+    allProperties.add(
+        PrimitivePropertyBuilder
+            .create(Datatypes.String, "sourceId")
+            .label("Source Id")
+            .description("")
+            .build());
+
+    allProperties.add(
+        PrimitivePropertyBuilder
+            .create(Datatypes.String, "propertyId")
+            .label("Property Id")
+            .description("")
+            .build());
+
+    // We need to define the type of the value, I choose a numerical value
+    allProperties.add(
+        PrimitivePropertyBuilder
+            .create(Datatypes.Float, "value")
+            .label("Value")
+            .description("")
+            .build());
+
+
+    eventSchema.setEventProperties(allProperties);
+    guessSchema.setEventSchema(eventSchema);
+    return guessSchema;
+  }
+
+  @Override
+  public void startAdapter() throws AdapterException {
+    // TODO
+  }
+
+  @Override
+  public void stopAdapter() throws AdapterException {
+    // TODO
+  }
+
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new Plc4xPassiveAdapter(adapterDescription);
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java
index 227054b81..77a30142a 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/plc4x/s7/Plc4xS7Adapter.java
@@ -18,13 +18,7 @@
 
 package org.apache.streampipes.connect.iiot.adapters.plc4x.s7;
 
-import org.apache.plc4x.java.PlcDriverManager;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager;
+
 import org.apache.streampipes.connect.adapter.Adapter;
 import org.apache.streampipes.connect.adapter.util.PollingSettings;
 import org.apache.streampipes.connect.api.exception.AdapterException;
@@ -47,6 +41,14 @@ import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
+
+import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,286 +62,296 @@ import java.util.stream.Collectors;
 
 public class Plc4xS7Adapter extends PullAdapter implements PlcReadResponseHandler {
 
-    /**
-     * A unique id to identify the Plc4xS7Adapter
-     */
-    public static final String ID = "org.apache.streampipes.connect.iiot.adapters.plc4x.s7";
-
-    Logger LOG = LoggerFactory.getLogger(Plc4xS7Adapter.class);
-
-    /**
-     * Keys of user configuration parameters
-     */
-    private static final String PLC_IP = "plc_ip";
-    private static final String PLC_POLLING_INTERVAL = "plc_polling_interval";
-    private static final String PLC_NODES = "plc_nodes";
-    private static final String PLC_NODE_NAME = "plc_node_name";
-    private static final String PLC_NODE_RUNTIME_NAME = "plc_node_runtime_name";
-    private static final String PLC_NODE_TYPE = "plc_node_type";
-
-    /**
-     * Values of user configuration parameters
-     */
-    private String ip;
-    private int pollingInterval;
-    private List<Map<String, String>> nodes;
-
-    /**
-     * Connection to the PLC
-     */
+  /**
+   * A unique id to identify the Plc4xS7Adapter
+   */
+  public static final String ID = "org.apache.streampipes.connect.iiot.adapters.plc4x.s7";
+
+  private static final Logger LOG = LoggerFactory.getLogger(Plc4xS7Adapter.class);
+
+  /**
+   * Keys of user configuration parameters
+   */
+  private static final String PLC_IP = "plc_ip";
+  private static final String PLC_POLLING_INTERVAL = "plc_polling_interval";
+  private static final String PLC_NODES = "plc_nodes";
+  private static final String PLC_NODE_NAME = "plc_node_name";
+  private static final String PLC_NODE_RUNTIME_NAME = "plc_node_runtime_name";
+  private static final String PLC_NODE_TYPE = "plc_node_type";
+
+  /**
+   * Values of user configuration parameters
+   */
+  private String ip;
+  private int pollingInterval;
+  private List<Map<String, String>> nodes;
+
+  /**
+   * Connection to the PLC
+   */
 //    private PlcConnection plcConnection;
-    private PlcDriverManager driverManager;
-
-    /**
-     * Empty constructor and a constructor with SpecificAdapterStreamDescription are mandatory
-     */
-    public Plc4xS7Adapter() {
-    }
-
-    public Plc4xS7Adapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
-
-    /**
-     * Describe the adapter adapter and define what user inputs are required. Currently users can just select one node, this will be extended in the future
-     * @return
-     */
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
-                .withLocales(Locales.EN)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .category(AdapterType.Manufacturing)
-                .requiredTextParameter(Labels.withId(PLC_IP))
-                .requiredIntegerParameter(Labels.withId(PLC_POLLING_INTERVAL), 1000)
-                .requiredCollection(Labels.withId(PLC_NODES),
-                        StaticProperties.stringFreeTextProperty(Labels.withId(PLC_NODE_RUNTIME_NAME)),
-                        StaticProperties.stringFreeTextProperty(Labels.withId(PLC_NODE_NAME)),
-                        StaticProperties.singleValueSelection(Labels.withId(PLC_NODE_TYPE),
-                                Options.from("Bool",  "Byte", "Int", "Word", "Real", "Char", "String", "Date", "Time of day", "Date and Time")))
-                .build();
-        description.setAppId(ID);
-
-        return description;
-    }
-
-    /**
-     * Takes the user input and creates the event schema. The event schema describes the properties of the event stream.
-     * @param adapterDescription
-     * @return
-     * @throws AdapterException
-     */
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
-
-        // Extract user input
-        try {
-            getConfigurations(adapterDescription);
-
-            if (this.pollingInterval < 10) {
-                throw new AdapterException("Polling interval must be higher than 10. Current value: " + this.pollingInterval);
-            }
-
-            GuessSchema guessSchema = new GuessSchema();
-
-            EventSchema eventSchema = new EventSchema();
-            List<EventProperty> allProperties = new ArrayList<>();
-
-            for (Map<String, String> node : this.nodes) {
-                Datatypes datatype = getStreamPipesDataType(node.get(PLC_NODE_TYPE).toUpperCase().replaceAll(" ", "_"));
-
-                allProperties.add(
-                  PrimitivePropertyBuilder
-                    .create(datatype, node.get(PLC_NODE_RUNTIME_NAME))
-                    .label(node.get(PLC_NODE_RUNTIME_NAME))
-                    .description("")
-                    .build());
-            }
-
-            this.before();
-            var event = readPlcDataSynchronized();
-            var preview = event
-              .entrySet()
-              .stream()
-              .collect(Collectors.toMap(Map.Entry::getKey, e ->
-                new GuessTypeInfo(e.getValue().getClass().getCanonicalName(), e.getValue())));
-
-            eventSchema.setEventProperties(allProperties);
-            guessSchema.setEventSchema(eventSchema);
-            guessSchema.setEventPreview(List.of(preview));
-
-            return guessSchema;
-        } catch (Exception e) {
-            throw new AdapterException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * This method is executed when the adapter is started. A connection to the PLC is initialized
-     * @throws AdapterException
-     */
-    @Override
-    protected void before() throws AdapterException {
-        // Extract user input
-        getConfigurations(adapterDescription);
-
-        this.driverManager = new PooledPlcDriverManager();
-        try (PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
-            if (!plcConnection.getMetadata().canRead()) {
-                this.LOG.error("The S7 on IP: " + this.ip + " does not support reading data");
-            }
-        } catch (PlcConnectionException e) {
-            this.LOG.error("Could not establish connection to S7 with ip " + this.ip, e);
-        } catch (Exception e) {
-            this.LOG.error("Could not close connection to S7 with ip " + this.ip, e);
-        }
-    }
-
-
-    /**
-     * pullData is called iteratively according to the polling interval defined in getPollInterval.
-     */
-    @Override
-    protected void pullData() {
-        // Create PLC read request
-        try(PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
-            readPlcData(plcConnection, this);
-        } catch (Exception e) {
-            LOG.error("Error while reading from PLC with IP {} ", this.ip, e);
-        }
-    }
-
-    private PlcReadRequest makeReadRequest(PlcConnection plcConnection) throws PlcConnectionException {
-        PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
-        for (Map<String, String> node : this.nodes) {
-            builder.addItem(node.get(PLC_NODE_NAME), node.get(PLC_NODE_NAME) + ":" + node.get(PLC_NODE_TYPE).toUpperCase().replaceAll(" ", "_"));
-        }
-        return builder.build();
+  private PlcDriverManager driverManager;
+
+  /**
+   * Empty constructor and a constructor with SpecificAdapterStreamDescription are mandatory
+   */
+  public Plc4xS7Adapter() {
+  }
+
+  public Plc4xS7Adapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
+
+  /**
+   * Describe the adapter adapter and define what user inputs are required.
+   * Currently, users can just select one node, this will be extended in the future
+   *
+   * @return
+   */
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+        .withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .category(AdapterType.Manufacturing)
+        .requiredTextParameter(Labels.withId(PLC_IP))
+        .requiredIntegerParameter(Labels.withId(PLC_POLLING_INTERVAL), 1000)
+        .requiredCollection(Labels.withId(PLC_NODES),
+            StaticProperties.stringFreeTextProperty(Labels.withId(PLC_NODE_RUNTIME_NAME)),
+            StaticProperties.stringFreeTextProperty(Labels.withId(PLC_NODE_NAME)),
+            StaticProperties.singleValueSelection(Labels.withId(PLC_NODE_TYPE),
+                Options.from("Bool", "Byte", "Int", "Word", "Real", "Char", "String", "Date", "Time of day",
+                    "Date and Time")))
+        .build();
+    description.setAppId(ID);
+
+    return description;
+  }
+
+  /**
+   * Takes the user input and creates the event schema. The event schema describes the properties of the event stream.
+   *
+   * @param adapterDescription
+   * @return
+   */
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
+
+    // Extract user input
+    try {
+      getConfigurations(adapterDescription);
+
+      if (this.pollingInterval < 10) {
+        throw new AdapterException("Polling interval must be higher than 10. Current value: " + this.pollingInterval);
+      }
+
+      GuessSchema guessSchema = new GuessSchema();
+
+      EventSchema eventSchema = new EventSchema();
+      List<EventProperty> allProperties = new ArrayList<>();
+
+      for (Map<String, String> node : this.nodes) {
+        Datatypes datatype = getStreamPipesDataType(node.get(PLC_NODE_TYPE).toUpperCase().replaceAll(" ", "_"));
+
+        allProperties.add(
+            PrimitivePropertyBuilder
+                .create(datatype, node.get(PLC_NODE_RUNTIME_NAME))
+                .label(node.get(PLC_NODE_RUNTIME_NAME))
+                .description("")
+                .build());
+      }
+
+      this.before();
+      var event = readPlcDataSynchronized();
+      var preview = event
+          .entrySet()
+          .stream()
+          .collect(Collectors.toMap(Map.Entry::getKey, e ->
+              new GuessTypeInfo(e.getValue().getClass().getCanonicalName(), e.getValue())));
+
+      eventSchema.setEventProperties(allProperties);
+      guessSchema.setEventSchema(eventSchema);
+      guessSchema.setEventPreview(List.of(preview));
+
+      return guessSchema;
+    } catch (Exception e) {
+      throw new AdapterException(e.getMessage(), e);
     }
-
-    private void readPlcData(PlcConnection plcConnection, PlcReadResponseHandler handler) throws PlcConnectionException {
-        var readRequest = makeReadRequest(plcConnection);
-        // Execute the request
-        CompletableFuture<? extends PlcReadResponse> asyncResponse = readRequest.execute();
-        asyncResponse.whenComplete(handler::onReadResult);
+  }
+
+  /**
+   * This method is executed when the adapter is started. A connection to the PLC is initialized
+   *
+   * @throws AdapterException
+   */
+  @Override
+  protected void before() throws AdapterException {
+    // Extract user input
+    getConfigurations(adapterDescription);
+
+    this.driverManager = new PooledPlcDriverManager();
+    try (PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
+      if (!plcConnection.getMetadata().canRead()) {
+        this.LOG.error("The S7 on IP: " + this.ip + " does not support reading data");
+      }
+    } catch (PlcConnectionException e) {
+      this.LOG.error("Could not establish connection to S7 with ip " + this.ip, e);
+    } catch (Exception e) {
+      this.LOG.error("Could not close connection to S7 with ip " + this.ip, e);
     }
-
-    private Map<String, Object> readPlcDataSynchronized() throws Exception {
-        try (PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
-            var readRequest = makeReadRequest(plcConnection);
-            // Execute the request
-            var readResponse = readRequest.execute().get(5000, TimeUnit.MILLISECONDS);
-            return makeEvent(readResponse);
-        }
+  }
+
+
+  /**
+   * pullData is called iteratively according to the polling interval defined in getPollInterval.
+   */
+  @Override
+  protected void pullData() {
+    // Create PLC read request
+    try (PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
+      readPlcData(plcConnection, this);
+    } catch (Exception e) {
+      LOG.error("Error while reading from PLC with IP {} ", this.ip, e);
     }
+  }
 
-    /**
-     * Define the polling interval of this adapter. Default is to poll every second
-     * @return
-     */
-    @Override
-    protected PollingSettings getPollingInterval() {
-        return PollingSettings.from(TimeUnit.MILLISECONDS, this.pollingInterval);
+  private PlcReadRequest makeReadRequest(PlcConnection plcConnection) throws PlcConnectionException {
+    PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
+    for (Map<String, String> node : this.nodes) {
+      builder.addItem(node.get(PLC_NODE_NAME),
+          node.get(PLC_NODE_NAME) + ":" + node.get(PLC_NODE_TYPE).toUpperCase().replaceAll(" ", "_"));
     }
-
-    /**
-     * Required by StreamPipes return a new adapter instance by calling the constructor with SpecificAdapterStreamDescription
-     * @param adapterDescription
-     * @return
-     */
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new Plc4xS7Adapter(adapterDescription);
-    }
-
-
-    /**
-     * Required by StreamPipes. Return the id of the adapter
-     * @return
-     */
-    @Override
-    public String getId() {
-        return ID;
+    return builder.build();
+  }
+
+  private void readPlcData(PlcConnection plcConnection, PlcReadResponseHandler handler) throws PlcConnectionException {
+    var readRequest = makeReadRequest(plcConnection);
+    // Execute the request
+    CompletableFuture<? extends PlcReadResponse> asyncResponse = readRequest.execute();
+    asyncResponse.whenComplete(handler::onReadResult);
+  }
+
+  private Map<String, Object> readPlcDataSynchronized() throws Exception {
+    try (PlcConnection plcConnection = this.driverManager.getConnection("s7://" + this.ip)) {
+      var readRequest = makeReadRequest(plcConnection);
+      // Execute the request
+      var readResponse = readRequest.execute().get(5000, TimeUnit.MILLISECONDS);
+      return makeEvent(readResponse);
     }
-
-    /**
-     * Extracts the user configuration from the SpecificAdapterStreamDescription and sets the local variales
-     * @param adapterDescription
-     */
-    private void getConfigurations(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
-        StaticPropertyExtractor extractor =
-                StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
-
-        this.ip = extractor.singleValueParameter(PLC_IP, String.class);
-        this.pollingInterval = extractor.singleValueParameter(PLC_POLLING_INTERVAL, Integer.class);
-
-        this.nodes = new ArrayList<>();
-        CollectionStaticProperty sp = (CollectionStaticProperty) extractor.getStaticPropertyByName(PLC_NODES);
-
-        for (StaticProperty member : sp.getMembers()) {
-            StaticPropertyExtractor memberExtractor =
-                    StaticPropertyExtractor.from(((StaticPropertyGroup) member).getStaticProperties(), new ArrayList<>());
-            Map<String, String> map = new HashMap<>();
-            map.put(PLC_NODE_RUNTIME_NAME, memberExtractor.textParameter(PLC_NODE_RUNTIME_NAME));
-            map.put(PLC_NODE_NAME, memberExtractor.textParameter(PLC_NODE_NAME));
-            map.put(PLC_NODE_TYPE, memberExtractor.selectedSingleValue(PLC_NODE_TYPE, String.class));
-            this.nodes.add(map);
-        }
+  }
+
+  /**
+   * Define the polling interval of this adapter. Default is to poll every second
+   *
+   * @return
+   */
+  @Override
+  protected PollingSettings getPollingInterval() {
+    return PollingSettings.from(TimeUnit.MILLISECONDS, this.pollingInterval);
+  }
+
+  /**
+   * Required by StreamPipes return a new adapter instance by calling the constructor with
+   * SpecificAdapterStreamDescription
+   *
+   * @param adapterDescription
+   * @return
+   */
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new Plc4xS7Adapter(adapterDescription);
+  }
+
+
+  /**
+   * Required by StreamPipes. Return the id of the adapter
+   *
+   * @return
+   */
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  /**
+   * Extracts the user configuration from the SpecificAdapterStreamDescription and sets the local variales
+   *
+   * @param adapterDescription
+   */
+  private void getConfigurations(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
+    StaticPropertyExtractor extractor =
+        StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
+
+    this.ip = extractor.singleValueParameter(PLC_IP, String.class);
+    this.pollingInterval = extractor.singleValueParameter(PLC_POLLING_INTERVAL, Integer.class);
+
+    this.nodes = new ArrayList<>();
+    CollectionStaticProperty sp = (CollectionStaticProperty) extractor.getStaticPropertyByName(PLC_NODES);
+
+    for (StaticProperty member : sp.getMembers()) {
+      StaticPropertyExtractor memberExtractor =
+          StaticPropertyExtractor.from(((StaticPropertyGroup) member).getStaticProperties(), new ArrayList<>());
+      Map<String, String> map = new HashMap<>();
+      map.put(PLC_NODE_RUNTIME_NAME, memberExtractor.textParameter(PLC_NODE_RUNTIME_NAME));
+      map.put(PLC_NODE_NAME, memberExtractor.textParameter(PLC_NODE_NAME));
+      map.put(PLC_NODE_TYPE, memberExtractor.selectedSingleValue(PLC_NODE_TYPE, String.class));
+      this.nodes.add(map);
     }
-
-    /**
-     * Transforms PLC4X data types to datatypes supported in StreamPipes
-     * @param plcType
-     * @return
-     * @throws AdapterException
-     */
-    private Datatypes getStreamPipesDataType(String plcType) throws AdapterException {
-
-        String type = plcType.substring(plcType.lastIndexOf(":")+1);
-
-        switch (type) {
-            case "BOOL":
-                return Datatypes.Boolean;
-            case "BYTE":
-            case "REAL":
-                return Datatypes.Float;
-            case "INT":
-                return Datatypes.Integer;
-            case "WORD":
-            case "TIME_OF_DAY":
-            case "DATE":
-            case "DATE_AND_TIME":
-            case "STRING":
-            case "CHAR":
-                return Datatypes.String;
-            default:
-                throw new AdapterException("Datatype " + plcType + " is not supported");
-        }
+  }
+
+  /**
+   * Transforms PLC4X data types to datatypes supported in StreamPipes
+   *
+   * @param plcType
+   * @return
+   */
+  private Datatypes getStreamPipesDataType(String plcType) throws AdapterException {
+
+    String type = plcType.substring(plcType.lastIndexOf(":") + 1);
+
+    switch (type) {
+      case "BOOL":
+        return Datatypes.Boolean;
+      case "BYTE":
+      case "REAL":
+        return Datatypes.Float;
+      case "INT":
+        return Datatypes.Integer;
+      case "WORD":
+      case "TIME_OF_DAY":
+      case "DATE":
+      case "DATE_AND_TIME":
+      case "STRING":
+      case "CHAR":
+        return Datatypes.String;
+      default:
+        throw new AdapterException("Datatype " + plcType + " is not supported");
     }
-
-    @Override
-    public void onReadResult(PlcReadResponse response, Throwable throwable) {
-        if (throwable != null) {
-            throwable.printStackTrace();
-            this.LOG.error(throwable.getMessage());
-        } else {
-            var event = makeEvent(response);
-            // publish the final event
-            adapterPipeline.process(event);
-        }
+  }
+
+  @Override
+  public void onReadResult(PlcReadResponse response, Throwable throwable) {
+    if (throwable != null) {
+      throwable.printStackTrace();
+      this.LOG.error(throwable.getMessage());
+    } else {
+      var event = makeEvent(response);
+      // publish the final event
+      adapterPipeline.process(event);
     }
-
-    private Map<String, Object> makeEvent(PlcReadResponse response) {
-        Map<String, Object> event = new HashMap<>();
-        for (Map<String, String> node : this.nodes) {
-            if (response.getResponseCode(node.get(PLC_NODE_NAME)) == PlcResponseCode.OK) {
-                event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getObject(node.get(PLC_NODE_NAME)));
-            } else {
-                this.LOG.error("Error[" + node.get(PLC_NODE_NAME) + "]: " +
-                  response.getResponseCode(node.get(PLC_NODE_NAME)).name());
-            }
-        }
-        return event;
+  }
+
+  private Map<String, Object> makeEvent(PlcReadResponse response) {
+    Map<String, Object> event = new HashMap<>();
+    for (Map<String, String> node : this.nodes) {
+      if (response.getResponseCode(node.get(PLC_NODE_NAME)) == PlcResponseCode.OK) {
+        event.put(node.get(PLC_NODE_RUNTIME_NAME), response.getObject(node.get(PLC_NODE_NAME)));
+      } else {
+        this.LOG.error("Error[" + node.get(PLC_NODE_NAME) + "]: "
+            + response.getResponseCode(node.get(PLC_NODE_NAME)).name());
+      }
     }
+    return event;
+  }
 }
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 161b8f4fc..704e568db 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
@@ -18,23 +18,12 @@
 
 package org.apache.streampipes.connect.iiot.adapters.ros;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import edu.wpi.rail.jrosbridge.Ros;
-import edu.wpi.rail.jrosbridge.Service;
-import edu.wpi.rail.jrosbridge.Topic;
-import edu.wpi.rail.jrosbridge.callback.TopicCallback;
-import edu.wpi.rail.jrosbridge.messages.Message;
-import edu.wpi.rail.jrosbridge.services.ServiceRequest;
-import edu.wpi.rail.jrosbridge.services.ServiceResponse;
+
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.connect.adapter.format.json.object.JsonObjectParser;
 import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
 import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
+import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.container.api.ResolvesContainerProvidedOptions;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
@@ -47,207 +36,224 @@ import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
 
-import java.util.*;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import edu.wpi.rail.jrosbridge.Ros;
+import edu.wpi.rail.jrosbridge.Service;
+import edu.wpi.rail.jrosbridge.Topic;
+import edu.wpi.rail.jrosbridge.callback.TopicCallback;
+import edu.wpi.rail.jrosbridge.messages.Message;
+import edu.wpi.rail.jrosbridge.services.ServiceRequest;
+import edu.wpi.rail.jrosbridge.services.ServiceResponse;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 public class RosBridgeAdapter extends SpecificDataStreamAdapter implements ResolvesContainerProvidedOptions {
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.adapters.ros";
+  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";
+  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";
 
-    private String topic;
-    private String host;
-    private int port;
-
-    private Ros ros;
+  private String topic;
+  private String host;
+  private int port;
 
-    private JsonObjectParser jsonObjectParser;
+  private Ros ros;
 
-    public RosBridgeAdapter() {
-    }
+  private JsonObjectParser jsonObjectParser;
 
-    public RosBridgeAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
+  public RosBridgeAdapter() {
+  }
 
-        getConfigurations(adapterDescription);
+  public RosBridgeAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
 
-        this.jsonObjectParser = new JsonObjectParser();
-    }
+    getConfigurations(adapterDescription);
 
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
-                .withLocales(Locales.EN)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .category(AdapterType.Manufacturing)
-                .requiredTextParameter(Labels.withId(ROS_HOST_KEY))
-                .requiredTextParameter(Labels.withId(ROS_PORT_KEY))
-                .requiredSingleValueSelectionFromContainer(Labels.withId(TOPIC_KEY), Arrays.asList(ROS_HOST_KEY, ROS_PORT_KEY))
-                .build();
-
-        return  description;
-    }
+    this.jsonObjectParser = new JsonObjectParser();
+  }
 
-    @Override
-    public void startAdapter() throws AdapterException {
-        this.ros = new Ros(this.host, this.port);
-        this.ros.connect();
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+        .withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .category(AdapterType.Manufacturing)
+        .requiredTextParameter(Labels.withId(ROS_HOST_KEY))
+        .requiredTextParameter(Labels.withId(ROS_PORT_KEY))
+        .requiredSingleValueSelectionFromContainer(Labels.withId(TOPIC_KEY), Arrays.asList(ROS_HOST_KEY, ROS_PORT_KEY))
+        .build();
 
-        String topicType = getMethodType(this.ros, this.topic);
+    return description;
+  }
 
-        ObjectMapper mapper = new ObjectMapper();
-        Topic echoBack = new Topic(ros, this.topic, topicType);
-        echoBack.subscribe(new TopicCallback() {
-            @Override
-            public void handleMessage(Message message) {
+  @Override
+  public void startAdapter() throws AdapterException {
+    this.ros = new Ros(this.host, this.port);
+    this.ros.connect();
 
+    String topicType = getMethodType(this.ros, this.topic);
 
-                try {
-                    Map<String, Object> result = mapper.readValue(message.toString(), HashMap.class);
-                    adapterPipeline.process(result);
-                } catch (JsonProcessingException e) {
-                    e.printStackTrace();
-                }
-            }
-        });
+    ObjectMapper mapper = new ObjectMapper();
+    Topic echoBack = new Topic(ros, this.topic, topicType);
+    echoBack.subscribe(new TopicCallback() {
+      @Override
+      public void handleMessage(Message message) {
 
 
-    }
+        try {
+          Map<String, Object> result = mapper.readValue(message.toString(), HashMap.class);
+          adapterPipeline.process(result);
+        } catch (JsonProcessingException e) {
+          e.printStackTrace();
+        }
+      }
+    });
 
-    @Override
-    public List<Option> resolveOptions(String requestId, StaticPropertyExtractor extractor) {
-        String rosBridgeHost = extractor.singleValueParameter(ROS_HOST_KEY, String.class);
-        Integer rosBridgePort = extractor.singleValueParameter(ROS_PORT_KEY, Integer.class);
 
-        Ros ros = new Ros(rosBridgeHost, rosBridgePort);
+  }
 
-        ros.connect();
-        List<String> topics = getListOfAllTopics(ros);
-        ros.disconnect();
-        return topics.stream().map(Option::new).collect(Collectors.toList());
-    }
+  @Override
+  public List<Option> resolveOptions(String requestId, StaticPropertyExtractor extractor) {
+    String rosBridgeHost = extractor.singleValueParameter(ROS_HOST_KEY, String.class);
+    Integer rosBridgePort = extractor.singleValueParameter(ROS_PORT_KEY, Integer.class);
 
-    private class GetNEvents implements Runnable {
+    Ros ros = new Ros(rosBridgeHost, rosBridgePort);
 
-        private String topic;
-        private String topicType;
-        private Ros ros;
+    ros.connect();
+    List<String> topics = getListOfAllTopics(ros);
+    ros.disconnect();
+    return topics.stream().map(Option::new).collect(Collectors.toList());
+  }
 
-        private List<byte[]> events;
+  private class GetNEvents implements Runnable {
 
-        public GetNEvents(String topic, String topicType, Ros ros) {
-            this.topic = topic;
-            this.topicType = topicType;
-            this.ros = ros;
-            this.events = new ArrayList<>();
-        }
+    private String topic;
+    private String topicType;
+    private Ros ros;
 
-        @Override
-        public void run() {
-            Topic echoBack = new Topic(ros, this.topic, topicType);
-            echoBack.subscribe(new TopicCallback() {
-                @Override
-                public void handleMessage(Message message) {
-                    events.add(message.toString().getBytes());
-                }
-            });
-        }
+    private List<byte[]> events;
 
-        public List<byte[]> getEvents() {
-            return this.events;
-        }
+    public GetNEvents(String topic, String topicType, Ros ros) {
+      this.topic = topic;
+      this.topicType = topicType;
+      this.ros = ros;
+      this.events = new ArrayList<>();
     }
 
     @Override
-    public void stopAdapter() throws AdapterException {
-        this.ros.disconnect();
+    public void run() {
+      Topic echoBack = new Topic(ros, this.topic, topicType);
+      echoBack.subscribe(new TopicCallback() {
+        @Override
+        public void handleMessage(Message message) {
+          events.add(message.toString().getBytes());
+        }
+      });
     }
 
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
-        getConfigurations(adapterDescription);
+    public List<byte[]> getEvents() {
+      return this.events;
+    }
+  }
 
+  @Override
+  public void stopAdapter() throws AdapterException {
+    this.ros.disconnect();
+  }
 
-        Ros ros = new Ros(host, port);
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
+    getConfigurations(adapterDescription);
 
-        boolean connect = ros.connect();
 
-        if (!connect) {
-            throw new AdapterException("Could not connect to ROS bridge Endpoint: " + host + " with port: " + port);
-        }
+    Ros ros = new Ros(host, port);
 
-        String topicType = getMethodType(ros, topic);
+    boolean connect = ros.connect();
 
-        GetNEvents getNEvents = new GetNEvents(topic, topicType, ros);
-        Thread t = new Thread(getNEvents);
-        t.start();
+    if (!connect) {
+      throw new AdapterException("Could not connect to ROS bridge Endpoint: " + host + " with port: " + port);
+    }
 
-        while (getNEvents.getEvents().size() < 1) {
-            try {
-                Thread.sleep(100);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }
+    String topicType = getMethodType(ros, topic);
 
-        t.interrupt();
+    GetNEvents getNEvents = new GetNEvents(topic, topicType, ros);
+    Thread t = new Thread(getNEvents);
+    t.start();
 
-        ros.disconnect();
+    while (getNEvents.getEvents().size() < 1) {
+      try {
+        Thread.sleep(100);
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+    }
 
-        EventSchema eventSchema = this.jsonObjectParser.getEventSchema(getNEvents.getEvents());
+    t.interrupt();
 
-        GuessSchema guessSchema = new GuessSchema();
+    ros.disconnect();
 
-        guessSchema.setEventSchema(eventSchema);
-        return guessSchema;
-    }
+    EventSchema eventSchema = this.jsonObjectParser.getEventSchema(getNEvents.getEvents());
 
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new RosBridgeAdapter(adapterDescription);
-    }
+    GuessSchema guessSchema = new GuessSchema();
 
-    @Override
-    public String getId() {
-        return ID;
-    }
+    guessSchema.setEventSchema(eventSchema);
+    return guessSchema;
+  }
 
-    private String getMethodType(Ros ros, String topic) {
-        Service addTwoInts = new Service(ros, "/rosapi/topic_type", "rosapi/TopicType");
-        ServiceRequest request = new ServiceRequest("{\"topic\": \""+ topic +"\"}");
-        ServiceResponse response = addTwoInts.callServiceAndWait(request);
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new RosBridgeAdapter(adapterDescription);
+  }
 
-        JsonObject ob = new JsonParser().parse(response.toString()).getAsJsonObject();
-        return ob.get("type").getAsString();
-    }
+  @Override
+  public String getId() {
+    return ID;
+  }
 
-    private void getConfigurations(SpecificAdapterStreamDescription adapterDescription) {
-        ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
-        this.host = extractor.singleValue(ROS_HOST_KEY, String.class);
-        this.topic = extractor.selectedSingleValueOption(TOPIC_KEY);
-        this.port = extractor.singleValue(ROS_PORT_KEY, Integer.class);
-    }
+  private String getMethodType(Ros ros, String topic) {
+    Service addTwoInts = new Service(ros, "/rosapi/topic_type", "rosapi/TopicType");
+    ServiceRequest request = new ServiceRequest("{\"topic\": \"" + topic + "\"}");
+    ServiceResponse response = addTwoInts.callServiceAndWait(request);
 
-    // Ignore for now, but is interesting for future implementations
-    private List<String> getListOfAllTopics(Ros ros) {
-        List<String> result = new ArrayList<>();
-        Service service = new Service(ros, "/rosapi/topics", "rosapi/Topics");
-        ServiceRequest request = new ServiceRequest();
-        ServiceResponse response = service.callServiceAndWait(request);
-        JsonObject ob = new JsonParser().parse(response.toString()).getAsJsonObject();
+    JsonObject ob = new JsonParser().parse(response.toString()).getAsJsonObject();
+    return ob.get("type").getAsString();
+  }
 
-        if (ob.has("topics")) {
-            JsonArray topics = ob.get("topics").getAsJsonArray();
-            for (int i = 0; i < topics.size(); i++) {
-                result.add(topics.get(i).getAsString());
-            }
+  private void getConfigurations(SpecificAdapterStreamDescription adapterDescription) {
+    ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
+    this.host = extractor.singleValue(ROS_HOST_KEY, String.class);
+    this.topic = extractor.selectedSingleValueOption(TOPIC_KEY);
+    this.port = extractor.singleValue(ROS_PORT_KEY, Integer.class);
+  }
 
-        }
+  // Ignore for now, but is interesting for future implementations
+  private List<String> getListOfAllTopics(Ros ros) {
+    List<String> result = new ArrayList<>();
+    Service service = new Service(ros, "/rosapi/topics", "rosapi/Topics");
+    ServiceRequest request = new ServiceRequest();
+    ServiceResponse response = service.callServiceAndWait(request);
+    JsonObject ob = new JsonParser().parse(response.toString()).getAsJsonObject();
 
-        return result;
+    if (ob.has("topics")) {
+      JsonArray topics = ob.get("topics").getAsJsonArray();
+      for (int i = 0; i < topics.size(); i++) {
+        result.add(topics.get(i).getAsString());
+      }
 
     }
+
+    return result;
+
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulator.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulator.java
index ee3b18be7..f0d668a42 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulator.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulator.java
@@ -1,4 +1,4 @@
-package org.apache.streampipes.connect.iiot.adapters.simulator.machine;/*
+/*
  * 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.
@@ -15,6 +15,7 @@ package org.apache.streampipes.connect.iiot.adapters.simulator.machine;/*
  * limitations under the License.
  *
  */
+package org.apache.streampipes.connect.iiot.adapters.simulator.machine;
 
 import org.apache.streampipes.connect.adapter.model.pipeline.AdapterPipeline;
 import org.apache.streampipes.connect.api.exception.AdapterException;
@@ -24,135 +25,129 @@ import java.util.Map;
 
 public class MachineDataSimulator implements Runnable {
 
-    private final AdapterPipeline adapterPipeline;
-    private final Integer waitTimeMs;
-    private final String selectedSimulatorOption;
-
-    private Boolean running;
-
-    public MachineDataSimulator(AdapterPipeline adapterPipeline, Integer waitTimeMs, String selectedSimulatorOption) {
-        this.adapterPipeline = adapterPipeline;
-        this.waitTimeMs = waitTimeMs;
-        this.selectedSimulatorOption = selectedSimulatorOption;
-        this.running = true;
+  private final AdapterPipeline adapterPipeline;
+  private final Integer waitTimeMs;
+  private final String selectedSimulatorOption;
+
+  private Boolean running;
+
+  public MachineDataSimulator(AdapterPipeline adapterPipeline, Integer waitTimeMs, String selectedSimulatorOption) {
+    this.adapterPipeline = adapterPipeline;
+    this.waitTimeMs = waitTimeMs;
+    this.selectedSimulatorOption = selectedSimulatorOption;
+    this.running = true;
+  }
+
+  @Override
+  public void run() {
+    this.running = true;
+    Map<String, Object> event = new HashMap<>();
+    long startTimeMs = System.currentTimeMillis();
+
+    while (running) {
+      long currentTimeMs = System.currentTimeMillis();
+      long timeDeltaMs = currentTimeMs - startTimeMs;
+
+      switch (this.selectedSimulatorOption) {
+        case "flowrate":
+          // 0 - 30s
+          if (timeDeltaMs > 0 && timeDeltaMs <= 30000) {
+            event = buildFlowrateEvent(0);
+          } else if (timeDeltaMs > 30000 && timeDeltaMs <= 60000) {
+            // 30s - 60s
+            event = buildFlowrateEvent(1);
+          } else {
+            // > 60s
+            // reset start time to start over again
+            startTimeMs = currentTimeMs;
+          }
+          break;
+        case "pressure":
+          // 0 - 30s
+          if (timeDeltaMs > 0 && timeDeltaMs <= 30000) {
+            event = buildPressureEvent(0);
+          } else if (timeDeltaMs > 30000 && timeDeltaMs <= 60000) {
+            // 30s - 60s
+            event = buildPressureEvent(1);
+          } else {
+            // > 60s
+            // reset start time to start over again
+            startTimeMs = currentTimeMs;
+          }
+          break;
+        case "waterlevel":
+          if (timeDeltaMs > 0 && timeDeltaMs <= 30000) {
+            // 0 - 30s
+            event = buildWaterlevelEvent(0);
+          } else if (timeDeltaMs > 30000 && timeDeltaMs <= 60000) {
+            // 30s - 60s
+            event = buildWaterlevelEvent(1);
+          } else {
+            // > 60s
+            // reset start time to start over again
+            startTimeMs = currentTimeMs;
+          }
+          break;
+        default:
+          try {
+            throw new AdapterException("resource not found");
+          } catch (AdapterException e) {
+            e.printStackTrace();
+          }
+      }
+
+      if (event.keySet().size() > 0) {
+        adapterPipeline.process(event);
+      }
+
+      try {
+        Thread.sleep(waitTimeMs);
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
     }
+  }
 
-    @Override
-    public void run() {
-        this.running = true;
-        Map<String, Object> event = new HashMap<>();
-        long startTimeMs = System.currentTimeMillis();
-
-        while (running) {
-            long currentTimeMs = System.currentTimeMillis();
-            long timeDeltaMs = currentTimeMs - startTimeMs;
-
-            switch(this.selectedSimulatorOption) {
-                case "flowrate":
-                    // 0 - 30s
-                    if (timeDeltaMs > 0 && timeDeltaMs <= 30000) {
-                        event = buildFlowrateEvent(0);
-                    }
-                    // 30s - 60s
-                    else if (timeDeltaMs > 30000 && timeDeltaMs <= 60000) {
-                        event = buildFlowrateEvent(1);
-                    }
-                    // > 60s
-                    else {
-                        // reset start time to start over again
-                        startTimeMs = currentTimeMs;
-                    }
-                    break;
-                case "pressure":
-                    // 0 - 30s
-                    if (timeDeltaMs > 0 && timeDeltaMs <= 30000) {
-                        event = buildPressureEvent(0);
-                    }
-                    // 30s - 60s
-                    else if (timeDeltaMs > 30000 && timeDeltaMs <= 60000) {
-                        event = buildPressureEvent(1);
-                    }
-                    // > 60s
-                    else {
-                        // reset start time to start over again
-                        startTimeMs = currentTimeMs;
-                    }
-                    break;
-                case "waterlevel":
-                    // 0 - 30s
-                    if (timeDeltaMs > 0 && timeDeltaMs <= 30000) {
-                        event = buildWaterlevelEvent(0);
-                    }
-                    // 30s - 60s
-                    else if (timeDeltaMs > 30000 && timeDeltaMs <= 60000) {
-                        event = buildWaterlevelEvent(1);
-                    }
-                    // > 60s
-                    else {
-                        // reset start time to start over again
-                        startTimeMs = currentTimeMs;
-                    }
-                    break;
-                default:
-                    try {
-                        throw new AdapterException("resource not found");
-                    } catch (AdapterException e) {
-                        e.printStackTrace();
-                    }
-            }
-
-            if (event.keySet().size() > 0) {
-                adapterPipeline.process(event);
-            }
-
-            try {
-                Thread.sleep(waitTimeMs);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }
-    }
+  private Map<String, Object> buildFlowrateEvent(int simulationPhase) {
+    Map<String, Object> event = new HashMap<>();
 
-    private Map<String, Object> buildFlowrateEvent(int simulationPhase) {
-        Map<String, Object> event = new HashMap<>();
+    event.put("timestamp", System.currentTimeMillis());
+    event.put("sensorId", "flowrate02");
+    event.put("mass_flow", randomDoubleBetween(0, 10));
+    event.put("volume_flow", randomDoubleBetween(0, 10));
+    event.put("temperature", simulationPhase == 0 ? randomDoubleBetween(40, 50) : randomDoubleBetween(80, 100));
+    event.put("density", randomDoubleBetween(40, 50));
+    event.put("sensor_fault_flags", simulationPhase != 0);
 
-        event.put("timestamp", System.currentTimeMillis());
-        event.put("sensorId", "flowrate02");
-        event.put("mass_flow", randomDoubleBetween(0,10));
-        event.put("volume_flow", randomDoubleBetween(0,10));
-        event.put("temperature", simulationPhase == 0 ? randomDoubleBetween(40,50) : randomDoubleBetween(80,100));
-        event.put("density", randomDoubleBetween(40,50));
-        event.put("sensor_fault_flags", simulationPhase != 0);
+    return event;
+  }
 
-        return event;
-    }
+  private Map<String, Object> buildPressureEvent(int simulationPhase) {
+    Map<String, Object> event = new HashMap<>();
 
-    private Map<String, Object> buildPressureEvent(int simulationPhase) {
-        Map<String, Object> event = new HashMap<>();
+    event.put("timestamp", System.currentTimeMillis());
+    event.put("sensorId", "pressure01");
+    event.put("pressure", simulationPhase == 0 ? randomDoubleBetween(10, 40) : randomDoubleBetween(40, 70));
 
-        event.put("timestamp", System.currentTimeMillis());
-        event.put("sensorId", "pressure01");
-        event.put("pressure", simulationPhase == 0 ? randomDoubleBetween(10,40) : randomDoubleBetween(40,70));
+    return event;
+  }
 
-        return event;
-    }
+  private Map<String, Object> buildWaterlevelEvent(int simulationPhase) {
+    Map<String, Object> event = new HashMap<>();
 
-    private Map<String, Object> buildWaterlevelEvent(int simulationPhase) {
-        Map<String, Object> event = new HashMap<>();
+    event.put("timestamp", System.currentTimeMillis());
+    event.put("sensorId", "level01");
+    event.put("level", simulationPhase == 0 ? randomDoubleBetween(20, 30) : randomDoubleBetween(60, 80));
+    event.put("overflow", simulationPhase != 0);
 
-        event.put("timestamp", System.currentTimeMillis());
-        event.put("sensorId", "level01");
-        event.put("level", simulationPhase == 0 ? randomDoubleBetween(20,30) : randomDoubleBetween(60,80));
-        event.put("overflow", simulationPhase != 0);
+    return event;
+  }
 
-        return event;
-    }
-
-    private double randomDoubleBetween(int min, int max) {
-        return Math.random() * (max - min + 1) + min;
-    }
+  private double randomDoubleBetween(int min, int max) {
+    return Math.random() * (max - min + 1) + min;
+  }
 
-    public void setRunning(Boolean running) {
-        this.running = running;
-    }
+  public void setRunning(Boolean running) {
+    this.running = running;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulatorUtils.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulatorUtils.java
index f157babca..b38f6ab12 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulatorUtils.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataSimulatorUtils.java
@@ -1,4 +1,4 @@
-package org.apache.streampipes.connect.iiot.adapters.simulator.machine;/*
+/*
  * 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.
@@ -15,6 +15,7 @@ package org.apache.streampipes.connect.iiot.adapters.simulator.machine;/*
  * limitations under the License.
  *
  */
+package org.apache.streampipes.connect.iiot.adapters.simulator.machine;
 
 import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -26,7 +27,7 @@ import org.apache.streampipes.vocabulary.SO;
 
 import java.net.URI;
 
-import static org.apache.streampipes.sdk.helpers.EpProperties.*;
+import static org.apache.streampipes.sdk.helpers.EpProperties.timestampProperty;
 
 public class MachineDataSimulatorUtils {
 
@@ -54,113 +55,113 @@ public class MachineDataSimulatorUtils {
 
   private static GuessSchema getWaterlevelSchema() {
     return GuessSchemaBuilder.create()
-      .property(timestampProperty(TIMESTAMP))
-      .sample(TIMESTAMP, System.currentTimeMillis())
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.String, "sensorId")
-        .label("Sensor ID")
-        .description("The ID of the sensor")
-        .domainProperty(HAS_SENSOR_ID)
-        .scope(PropertyScope.DIMENSION_PROPERTY)
-        .build())
-      .sample("sensorId", "sensor01")
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Float, "level")
-        .label("Water Level")
-        .description("Denotes the current water level in the container")
-        .domainProperty(SO.Number)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .build())
-      .sample("level", 5.25f)
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Boolean, "overflow")
-        .label("Overflow")
-        .description("Indicates whether the tank overflows")
-        .domainProperty(SO.Number)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .build())
-      .sample("overflow", true)
-      .build();
+        .property(timestampProperty(TIMESTAMP))
+        .sample(TIMESTAMP, System.currentTimeMillis())
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.String, "sensorId")
+            .label("Sensor ID")
+            .description("The ID of the sensor")
+            .domainProperty(HAS_SENSOR_ID)
+            .scope(PropertyScope.DIMENSION_PROPERTY)
+            .build())
+        .sample("sensorId", "sensor01")
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Float, "level")
+            .label("Water Level")
+            .description("Denotes the current water level in the container")
+            .domainProperty(SO.Number)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .sample("level", 5.25f)
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Boolean, "overflow")
+            .label("Overflow")
+            .description("Indicates whether the tank overflows")
+            .domainProperty(SO.Number)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .sample("overflow", true)
+        .build();
   }
 
   private static GuessSchema getPressureSchema() {
     return GuessSchemaBuilder.create()
-      .property(timestampProperty(TIMESTAMP))
-      .sample(TIMESTAMP, System.currentTimeMillis())
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.String, "sensorId")
-        .label("Sensor ID")
-        .description("The ID of the sensor")
-        .domainProperty(HAS_SENSOR_ID)
-        .scope(PropertyScope.DIMENSION_PROPERTY)
-        .build())
-      .sample("sensorId", "sensor01")
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Float, "pressure")
-        .label("Pressure")
-        .description("Denotes the current pressure in the pressure tank")
-        .domainProperty(SO.Number)
-        .valueSpecification(0.0f, 100.0f, 0.5f)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .build())
-      .sample("pressure", 85.22f)
-      .build();
+        .property(timestampProperty(TIMESTAMP))
+        .sample(TIMESTAMP, System.currentTimeMillis())
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.String, "sensorId")
+            .label("Sensor ID")
+            .description("The ID of the sensor")
+            .domainProperty(HAS_SENSOR_ID)
+            .scope(PropertyScope.DIMENSION_PROPERTY)
+            .build())
+        .sample("sensorId", "sensor01")
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Float, "pressure")
+            .label("Pressure")
+            .description("Denotes the current pressure in the pressure tank")
+            .domainProperty(SO.Number)
+            .valueSpecification(0.0f, 100.0f, 0.5f)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .sample("pressure", 85.22f)
+        .build();
   }
 
   public static GuessSchema getFlowrateSchema() {
     return GuessSchemaBuilder.create()
-      .property(timestampProperty(TIMESTAMP))
-      .sample(TIMESTAMP, System.currentTimeMillis())
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.String, SENSOR_ID)
-        .label("Sensor ID")
-        .description("The ID of the sensor")
-        .domainProperty(HAS_SENSOR_ID)
-        .scope(PropertyScope.DIMENSION_PROPERTY)
-        .build())
-      .sample("sensorId", "sensor01")
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Float, MASS_FLOW)
-        .label("Mass Flow")
-        .description("Denotes the current mass flow in the sensor")
-        .domainProperty(SO.Number)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .build())
-      .sample(MASS_FLOW, 5.76f)
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Float, "volume_flow")
-        .label("Volume Flow")
-        .description("Denotes the current volume flow")
-        .domainProperty(SO.Number)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .build())
-      .sample("volume_flow", 3.34f)
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Float, TEMPERATURE)
-        .label("Temperature")
-        .description("Denotes the current temperature in degrees celsius")
-        .domainProperty(SO.Number)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .measurementUnit(URI.create("http://codes.wmo.int/common/unit/degC"))
-        .valueSpecification(0.0f, 100.0f, 0.1f)
-        .build())
-      .sample(TEMPERATURE, 33.221f)
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Float, "density")
-        .label("Density")
-        .description("Denotes the current density of the fluid")
-        .domainProperty(SO.Number)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .build())
-      .sample("density", 5.0f)
-      .property(PrimitivePropertyBuilder
-        .create(Datatypes.Boolean, "sensor_fault_flags")
-        .label("Sensor Fault Flags")
-        .description("Any fault flags of the sensors")
-        .domainProperty(SO.Boolean)
-        .scope(PropertyScope.MEASUREMENT_PROPERTY)
-        .build())
-      .sample("sensor_fault_flags", true)
-      .build();
+        .property(timestampProperty(TIMESTAMP))
+        .sample(TIMESTAMP, System.currentTimeMillis())
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.String, SENSOR_ID)
+            .label("Sensor ID")
+            .description("The ID of the sensor")
+            .domainProperty(HAS_SENSOR_ID)
+            .scope(PropertyScope.DIMENSION_PROPERTY)
+            .build())
+        .sample("sensorId", "sensor01")
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Float, MASS_FLOW)
+            .label("Mass Flow")
+            .description("Denotes the current mass flow in the sensor")
+            .domainProperty(SO.Number)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .sample(MASS_FLOW, 5.76f)
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Float, "volume_flow")
+            .label("Volume Flow")
+            .description("Denotes the current volume flow")
+            .domainProperty(SO.Number)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .sample("volume_flow", 3.34f)
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Float, TEMPERATURE)
+            .label("Temperature")
+            .description("Denotes the current temperature in degrees celsius")
+            .domainProperty(SO.Number)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .measurementUnit(URI.create("http://codes.wmo.int/common/unit/degC"))
+            .valueSpecification(0.0f, 100.0f, 0.1f)
+            .build())
+        .sample(TEMPERATURE, 33.221f)
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Float, "density")
+            .label("Density")
+            .description("Denotes the current density of the fluid")
+            .domainProperty(SO.Number)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .sample("density", 5.0f)
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Boolean, "sensor_fault_flags")
+            .label("Sensor Fault Flags")
+            .description("Any fault flags of the sensors")
+            .domainProperty(SO.Boolean)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .sample("sensor_fault_flags", true)
+        .build();
   }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataStreamAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataStreamAdapter.java
index aaf7a90ee..b5d4717e9 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataStreamAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/simulator/machine/MachineDataStreamAdapter.java
@@ -1,4 +1,4 @@
-package org.apache.streampipes.connect.iiot.adapters.simulator.machine;/*
+/*
  * 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.
@@ -15,11 +15,12 @@ package org.apache.streampipes.connect.iiot.adapters.simulator.machine;/*
  * limitations under the License.
  *
  */
+package org.apache.streampipes.connect.iiot.adapters.simulator.machine;
 
 import org.apache.streampipes.connect.adapter.Adapter;
+import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
 import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.connect.api.exception.ParseException;
-import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -34,60 +35,62 @@ import java.util.ArrayList;
 
 public class MachineDataStreamAdapter extends SpecificDataStreamAdapter {
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.adapters.simulator.machine";
-    private static final String WAIT_TIME_MS = "wait-time-ms";
-    private static final String SELECTED_SIMULATOR_OPTION = "selected-simulator-option";
+  public static final String ID = "org.apache.streampipes.connect.iiot.adapters.simulator.machine";
+  private static final String WAIT_TIME_MS = "wait-time-ms";
+  private static final String SELECTED_SIMULATOR_OPTION = "selected-simulator-option";
 
-    private String selectedSimulatorOption = "";
+  private String selectedSimulatorOption = "";
 
-    private MachineDataSimulator machineDataSimulator;
+  private MachineDataSimulator machineDataSimulator;
 
-    public MachineDataStreamAdapter() {
-    }
+  public MachineDataStreamAdapter() {
+  }
 
-    public MachineDataStreamAdapter(SpecificAdapterStreamDescription adapterStreamDescription) {
-        super(adapterStreamDescription);
-        StaticPropertyExtractor extractor = StaticPropertyExtractor.from(adapterStreamDescription.getConfig(), new ArrayList<>());
-        Integer waitTimeMs = extractor.singleValueParameter(WAIT_TIME_MS, Integer.class);
-        this.selectedSimulatorOption = extractor.selectedSingleValue(SELECTED_SIMULATOR_OPTION, String.class);
-        this.machineDataSimulator = new MachineDataSimulator(adapterPipeline, waitTimeMs, selectedSimulatorOption);
-    }
+  public MachineDataStreamAdapter(SpecificAdapterStreamDescription adapterStreamDescription) {
+    super(adapterStreamDescription);
+    StaticPropertyExtractor extractor =
+        StaticPropertyExtractor.from(adapterStreamDescription.getConfig(), new ArrayList<>());
+    Integer waitTimeMs = extractor.singleValueParameter(WAIT_TIME_MS, Integer.class);
+    this.selectedSimulatorOption = extractor.selectedSingleValue(SELECTED_SIMULATOR_OPTION, String.class);
+    this.machineDataSimulator = new MachineDataSimulator(adapterPipeline, waitTimeMs, selectedSimulatorOption);
+  }
 
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-        return SpecificDataStreamAdapterBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .category(AdapterType.Debugging)
-                .requiredIntegerParameter(Labels.withId(WAIT_TIME_MS), 1000)
-                .requiredSingleValueSelection(Labels.withId(SELECTED_SIMULATOR_OPTION), Options.from(
-                        "flowrate", "pressure", "waterlevel"))
-                .build();
-    }
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+    return SpecificDataStreamAdapterBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Debugging)
+        .requiredIntegerParameter(Labels.withId(WAIT_TIME_MS), 1000)
+        .requiredSingleValueSelection(Labels.withId(SELECTED_SIMULATOR_OPTION), Options.from(
+            "flowrate", "pressure", "waterlevel"))
+        .build();
+  }
 
-    @Override
-    public void startAdapter() throws AdapterException {
-        Thread thread = new Thread(this.machineDataSimulator);
-        thread.start();
-    }
+  @Override
+  public void startAdapter() throws AdapterException {
+    Thread thread = new Thread(this.machineDataSimulator);
+    thread.start();
+  }
 
-    @Override
-    public void stopAdapter() throws AdapterException {
-        this.machineDataSimulator.setRunning(false);
-    }
+  @Override
+  public void stopAdapter() throws AdapterException {
+    this.machineDataSimulator.setRunning(false);
+  }
 
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterStreamDescription) {
-        return new MachineDataStreamAdapter(adapterStreamDescription);
-    }
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterStreamDescription) {
+    return new MachineDataStreamAdapter(adapterStreamDescription);
+  }
 
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterStreamDescription) throws AdapterException, ParseException {
-        return MachineDataSimulatorUtils.getSchema(this.selectedSimulatorOption);
-    }
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterStreamDescription)
+      throws AdapterException, ParseException {
+    return MachineDataSimulatorUtils.getSchema(this.selectedSimulatorOption);
+  }
 
-    @Override
-    public String getId() {
-        return ID;
-    }
+  @Override
+  public String getId() {
+    return ID;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java
index 8dcb342c4..636cbd2da 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java
@@ -38,6 +38,7 @@ import org.apache.streampipes.sdk.helpers.Filetypes;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,118 +51,118 @@ import java.util.Map;
 
 public class FileProtocol extends Protocol {
 
-    private static Logger logger = LoggerFactory.getLogger(FileProtocol.class);
-
-    public static final String ID = "org.apache.streampipes.connect.iiot.protocol.set.file";
-
-    private String selectedFilename;
-
-    public FileProtocol() {
+  private static Logger logger = LoggerFactory.getLogger(FileProtocol.class);
+
+  public static final String ID = "org.apache.streampipes.connect.iiot.protocol.set.file";
+
+  private String selectedFilename;
+
+  public FileProtocol() {
+  }
+
+  public FileProtocol(IParser parser,
+                      IFormat format,
+                      String selectedFilename) {
+    super(parser, format);
+    this.selectedFilename = selectedFilename;
+  }
+
+  @Override
+  public ProtocolDescription declareModel() {
+    return ProtocolDescriptionBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .sourceType(AdapterSourceType.SET)
+        .category(AdapterType.Generic)
+        .requiredFile(Labels.withId("filePath"), Filetypes.XML, Filetypes.JSON, Filetypes.CSV)
+        .build();
+  }
+
+  @Override
+  public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
+    StaticPropertyExtractor extractor = StaticPropertyExtractor.from(protocolDescription.getConfig());
+    String selectedFilename = extractor.selectedFilename("filePath");
+    return new FileProtocol(parser, format, selectedFilename);
+  }
+
+  @Override
+  public void run(IAdapterPipeline adapterPipeline) {
+    FileReader fr = null;
+
+    // TODO fix this. Currently needed because it must be wait till the whole pipeline is up and running
+    try {
+      Thread.sleep(7000);
+    } catch (InterruptedException e) {
+      e.printStackTrace();
     }
-
-    public FileProtocol(IParser parser,
-                        IFormat format,
-                        String selectedFilename) {
-        super(parser, format);
-        this.selectedFilename = selectedFilename;
+    SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
+    try {
+      InputStream dataInputStream = FileProtocolUtils.getFileInputStream(this.selectedFilename);
+      if (dataInputStream != null) {
+        parser.parse(dataInputStream, stk);
+      } else {
+        logger.warn("Could not read data from file.");
+      }
+    } catch (ParseException e) {
+      logger.error("Error while parsing: " + e.getMessage());
+    } catch (FileNotFoundException e) {
+      logger.error("Error reading file: " + e.getMessage());
     }
+  }
 
-    @Override
-    public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .sourceType(AdapterSourceType.SET)
-                .category(AdapterType.Generic)
-                .requiredFile(Labels.withId("filePath"), Filetypes.XML, Filetypes.JSON, Filetypes.CSV)
-                .build();
-    }
+  @Override
+  public void stop() {
 
-    @Override
-    public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
-        StaticPropertyExtractor extractor = StaticPropertyExtractor.from(protocolDescription.getConfig());
-        String selectedFilename = extractor.selectedFilename("filePath");
-        return new FileProtocol(parser, format, selectedFilename);
-    }
+  }
 
-    @Override
-    public void run(IAdapterPipeline adapterPipeline) {
-        FileReader fr = null;
-
-        // TODO fix this. Currently needed because it must be wait till the whole pipeline is up and running
-        try {
-            Thread.sleep(7000);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
-        try {
-            InputStream dataInputStream = FileProtocolUtils.getFileInputStream(this.selectedFilename);
-            if(dataInputStream != null) {
-                parser.parse(dataInputStream, stk);
-            } else {
-                logger.warn("Could not read data from file.");
-            }
-        } catch (ParseException e) {
-            logger.error("Error while parsing: " + e.getMessage());
-        } catch (FileNotFoundException e) {
-            logger.error("Error reading file: " + e.getMessage());
-        }
-    }
+  @Override
+  public GuessSchema getGuessSchema() throws ParseException {
 
-    @Override
-    public void stop() {
+    try {
+      InputStream targetStream = FileProtocolUtils.getFileInputStream(this.selectedFilename);
+      List<byte[]> dataByte = parser.parseNEvents(targetStream, 20);
 
+      if (parser.supportsPreview()) {
+        return SchemaGuesser.guessSchema(parser.getSchemaAndSample(dataByte));
+      } else {
+        EventSchema eventSchema = parser.getEventSchema(dataByte);
+        return SchemaGuesser.guessSchema(eventSchema);
+      }
+    } catch (FileNotFoundException e) {
+      throw new ParseException("Could not read local file");
     }
-
-    @Override
-    public GuessSchema getGuessSchema() throws ParseException {
-
-        try {
-            InputStream targetStream = FileProtocolUtils.getFileInputStream(this.selectedFilename);
-            List<byte[]> dataByte = parser.parseNEvents(targetStream, 20);
-
-            if (parser.supportsPreview()) {
-                return SchemaGuesser.guessSchema(parser.getSchemaAndSample(dataByte));
-            } else {
-                EventSchema eventSchema = parser.getEventSchema(dataByte);
-                return SchemaGuesser.guessSchema(eventSchema);
-            }
-        } catch (FileNotFoundException e) {
-            throw new ParseException("Could not read local file");
-        }
-    }
+  }
 
 
-    @Override
-    public List<Map<String, Object>> getNElements(int n) throws ParseException {
-        List<Map<String, Object>> result = new ArrayList<>();
+  @Override
+  public List<Map<String, Object>> getNElements(int n) throws ParseException {
+    List<Map<String, Object>> result = new ArrayList<>();
 
-        List<byte[]> dataByteArray = new ArrayList<>();
-        try {
-            InputStream dataInputStream = FileProtocolUtils.getFileInputStream(this.selectedFilename);
-            dataByteArray = parser.parseNEvents(dataInputStream, n);
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-        }
-
-        // Check that result size is n. Currently just an error is logged. Maybe change to an exception
-        if (dataByteArray.size() < n) {
-            logger.error("Error in File Protocol! User required: " + n + " elements but the resource just had: " +
-                    dataByteArray.size());
-        }
+    List<byte[]> dataByteArray = new ArrayList<>();
+    try {
+      InputStream dataInputStream = FileProtocolUtils.getFileInputStream(this.selectedFilename);
+      dataByteArray = parser.parseNEvents(dataInputStream, n);
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    }
 
-        for (byte[] b : dataByteArray) {
-            result.add(format.parse(b));
-        }
+    // Check that result size is n. Currently just an error is logged. Maybe change to an exception
+    if (dataByteArray.size() < n) {
+      logger.error("Error in File Protocol! User required: " + n + " elements but the resource just had: "
+          + dataByteArray.size());
+    }
 
-        return result;
+    for (byte[] b : dataByteArray) {
+      result.add(format.parse(b));
     }
 
+    return result;
+  }
 
-    @Override
-    public String getId() {
-        return ID;
-    }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/HttpProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/HttpProtocol.java
index eca0f25f7..a3753c20e 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/HttpProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/HttpProtocol.java
@@ -18,7 +18,6 @@
 
 package org.apache.streampipes.connect.iiot.protocol.set;
 
-import org.apache.http.client.fluent.Request;
 import org.apache.streampipes.connect.SendToPipeline;
 import org.apache.streampipes.connect.adapter.guess.SchemaGuesser;
 import org.apache.streampipes.connect.adapter.model.generic.Protocol;
@@ -36,6 +35,8 @@ import org.apache.streampipes.sdk.helpers.AdapterSourceType;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
+
+import org.apache.http.client.fluent.Request;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,110 +48,110 @@ import java.util.Map;
 
 public class HttpProtocol extends Protocol {
 
-    Logger logger = LoggerFactory.getLogger(Protocol.class);
+  Logger logger = LoggerFactory.getLogger(Protocol.class);
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.protocol.set.http";
+  public static final String ID = "org.apache.streampipes.connect.iiot.protocol.set.http";
 
-    private String url;
+  private String url;
 
-    public HttpProtocol() {
-    }
+  public HttpProtocol() {
+  }
 
-    public HttpProtocol(IParser parser, IFormat format, String url) {
-        super(parser, format);
-        this.url = url;
-    }
+  public HttpProtocol(IParser parser, IFormat format, String url) {
+    super(parser, format);
+    this.url = url;
+  }
 
-    @Override
-    public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .category(AdapterType.Generic)
-                .sourceType(AdapterSourceType.SET)
-                .requiredTextParameter(Labels.withId("url"))
-                .build();
-    }
+  @Override
+  public ProtocolDescription declareModel() {
+    return ProtocolDescriptionBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Generic)
+        .sourceType(AdapterSourceType.SET)
+        .requiredTextParameter(Labels.withId("url"))
+        .build();
+  }
 
-    @Override
-    public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
-        ParameterExtractor extractor = new ParameterExtractor(protocolDescription.getConfig());
-        String url = extractor.singleValue("url");
+  @Override
+  public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
+    ParameterExtractor extractor = new ParameterExtractor(protocolDescription.getConfig());
+    String url = extractor.singleValue("url");
 
-        return new HttpProtocol(parser, format, url);
-    }
+    return new HttpProtocol(parser, format, url);
+  }
 
-    @Override
-    public void run(IAdapterPipeline adapterPipeline) {
+  @Override
+  public void run(IAdapterPipeline adapterPipeline) {
 
-        // TODO fix this. Currently needed because it must be wait till the whole pipeline is up and running
-        try {
-            Thread.sleep(7000);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
+    // TODO fix this. Currently needed because it must be wait till the whole pipeline is up and running
+    try {
+      Thread.sleep(7000);
+    } catch (InterruptedException e) {
+      e.printStackTrace();
+    }
 
-        SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
+    SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
 
-        InputStream data = getDataFromEndpoint();
-        try {
-            parser.parse(data, stk);
+    InputStream data = getDataFromEndpoint();
+    try {
+      parser.parse(data, stk);
 
-        } catch (ParseException e) {
-            logger.error("Error while parsing: " + e.getMessage());
-        }
+    } catch (ParseException e) {
+      logger.error("Error while parsing: " + e.getMessage());
     }
+  }
 
-    @Override
-    public void stop() {
-
-    }
+  @Override
+  public void stop() {
 
+  }
 
-    @Override
-    public GuessSchema getGuessSchema() throws ParseException {
 
-        InputStream dataInputStream = getDataFromEndpoint();
+  @Override
+  public GuessSchema getGuessSchema() throws ParseException {
 
-        List<byte[]> dataByte = parser.parseNEvents(dataInputStream, 2);
+    InputStream dataInputStream = getDataFromEndpoint();
 
-        EventSchema eventSchema= parser.getEventSchema(dataByte);
+    List<byte[]> dataByte = parser.parseNEvents(dataInputStream, 2);
 
-        GuessSchema result = SchemaGuesser.guessSchema(eventSchema);
+    EventSchema eventSchema = parser.getEventSchema(dataByte);
 
-        return result;
-    }
+    GuessSchema result = SchemaGuesser.guessSchema(eventSchema);
 
-    @Override
-    public List<Map<String, Object>> getNElements(int n) throws ParseException {
+    return result;
+  }
 
-        List<Map<String, Object>> result = new ArrayList<>();
+  @Override
+  public List<Map<String, Object>> getNElements(int n) throws ParseException {
 
-        InputStream dataInputStream = getDataFromEndpoint();
+    List<Map<String, Object>> result = new ArrayList<>();
 
-        List<byte[]> dataByteArray = parser.parseNEvents(dataInputStream, n);
+    InputStream dataInputStream = getDataFromEndpoint();
 
-        // Check that result size is n. Currently just an error is logged. Maybe change to an exception
-        if (dataByteArray.size() < n) {
-            logger.error("Error in HttpProtocol! User required: " + n + " elements but the resource just had: " +
-                    dataByteArray.size());
-        }
+    List<byte[]> dataByteArray = parser.parseNEvents(dataInputStream, n);
 
-        for (byte[] b : dataByteArray) {
-            result.add(format.parse(b));
-        }
+    // Check that result size is n. Currently just an error is logged. Maybe change to an exception
+    if (dataByteArray.size() < n) {
+      logger.error("Error in HttpProtocol! User required: " + n + " elements but the resource just had: " +
+          dataByteArray.size());
+    }
 
-        return result;
+    for (byte[] b : dataByteArray) {
+      result.add(format.parse(b));
     }
 
-    public InputStream getDataFromEndpoint() throws ParseException {
-        InputStream result = null;
+    return result;
+  }
 
-        try {
-            result = Request.Get(url)
-                    .connectTimeout(1000)
-                    .socketTimeout(100000)
-                    .execute().returnContent().asStream();
+  public InputStream getDataFromEndpoint() throws ParseException {
+    InputStream result = null;
+
+    try {
+      result = Request.Get(url)
+          .connectTimeout(1000)
+          .socketTimeout(100000)
+          .execute().returnContent().asStream();
 
 //            if (s.startsWith("ï")) {
 //                s = s.substring(3);
@@ -158,18 +159,19 @@ public class HttpProtocol extends Protocol {
 
 //            result = IOUtils.toInputStream(s, "UTF-8");
 
-        } catch (IOException e) {
-            throw new ParseException("Could not receive Data from: " + url);
-        }
+    } catch (IOException e) {
+      throw new ParseException("Could not receive Data from: " + url);
+    }
 
-        if (result == null)
-            throw new ParseException("Could not receive Data from: " + url);
+      if (result == null) {
+          throw new ParseException("Could not receive Data from: " + url);
+      }
 
-        return result;
-    }
+    return result;
+  }
 
-    @Override
-    public String getId() {
-        return ID;
-    }
+  @Override
+  public String getId() {
+    return ID;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/BrokerEventProcessor.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/BrokerEventProcessor.java
index 7130d809e..e32d5d1bc 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/BrokerEventProcessor.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/BrokerEventProcessor.java
@@ -18,12 +18,13 @@
 
 package org.apache.streampipes.connect.iiot.protocol.stream;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.streampipes.connect.SendToPipeline;
 import org.apache.streampipes.connect.api.IParser;
 import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.messaging.InternalEventProcessor;
 
+import org.apache.commons.io.IOUtils;
+
 public class BrokerEventProcessor implements InternalEventProcessor<byte[]> {
 
   private SendToPipeline stk;
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java
index f88f5c538..97e3fc53f 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java
@@ -33,11 +33,20 @@ import org.apache.streampipes.connect.iiot.utils.FileProtocolUtils;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.grounding.ProtocolDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
-import org.apache.streampipes.model.schema.*;
+import org.apache.streampipes.model.schema.EventProperty;
+import org.apache.streampipes.model.schema.EventPropertyList;
+import org.apache.streampipes.model.schema.EventPropertyNested;
+import org.apache.streampipes.model.schema.EventPropertyPrimitive;
+import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.sdk.builder.adapter.ProtocolDescriptionBuilder;
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
-import org.apache.streampipes.sdk.helpers.*;
+import org.apache.streampipes.sdk.helpers.AdapterSourceType;
+import org.apache.streampipes.sdk.helpers.Filetypes;
+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.utils.Assets;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,7 +65,7 @@ public class FileStreamProtocol extends Protocol {
 
   //private String filePath;
   private String selectedFileName;
- // private String timestampKey;
+  // private String timestampKey;
   private boolean replaceTimestamp;
   private float speedUp;
   private int timeBetweenReplay;
@@ -83,53 +92,53 @@ public class FileStreamProtocol extends Protocol {
 
     // exchange adapter pipeline sink with special purpose replay sink for file replay
     if (adapterPipeline.getPipelineSink() instanceof SendToKafkaAdapterSink) {
-        adapterPipeline.changePipelineSink(new SendToBrokerReplayAdapterSink(
-                (SendToKafkaAdapterSink) adapterPipeline.getPipelineSink(),
-                timestampKey,
-                replaceTimestamp,
-                speedUp));
+      adapterPipeline.changePipelineSink(new SendToBrokerReplayAdapterSink(
+          (SendToKafkaAdapterSink) adapterPipeline.getPipelineSink(),
+          timestampKey,
+          replaceTimestamp,
+          speedUp));
 
     } else if (adapterPipeline.getPipelineSink() instanceof SendToMqttAdapterSink) {
-        adapterPipeline.changePipelineSink(new SendToBrokerReplayAdapterSink(
-                (SendToMqttAdapterSink) adapterPipeline.getPipelineSink(),
-                timestampKey,
-                replaceTimestamp,
-                speedUp));
+      adapterPipeline.changePipelineSink(new SendToBrokerReplayAdapterSink(
+          (SendToMqttAdapterSink) adapterPipeline.getPipelineSink(),
+          timestampKey,
+          replaceTimestamp,
+          speedUp));
 
     } else if (adapterPipeline.getPipelineSink() instanceof SendToJmsAdapterSink) {
-        adapterPipeline.changePipelineSink(new SendToBrokerReplayAdapterSink(
-                (SendToJmsAdapterSink) adapterPipeline.getPipelineSink(),
-                timestampKey,
-                replaceTimestamp,
-                speedUp));
+      adapterPipeline.changePipelineSink(new SendToBrokerReplayAdapterSink(
+          (SendToJmsAdapterSink) adapterPipeline.getPipelineSink(),
+          timestampKey,
+          replaceTimestamp,
+          speedUp));
     }
 
     running = true;
     task = new Thread() {
-        @Override
-        public void run() {
-          while (running) {
-
-            format.reset();
-            SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
-            InputStream dataInputStream = getDataFromEndpoint();
-            try {
-              if(dataInputStream != null) {
-                parser.parse(dataInputStream, stk);
-              } else {
-                logger.warn("Could not read data from file.");
-              }
-            } catch (ParseException e) {
-              logger.error("Error while parsing: " + e.getMessage());
+      @Override
+      public void run() {
+        while (running) {
+
+          format.reset();
+          SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
+          InputStream dataInputStream = getDataFromEndpoint();
+          try {
+            if (dataInputStream != null) {
+              parser.parse(dataInputStream, stk);
+            } else {
+              logger.warn("Could not read data from file.");
             }
+          } catch (ParseException e) {
+            logger.error("Error while parsing: " + e.getMessage());
+          }
 
-              try {
-                  Thread.sleep(timeBetweenReplay * 1000);
-              } catch (InterruptedException e) {
-                  logger.error("Error while waiting for next replay round" + e.getMessage());
-              }
+          try {
+            Thread.sleep(timeBetweenReplay * 1000);
+          } catch (InterruptedException e) {
+            logger.error("Error while waiting for next replay round" + e.getMessage());
           }
         }
+      }
     };
     task.start();
   }
@@ -143,8 +152,8 @@ public class FileStreamProtocol extends Protocol {
   private InputStream getDataFromEndpoint() throws ParseException {
 
 
-      try {
-          return FileProtocolUtils.getFileInputStream(this.selectedFileName);
+    try {
+      return FileProtocolUtils.getFileInputStream(this.selectedFileName);
     } catch (IOException e) {
       throw new ParseException("Could not find file: " + selectedFileName);
     }
@@ -152,11 +161,12 @@ public class FileStreamProtocol extends Protocol {
 
   @Override
   public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
-    StaticPropertyExtractor extractor = StaticPropertyExtractor.from(protocolDescription.getConfig(), new ArrayList<>());
+    StaticPropertyExtractor extractor =
+        StaticPropertyExtractor.from(protocolDescription.getConfig(), new ArrayList<>());
 
     List<String> replaceTimestampStringList = extractor.selectedMultiValues("replaceTimestamp", String.class);
 //    String replaceTimestampString = extractor.selectedSingleValueOption("replaceTimestamp");
-    boolean replaceTimestamp = replaceTimestampStringList.size() == 0 ? false : true;
+    boolean replaceTimestamp = replaceTimestampStringList.size() != 0;
 
     float speedUp = extractor.singleValueParameter("speed", Float.class);
 
@@ -175,12 +185,14 @@ public class FileStreamProtocol extends Protocol {
             result = prefixKey + eventProperty.getRuntimeName();
           }
         }
-      } else if (eventProperty instanceof EventPropertyNested && ((EventPropertyNested) eventProperty).getEventProperties() != null) {
+      } else if (eventProperty instanceof EventPropertyNested
+          && ((EventPropertyNested) eventProperty).getEventProperties() != null) {
         result = getTimestampKey(((EventPropertyNested) eventProperty).getEventProperties(),
-                prefixKey + eventProperty.getRuntimeName() + ".");
-      } else if (eventProperty instanceof EventPropertyList && ((EventPropertyList) eventProperty).getEventProperty() != null) {
+            prefixKey + eventProperty.getRuntimeName() + ".");
+      } else if (eventProperty instanceof EventPropertyList
+          && ((EventPropertyList) eventProperty).getEventProperty() != null) {
         result = getTimestampKey(Arrays.asList(((EventPropertyList) eventProperty).getEventProperty()),
-                prefixKey + eventProperty.getRuntimeName() + ".");
+            prefixKey + eventProperty.getRuntimeName() + ".");
       }
       if (result != null) {
         return result;
@@ -192,22 +204,22 @@ public class FileStreamProtocol extends Protocol {
   @Override
   public ProtocolDescription declareModel() {
     return ProtocolDescriptionBuilder.create(ID)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .withLocales(Locales.EN)
-            .sourceType(AdapterSourceType.STREAM)
-            .category(AdapterType.Generic)
-            .requiredFile(Labels.withId("filePath"), Filetypes.CSV, Filetypes.JSON, Filetypes.XML)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .sourceType(AdapterSourceType.STREAM)
+        .category(AdapterType.Generic)
+        .requiredFile(Labels.withId("filePath"), Filetypes.CSV, Filetypes.JSON, Filetypes.XML)
 //            .requiredSingleValueSelection(Labels.withId("replaceTimestamp"),
 //                Options.from("True", "False"))
-            .requiredMultiValueSelection(Labels.withId("replaceTimestamp"),
-                    Options.from(""))
-            .requiredFloatParameter(Labels.withId("speed"))
-            .build();
+        .requiredMultiValueSelection(Labels.withId("replaceTimestamp"),
+            Options.from(""))
+        .requiredFloatParameter(Labels.withId("speed"))
+        .build();
   }
 
   @Override
   public GuessSchema getGuessSchema() throws ParseException {
-     InputStream dataInputStream = getDataFromEndpoint();
+    InputStream dataInputStream = getDataFromEndpoint();
 
     List<byte[]> dataByte = parser.parseNEvents(dataInputStream, 2);
 
@@ -227,10 +239,10 @@ public class FileStreamProtocol extends Protocol {
 
     List<byte[]> dataByteArray = parser.parseNEvents(dataInputStream, n);
 
-    // Check that result size is n. Currently just an error is logged. Maybe change to an exception
+    // Check that result size is n. Currently, just an error is logged. Maybe change to an exception
     if (dataByteArray.size() < n) {
-      logger.error("Error in File Protocol! User required: " + n + " elements but the resource just had: " +
-              dataByteArray.size());
+      logger.error("Error in File Protocol! User required: " + n + " elements but the resource just had: "
+          + dataByteArray.size());
     }
 
     for (byte[] b : dataByteArray) {
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java
index 6b6f21b6f..7fed6bcad 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java
@@ -37,7 +37,12 @@ import org.apache.streampipes.sdk.StaticProperties;
 import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
 import org.apache.streampipes.sdk.builder.adapter.ProtocolDescriptionBuilder;
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
-import org.apache.streampipes.sdk.helpers.*;
+import org.apache.streampipes.sdk.helpers.AdapterSourceType;
+import org.apache.streampipes.sdk.helpers.Alternatives;
+import org.apache.streampipes.sdk.helpers.Filetypes;
+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.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
 
@@ -74,7 +79,7 @@ public class HttpServerProtocol extends Protocol {
   public HttpServerProtocol(ProtocolDescription adapterDescription, IParser parser, IFormat format) {
     super(parser, format);
     StaticPropertyExtractor extractor =
-            StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
+        StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
     this.adapterDescription = adapterDescription;
     this.endpointId = extractor.singleValueParameter(ENDPOINT_NAME, String.class);
   }
@@ -87,27 +92,27 @@ public class HttpServerProtocol extends Protocol {
   @Override
   public ProtocolDescription declareModel() {
     return ProtocolDescriptionBuilder.create(ID)
-            .withLocales(Locales.EN)
-            .sourceType(AdapterSourceType.STREAM)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .category(AdapterType.Generic)
-            .requiredTextParameter(Labels.withId(ENDPOINT_NAME))
-            .requiredAlternatives(Labels.withId(CONFIGURE),
-                    Alternatives.from(Labels.withId(MANUALLY),
-                            StaticProperties.collection(Labels.withId(EP_CONFIG),
-                                    StaticProperties.stringFreeTextProperty(Labels.withId(EP_RUNTIME_NAME)),
-                                    StaticProperties.singleValueSelection(Labels.withId(EP_RUNTIME_TYPE),
-                                            Options.from("String", "Integer", "Double", "Boolean")),
-                                    StaticProperties.stringFreeTextProperty(Labels.withId(EP_DOMAIN_PROPERTY)))),
-                    Alternatives.from(Labels.withId(FILE_IMPORT),
-                            StaticProperties.fileProperty(Labels.withId(FILE), Filetypes.CSV, Filetypes.JSON, Filetypes.XML)))
-            .build();
+        .withLocales(Locales.EN)
+        .sourceType(AdapterSourceType.STREAM)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .category(AdapterType.Generic)
+        .requiredTextParameter(Labels.withId(ENDPOINT_NAME))
+        .requiredAlternatives(Labels.withId(CONFIGURE),
+            Alternatives.from(Labels.withId(MANUALLY),
+                StaticProperties.collection(Labels.withId(EP_CONFIG),
+                    StaticProperties.stringFreeTextProperty(Labels.withId(EP_RUNTIME_NAME)),
+                    StaticProperties.singleValueSelection(Labels.withId(EP_RUNTIME_TYPE),
+                        Options.from("String", "Integer", "Double", "Boolean")),
+                    StaticProperties.stringFreeTextProperty(Labels.withId(EP_DOMAIN_PROPERTY)))),
+            Alternatives.from(Labels.withId(FILE_IMPORT),
+                StaticProperties.fileProperty(Labels.withId(FILE), Filetypes.CSV, Filetypes.JSON, Filetypes.XML)))
+        .build();
   }
 
   @Override
   public GuessSchema getGuessSchema() throws ParseException {
     StaticPropertyExtractor extractor =
-            StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
+        StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
     GuessSchemaBuilder schemaBuilder = GuessSchemaBuilder.create();
 
     String selectedImportMode = extractor.selectedAlternativeInternalId(CONFIGURE);
@@ -117,7 +122,7 @@ public class HttpServerProtocol extends Protocol {
 
       for (StaticProperty member : sp.getMembers()) {
         StaticPropertyExtractor memberExtractor =
-                StaticPropertyExtractor.from(((StaticPropertyGroup) member).getStaticProperties(), new ArrayList<>());
+            StaticPropertyExtractor.from(((StaticPropertyGroup) member).getStaticProperties(), new ArrayList<>());
         schemaBuilder.property(makeProperty(memberExtractor));
       }
     }
@@ -130,8 +135,8 @@ public class HttpServerProtocol extends Protocol {
     primitive.setRuntimeName(memberExtractor.singleValueParameter(EP_RUNTIME_NAME, String.class));
     primitive.setRuntimeType(extractRuntimeType(memberExtractor.selectedSingleValue(EP_RUNTIME_TYPE, String.class)));
     primitive
-            .setDomainProperties(Collections
-                    .singletonList(URI.create(memberExtractor.singleValueParameter(EP_DOMAIN_PROPERTY, String.class))));
+        .setDomainProperties(Collections
+            .singletonList(URI.create(memberExtractor.singleValueParameter(EP_DOMAIN_PROPERTY, String.class))));
     return primitive;
   }
 
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpStreamProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpStreamProtocol.java
index be6882957..1a674f7cd 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpStreamProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpStreamProtocol.java
@@ -18,17 +18,12 @@
 
 package org.apache.streampipes.connect.iiot.protocol.stream;
 
-import org.apache.http.client.fluent.Request;
-import org.apache.streampipes.connect.api.IParser;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.connect.adapter.guess.SchemaGuesser;
-import org.apache.streampipes.connect.api.IFormat;
 import org.apache.streampipes.connect.adapter.model.generic.Protocol;
 import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
+import org.apache.streampipes.connect.api.IFormat;
+import org.apache.streampipes.connect.api.IParser;
+import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.grounding.ProtocolDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -36,6 +31,12 @@ import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.sdk.builder.adapter.ProtocolDescriptionBuilder;
 import org.apache.streampipes.sdk.helpers.AdapterSourceType;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
+
+import org.apache.http.client.fluent.Request;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -44,121 +45,120 @@ import java.util.Map;
 
 public class HttpStreamProtocol extends PullProtocol {
 
-    Logger logger = LoggerFactory.getLogger(HttpStreamProtocol.class);
-
-    public static final String ID = "org.apache.streampipes.connect.iiot.protocol.stream.http";
+  Logger logger = LoggerFactory.getLogger(HttpStreamProtocol.class);
 
-    private static String URL_PROPERTY ="url";
-    private static String INTERVAL_PROPERTY ="interval";
-    private static String ACCESS_TOKEN_PROPERTY ="access_token";
+  public static final String ID = "org.apache.streampipes.connect.iiot.protocol.stream.http";
 
-    private String url;
-    private String accessToken;
+  private static final String URL_PROPERTY = "url";
+  private static final String INTERVAL_PROPERTY = "interval";
+  private static final String ACCESS_TOKEN_PROPERTY = "access_token";
 
-    public HttpStreamProtocol() {
-    }
+  private String url;
+  private String accessToken;
 
+  public HttpStreamProtocol() {
+  }
 
 
-    public HttpStreamProtocol(IParser parser, IFormat format, String url, long interval, String accessToken) {
-        super(parser, format, interval);
-        this.url = url;
-        this.accessToken = accessToken;
-    }
+  public HttpStreamProtocol(IParser parser, IFormat format, String url, long interval, String accessToken) {
+    super(parser, format, interval);
+    this.url = url;
+    this.accessToken = accessToken;
+  }
 
-    @Override
-    public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
-        ParameterExtractor extractor = new ParameterExtractor(protocolDescription.getConfig());
+  @Override
+  public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
+    ParameterExtractor extractor = new ParameterExtractor(protocolDescription.getConfig());
 
-        String urlProperty = extractor.singleValue(URL_PROPERTY);
-        try {
-            long intervalProperty = Long.parseLong(extractor.singleValue(INTERVAL_PROPERTY));
-            // TODO change access token to an optional parameter
+    String urlProperty = extractor.singleValue(URL_PROPERTY);
+    try {
+      long intervalProperty = Long.parseLong(extractor.singleValue(INTERVAL_PROPERTY));
+      // TODO change access token to an optional parameter
 //            String accessToken = extractor.singleValue(ACCESS_TOKEN_PROPERTY);
-            String accessToken = "";
-            return new HttpStreamProtocol(parser, format, urlProperty, intervalProperty, accessToken);
-        } catch (NumberFormatException e) {
-            logger.error("Could not parse" + extractor.singleValue(INTERVAL_PROPERTY) + "to int");
-            return null;
-        }
-
+      String accessToken = "";
+      return new HttpStreamProtocol(parser, format, urlProperty, intervalProperty, accessToken);
+    } catch (NumberFormatException e) {
+      logger.error("Could not parse" + extractor.singleValue(INTERVAL_PROPERTY) + "to int");
+      return null;
     }
 
-    @Override
-    public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .sourceType(AdapterSourceType.STREAM)
-                .category(AdapterType.Generic)
-                .requiredTextParameter(Labels.withId(URL_PROPERTY))
-                .requiredIntegerParameter(Labels.withId(INTERVAL_PROPERTY))
-                //.requiredTextParameter(Labels.from(ACCESS_TOKEN_PROPERTY, "Access Token", "Http
-                // Access Token"))
-                .build();
+  }
+
+  @Override
+  public ProtocolDescription declareModel() {
+    return ProtocolDescriptionBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .sourceType(AdapterSourceType.STREAM)
+        .category(AdapterType.Generic)
+        .requiredTextParameter(Labels.withId(URL_PROPERTY))
+        .requiredIntegerParameter(Labels.withId(INTERVAL_PROPERTY))
+        //.requiredTextParameter(Labels.from(ACCESS_TOKEN_PROPERTY, "Access Token", "Http
+        // Access Token"))
+        .build();
+  }
+
+  @Override
+  public GuessSchema getGuessSchema() throws ParseException {
+    int n = 2;
+
+    InputStream dataInputStream = getDataFromEndpoint();
+
+    List<byte[]> dataByte = parser.parseNEvents(dataInputStream, n);
+    if (dataByte.size() < n) {
+      logger.error("Error in HttpStreamProtocol! Required: " + n + " elements but the resource just had: "
+          + dataByte.size());
+
+      dataByte.addAll(dataByte);
     }
+    EventSchema eventSchema = parser.getEventSchema(dataByte);
+    GuessSchema result = SchemaGuesser.guessSchema(eventSchema);
 
-    @Override
-    public GuessSchema getGuessSchema() throws ParseException {
-        int n = 2;
+    return result;
+  }
 
-        InputStream dataInputStream = getDataFromEndpoint();
+  @Override
+  public List<Map<String, Object>> getNElements(int n) throws ParseException {
+    List<Map<String, Object>> result = new ArrayList<>();
 
-        List<byte[]> dataByte = parser.parseNEvents(dataInputStream, n);
-        if (dataByte.size() < n) {
-            logger.error("Error in HttpStreamProtocol! Required: " + n + " elements but the resource just had: " +
-                    dataByte.size());
+    InputStream dataInputStream = getDataFromEndpoint();
 
-            dataByte.addAll(dataByte);
-        }
-        EventSchema eventSchema= parser.getEventSchema(dataByte);
-        GuessSchema result = SchemaGuesser.guessSchema(eventSchema);
+    List<byte[]> dataByte = parser.parseNEvents(dataInputStream, n);
 
-        return result;
+    // Check that result size is n. Currently just an error is logged. Maybe change to an exception
+    if (dataByte.size() < n) {
+      logger.error("Error in HttpStreamProtocol! User required: " + n + " elements but the resource just had: "
+          + dataByte.size());
     }
 
-    @Override
-    public List<Map<String, Object>> getNElements(int n) throws ParseException {
-        List<Map<String, Object>> result = new ArrayList<>();
-
-        InputStream dataInputStream = getDataFromEndpoint();
-
-        List<byte[]> dataByte = parser.parseNEvents(dataInputStream, n);
-
-        // Check that result size is n. Currently just an error is logged. Maybe change to an exception
-        if (dataByte.size() < n) {
-            logger.error("Error in HttpStreamProtocol! User required: " + n + " elements but the resource just had: " +
-                    dataByte.size());
-        }
-
-        for (byte[] b : dataByte) {
-            result.add(format.parse(b));
-        }
-
-        return result;
+    for (byte[] b : dataByte) {
+      result.add(format.parse(b));
     }
 
+    return result;
+  }
 
-    @Override
-    public String getId() {
-        return ID;
-    }
 
-    @Override
-    public InputStream getDataFromEndpoint() throws ParseException {
-        InputStream result = null;
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  @Override
+  public InputStream getDataFromEndpoint() throws ParseException {
+    InputStream result = null;
 
-        try {
-            Request request = Request.Get(url)
-                    .connectTimeout(1000)
-                    .socketTimeout(100000);
+    try {
+      Request request = Request.Get(url)
+          .connectTimeout(1000)
+          .socketTimeout(100000);
 
-            if (this.accessToken != null && !this.accessToken.equals("")) {
-                request.setHeader("Authorization", "Bearer " + this.accessToken);
-            }
+      if (this.accessToken != null && !this.accessToken.equals("")) {
+        request.setHeader("Authorization", "Bearer " + this.accessToken);
+      }
 
-            result = request
-                    .execute().returnContent().asStream();
+      result = request
+          .execute().returnContent().asStream();
 
 //            if (s.startsWith("ï")) {
 //                s = s.substring(3);
@@ -166,14 +166,15 @@ public class HttpStreamProtocol extends PullProtocol {
 
 //            result = IOUtils.toInputStream(s, "UTF-8");
 
-        } catch (Exception e) {
-            logger.error("Error while fetching data from URL: " + url, e);
-            throw new ParseException("Error while fetching data from URL: " + url);
+    } catch (Exception e) {
+      logger.error("Error while fetching data from URL: " + url, e);
+      throw new ParseException("Error while fetching data from URL: " + url);
 //            throw new AdapterException();
-        }
-        if (result == null)
-            throw new ParseException("Could not receive Data from file: " + url);
-
-        return result;
     }
+    if (result == null) {
+      throw new ParseException("Could not receive Data from file: " + url);
+    }
+
+    return result;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/KafkaProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/KafkaProtocol.java
index cdc8cb492..18aed7d12 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/KafkaProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/KafkaProtocol.java
@@ -18,11 +18,7 @@
 
 package org.apache.streampipes.connect.iiot.protocol.stream;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.kafka.clients.consumer.*;
-import org.apache.kafka.common.KafkaException;
-import org.apache.kafka.common.TopicPartition;
-import org.apache.kafka.common.serialization.ByteArrayDeserializer;
+
 import org.apache.streampipes.commons.constants.GlobalStreamPipesConstants;
 import org.apache.streampipes.commons.exceptions.SpConfigurationException;
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
@@ -50,220 +46,237 @@ import org.apache.streampipes.sdk.helpers.AdapterSourceType;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.clients.consumer.ConsumerRebalanceListener;
+import org.apache.kafka.clients.consumer.ConsumerRecords;
+import org.apache.kafka.clients.consumer.KafkaConsumer;
+import org.apache.kafka.common.KafkaException;
+import org.apache.kafka.common.TopicPartition;
+import org.apache.kafka.common.serialization.ByteArrayDeserializer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 public class KafkaProtocol extends BrokerProtocol implements SupportsRuntimeConfig {
 
-    Logger logger = LoggerFactory.getLogger(KafkaProtocol.class);
-    KafkaConfig config;
+  Logger logger = LoggerFactory.getLogger(KafkaProtocol.class);
+  KafkaConfig config;
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.protocol.stream.kafka";
+  public static final String ID = "org.apache.streampipes.connect.iiot.protocol.stream.kafka";
 
-    private Thread thread;
-    private SpKafkaConsumer kafkaConsumer;
+  private Thread thread;
+  private SpKafkaConsumer kafkaConsumer;
 
-    public KafkaProtocol() {
-    }
+  public KafkaProtocol() {
+  }
 
-    public KafkaProtocol(IParser parser, IFormat format, KafkaConfig config) {
-        super(parser, format, config.getKafkaHost() + ":" + config.getKafkaPort(), config.getTopic());
-        this.config = config;
-    }
+  public KafkaProtocol(IParser parser, IFormat format, KafkaConfig config) {
+    super(parser, format, config.getKafkaHost() + ":" + config.getKafkaPort(), config.getTopic());
+    this.config = config;
+  }
 
-    @Override
-    public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
-        StaticPropertyExtractor extractor = StaticPropertyExtractor
-                .from(protocolDescription.getConfig(), new ArrayList<>());
-        this.config = KafkaConnectUtils.getConfig(extractor, true);
+  @Override
+  public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
+    StaticPropertyExtractor extractor = StaticPropertyExtractor
+        .from(protocolDescription.getConfig(), new ArrayList<>());
+    this.config = KafkaConnectUtils.getConfig(extractor, true);
 
-        return new KafkaProtocol(parser, format, config);
-    }
+    return new KafkaProtocol(parser, format, config);
+  }
 
-    @Override
-    public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .category(AdapterType.Generic, AdapterType.Manufacturing)
-                .sourceType(AdapterSourceType.STREAM)
-
-                .requiredAlternatives(Labels.withId(KafkaConnectUtils.ACCESS_MODE),
-                        KafkaConnectUtils.getAlternativeUnauthenticatedPlain(),
-                        KafkaConnectUtils.getAlternativeUnauthenticatedSSL(),
-                        KafkaConnectUtils.getAlternativesSaslPlain(),
-                        KafkaConnectUtils.getAlternativesSaslSSL())
-
-                .requiredTextParameter(KafkaConnectUtils.getHostLabel())
-                .requiredIntegerParameter(KafkaConnectUtils.getPortLabel())
-
-                .requiredSlideToggle(KafkaConnectUtils.getHideInternalTopicsLabel(), true)
-
-                .requiredSingleValueSelectionFromContainer(KafkaConnectUtils.getTopicLabel(), Arrays.asList(
-                        KafkaConnectUtils.HOST_KEY,
-                        KafkaConnectUtils.PORT_KEY))
-                .build();
-    }
+  @Override
+  public ProtocolDescription declareModel() {
+    return ProtocolDescriptionBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Generic, AdapterType.Manufacturing)
+        .sourceType(AdapterSourceType.STREAM)
 
-    @Override
-    protected List<byte[]> getNByteElements(int n) throws ParseException {
-        final Consumer<byte[], byte[]> consumer;
+        .requiredAlternatives(Labels.withId(KafkaConnectUtils.ACCESS_MODE),
+            KafkaConnectUtils.getAlternativeUnauthenticatedPlain(),
+            KafkaConnectUtils.getAlternativeUnauthenticatedSSL(),
+            KafkaConnectUtils.getAlternativesSaslPlain(),
+            KafkaConnectUtils.getAlternativesSaslSSL())
+
+        .requiredTextParameter(KafkaConnectUtils.getHostLabel())
+        .requiredIntegerParameter(KafkaConnectUtils.getPortLabel())
+
+        .requiredSlideToggle(KafkaConnectUtils.getHideInternalTopicsLabel(), true)
 
-        consumer = createConsumer(this.config);
-        consumer.subscribe(Arrays.asList(this.topic), new ConsumerRebalanceListener() {
-            @Override
-            public void onPartitionsRevoked(Collection<TopicPartition> collection) {
+        .requiredSingleValueSelectionFromContainer(KafkaConnectUtils.getTopicLabel(), Arrays.asList(
+            KafkaConnectUtils.HOST_KEY,
+            KafkaConnectUtils.PORT_KEY))
+        .build();
+  }
 
-            }
+  @Override
+  protected List<byte[]> getNByteElements(int n) throws ParseException {
+    final Consumer<byte[], byte[]> consumer;
 
-            @Override
-            public void onPartitionsAssigned(Collection<TopicPartition> collection) {
-                consumer.seekToBeginning(collection);
-            }
-        });
+    consumer = createConsumer(this.config);
+    consumer.subscribe(Arrays.asList(this.topic), new ConsumerRebalanceListener() {
+      @Override
+      public void onPartitionsRevoked(Collection<TopicPartition> collection) {
 
-        List<byte[]> nEventsByte = new ArrayList<>();
-        List<byte[]> resultEventsByte;
+      }
 
+      @Override
+      public void onPartitionsAssigned(Collection<TopicPartition> collection) {
+        consumer.seekToBeginning(collection);
+      }
+    });
 
-        while (true) {
-            final ConsumerRecords<byte[], byte[]> consumerRecords =
-                    consumer.poll(1000);
+    List<byte[]> nEventsByte = new ArrayList<>();
+    List<byte[]> resultEventsByte;
 
-            consumerRecords.forEach(record -> {
-                InputStream inputStream = new ByteArrayInputStream(record.value());
 
-                nEventsByte.addAll(parser.parseNEvents(inputStream, n));
-            });
+    while (true) {
+      final ConsumerRecords<byte[], byte[]> consumerRecords =
+          consumer.poll(1000);
 
-            if (nEventsByte.size() > n) {
-                resultEventsByte = nEventsByte.subList(0, n);
-                break;
-            } else if (nEventsByte.size() == n) {
-                resultEventsByte = nEventsByte;
-                break;
-            }
+      consumerRecords.forEach(record -> {
+        InputStream inputStream = new ByteArrayInputStream(record.value());
 
-            consumer.commitAsync();
-        }
+        nEventsByte.addAll(parser.parseNEvents(inputStream, n));
+      });
 
-        consumer.close();
+      if (nEventsByte.size() > n) {
+        resultEventsByte = nEventsByte.subList(0, n);
+        break;
+      } else if (nEventsByte.size() == n) {
+        resultEventsByte = nEventsByte;
+        break;
+      }
 
-        return resultEventsByte;
+      consumer.commitAsync();
     }
 
-    private Consumer<byte[], byte[]> createConsumer(KafkaConfig kafkaConfig) throws KafkaException {
-        final Properties props = new Properties();
+    consumer.close();
 
-        kafkaConfig.getSecurityConfig().appendConfig(props);
+    return resultEventsByte;
+  }
 
-        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
-                kafkaConfig.getKafkaHost() + ":" + kafkaConfig.getKafkaPort());
+  private Consumer<byte[], byte[]> createConsumer(KafkaConfig kafkaConfig) throws KafkaException {
+    final Properties props = new Properties();
 
-        props.put(ConsumerConfig.GROUP_ID_CONFIG,
-                "KafkaExampleConsumer" + System.currentTimeMillis());
+    kafkaConfig.getSecurityConfig().appendConfig(props);
 
-        props.put(ConsumerConfig.DEFAULT_API_TIMEOUT_MS_CONFIG, 6000);
+    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
+        kafkaConfig.getKafkaHost() + ":" + kafkaConfig.getKafkaPort());
 
-        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
-                ByteArrayDeserializer.class.getName());
-        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
-                ByteArrayDeserializer.class.getName());
+    props.put(ConsumerConfig.GROUP_ID_CONFIG,
+        "KafkaExampleConsumer" + System.currentTimeMillis());
 
-        // Create the consumer using props.
-        final Consumer<byte[], byte[]> consumer =
-                new KafkaConsumer<>(props);
+    props.put(ConsumerConfig.DEFAULT_API_TIMEOUT_MS_CONFIG, 6000);
 
-        return consumer;
-    }
+    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
+        ByteArrayDeserializer.class.getName());
+    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
+        ByteArrayDeserializer.class.getName());
 
+    // Create the consumer using props.
+    final Consumer<byte[], byte[]> consumer =
+        new KafkaConsumer<>(props);
 
-    @Override
-    public void run(IAdapterPipeline adapterPipeline) {
-        SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
-        KafkaTransportProtocol protocol = new KafkaTransportProtocol();
-        protocol.setKafkaPort(config.getKafkaPort());
-        protocol.setBrokerHostname(config.getKafkaHost());
-        protocol.setTopicDefinition(new SimpleTopicDefinition(topic));
-
-        this.kafkaConsumer = new SpKafkaConsumer(protocol,
-                config.getTopic(),
-                new EventProcessor(stk),
-                Arrays.asList(this.config.getSecurityConfig()));
-
-        thread = new Thread(this.kafkaConsumer);
-        thread.start();
+    return consumer;
+  }
+
+
+  @Override
+  public void run(IAdapterPipeline adapterPipeline) {
+    SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
+    KafkaTransportProtocol protocol = new KafkaTransportProtocol();
+    protocol.setKafkaPort(config.getKafkaPort());
+    protocol.setBrokerHostname(config.getKafkaHost());
+    protocol.setTopicDefinition(new SimpleTopicDefinition(topic));
+
+    this.kafkaConsumer = new SpKafkaConsumer(protocol,
+        config.getTopic(),
+        new EventProcessor(stk),
+        Arrays.asList(this.config.getSecurityConfig()));
+
+    thread = new Thread(this.kafkaConsumer);
+    thread.start();
+  }
+
+  @Override
+  public void stop() {
+    try {
+      kafkaConsumer.disconnect();
+    } catch (SpRuntimeException e) {
+      e.printStackTrace();
     }
 
-    @Override
-    public void stop() {
-        try {
-            kafkaConsumer.disconnect();
-        } catch (SpRuntimeException e) {
-            e.printStackTrace();
-        }
-
-        try {
-            Thread.sleep(5000);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-        logger.info("Kafka Adapter was sucessfully stopped");
-        thread.interrupt();
+    try {
+      Thread.sleep(5000);
+    } catch (InterruptedException e) {
+      e.printStackTrace();
     }
 
-    @Override
-    public StaticProperty resolveConfiguration(String staticPropertyInternalName, StaticPropertyExtractor extractor) throws SpConfigurationException {
-        RuntimeResolvableOneOfStaticProperty config = extractor
-          .getStaticPropertyByName(KafkaConnectUtils.TOPIC_KEY, RuntimeResolvableOneOfStaticProperty.class);
-        KafkaConfig kafkaConfig = KafkaConnectUtils.getConfig(extractor, false);
-        boolean hideInternalTopics = extractor.slideToggleValue(KafkaConnectUtils.getHideInternalTopicsKey());
-
-        try {
-            Consumer<byte[], byte[]> consumer = createConsumer(kafkaConfig);
-            Set<String> topics = consumer.listTopics().keySet();
-            consumer.close();
-
-            if (hideInternalTopics) {
-                topics = topics
-                  .stream()
-                  .filter(t -> !t.startsWith(GlobalStreamPipesConstants.INTERNAL_TOPIC_PREFIX))
-                  .collect(Collectors.toSet());
-            }
-
-            config.setOptions(topics.stream().map(Option::new).collect(Collectors.toList()));
-
-            return config;
-        } catch (KafkaException e) {
-            throw new SpConfigurationException(e.getMessage(), e);
-        }
+    logger.info("Kafka Adapter was sucessfully stopped");
+    thread.interrupt();
+  }
+
+  @Override
+  public StaticProperty resolveConfiguration(String staticPropertyInternalName, StaticPropertyExtractor extractor)
+      throws SpConfigurationException {
+    RuntimeResolvableOneOfStaticProperty config = extractor
+        .getStaticPropertyByName(KafkaConnectUtils.TOPIC_KEY, RuntimeResolvableOneOfStaticProperty.class);
+    KafkaConfig kafkaConfig = KafkaConnectUtils.getConfig(extractor, false);
+    boolean hideInternalTopics = extractor.slideToggleValue(KafkaConnectUtils.getHideInternalTopicsKey());
+
+    try {
+      Consumer<byte[], byte[]> consumer = createConsumer(kafkaConfig);
+      Set<String> topics = consumer.listTopics().keySet();
+      consumer.close();
+
+      if (hideInternalTopics) {
+        topics = topics
+            .stream()
+            .filter(t -> !t.startsWith(GlobalStreamPipesConstants.INTERNAL_TOPIC_PREFIX))
+            .collect(Collectors.toSet());
+      }
+
+      config.setOptions(topics.stream().map(Option::new).collect(Collectors.toList()));
+
+      return config;
+    } catch (KafkaException e) {
+      throw new SpConfigurationException(e.getMessage(), e);
     }
+  }
+
 
+  private class EventProcessor implements InternalEventProcessor<byte[]> {
+    private SendToPipeline stk;
 
-    private class EventProcessor implements InternalEventProcessor<byte[]> {
-        private SendToPipeline stk;
-        public EventProcessor(SendToPipeline stk) {
-            this.stk = stk;
-        }
-
-        @Override
-        public void onEvent(byte[] payload) {
-            try {
-                parser.parse(IOUtils.toInputStream(new String(payload), "UTF-8"), stk);
-            } catch (ParseException e) {
-                logger.error("Error while parsing: " + e.getMessage());
-        }
-        }
+    public EventProcessor(SendToPipeline stk) {
+      this.stk = stk;
     }
 
     @Override
-    public String getId() {
-        return ID;
+    public void onEvent(byte[] payload) {
+      try {
+        parser.parse(IOUtils.toInputStream(new String(payload), "UTF-8"), stk);
+      } catch (ParseException e) {
+        logger.error("Error while parsing: " + e.getMessage());
+      }
     }
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/MqttProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/MqttProtocol.java
index 2f1804dd9..3014d13f0 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/MqttProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/MqttProtocol.java
@@ -58,7 +58,7 @@ public class MqttProtocol extends BrokerProtocol {
   public Protocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
     MqttConfig mqttConfig;
     StaticPropertyExtractor extractor =
-            StaticPropertyExtractor.from(protocolDescription.getConfig(), new ArrayList<>());
+        StaticPropertyExtractor.from(protocolDescription.getConfig(), new ArrayList<>());
 
     mqttConfig = MqttConnectUtils.getMqttConfig(extractor);
 
@@ -68,14 +68,15 @@ public class MqttProtocol extends BrokerProtocol {
   @Override
   public ProtocolDescription declareModel() {
     return ProtocolDescriptionBuilder.create(ID)
-            .withLocales(Locales.EN)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .category(AdapterType.Generic, AdapterType.Manufacturing)
-            .sourceType(AdapterSourceType.STREAM)
-            .requiredTextParameter(MqttConnectUtils.getBrokerUrlLabel())
-            .requiredAlternatives(MqttConnectUtils.getAccessModeLabel(), MqttConnectUtils.getAlternativesOne(), MqttConnectUtils.getAlternativesTwo())
-            .requiredTextParameter(MqttConnectUtils.getTopicLabel())
-            .build();
+        .withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .category(AdapterType.Generic, AdapterType.Manufacturing)
+        .sourceType(AdapterSourceType.STREAM)
+        .requiredTextParameter(MqttConnectUtils.getBrokerUrlLabel())
+        .requiredAlternatives(MqttConnectUtils.getAccessModeLabel(), MqttConnectUtils.getAlternativesOne(),
+            MqttConnectUtils.getAlternativesTwo())
+        .requiredTextParameter(MqttConnectUtils.getTopicLabel())
+        .build();
   }
 
   @Override
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/NatsProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/NatsProtocol.java
index 2e27b007c..8df068189 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/NatsProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/NatsProtocol.java
@@ -46,7 +46,19 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.*;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.ACCESS_MODE;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.ANONYMOUS_ACCESS;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.CONNECTION_PROPERTIES;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.CONNECTION_PROPERTIES_GROUP;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.CUSTOM_PROPERTIES;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.NONE_PROPERTIES;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.PASSWORD_KEY;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.PROPERTIES_KEY;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.SUBJECT_KEY;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.URLS_KEY;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.USERNAME_ACCESS;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.USERNAME_GROUP;
+import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.USERNAME_KEY;
 
 public class NatsProtocol extends BrokerProtocol {
 
@@ -161,7 +173,7 @@ public class NatsProtocol extends BrokerProtocol {
     }
 
     int totalTimeout = 0;
-    while(!completed[0] && totalTimeout < MAX_TIMEOUT) {
+    while (!completed[0] && totalTimeout < MAX_TIMEOUT) {
       try {
         TimeUnit.MILLISECONDS.sleep(TIMEOUT);
         totalTimeout += TIMEOUT;
@@ -172,7 +184,8 @@ public class NatsProtocol extends BrokerProtocol {
     if (elements.size() > 0) {
       return elements;
     } else {
-      throw new ParseException("Did not receive any data within " + MAX_TIMEOUT / 1000 + " seconds, is this subjects currently providing data?");
+      throw new ParseException("Did not receive any data within " + MAX_TIMEOUT / 1000 +
+          " seconds, is this subjects currently providing data?");
     }
   }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/PullProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/PullProtocol.java
index ad931ef75..2f765cb35 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/PullProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/PullProtocol.java
@@ -23,76 +23,81 @@ import org.apache.streampipes.connect.api.IAdapterPipeline;
 import org.apache.streampipes.connect.api.IFormat;
 import org.apache.streampipes.connect.api.IParser;
 import org.apache.streampipes.connect.api.exception.ParseException;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.InputStream;
-import java.util.concurrent.*;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
 
 public abstract class PullProtocol extends Protocol {
 
-    private ScheduledExecutorService scheduler;
+  private ScheduledExecutorService scheduler;
 
-    private Logger logger = LoggerFactory.getLogger(PullProtocol.class);
+  private Logger logger = LoggerFactory.getLogger(PullProtocol.class);
 
-    private long interval;
+  private long interval;
 
 
-    public PullProtocol() {
-    }
+  public PullProtocol() {
+  }
 
-    public PullProtocol(IParser parser, IFormat format, long interval) {
-        super(parser, format);
-        this.interval = interval;
-    }
+  public PullProtocol(IParser parser, IFormat format, long interval) {
+    super(parser, format);
+    this.interval = interval;
+  }
 
-    @Override
-    public void run(IAdapterPipeline adapterPipeline) {
-        final Runnable errorThread = () -> {
-            executeProtocolLogic(adapterPipeline);
-        };
+  @Override
+  public void run(IAdapterPipeline adapterPipeline) {
+    final Runnable errorThread = () -> {
+      executeProtocolLogic(adapterPipeline);
+    };
 
 
-        scheduler = Executors.newScheduledThreadPool(1);
-        scheduler.schedule(errorThread, 0, TimeUnit.MILLISECONDS);
+    scheduler = Executors.newScheduledThreadPool(1);
+    scheduler.schedule(errorThread, 0, TimeUnit.MILLISECONDS);
+
+  }
 
-    }
 
+  private void executeProtocolLogic(IAdapterPipeline adapterPipeline) {
+    final Runnable task = () -> {
 
-    private void executeProtocolLogic(IAdapterPipeline adapterPipeline) {
-         final Runnable task = () -> {
-
-            format.reset();
-            SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
-            try {
-                InputStream data = getDataFromEndpoint();
-                if(data != null) {
-                    parser.parse(data, stk);
-                } else {
-                    logger.warn("Could not receive data from Endpoint. Try again in " + interval + " seconds.");
-                }
-            } catch (ParseException e) {
-                logger.error("Error while parsing: " + e.getMessage());
-            }
-
-
-        };
-
-        scheduler = Executors.newScheduledThreadPool(1);
-        ScheduledFuture<?> handle = scheduler.scheduleAtFixedRate(task, 1, interval, TimeUnit.SECONDS);
-        try {
-            handle.get();
-        } catch (ExecutionException e ) {
-            logger.error("Error", e);
-        } catch (InterruptedException e) {
-            logger.error("Error", e);
+      format.reset();
+      SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
+      try {
+        InputStream data = getDataFromEndpoint();
+        if (data != null) {
+          parser.parse(data, stk);
+        } else {
+          logger.warn("Could not receive data from Endpoint. Try again in " + interval + " seconds.");
         }
-    }
+      } catch (ParseException e) {
+        logger.error("Error while parsing: " + e.getMessage());
+      }
+
 
-    @Override
-    public void stop() {
-        scheduler.shutdownNow();
+    };
+
+    scheduler = Executors.newScheduledThreadPool(1);
+    ScheduledFuture<?> handle = scheduler.scheduleAtFixedRate(task, 1, interval, TimeUnit.SECONDS);
+    try {
+      handle.get();
+    } catch (ExecutionException e) {
+      logger.error("Error", e);
+    } catch (InterruptedException e) {
+      logger.error("Error", e);
     }
+  }
+
+  @Override
+  public void stop() {
+    scheduler.shutdownNow();
+  }
 
-    abstract InputStream getDataFromEndpoint() throws ParseException;
+  abstract InputStream getDataFromEndpoint() throws ParseException;
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarProtocol.java
index 9e24d5bde..cd5bf1674 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarProtocol.java
@@ -17,17 +17,6 @@
  */
 package org.apache.streampipes.connect.iiot.protocol.stream.pulsar;
 
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.pulsar.client.api.Consumer;
-import org.apache.pulsar.client.api.Message;
-import org.apache.pulsar.client.api.MessageId;
-import org.apache.pulsar.client.api.MessageListener;
-import org.apache.pulsar.client.api.PulsarClient;
-import org.apache.pulsar.client.api.PulsarClientException;
-import org.apache.pulsar.client.api.Reader;
-
 import org.apache.streampipes.commons.exceptions.SpConfigurationException;
 import org.apache.streampipes.connect.SendToPipeline;
 import org.apache.streampipes.connect.adapter.model.generic.Protocol;
@@ -48,11 +37,20 @@ import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
 
+import org.apache.pulsar.client.api.Consumer;
+import org.apache.pulsar.client.api.Message;
+import org.apache.pulsar.client.api.MessageId;
+import org.apache.pulsar.client.api.MessageListener;
+import org.apache.pulsar.client.api.PulsarClient;
+import org.apache.pulsar.client.api.PulsarClientException;
+import org.apache.pulsar.client.api.Reader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 public class PulsarProtocol extends BrokerProtocol implements SupportsRuntimeConfig {
 
@@ -82,9 +80,9 @@ public class PulsarProtocol extends BrokerProtocol implements SupportsRuntimeCon
     List<byte[]> elements = new ArrayList<>();
     try (PulsarClient pulsarClient = PulsarUtils.makePulsarClient(brokerUrl);
          Reader<byte[]> reader = pulsarClient.newReader()
-                 .topic(topic)
-                 .startMessageId(MessageId.earliest)
-                 .create()) {
+             .topic(topic)
+             .startMessageId(MessageId.earliest)
+             .create()) {
       int readCount = 0;
       while (readCount < n) {
         Message<byte[]> message = reader.readNext(1, TimeUnit.SECONDS);
@@ -115,15 +113,15 @@ public class PulsarProtocol extends BrokerProtocol implements SupportsRuntimeCon
   @Override
   public ProtocolDescription declareModel() {
     return ProtocolDescriptionBuilder.create(ID)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .withLocales(Locales.EN)
-            .category(AdapterType.Generic)
-            .sourceType(AdapterSourceType.STREAM)
-            .requiredTextParameter(Labels.withId(PULSAR_BROKER_HOST))
-            .requiredIntegerParameter(Labels.withId(PULSAR_BROKER_PORT), 6650)
-            .requiredTextParameter(Labels.withId(PULSAR_TOPIC))
-            .requiredTextParameter(Labels.withId(PULSAR_SUBSCRIPTION_NAME))
-            .build();
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Generic)
+        .sourceType(AdapterSourceType.STREAM)
+        .requiredTextParameter(Labels.withId(PULSAR_BROKER_HOST))
+        .requiredIntegerParameter(Labels.withId(PULSAR_BROKER_PORT), 6650)
+        .requiredTextParameter(Labels.withId(PULSAR_TOPIC))
+        .requiredTextParameter(Labels.withId(PULSAR_SUBSCRIPTION_NAME))
+        .build();
   }
 
   @Override
@@ -136,15 +134,15 @@ public class PulsarProtocol extends BrokerProtocol implements SupportsRuntimeCon
       }
       PulsarClient client = PulsarUtils.makePulsarClient(brokerUrl);
       consumer = client.newConsumer()
-              .topic(topic)
-              .subscriptionName(subscriptionName)
-              .messageListener((MessageListener<byte[]>) (consumer, msg) -> {
-                try {
-                  stk.emit(msg.getValue());
-                } catch (ParseException e) {
-                  LOG.error("Failed to parse message.", e);
-                }
-              }).subscribe();
+          .topic(topic)
+          .subscriptionName(subscriptionName)
+          .messageListener((MessageListener<byte[]>) (consumer, msg) -> {
+            try {
+              stk.emit(msg.getValue());
+            } catch (ParseException e) {
+              LOG.error("Failed to parse message.", e);
+            }
+          }).subscribe();
     } catch (PulsarClientException e) {
       throw new RuntimeException(e);
     }
@@ -152,7 +150,7 @@ public class PulsarProtocol extends BrokerProtocol implements SupportsRuntimeCon
 
   @Override
   public void stop() {
-    if(consumer != null) {
+    if (consumer != null) {
       try {
         consumer.close();
       } catch (PulsarClientException e) {
@@ -168,8 +166,9 @@ public class PulsarProtocol extends BrokerProtocol implements SupportsRuntimeCon
   }
 
   @Override
-  public StaticProperty resolveConfiguration(String staticPropertyInternalName, StaticPropertyExtractor extractor) throws
-          SpConfigurationException {
+  public StaticProperty resolveConfiguration(String staticPropertyInternalName, StaticPropertyExtractor extractor)
+      throws
+      SpConfigurationException {
     String brokerHost = extractor.singleValueParameter(PULSAR_BROKER_HOST, String.class);
     Integer brokerPort = extractor.singleValueParameter(PULSAR_BROKER_PORT, Integer.class);
 
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarUtils.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarUtils.java
index 6bf062db5..9df4e494e 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarUtils.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarUtils.java
@@ -27,7 +27,7 @@ public class PulsarUtils {
   public static PulsarClient makePulsarClient(String brokerHostname) throws PulsarClientException {
     String serviceUrl = PULSAR_SCHEME + brokerHostname;
     return PulsarClient.builder()
-            .serviceUrl(serviceUrl)
-            .build();
+        .serviceUrl(serviceUrl)
+        .build();
   }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQConsumer.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQConsumer.java
index dbb6ab57a..43115ffcc 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQConsumer.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQConsumer.java
@@ -17,10 +17,11 @@
  */
 package org.apache.streampipes.connect.iiot.protocol.stream.rocketmq;
 
+import org.apache.streampipes.messaging.InternalEventProcessor;
+
 import org.apache.rocketmq.client.apis.ClientException;
 import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
 import org.apache.rocketmq.client.apis.consumer.PushConsumer;
-import org.apache.streampipes.messaging.InternalEventProcessor;
 
 import java.io.IOException;
 
@@ -35,7 +36,8 @@ public class RocketMQConsumer implements Runnable {
 
   private PushConsumer consumer;
 
-  public RocketMQConsumer(String brokerUrl, String topic, String consumerGroup, InternalEventProcessor<byte[]> eventProcessor) {
+  public RocketMQConsumer(String brokerUrl, String topic, String consumerGroup,
+                          InternalEventProcessor<byte[]> eventProcessor) {
     this.brokerUrl = brokerUrl;
     this.topic = topic;
     this.consumerGroup = consumerGroup;
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQProtocol.java
index 33d6cd6c8..6a280653d 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQProtocol.java
@@ -17,10 +17,7 @@
  */
 package org.apache.streampipes.connect.iiot.protocol.stream.rocketmq;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
-import org.apache.rocketmq.client.apis.consumer.PushConsumer;
+
 import org.apache.streampipes.connect.SendToPipeline;
 import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
 import org.apache.streampipes.connect.api.IAdapterPipeline;
@@ -38,6 +35,11 @@ import org.apache.streampipes.sdk.helpers.AdapterSourceType;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.rocketmq.client.apis.ClientException;
+import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
+import org.apache.rocketmq.client.apis.consumer.PushConsumer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,125 +52,126 @@ import java.util.concurrent.CountDownLatch;
 
 public class RocketMQProtocol extends BrokerProtocol {
 
-    public static final String ID = "org.apache.streampipes.connect.iiot.protocol.stream.rocketmq";
-
-    public static final String TOPIC_KEY = "rocketmq-topic";
-    public static final String ENDPOINT_KEY = "rocketmq-endpoint";
-    public static final String CONSUMER_GROUP_KEY = "rocketmq-consumer-group";
-
-    private Logger logger = LoggerFactory.getLogger(RocketMQProtocol.class);
-
-    private String consumerGroup;
-
-    private Thread thread;
-    private RocketMQConsumer rocketMQConsumer;
-
-    public RocketMQProtocol() {
+  public static final String ID = "org.apache.streampipes.connect.iiot.protocol.stream.rocketmq";
+
+  public static final String TOPIC_KEY = "rocketmq-topic";
+  public static final String ENDPOINT_KEY = "rocketmq-endpoint";
+  public static final String CONSUMER_GROUP_KEY = "rocketmq-consumer-group";
+
+  private Logger logger = LoggerFactory.getLogger(RocketMQProtocol.class);
+
+  private String consumerGroup;
+
+  private Thread thread;
+  private RocketMQConsumer rocketMQConsumer;
+
+  public RocketMQProtocol() {
+  }
+
+  public RocketMQProtocol(IParser parser, IFormat format, String brokerUrl, String topic, String consumerGroup) {
+    super(parser, format, brokerUrl, topic);
+    this.consumerGroup = consumerGroup;
+  }
+
+  @Override
+  public IProtocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
+    ParameterExtractor extractor = new ParameterExtractor(protocolDescription.getConfig());
+    String endpoint = extractor.singleValue(ENDPOINT_KEY, String.class);
+    String topic = extractor.singleValue(TOPIC_KEY, String.class);
+    String consumerGroup = extractor.singleValue(CONSUMER_GROUP_KEY, String.class);
+
+    return new RocketMQProtocol(parser, format, endpoint, topic, consumerGroup);
+  }
+
+  @Override
+  public ProtocolDescription declareModel() {
+    return ProtocolDescriptionBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Generic)
+        .sourceType(AdapterSourceType.STREAM)
+        .requiredTextParameter(Labels.withId(ENDPOINT_KEY))
+        .requiredTextParameter(Labels.withId(TOPIC_KEY))
+        .requiredTextParameter(Labels.withId(CONSUMER_GROUP_KEY))
+        .build();
+  }
+
+  @Override
+  public void run(IAdapterPipeline adapterPipeline) throws AdapterException {
+    SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
+    this.rocketMQConsumer = new RocketMQConsumer(brokerUrl, topic, consumerGroup, new EventProcessor(stk));
+
+    thread = new Thread(this.rocketMQConsumer);
+    thread.start();
+  }
+
+  @Override
+  public void stop() {
+    try {
+      rocketMQConsumer.stop();
+    } catch (IOException e) {
+      e.printStackTrace();
     }
-
-    public RocketMQProtocol(IParser parser, IFormat format, String brokerUrl, String topic, String consumerGroup) {
-        super(parser, format, brokerUrl, topic);
-        this.consumerGroup = consumerGroup;
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  @Override
+  protected List<byte[]> getNByteElements(int n) throws ParseException {
+    List<byte[]> nEventsByte = new ArrayList<>(n);
+    CountDownLatch latch = new CountDownLatch(n);
+
+    PushConsumer consumer = null;
+    try {
+      consumer = RocketMQUtils.createConsumer(brokerUrl, topic, consumerGroup, messageView -> {
+        InputStream inputStream = new ByteArrayInputStream(messageView.getBody().array());
+        nEventsByte.addAll(parser.parseNEvents(inputStream, n));
+
+        latch.countDown();
+        return ConsumeResult.SUCCESS;
+      });
+    } catch (ClientException e) {
+      e.printStackTrace();
+      try {
+        if (consumer != null) {
+          consumer.close();
+        }
+      } catch (IOException ex) {
+      }
+      throw new ParseException("Failed to fetch messages.", e);
     }
 
-    @Override
-    public IProtocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
-        ParameterExtractor extractor = new ParameterExtractor(protocolDescription.getConfig());
-        String endpoint = extractor.singleValue(ENDPOINT_KEY, String.class);
-        String topic = extractor.singleValue(TOPIC_KEY, String.class);
-        String consumerGroup = extractor.singleValue(CONSUMER_GROUP_KEY, String.class);
-
-        return new RocketMQProtocol(parser, format, endpoint, topic, consumerGroup);
+    try {
+      latch.await();
+    } catch (InterruptedException e) {
+      e.printStackTrace();
     }
-
-    @Override
-    public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .category(AdapterType.Generic)
-                .sourceType(AdapterSourceType.STREAM)
-                .requiredTextParameter(Labels.withId(ENDPOINT_KEY))
-                .requiredTextParameter(Labels.withId(TOPIC_KEY))
-                .requiredTextParameter(Labels.withId(CONSUMER_GROUP_KEY))
-                .build();
+    try {
+      consumer.close();
+    } catch (IOException e) {
+      e.printStackTrace();
     }
 
-    @Override
-    public void run(IAdapterPipeline adapterPipeline) throws AdapterException {
-        SendToPipeline stk = new SendToPipeline(format, adapterPipeline);
-        this.rocketMQConsumer = new RocketMQConsumer(brokerUrl, topic, consumerGroup, new EventProcessor(stk));
-
-        thread = new Thread(this.rocketMQConsumer);
-        thread.start();
-    }
+    return nEventsByte;
+  }
 
-    @Override
-    public void stop() {
-        try {
-            rocketMQConsumer.stop();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
+  private class EventProcessor implements InternalEventProcessor<byte[]> {
+    private SendToPipeline stk;
 
-    @Override
-    public String getId() {
-        return ID;
+    public EventProcessor(SendToPipeline stk) {
+      this.stk = stk;
     }
 
     @Override
-    protected List<byte[]> getNByteElements(int n) throws ParseException {
-        List<byte[]> nEventsByte = new ArrayList<>(n);
-        CountDownLatch latch = new CountDownLatch(n);
-
-        PushConsumer consumer = null;
-        try {
-            consumer = RocketMQUtils.createConsumer(brokerUrl, topic, consumerGroup, messageView -> {
-                InputStream inputStream = new ByteArrayInputStream(messageView.getBody().array());
-                nEventsByte.addAll(parser.parseNEvents(inputStream, n));
-
-                latch.countDown();
-                return ConsumeResult.SUCCESS;
-            });
-        } catch (ClientException e) {
-            e.printStackTrace();
-            try {
-                if (consumer != null) {
-                    consumer.close();
-                }
-            } catch (IOException ex) {
-            }
-            throw new ParseException("Failed to fetch messages.", e);
-        }
-
-        try {
-            latch.await();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        try {
-            consumer.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        return nEventsByte;
-    }
-
-    private class EventProcessor implements InternalEventProcessor<byte[]> {
-        private SendToPipeline stk;
-        public EventProcessor(SendToPipeline stk) {
-            this.stk = stk;
-        }
-
-        @Override
-        public void onEvent(byte[] payload) {
-            try {
-                parser.parse(IOUtils.toInputStream(new String(payload), "UTF-8"), stk);
-            } catch (ParseException e) {
-                logger.error("Error while parsing: " + e.getMessage());
-            }
-        }
+    public void onEvent(byte[] payload) {
+      try {
+        parser.parse(IOUtils.toInputStream(new String(payload), "UTF-8"), stk);
+      } catch (ParseException e) {
+        logger.error("Error while parsing: " + e.getMessage());
+      }
     }
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQUtils.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQUtils.java
index d21c6a29c..38426ae69 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQUtils.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQUtils.java
@@ -29,19 +29,20 @@ import java.util.Collections;
 
 public class RocketMQUtils {
 
-  public static PushConsumer createConsumer(String endpoint, String topic, String consumerGroup, MessageListener listener) throws ClientException {
+  public static PushConsumer createConsumer(String endpoint, String topic, String consumerGroup,
+                                            MessageListener listener) throws ClientException {
     ClientServiceProvider provider = ClientServiceProvider.loadService();
     ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints(endpoint)
-            .build();
+        .setEndpoints(endpoint)
+        .build();
 
     FilterExpression filterExpression = new FilterExpression("*", FilterExpressionType.TAG);
     PushConsumer consumer = provider.newPushConsumerBuilder()
-            .setClientConfiguration(clientConfiguration)
-            .setConsumerGroup(consumerGroup)
-            .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
-            .setMessageListener(listener)
-            .build();
+        .setClientConfiguration(clientConfiguration)
+        .setConsumerGroup(consumerGroup)
+        .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
+        .setMessageListener(listener)
+        .build();
     return consumer;
   }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/utils/FileProtocolUtils.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/utils/FileProtocolUtils.java
index e7e89c311..8b80d8d9e 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/utils/FileProtocolUtils.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/utils/FileProtocolUtils.java
@@ -18,52 +18,55 @@
 
 package org.apache.streampipes.connect.iiot.utils;
 
-import org.apache.commons.io.FileUtils;
 import org.apache.streampipes.client.StreamPipesClient;
 import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.service.extensions.base.client.StreamPipesClientResolver;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
 
 public class FileProtocolUtils {
 
-    public static InputStream getFileInputStream(String selectedFilename) throws FileNotFoundException {
-        if (!isFilePresent(selectedFilename)) {
-            try {
-                storeFileLocally(selectedFilename);
-            } catch (IOException e) {
-                throw new ParseException("Could not receive file");
-            }
-        }
-
-        return new FileInputStream(makeFileLoc(selectedFilename));
+  public static InputStream getFileInputStream(String selectedFilename) throws FileNotFoundException {
+    if (!isFilePresent(selectedFilename)) {
+      try {
+        storeFileLocally(selectedFilename);
+      } catch (IOException e) {
+        throw new ParseException("Could not receive file");
+      }
     }
 
-    private static boolean isFilePresent(String selectedFilename) {
-        File file = new File(makeFileLoc(selectedFilename));
-        return file.exists();
-    }
+    return new FileInputStream(makeFileLoc(selectedFilename));
+  }
 
-    private static void storeFileLocally(String selectedFilename) throws IOException {
-        File storageDir = new File(makeServiceStorageDir());
-        if (!storageDir.exists()) {
-            storageDir.mkdirs();
-        }
-        StreamPipesClient client = new StreamPipesClientResolver().makeStreamPipesClientInstance();
+  private static boolean isFilePresent(String selectedFilename) {
+    File file = new File(makeFileLoc(selectedFilename));
+    return file.exists();
+  }
 
-        client.fileApi().writeToFile(selectedFilename, makeFileLoc(selectedFilename));
+  private static void storeFileLocally(String selectedFilename) throws IOException {
+    File storageDir = new File(makeServiceStorageDir());
+    if (!storageDir.exists()) {
+      storageDir.mkdirs();
     }
+    StreamPipesClient client = new StreamPipesClientResolver().makeStreamPipesClientInstance();
 
-    private static  String makeServiceStorageDir() {
-        return System.getProperty("user.home")
-                + File.separator
-                + ".streampipes"
-                + File.separator
-                + "service";
-    }
+    client.fileApi().writeToFile(selectedFilename, makeFileLoc(selectedFilename));
+  }
 
-    private static String makeFileLoc(String filename) {
-        return makeServiceStorageDir() + File.separator + filename;
-    }
+  private static String makeServiceStorageDir() {
+    return System.getProperty("user.home")
+        + File.separator
+        + ".streampipes"
+        + File.separator
+        + "service";
+  }
+
+  private static String makeFileLoc(String filename) {
+    return makeServiceStorageDir() + File.separator + filename;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/pom.xml b/streampipes-extensions/streampipes-connect-adapters/pom.xml
index 40c2f3f43..140000153 100644
--- a/streampipes-extensions/streampipes-connect-adapters/pom.xml
+++ b/streampipes-extensions/streampipes-connect-adapters/pom.xml
@@ -17,7 +17,8 @@
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -212,6 +213,23 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>validate</id>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <logViolationsToConsole>true</logViolationsToConsole>
+                    <failOnViolation>true</failOnViolation>
+                </configuration>
+            </plugin>
         </plugins>
         <finalName>streampipes-connect-adapters</finalName>
     </build>
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java
index 624b9e2bb..dd4a6d481 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java
@@ -47,25 +47,25 @@ public class ConnectAdapterInit extends ExtensionsModelSubmitter {
   @Override
   public SpServiceDefinition provideServiceDefinition() {
     return SpServiceDefinitionBuilder.create("connect-adapter",
-        "StreamPipes Connect Worker Main",
-        "", 8001)
-      .registerAdapter(new GdeltAdapter())
-      .registerAdapter(new CoindeskBitcoinAdapter())
-      .registerAdapter(new NetioRestAdapter())
-      .registerAdapter(new NetioMQTTAdapter())
-      .registerAdapter(new IexCloudNewsAdapter())
-      .registerAdapter(new IexCloudStockAdapter())
-      .registerAdapter(new RandomDataSetAdapter())
-      .registerAdapter(new RandomDataStreamAdapter())
-      .registerAdapter(new SlackAdapter())
-      .registerAdapter(new WikipediaEditedArticlesAdapter())
-      .registerAdapter(new WikipediaNewArticlesAdapter())
-      .registerAdapter(new ImageStreamAdapter())
-      .registerAdapter(new ImageSetAdapter())
-      .registerAdapter(new IssAdapter())
-      .registerAdapter(new FlicMQTTAdapter())
-      .registerAdapter(new TISensorTag())
-      .build();
+            "StreamPipes Connect Worker Main",
+            "", 8001)
+        .registerAdapter(new GdeltAdapter())
+        .registerAdapter(new CoindeskBitcoinAdapter())
+        .registerAdapter(new NetioRestAdapter())
+        .registerAdapter(new NetioMQTTAdapter())
+        .registerAdapter(new IexCloudNewsAdapter())
+        .registerAdapter(new IexCloudStockAdapter())
+        .registerAdapter(new RandomDataSetAdapter())
+        .registerAdapter(new RandomDataStreamAdapter())
+        .registerAdapter(new SlackAdapter())
+        .registerAdapter(new WikipediaEditedArticlesAdapter())
+        .registerAdapter(new WikipediaNewArticlesAdapter())
+        .registerAdapter(new ImageStreamAdapter())
+        .registerAdapter(new ImageSetAdapter())
+        .registerAdapter(new IssAdapter())
+        .registerAdapter(new FlicMQTTAdapter())
+        .registerAdapter(new TISensorTag())
+        .build();
   }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullAdapter.java
index 157dac3eb..11c113eac 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullAdapter.java
@@ -18,83 +18,87 @@
 
 package org.apache.streampipes.connect.adapters;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
 import org.apache.streampipes.connect.adapter.util.PollingSettings;
+import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import java.util.concurrent.*;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
 
 
 public abstract class PullAdapter extends SpecificDataStreamAdapter {
 
-    protected static Logger logger = LoggerFactory.getLogger(PullAdapter.class);
-    private ScheduledExecutorService scheduler;
-    private ScheduledExecutorService errorThreadscheduler;
+  protected static Logger logger = LoggerFactory.getLogger(PullAdapter.class);
+  private ScheduledExecutorService scheduler;
+  private ScheduledExecutorService errorThreadscheduler;
 
 
-    public PullAdapter() {
-        super();
-    }
+  public PullAdapter() {
+    super();
+  }
 
-    public PullAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
+  public PullAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
 
-    protected abstract void pullData();
+  protected abstract void pullData();
 
-    protected abstract PollingSettings getPollingInterval();
+  protected abstract PollingSettings getPollingInterval();
 
-    @Override
-    public void startAdapter() throws AdapterException {
-        before();
+  @Override
+  public void startAdapter() throws AdapterException {
+    before();
 
-        final Runnable errorThread = () -> {
-            executeAdpaterLogic();
-        };
+    final Runnable errorThread = () -> {
+      executeAdpaterLogic();
+    };
 
-        scheduler = Executors.newScheduledThreadPool(1);
-        scheduler.schedule(errorThread, 0, TimeUnit.MILLISECONDS);
+    scheduler = Executors.newScheduledThreadPool(1);
+    scheduler.schedule(errorThread, 0, TimeUnit.MILLISECONDS);
 
-    }
+  }
 
-    private void executeAdpaterLogic() {
-        final Runnable task = () -> {
+  private void executeAdpaterLogic() {
+    final Runnable task = () -> {
 
-            pullData();
+      pullData();
 
-        };
+    };
 
-        scheduler = Executors.newScheduledThreadPool(1);
-        ScheduledFuture<?> handle = scheduler.scheduleAtFixedRate(task, 1,
-                getPollingInterval().getValue(), getPollingInterval().getTimeUnit());
+    scheduler = Executors.newScheduledThreadPool(1);
+    ScheduledFuture<?> handle = scheduler.scheduleAtFixedRate(task, 1,
+        getPollingInterval().getValue(), getPollingInterval().getTimeUnit());
 
-        try {
-            handle.get();
-        } catch (ExecutionException | InterruptedException e) {
-            logger.error("Error", e);
-        }
+    try {
+      handle.get();
+    } catch (ExecutionException | InterruptedException e) {
+      logger.error("Error", e);
     }
+  }
 
-    @Override
-    public void stopAdapter() throws AdapterException {
-        after();
-        scheduler.shutdownNow();
-    }
+  @Override
+  public void stopAdapter() throws AdapterException {
+    after();
+    scheduler.shutdownNow();
+  }
 
-    /**
-     * Called before adapter is started (e.g. initialize connections)
-     */
-    protected void before() throws AdapterException {
+  /**
+   * Called before adapter is started (e.g. initialize connections)
+   */
+  protected void before() throws AdapterException {
 
-    }
+  }
 
-    /**
-     * Called before adapter is stopped (e.g. shutdown connections)
-     */
-    protected void after() throws AdapterException {
+  /**
+   * Called before adapter is stopped (e.g. shutdown connections)
+   */
+  protected void after() throws AdapterException {
 
-    }
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullRestAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullRestAdapter.java
index 626259968..ab8d7b153 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullRestAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/PullRestAdapter.java
@@ -18,54 +18,56 @@
 
 package org.apache.streampipes.connect.adapters;
 
-import com.google.gson.Gson;
-import org.apache.http.client.fluent.Request;
+
 import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 
-public abstract class PullRestAdapter extends PullAdapter {
+import com.google.gson.Gson;
+import org.apache.http.client.fluent.Request;
 
-    public PullRestAdapter() {
-        super();
-    }
+public abstract class PullRestAdapter extends PullAdapter {
 
-    public PullRestAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
+  public PullRestAdapter() {
+    super();
+  }
 
-    protected static String getDataFromEndpointString(String url) throws AdapterException {
-        String result = null;
+  public PullRestAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
 
+  protected static String getDataFromEndpointString(String url) throws AdapterException {
+    String result = null;
 
-        logger.info("Started Request to open sensemap endpoint: " + url);
-        try {
-            result = Request.Get(url)
-                    .connectTimeout(1000)
-                    .socketTimeout(100000)
-                    .execute().returnContent().asString();
 
+    logger.info("Started Request to open sensemap endpoint: " + url);
+    try {
+      result = Request.Get(url)
+          .connectTimeout(1000)
+          .socketTimeout(100000)
+          .execute().returnContent().asString();
 
-            if (result.startsWith("ï")) {
-                result = result.substring(3);
-            }
 
-            logger.info("Received data from request");
+      if (result.startsWith("ï")) {
+        result = result.substring(3);
+      }
 
-        } catch (Exception e) {
-            String errorMessage = "Error while connecting to the open sensemap api";
-            logger.error(errorMessage, e);
-            throw new AdapterException(errorMessage);
-        }
+      logger.info("Received data from request");
 
-        return result;
+    } catch (Exception e) {
+      String errorMessage = "Error while connecting to the open sensemap api";
+      logger.error(errorMessage, e);
+      throw new AdapterException(errorMessage);
     }
 
-    protected static <T> T getDataFromEndpoint(String url, Class<T> clazz) throws AdapterException {
+    return result;
+  }
 
-        String rawJson = getDataFromEndpointString(url);
-        T all = new Gson().fromJson(rawJson, clazz);
+  protected static <T> T getDataFromEndpoint(String url, Class<T> clazz) throws AdapterException {
 
-        return all;
-    }
+    String rawJson = getDataFromEndpointString(url);
+    T all = new Gson().fromJson(rawJson, clazz);
+
+    return all;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java
index 3c8f5902a..a89dae404 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java
@@ -17,15 +17,13 @@
  */
 package org.apache.streampipes.connect.adapters.coindesk;
 
-import com.google.gson.Gson;
-import org.apache.http.client.fluent.Request;
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
-import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
 import org.apache.streampipes.connect.adapter.util.PollingSettings;
 import org.apache.streampipes.connect.adapters.PullAdapter;
 import org.apache.streampipes.connect.adapters.coindesk.model.CoindeskRawModel;
+import org.apache.streampipes.connect.api.exception.AdapterException;
+import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -38,6 +36,9 @@ import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.vocabulary.SO;
 
+import com.google.gson.Gson;
+import org.apache.http.client.fluent.Request;
+
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
@@ -97,11 +98,11 @@ public class CoindeskBitcoinAdapter extends PullAdapter {
   @Override
   public SpecificAdapterStreamDescription declareModel() {
     return SpecificDataStreamAdapterBuilder.create(ID)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .withLocales(Locales.EN)
-            .category(AdapterType.Finance)
-            .requiredSingleValueSelection(Labels.withId(CURRENCY_KEY), Options.from("USD", "EUR", "GBP"))
-            .build();
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Finance)
+        .requiredSingleValueSelection(Labels.withId(CURRENCY_KEY), Options.from("USD", "EUR", "GBP"))
+        .build();
   }
 
   @Override
@@ -110,12 +111,13 @@ public class CoindeskBitcoinAdapter extends PullAdapter {
   }
 
   @Override
-  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException, ParseException {
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
+      throws AdapterException, ParseException {
     return GuessSchemaBuilder.create()
-            .property(EpProperties.timestampProperty("timestamp"))
-            .property(EpProperties.doubleEp(Labels.from("rate-field", "Rate", "The current " +
-                    "bitcoin rate"), "rate", SO.Price))
-            .build();
+        .property(EpProperties.timestampProperty("timestamp"))
+        .property(EpProperties.doubleEp(Labels.from("rate-field", "Rate", "The current "
+            + "bitcoin rate"), "rate", SO.Price))
+        .build();
   }
 
   @Override
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Bpi.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Bpi.java
index 5ec9fa37b..87c25993b 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Bpi.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Bpi.java
@@ -26,35 +26,35 @@ import javax.annotation.Generated;
 @SuppressWarnings("unused")
 public class Bpi {
 
-    @SerializedName("EUR")
-    private EUR mEUR;
-    @SerializedName("GBP")
-    private GBP mGBP;
-    @SerializedName("USD")
-    private USD mUSD;
-
-    public EUR getEUR() {
-        return mEUR;
-    }
-
-    public void setEUR(EUR eUR) {
-        mEUR = eUR;
-    }
-
-    public GBP getGBP() {
-        return mGBP;
-    }
-
-    public void setGBP(GBP gBP) {
-        mGBP = gBP;
-    }
-
-    public USD getUSD() {
-        return mUSD;
-    }
-
-    public void setUSD(USD uSD) {
-        mUSD = uSD;
-    }
+  @SerializedName("EUR")
+  private EUR mEUR;
+  @SerializedName("GBP")
+  private GBP mGBP;
+  @SerializedName("USD")
+  private USD mUSD;
+
+  public EUR getEUR() {
+    return mEUR;
+  }
+
+  public void setEUR(EUR eUR) {
+    mEUR = eUR;
+  }
+
+  public GBP getGBP() {
+    return mGBP;
+  }
+
+  public void setGBP(GBP gBP) {
+    mGBP = gBP;
+  }
+
+  public USD getUSD() {
+    return mUSD;
+  }
+
+  public void setUSD(USD uSD) {
+    mUSD = uSD;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/CoindeskRawModel.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/CoindeskRawModel.java
index ad68f3663..13de0b8b0 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/CoindeskRawModel.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/CoindeskRawModel.java
@@ -26,45 +26,45 @@ import javax.annotation.Generated;
 @SuppressWarnings("unused")
 public class CoindeskRawModel {
 
-    @SerializedName("bpi")
-    private Bpi mBpi;
-    @SerializedName("chartName")
-    private String mChartName;
-    @SerializedName("disclaimer")
-    private String mDisclaimer;
-    @SerializedName("time")
-    private Time mTime;
+  @SerializedName("bpi")
+  private Bpi mBpi;
+  @SerializedName("chartName")
+  private String mChartName;
+  @SerializedName("disclaimer")
+  private String mDisclaimer;
+  @SerializedName("time")
+  private Time mTime;
 
-    public Bpi getBpi() {
-        return mBpi;
-    }
+  public Bpi getBpi() {
+    return mBpi;
+  }
 
-    public void setBpi(Bpi bpi) {
-        mBpi = bpi;
-    }
+  public void setBpi(Bpi bpi) {
+    mBpi = bpi;
+  }
 
-    public String getChartName() {
-        return mChartName;
-    }
+  public String getChartName() {
+    return mChartName;
+  }
 
-    public void setChartName(String chartName) {
-        mChartName = chartName;
-    }
+  public void setChartName(String chartName) {
+    mChartName = chartName;
+  }
 
-    public String getDisclaimer() {
-        return mDisclaimer;
-    }
+  public String getDisclaimer() {
+    return mDisclaimer;
+  }
 
-    public void setDisclaimer(String disclaimer) {
-        mDisclaimer = disclaimer;
-    }
+  public void setDisclaimer(String disclaimer) {
+    mDisclaimer = disclaimer;
+  }
 
-    public Time getTime() {
-        return mTime;
-    }
+  public Time getTime() {
+    return mTime;
+  }
 
-    public void setTime(Time time) {
-        mTime = time;
-    }
+  public void setTime(Time time) {
+    mTime = time;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/EUR.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/EUR.java
index 6d4c54e39..a481b2220 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/EUR.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/EUR.java
@@ -19,62 +19,63 @@
 
 package org.apache.streampipes.connect.adapters.coindesk.model;
 
-import javax.annotation.Generated;
 import com.google.gson.annotations.SerializedName;
 
+import javax.annotation.Generated;
+
 @Generated("net.hexar.json2pojo")
 @SuppressWarnings("unused")
 public class EUR {
 
-    @SerializedName("code")
-    private String mCode;
-    @SerializedName("description")
-    private String mDescription;
-    @SerializedName("rate")
-    private String mRate;
-    @SerializedName("rate_float")
-    private Double mRateFloat;
-    @SerializedName("symbol")
-    private String mSymbol;
-
-    public String getCode() {
-        return mCode;
-    }
-
-    public void setCode(String code) {
-        mCode = code;
-    }
-
-    public String getDescription() {
-        return mDescription;
-    }
-
-    public void setDescription(String description) {
-        mDescription = description;
-    }
-
-    public String getRate() {
-        return mRate;
-    }
-
-    public void setRate(String rate) {
-        mRate = rate;
-    }
-
-    public Double getRateFloat() {
-        return mRateFloat;
-    }
-
-    public void setRateFloat(Double rateFloat) {
-        mRateFloat = rateFloat;
-    }
-
-    public String getSymbol() {
-        return mSymbol;
-    }
-
-    public void setSymbol(String symbol) {
-        mSymbol = symbol;
-    }
+  @SerializedName("code")
+  private String mCode;
+  @SerializedName("description")
+  private String mDescription;
+  @SerializedName("rate")
+  private String mRate;
+  @SerializedName("rate_float")
+  private Double mRateFloat;
+  @SerializedName("symbol")
+  private String mSymbol;
+
+  public String getCode() {
+    return mCode;
+  }
+
+  public void setCode(String code) {
+    mCode = code;
+  }
+
+  public String getDescription() {
+    return mDescription;
+  }
+
+  public void setDescription(String description) {
+    mDescription = description;
+  }
+
+  public String getRate() {
+    return mRate;
+  }
+
+  public void setRate(String rate) {
+    mRate = rate;
+  }
+
+  public Double getRateFloat() {
+    return mRateFloat;
+  }
+
+  public void setRateFloat(Double rateFloat) {
+    mRateFloat = rateFloat;
+  }
+
+  public String getSymbol() {
+    return mSymbol;
+  }
+
+  public void setSymbol(String symbol) {
+    mSymbol = symbol;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/GBP.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/GBP.java
index 9b6f0e658..1d4ddfe25 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/GBP.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/GBP.java
@@ -26,55 +26,55 @@ import javax.annotation.Generated;
 @SuppressWarnings("unused")
 public class GBP {
 
-    @SerializedName("code")
-    private String mCode;
-    @SerializedName("description")
-    private String mDescription;
-    @SerializedName("rate")
-    private String mRate;
-    @SerializedName("rate_float")
-    private Double mRateFloat;
-    @SerializedName("symbol")
-    private String mSymbol;
-
-    public String getCode() {
-        return mCode;
-    }
-
-    public void setCode(String code) {
-        mCode = code;
-    }
-
-    public String getDescription() {
-        return mDescription;
-    }
-
-    public void setDescription(String description) {
-        mDescription = description;
-    }
-
-    public String getRate() {
-        return mRate;
-    }
-
-    public void setRate(String rate) {
-        mRate = rate;
-    }
-
-    public Double getRateFloat() {
-        return mRateFloat;
-    }
-
-    public void setRateFloat(Double rateFloat) {
-        mRateFloat = rateFloat;
-    }
-
-    public String getSymbol() {
-        return mSymbol;
-    }
-
-    public void setSymbol(String symbol) {
-        mSymbol = symbol;
-    }
+  @SerializedName("code")
+  private String mCode;
+  @SerializedName("description")
+  private String mDescription;
+  @SerializedName("rate")
+  private String mRate;
+  @SerializedName("rate_float")
+  private Double mRateFloat;
+  @SerializedName("symbol")
+  private String mSymbol;
+
+  public String getCode() {
+    return mCode;
+  }
+
+  public void setCode(String code) {
+    mCode = code;
+  }
+
+  public String getDescription() {
+    return mDescription;
+  }
+
+  public void setDescription(String description) {
+    mDescription = description;
+  }
+
+  public String getRate() {
+    return mRate;
+  }
+
+  public void setRate(String rate) {
+    mRate = rate;
+  }
+
+  public Double getRateFloat() {
+    return mRateFloat;
+  }
+
+  public void setRateFloat(Double rateFloat) {
+    mRateFloat = rateFloat;
+  }
+
+  public String getSymbol() {
+    return mSymbol;
+  }
+
+  public void setSymbol(String symbol) {
+    mSymbol = symbol;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Time.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Time.java
index ecf6a4862..5125c38e9 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Time.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/Time.java
@@ -26,35 +26,35 @@ import javax.annotation.Generated;
 @SuppressWarnings("unused")
 public class Time {
 
-    @SerializedName("updated")
-    private String mUpdated;
-    @SerializedName("updatedISO")
-    private String mUpdatedISO;
-    @SerializedName("updateduk")
-    private String mUpdateduk;
-
-    public String getUpdated() {
-        return mUpdated;
-    }
-
-    public void setUpdated(String updated) {
-        mUpdated = updated;
-    }
-
-    public String getUpdatedISO() {
-        return mUpdatedISO;
-    }
-
-    public void setUpdatedISO(String updatedISO) {
-        mUpdatedISO = updatedISO;
-    }
-
-    public String getUpdateduk() {
-        return mUpdateduk;
-    }
-
-    public void setUpdateduk(String updateduk) {
-        mUpdateduk = updateduk;
-    }
+  @SerializedName("updated")
+  private String mUpdated;
+  @SerializedName("updatedISO")
+  private String mUpdatedISO;
+  @SerializedName("updateduk")
+  private String mUpdateduk;
+
+  public String getUpdated() {
+    return mUpdated;
+  }
+
+  public void setUpdated(String updated) {
+    mUpdated = updated;
+  }
+
+  public String getUpdatedISO() {
+    return mUpdatedISO;
+  }
+
+  public void setUpdatedISO(String updatedISO) {
+    mUpdatedISO = updatedISO;
+  }
+
+  public String getUpdateduk() {
+    return mUpdateduk;
+  }
+
+  public void setUpdateduk(String updateduk) {
+    mUpdateduk = updateduk;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/USD.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/USD.java
index 3f8c92fd8..22013055c 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/USD.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/model/USD.java
@@ -26,55 +26,55 @@ import javax.annotation.Generated;
 @SuppressWarnings("unused")
 public class USD {
 
-    @SerializedName("code")
-    private String mCode;
-    @SerializedName("description")
-    private String mDescription;
-    @SerializedName("rate")
-    private String mRate;
-    @SerializedName("rate_float")
-    private Double mRateFloat;
-    @SerializedName("symbol")
-    private String mSymbol;
-
-    public String getCode() {
-        return mCode;
-    }
-
-    public void setCode(String code) {
-        mCode = code;
-    }
-
-    public String getDescription() {
-        return mDescription;
-    }
-
-    public void setDescription(String description) {
-        mDescription = description;
-    }
-
-    public String getRate() {
-        return mRate;
-    }
-
-    public void setRate(String rate) {
-        mRate = rate;
-    }
-
-    public Double getRateFloat() {
-        return mRateFloat;
-    }
-
-    public void setRateFloat(Double rateFloat) {
-        mRateFloat = rateFloat;
-    }
-
-    public String getSymbol() {
-        return mSymbol;
-    }
-
-    public void setSymbol(String symbol) {
-        mSymbol = symbol;
-    }
+  @SerializedName("code")
+  private String mCode;
+  @SerializedName("description")
+  private String mDescription;
+  @SerializedName("rate")
+  private String mRate;
+  @SerializedName("rate_float")
+  private Double mRateFloat;
+  @SerializedName("symbol")
+  private String mSymbol;
+
+  public String getCode() {
+    return mCode;
+  }
+
+  public void setCode(String code) {
+    mCode = code;
+  }
+
+  public String getDescription() {
+    return mDescription;
+  }
+
+  public void setDescription(String description) {
+    mDescription = description;
+  }
+
+  public String getRate() {
+    return mRate;
+  }
+
+  public void setRate(String rate) {
+    mRate = rate;
+  }
+
+  public Double getRateFloat() {
+    return mRateFloat;
+  }
+
+  public void setRateFloat(Double rateFloat) {
+    mRateFloat = rateFloat;
+  }
+
+  public String getSymbol() {
+    return mSymbol;
+  }
+
+  public void setSymbol(String symbol) {
+    mSymbol = symbol;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java
index efca72326..c568c4495 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java
@@ -18,125 +18,135 @@
 
 package org.apache.streampipes.connect.adapters.flic;
 
-import com.google.gson.Gson;
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.connect.adapter.model.pipeline.AdapterPipeline;
 import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
-import org.apache.streampipes.pe.shared.config.mqtt.*;
+import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.messaging.InternalEventProcessor;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
+import org.apache.streampipes.pe.shared.config.mqtt.MqttConfig;
+import org.apache.streampipes.pe.shared.config.mqtt.MqttConnectUtils;
+import org.apache.streampipes.pe.shared.config.mqtt.MqttConsumer;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
 
-import java.util.*;
-
-public class FlicMQTTAdapter extends SpecificDataStreamAdapter {
-
-    private MqttConsumer mqttConsumer;
-    private MqttConfig mqttConfig;
-    private Thread thread;
-
-    /**
-     * A unique id to identify the adapter type
-     */
-    public static final String ID = "org.apache.streampipes.connect.adapters.flic.mqtt";
-
-    /**
-     * Empty constructor and a constructor with SpecificAdapterStreamDescription are mandatory
-     */
-    public FlicMQTTAdapter() {
-    }
-
-    public FlicMQTTAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
-
-
-    /**
-     * Describe the adapter adapter and define what user inputs are required.
-     * @return
-     */
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
-                .withLocales(Locales.EN)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .category(AdapterType.Energy)
-                .requiredTextParameter(MqttConnectUtils.getBrokerUrlLabel())
-                .requiredAlternatives(MqttConnectUtils.getAccessModeLabel(), MqttConnectUtils.getAlternativesOne(), MqttConnectUtils.getAlternativesTwo())
-                .requiredTextParameter(MqttConnectUtils.getTopicLabel())
-                .build();
-        description.setAppId(ID);
-
-        return description;
-    }
-
-    /**
-     * Takes the user input and creates the event schema. The event schema describes the properties of the event stream.
-     * @param adapterDescription
-     * @return
-     * @throws AdapterException
-     */
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
-        return FlicUtils.getFlicSchema();
-    }
-    @Override
-    public void startAdapter() throws AdapterException {
-        StaticPropertyExtractor extractor =
-                StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
-
-        this.mqttConfig = MqttConnectUtils.getMqttConfig(extractor); 
-        this.mqttConsumer = new MqttConsumer(this.mqttConfig, new EventProcessor(adapterPipeline));
+import com.google.gson.Gson;
 
-        thread = new Thread(this.mqttConsumer);
-        thread.start();
-    }
+import java.util.ArrayList;
+import java.util.Map;
 
-    @Override
-    public void stopAdapter() throws AdapterException {
-        this.mqttConsumer.close();
-    }
+public class FlicMQTTAdapter extends SpecificDataStreamAdapter {
 
-    /**
-     * Required by StreamPipes return a new adapter instance by calling the constructor with SpecificAdapterStreamDescription
-     * @param adapterDescription
-     * @return
-     */
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new FlicMQTTAdapter(adapterDescription);
+  private MqttConsumer mqttConsumer;
+  private MqttConfig mqttConfig;
+  private Thread thread;
+
+  /**
+   * A unique id to identify the adapter type
+   */
+  public static final String ID = "org.apache.streampipes.connect.adapters.flic.mqtt";
+
+  /**
+   * Empty constructor and a constructor with SpecificAdapterStreamDescription are mandatory
+   */
+  public FlicMQTTAdapter() {
+  }
+
+  public FlicMQTTAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
+
+
+  /**
+   * Describe the adapter adapter and define what user inputs are required.
+   *
+   * @return
+   */
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+        .withLocales(Locales.EN)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .category(AdapterType.Energy)
+        .requiredTextParameter(MqttConnectUtils.getBrokerUrlLabel())
+        .requiredAlternatives(MqttConnectUtils.getAccessModeLabel(), MqttConnectUtils.getAlternativesOne(),
+            MqttConnectUtils.getAlternativesTwo())
+        .requiredTextParameter(MqttConnectUtils.getTopicLabel())
+        .build();
+    description.setAppId(ID);
+
+    return description;
+  }
+
+  /**
+   * Takes the user input and creates the event schema. The event schema describes the properties of the event stream.
+   *
+   * @param adapterDescription
+   * @return
+   */
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException {
+    return FlicUtils.getFlicSchema();
+  }
+
+  @Override
+  public void startAdapter() throws AdapterException {
+    StaticPropertyExtractor extractor =
+        StaticPropertyExtractor.from(adapterDescription.getConfig(), new ArrayList<>());
+
+    this.mqttConfig = MqttConnectUtils.getMqttConfig(extractor);
+    this.mqttConsumer = new MqttConsumer(this.mqttConfig, new EventProcessor(adapterPipeline));
+
+    thread = new Thread(this.mqttConsumer);
+    thread.start();
+  }
+
+  @Override
+  public void stopAdapter() throws AdapterException {
+    this.mqttConsumer.close();
+  }
+
+  /**
+   * Required by StreamPipes return a new adapter instance by calling the constructor
+   * with SpecificAdapterStreamDescription
+   *
+   * @param adapterDescription
+   * @return
+   */
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new FlicMQTTAdapter(adapterDescription);
+  }
+
+
+  /**
+   * Required by StreamPipes. Return the id of the adapter
+   *
+   * @return
+   */
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  private class EventProcessor implements InternalEventProcessor<byte[]> {
+    private AdapterPipeline adapterPipeline;
+
+    public EventProcessor(AdapterPipeline adapterpipeline) {
+      this.adapterPipeline = adapterpipeline;
     }
 
-
-    /**
-     * Required by StreamPipes. Return the id of the adapter
-     * @return
-     */
     @Override
-    public String getId() {
-        return ID;
-    }
-
-    private class EventProcessor implements InternalEventProcessor<byte[]> {
-        private AdapterPipeline adapterPipeline;
-
-        public EventProcessor(AdapterPipeline adapterpipeline) {
-            this.adapterPipeline = adapterpipeline;
-        }
-
-        @Override
-        public void onEvent(byte[] payload) {
-            String s = new String(payload);
-            FlicOutput output = new Gson().fromJson(s, FlicOutput.class);
-            Map<String, Object> event = FlicUtils.getEvent(output);
-            adapterPipeline.process(event);
-        }
+    public void onEvent(byte[] payload) {
+      String s = new String(payload);
+      FlicOutput output = new Gson().fromJson(s, FlicOutput.class);
+      Map<String, Object> event = FlicUtils.getEvent(output);
+      adapterPipeline.process(event);
     }
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicOutput.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicOutput.java
index aa372cc52..51075410c 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicOutput.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicOutput.java
@@ -19,34 +19,43 @@
 package org.apache.streampipes.connect.adapters.flic;
 
 import com.google.gson.annotations.SerializedName;
+
 import javax.annotation.Generated;
 
 @Generated("net.hexar.json2pojo")
 public class FlicOutput {
 
-    @SerializedName("timestamp")
-    private Long timestamp;
+  @SerializedName("timestamp")
+  private Long timestamp;
 
-    @SerializedName("button_id")
-    private String buttonID;
+  @SerializedName("button_id")
+  private String buttonID;
 
-    @SerializedName("click_type")
-    private String clickType;
+  @SerializedName("click_type")
+  private String clickType;
 
-    public Long getTimestamp() { return  timestamp; }
+  public Long getTimestamp() {
+    return timestamp;
+  }
 
-    public void setTimestamp(Long timestamp) { this.timestamp = timestamp; }
+  public void setTimestamp(Long timestamp) {
+    this.timestamp = timestamp;
+  }
 
-    public String getButtonID() { return buttonID; }
+  public String getButtonID() {
+    return buttonID;
+  }
 
-    public void setButtonID(String buttonID) { this.buttonID = buttonID; }
+  public void setButtonID(String buttonID) {
+    this.buttonID = buttonID;
+  }
 
-    public String getClickType() {
-        return clickType;
-    }
+  public String getClickType() {
+    return clickType;
+  }
 
-    public void setClickType(float voltage) {
-        this.clickType = clickType;
-    }
+  public void setClickType(float voltage) {
+    this.clickType = clickType;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicUtils.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicUtils.java
index 7b0b6b903..118a68ed4 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicUtils.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicUtils.java
@@ -31,43 +31,43 @@ import java.util.List;
 import java.util.Map;
 
 public class FlicUtils {
-    public static final String TIMESTAMP_KEY = "timestamp";
-    public static final String BUTTON_ID_KEY = "button_id";
-    public static final String CLICK_TYPE_KEY = "click_type";
+  public static final String TIMESTAMP_KEY = "timestamp";
+  public static final String BUTTON_ID_KEY = "button_id";
+  public static final String CLICK_TYPE_KEY = "click_type";
 
-    public static GuessSchema getFlicSchema() {
+  public static GuessSchema getFlicSchema() {
 
-        GuessSchema guessSchema = new GuessSchema();
+    GuessSchema guessSchema = new GuessSchema();
 
-        EventSchema eventSchema = new EventSchema();
-        List<EventProperty> allProperties = new ArrayList<>();
+    EventSchema eventSchema = new EventSchema();
+    List<EventProperty> allProperties = new ArrayList<>();
 
-        allProperties.add(EpProperties.timestampProperty(TIMESTAMP_KEY));
-        allProperties.add(
-                PrimitivePropertyBuilder
-                        .create(Datatypes.String, BUTTON_ID_KEY)
-                        .label("Button ID")
-                        .description("The ID of the button")
-                        .build());
-        allProperties.add(
-                PrimitivePropertyBuilder
-                        .create(Datatypes.String, CLICK_TYPE_KEY)
-                        .label("Click Type")
-                        .description("Type of the click")
-                        .build());
+    allProperties.add(EpProperties.timestampProperty(TIMESTAMP_KEY));
+    allProperties.add(
+        PrimitivePropertyBuilder
+            .create(Datatypes.String, BUTTON_ID_KEY)
+            .label("Button ID")
+            .description("The ID of the button")
+            .build());
+    allProperties.add(
+        PrimitivePropertyBuilder
+            .create(Datatypes.String, CLICK_TYPE_KEY)
+            .label("Click Type")
+            .description("Type of the click")
+            .build());
 
-        eventSchema.setEventProperties(allProperties);
-        guessSchema.setEventSchema(eventSchema);
-        return guessSchema;
-    }
+    eventSchema.setEventProperties(allProperties);
+    guessSchema.setEventSchema(eventSchema);
+    return guessSchema;
+  }
 
-    public static Map<String, Object> getEvent(FlicOutput output) {
-        Map<String, Object> event = new HashMap<>();
+  public static Map<String, Object> getEvent(FlicOutput output) {
+    Map<String, Object> event = new HashMap<>();
 
-        event.put(TIMESTAMP_KEY, output.getTimestamp());
-        event.put(BUTTON_ID_KEY, output.getButtonID());
-        event.put(CLICK_TYPE_KEY, output.getClickType());
-        return event;
-    }
+    event.put(TIMESTAMP_KEY, output.getTimestamp());
+    event.put(BUTTON_ID_KEY, output.getButtonID());
+    event.put(CLICK_TYPE_KEY, output.getClickType());
+    return event;
+  }
 
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java
index e2d593185..86319232e 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java
@@ -18,11 +18,10 @@
 
 package org.apache.streampipes.connect.adapters.gdelt;
 
-import com.opencsv.CSVReader;
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.connect.adapter.util.PollingSettings;
 import org.apache.streampipes.connect.adapters.PullAdapter;
+import org.apache.streampipes.connect.api.exception.AdapterException;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.model.schema.EventProperty;
@@ -33,6 +32,8 @@ import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
 
+import com.opencsv.CSVReader;
+
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.net.URL;
@@ -45,147 +46,187 @@ import java.util.zip.ZipInputStream;
 
 public class GdeltAdapter extends PullAdapter {
 
-    public static final String ID = "org.apache.streampipes.connect.adapters.gdelt";
-
-
-    private String url = "http://data.gdeltproject.org/gdeltv2/lastupdate.txt";
-
-    public GdeltAdapter() {
-        super();
-    }
-
-    public GdeltAdapter(SpecificAdapterStreamDescription adapterDescription) {
-        super(adapterDescription);
-    }
-
-    @Override
-    protected PollingSettings getPollingInterval() {
-        return PollingSettings.from(TimeUnit.MINUTES, 15);
-    }
-
-    @Override
-    public SpecificAdapterStreamDescription declareModel() {
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-                .withLocales(Locales.EN)
-                .build();
-        return  description;
+  public static final String ID = "org.apache.streampipes.connect.adapters.gdelt";
+
+
+  private String url = "http://data.gdeltproject.org/gdeltv2/lastupdate.txt";
+
+  public GdeltAdapter() {
+    super();
+  }
+
+  public GdeltAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    super(adapterDescription);
+  }
+
+  @Override
+  protected PollingSettings getPollingInterval() {
+    return PollingSettings.from(TimeUnit.MINUTES, 15);
+  }
+
+  @Override
+  public SpecificAdapterStreamDescription declareModel() {
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .build();
+    return description;
+  }
+
+  public List<Map<String, Object>> getEvents() {
+
+    List<Map<String, Object>> eventResults = new ArrayList<>();
+    return eventResults;
+  }
+
+  @Override
+  protected void pullData() {
+    try {
+      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
+      String firstLine = bufferedReader.readLine();
+      String[] parts = firstLine.split(" ");
+      URL zipFileUrl = new URL(parts[2]);
+      bufferedReader.close();
+      ZipInputStream zipInputStream = new ZipInputStream(zipFileUrl.openStream());
+      BufferedReader zipBufferedReader = new BufferedReader(new InputStreamReader(zipInputStream));
+      zipInputStream.getNextEntry();
+      CSVReader csvReader = new CSVReader(zipBufferedReader);
+      String[] nextRecord;
+      while ((nextRecord = csvReader.readNext()) != null) {
+
+        Map<String, Object> event = new HashMap<>();
+
+        event.put("global_event_id", nextRecord[0]);
+        event.put("day", nextRecord[1]);
+        event.put("month_year", nextRecord[2]);
+        event.put("year", nextRecord[3]);
+        event.put("fraction_date", nextRecord[4]);
+
+        event.put("actor_1_code", nextRecord[5]);
+        event.put("actor_1_name", nextRecord[6]);
+        event.put("actor_1_country_code", nextRecord[7]);
+        event.put("actor_1_known_group_code", nextRecord[8]);
+        event.put("actor_1_ethnic_code", nextRecord[9]);
+        event.put("actor_1_religion_1_code", nextRecord[10]);
+        event.put("actor_1_religion_2_code", nextRecord[11]);
+        event.put("actor_1_type_1_code", nextRecord[12]);
+        event.put("actor_1_type_2_code", nextRecord[13]);
+        event.put("actor_1_type_3_code", nextRecord[14]);
+
+        event.put("actor_2_code", nextRecord[15]);
+        event.put("actor_2_name", nextRecord[16]);
+        event.put("actor_2_country_code", nextRecord[17]);
+        event.put("actor_2_known_group_code", nextRecord[18]);
+        event.put("actor_2_ethnic_code", nextRecord[19]);
+        event.put("actor_2_religion_1_code", nextRecord[20]);
+        event.put("actor_2_religion_2_code", nextRecord[21]);
+        event.put("actor_2_type_1_code", nextRecord[22]);
+        event.put("actor_2_type_2_code", nextRecord[23]);
+        event.put("actor_2_type_3_code", nextRecord[24]);
+
+        event.put("source_url", nextRecord[60]);
+        adapterPipeline.process(event);
+
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
     }
 
-    public List<Map<String, Object>> getEvents() {
-
-        List<Map<String, Object>> eventResults = new ArrayList<>();
-        return eventResults;
-    }
-
-    @Override
-    protected void pullData() {
-        try {
-            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
-            String firstLine = bufferedReader.readLine();
-            String[] parts = firstLine.split(" ");
-            URL zipFileUrl = new URL(parts[2]);
-            bufferedReader.close();
-            ZipInputStream zipInputStream = new ZipInputStream(zipFileUrl.openStream());
-            BufferedReader zipBufferedReader = new BufferedReader(new InputStreamReader(zipInputStream));
-            zipInputStream.getNextEntry();
-            CSVReader csvReader = new CSVReader(zipBufferedReader);
-            String[] nextRecord;
-            while ((nextRecord = csvReader.readNext()) != null) {
-
-                Map<String, Object> event = new HashMap<>();
-
-                event.put("global_event_id", nextRecord[0]);
-                event.put("day", nextRecord[1]);
-                event.put("month_year", nextRecord[2]);
-                event.put("year", nextRecord[3]);
-                event.put("fraction_date", nextRecord[4]);
-
-                event.put("actor_1_code", nextRecord[5]);
-                event.put("actor_1_name", nextRecord[6]);
-                event.put("actor_1_country_code", nextRecord[7]);
-                event.put("actor_1_known_group_code", nextRecord[8]);
-                event.put("actor_1_ethnic_code", nextRecord[9]);
-                event.put("actor_1_religion_1_code", nextRecord[10]);
-                event.put("actor_1_religion_2_code", nextRecord[11]);
-                event.put("actor_1_type_1_code", nextRecord[12]);
-                event.put("actor_1_type_2_code", nextRecord[13]);
-                event.put("actor_1_type_3_code", nextRecord[14]);
-
-                event.put("actor_2_code", nextRecord[15]);
-                event.put("actor_2_name", nextRecord[16]);
-                event.put("actor_2_country_code", nextRecord[17]);
-                event.put("actor_2_known_group_code", nextRecord[18]);
-                event.put("actor_2_ethnic_code", nextRecord[19]);
-                event.put("actor_2_religion_1_code", nextRecord[20]);
-                event.put("actor_2_religion_2_code", nextRecord[21]);
-                event.put("actor_2_type_1_code", nextRecord[22]);
-                event.put("actor_2_type_2_code", nextRecord[23]);
-                event.put("actor_2_type_3_code", nextRecord[24]);
-
-                event.put("source_url", nextRecord[60]);
-                adapterPipeline.process(event);
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
-
-    @Override
-    public void stopAdapter() throws AdapterException {
-
-    }
-
-    @Override
-    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new GdeltAdapter(adapterDescription);
-    }
-
-    @Override
-    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) {
-        GuessSchema guessSchema = new GuessSchema();
-        EventSchema eventSchema = new EventSchema();
-
-        List<EventProperty> allProperties = new ArrayList<>();
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "global_event_id").label("Global Event ID").description("Globally unique identifier").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "day").label("Day").description("Date the event took place in YYYYMMDD format").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "month_year").label("MonthYear").description("Date the event took place in YYYYMM format").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "year").label("Year").description("Date the event took place in YYYY format").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Float, "fraction_date").label("FractionDate").description("Date the event took place in YYYY.FFFF format (where FFFF is the percentage of the year completed)").build());
-
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_code").label("Actor1Code").description("The complete raw CAMEO code for Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_name").label("Actor1Name").description("The actual name of the Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_country_code").label("Actor1CountryCode").description("The 3-character CAMEO code for the country affiliation of Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_known_group_code").label("Actor1KnownGroupCode").description("The CAMEO code if Actor 1 is a known IGO/NGO/rebel organization").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_ethnic_code").label("Actor1EthnicCode").description("The CAMEO code if the source document specifies the ethnic affiliation of Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_religion_1_code").label("Actor1Religion1Code").description("The CAMEO code if the source document specifies the religious affiliation of Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_religion_2_code").label("Actor1Religion2Code").description("The CAMEO code if the source document specifies multiple religious affiliations of Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_type_1_code").label("Actor1Type1Code").description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_type_2_code").label("Actor1Type2Code").description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor1").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_type_3_code").label("Actor1Type3Code").description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor1").build());
-
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_code").label("Actor2Code").description("The complete raw CAMEO code for Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_name").label("Actor2Name").description("The actual name of the Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_country_code").label("Actor2CountryCode").description("The 3-character CAMEO code for the country affiliation of Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_known_group_code").label("Actor2KnownGroupCode").description("The CAMEO code if Actor 1 is a known IGO/NGO/rebel organization").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_ethnic_code").label("Actor2EthnicCode").description("The CAMEO code if the source document specifies the ethnic affiliation of Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_religion_1_code").label("Actor2Religion1Code").description("The CAMEO code if the source document specifies the religious affiliation of Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_religion_2_code").label("Actor2Religion2Code").description("The CAMEO code if the source document specifies multiple religious affiliations of Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_type_1_code").label("Actor2Type1Code").description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_type_2_code").label("Actor2Type2Code").description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor2").build());
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_type_3_code").label("Actor2Type3Code").description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor2").build());
-
-        allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "source_url").label("URL").description("The url of the source of the article").build());
-
-        eventSchema.setEventProperties(allProperties);
-        guessSchema.setEventSchema(eventSchema);
-        return guessSchema;
-    }
-
-    @Override
-    public String getId() {
-        return ID;
-    }
+  }
+
+  @Override
+  public void stopAdapter() throws AdapterException {
+
+  }
+
+  @Override
+  public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+    return new GdeltAdapter(adapterDescription);
+  }
+
+  @Override
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) {
+    GuessSchema guessSchema = new GuessSchema();
+    EventSchema eventSchema = new EventSchema();
+
+    List<EventProperty> allProperties = new ArrayList<>();
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "global_event_id").label("Global Event ID")
+        .description("Globally unique identifier").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "day").label("Day")
+        .description("Date the event took place in YYYYMMDD format").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "month_year").label("MonthYear")
+        .description("Date the event took place in YYYYMM format").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Integer, "year").label("Year")
+        .description("Date the event took place in YYYY format").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.Float, "fraction_date").label("FractionDate")
+        .description(
+            "Date the event took place in YYYY.FFFF format (where FFFF is the percentage of the year completed)")
+        .build());
+
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_code").label("Actor1Code")
+        .description("The complete raw CAMEO code for Actor1").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_name").label("Actor1Name")
+        .description("The actual name of the Actor1").build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_country_code").label("Actor1CountryCode")
+            .description("The 3-character CAMEO code for the country affiliation of Actor1").build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_known_group_code").label("Actor1KnownGroupCode")
+            .description("The CAMEO code if Actor 1 is a known IGO/NGO/rebel organization").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_ethnic_code").label("Actor1EthnicCode")
+        .description("The CAMEO code if the source document specifies the ethnic affiliation of Actor1").build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_religion_1_code").label("Actor1Religion1Code")
+            .description("The CAMEO code if the source document specifies the religious affiliation of Actor1")
+            .build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_religion_2_code").label("Actor1Religion2Code")
+            .description("The CAMEO code if the source document specifies multiple religious affiliations of Actor1")
+            .build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_type_1_code").label("Actor1Type1Code")
+        .description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor1").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_type_2_code").label("Actor1Type2Code")
+        .description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor1").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_1_type_3_code").label("Actor1Type3Code")
+        .description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor1").build());
+
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_code").label("Actor2Code")
+        .description("The complete raw CAMEO code for Actor2").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_name").label("Actor2Name")
+        .description("The actual name of the Actor2").build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_country_code").label("Actor2CountryCode")
+            .description("The 3-character CAMEO code for the country affiliation of Actor2").build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_known_group_code").label("Actor2KnownGroupCode")
+            .description("The CAMEO code if Actor 1 is a known IGO/NGO/rebel organization").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_ethnic_code").label("Actor2EthnicCode")
+        .description("The CAMEO code if the source document specifies the ethnic affiliation of Actor2").build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_religion_1_code").label("Actor2Religion1Code")
+            .description("The CAMEO code if the source document specifies the religious affiliation of Actor2")
+            .build());
+    allProperties.add(
+        PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_religion_2_code").label("Actor2Religion2Code")
+            .description("The CAMEO code if the source document specifies multiple religious affiliations of Actor2")
+            .build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_type_1_code").label("Actor2Type1Code")
+        .description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor2").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_type_2_code").label("Actor2Type2Code")
+        .description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor2").build());
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "actor_2_type_3_code").label("Actor2Type3Code")
+        .description("The 3-character CAMEO code of the CAMEO “type” or “role” of Actor2").build());
+
+    allProperties.add(PrimitivePropertyBuilder.create(Datatypes.String, "source_url").label("URL")
+        .description("The url of the source of the article").build());
+
+    eventSchema.setEventProperties(allProperties);
+    guessSchema.setEventSchema(eventSchema);
+    return guessSchema;
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java
index 648eaa4a4..465fb5122 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java
@@ -17,18 +17,20 @@
  */
 package org.apache.streampipes.connect.adapters.iex;
 
-import com.google.gson.Gson;
-import org.apache.http.client.fluent.Request;
+
 import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
 import org.apache.streampipes.connect.adapters.PullAdapter;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 
+import com.google.gson.Gson;
+import org.apache.http.client.fluent.Request;
+
 import java.io.IOException;
 
 public abstract class IexCloudAdapter extends PullAdapter {
 
-  protected static final String IexCloudBaseUrl = "https://cloud.iexapis.com/stable/stock/";
-  protected static final String Token = "?token=";
+  protected static final String IEX_CLOUD_BASE_URL = "https://cloud.iexapis.com/stable/stock/";
+  protected static final String TOKEN = "?token=";
 
   protected static final String TOKEN_KEY = "token";
   protected static final String STOCK_SYMBOL_KEY = "stock-symbol";
@@ -43,7 +45,7 @@ public abstract class IexCloudAdapter extends PullAdapter {
     ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
     this.apiToken = extractor.secretValue(TOKEN_KEY);
     this.stockQuote = extractor.singleValue(STOCK_SYMBOL_KEY);
-    this.iexCloudInstanceUrl = IexCloudBaseUrl + stockQuote + restPath + Token + apiToken;
+    this.iexCloudInstanceUrl = IEX_CLOUD_BASE_URL + stockQuote + restPath + TOKEN + apiToken;
 
   }
 
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java
index 916c698cf..15c8e33cd 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java
@@ -19,10 +19,10 @@
 package org.apache.streampipes.connect.adapters.iex;
 
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
-import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.connect.adapter.util.PollingSettings;
 import org.apache.streampipes.connect.adapters.iex.model.IexNewsData;
+import org.apache.streampipes.connect.api.exception.AdapterException;
+import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -82,8 +82,7 @@ public class IexCloudNewsAdapter extends IexCloudAdapter {
 
         adapterPipeline.process(outMap);
       }
-    } catch (
-            IOException e) {
+    } catch (IOException e) {
       e.printStackTrace();
     }
   }
@@ -96,12 +95,12 @@ public class IexCloudNewsAdapter extends IexCloudAdapter {
   @Override
   public SpecificAdapterStreamDescription declareModel() {
     return SpecificDataStreamAdapterBuilder.create(ID)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .withLocales(Locales.EN)
-            .category(AdapterType.Finance, AdapterType.News)
-            .requiredSecret(Labels.withId(TOKEN_KEY))
-            .requiredTextParameter(Labels.withId(STOCK_SYMBOL_KEY))
-            .build();
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Finance, AdapterType.News)
+        .requiredSecret(Labels.withId(TOKEN_KEY))
+        .requiredTextParameter(Labels.withId(STOCK_SYMBOL_KEY))
+        .build();
   }
 
   @Override
@@ -110,27 +109,28 @@ public class IexCloudNewsAdapter extends IexCloudAdapter {
   }
 
   @Override
-  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException, ParseException {
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
+      throws AdapterException, ParseException {
     return GuessSchemaBuilder.create()
-            .property(EpProperties.timestampProperty(Timestamp))
-            .property(EpProperties.stringEp(Labels.from("headline", "Headline",
-                    "The headline of the article"), Headline, SO.Text))
-            .property(EpProperties.stringEp(Labels.from("source", "Source",
-                    "The source of the article"), Source, SO.Text))
-            .property(EpProperties.stringEp(Labels.from("url", "URL",
-                    "The URL of the article"), Url, SO.ContentUrl))
-            .property(EpProperties.stringEp(Labels.from("summary", "Summary",
-                    "A short summary of the article"), Summary, SO.Text))
-            .property(EpProperties.stringEp(Labels.from("related", "Related",
-                    "A comma-separated list of related stock symbols"), Related, SO.Text))
-            .property(EpProperties.stringEp(Labels.from("image", "Image",
-                    "Link to an image related to the news article"), Image, SO.Image))
-            .property(EpProperties.stringEp(Labels.from("lang", "Language",
-                    "The language the article is writte in"), Lang, SO.InLanguage))
-            .property(EpProperties.stringEp(Labels.from("paywall", "Has Paywall",
-                    "Indicates whether the article is behind a paywall"), HasPaywall,
-                    SO.Text))
-            .build();
+        .property(EpProperties.timestampProperty(Timestamp))
+        .property(EpProperties.stringEp(Labels.from("headline", "Headline",
+            "The headline of the article"), Headline, SO.Text))
+        .property(EpProperties.stringEp(Labels.from("source", "Source",
+            "The source of the article"), Source, SO.Text))
+        .property(EpProperties.stringEp(Labels.from("url", "URL",
+            "The URL of the article"), Url, SO.ContentUrl))
+        .property(EpProperties.stringEp(Labels.from("summary", "Summary",
+            "A short summary of the article"), Summary, SO.Text))
+        .property(EpProperties.stringEp(Labels.from("related", "Related",
+            "A comma-separated list of related stock symbols"), Related, SO.Text))
+        .property(EpProperties.stringEp(Labels.from("image", "Image",
+            "Link to an image related to the news article"), Image, SO.Image))
+        .property(EpProperties.stringEp(Labels.from("lang", "Language",
+            "The language the article is writte in"), Lang, SO.InLanguage))
+        .property(EpProperties.stringEp(Labels.from("paywall", "Has Paywall",
+                "Indicates whether the article is behind a paywall"), HasPaywall,
+            SO.Text))
+        .build();
   }
 
   @Override
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java
index 04618688a..db05e7060 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java
@@ -19,10 +19,10 @@
 package org.apache.streampipes.connect.adapters.iex;
 
 import org.apache.streampipes.connect.adapter.Adapter;
-import org.apache.streampipes.connect.api.exception.AdapterException;
-import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.connect.adapter.util.PollingSettings;
 import org.apache.streampipes.connect.adapters.iex.model.IexStockData;
+import org.apache.streampipes.connect.api.exception.AdapterException;
+import org.apache.streampipes.connect.api.exception.ParseException;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -59,12 +59,12 @@ public class IexCloudStockAdapter extends IexCloudAdapter {
   @Override
   public SpecificAdapterStreamDescription declareModel() {
     return SpecificDataStreamAdapterBuilder.create(ID)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-            .withLocales(Locales.EN)
-            .category(AdapterType.Finance)
-            .requiredSecret(Labels.withId(TOKEN_KEY))
-            .requiredTextParameter(Labels.withId(STOCK_SYMBOL_KEY))
-            .build();
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .category(AdapterType.Finance)
+        .requiredSecret(Labels.withId(TOKEN_KEY))
+        .requiredTextParameter(Labels.withId(STOCK_SYMBOL_KEY))
+        .build();
 
   }
 
@@ -79,8 +79,7 @@ public class IexCloudStockAdapter extends IexCloudAdapter {
       outMap.put(LatestPrice, rawModel.getLatestPrice());
 
       adapterPipeline.process(outMap);
-    } catch (
-            IOException e) {
+    } catch (IOException e) {
       e.printStackTrace();
     }
   }
@@ -96,14 +95,15 @@ public class IexCloudStockAdapter extends IexCloudAdapter {
   }
 
   @Override
-  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException, ParseException {
+  public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription)
+      throws AdapterException, ParseException {
     return GuessSchemaBuilder.create()
-            .property(EpProperties.timestampProperty(LatestUpdate))
-            .property(EpProperties.stringEp(Labels.from("symbol", "Symbol",
-                    "The stock symbol"), Symbol, SO.Text))
-            .property(EpProperties.doubleEp(Labels.from("latest-price", "Latest price",
-                    "The latest stock price"), LatestPrice, SO.Number))
-            .build();
+        .property(EpProperties.timestampProperty(LatestUpdate))
+        .property(EpProperties.stringEp(Labels.from("symbol", "Symbol",
+            "The stock symbol"), Symbol, SO.Text))
+        .property(EpProperties.doubleEp(Labels.from("latest-price", "Latest price",
+            "The latest stock price"), LatestPrice, SO.Number))
+        .build();
   }
 
   @Override
diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/model/IexNewsData.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/model/IexNewsData.java
index 85621e506..06c912c2c 100644
--- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/model/IexNewsData.java
+++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/model/IexNewsData.java
@@ -26,95 +26,95 @@ import javax.annotation.Generated;
 @SuppressWarnings("unused")
 public class IexNewsData {
 
-    @SerializedName("datetime")
-    private Long mDatetime;
-    @SerializedName("hasPaywall")
-    private Boolean mHasPaywall;
-    @SerializedName("headline")
-    private String mHeadline;
-    @SerializedName("image")
-    private String mImage;
-    @SerializedName("lang")
-    private String mLang;
-    @SerializedName("related")
-    private String mRelated;
-    @SerializedName("source")
-    private String mSource;
-    @SerializedName("summary")
-    private String mSummary;
-    @SerializedName("url")
-    private String mUrl;
-
-    public Long getDatetime() {
-        return mDatetime;
-    }
-
-    public void setDatetime(Long datetime) {
-        mDatetime = datetime;
-    }
-
-    public Boolean getHasPaywall() {
-        return mHasPaywall;
-    }
-
-    public void setHasPaywall(Boolean hasPaywall) {
-        mHasPaywall = hasPaywall;
-    }
-
-    public String getHeadline() {
-        return mHeadline;
-    }
-
-    public void setHeadline(String headline) {
-        mHeadline = headline;
-    }
-
-    public String getImage() {
-        return mImage;
-    }
-
-    public void setImage(String image) {
-        mImage = image;
-    }
-
-    public String getLang() {
-        return mLang;
-    }
-
-    public void setLang(String lang) {
-        mLang = lang;
-    }
-
-    public String getRelated() {
-        return mRelated;
-    }
-
-    public void setRelated(String related) {
-        mRelated = related;
-    }
-
-    public String getSource() {
-        return mSource;
-    }
-
-    public void setSource(String source) {
-        mSource = source;
-    }
-
-    public String getSummary() {
-        return mSummary;
-    }
-
-    public void setSummary(String summary) {
-        mSummary = summary;
-    }
-
-    public String getUrl() {
-        return mUrl;
-    }
-
-    public void setUrl(String url) {
-        mUrl = url;
-    }
+  @SerializedName("datetime")
+  private Long mDatetime;
+  @SerializedName("hasPaywall")
+  private Boolean mHasPaywall;
+  @SerializedName("headline")
+  private String mHeadline;
+  @SerializedName("image")
+  private String mImage;
+  @SerializedName("lang")
+  private String mLang;
+  @SerializedName("related")
+  private String mRelated;
+  @SerializedName("source")
+  private String mSource;
+  @SerializedName("summary")
+  private String mSummary;
+  @SerializedName("url")
+  private String mUrl;
+
+  public Long getDatetime() {
+    return mDatetime;
+  }
+
+  public void setDatetime(Long datetime) {
+    mDatetime = datetime;
+  }
+
+  public Boolean getHasPaywall() {
+    return mHasPaywall;
+  }
+
+  public void setHasPaywall(Boolean hasPaywall) {
+    mHasPaywall = hasPaywall;
+  }
+
+  public String getHeadline() {
+    return mHeadline;
+  }
+
+  public void setHeadline(String headline) {
+    mHeadline = headline;
+  }
+
+  public String getImage() {
+    return mImage;
+  }
+
+  public void setImage(String image) {
+    mImage = image;
+  }
+
+  public String getLang() {
+    return mLang;
+  }
+
+  public void setLang(String lang) {
+    mLang = lang;
+  }
+
+  public String getRelated() {
... 5995 lines suppressed ...


[streampipes] 02/02: [hotfix] Update checkstyle plugin as described in #851

Posted by ze...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit fd20ba66158c20133027161a51d9f9c75a38dfe8
Author: Philipp Zehnder <te...@users.noreply.github.com>
AuthorDate: Mon Dec 5 21:45:48 2022 +0100

    [hotfix] Update checkstyle plugin as described in #851
---
 .../streampipes-connect-adapters-iiot/pom.xml               | 13 -------------
 streampipes-extensions/streampipes-connect-adapters/pom.xml | 13 -------------
 2 files changed, 26 deletions(-)

diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
index 3c6ed5a30..304a7f977 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
@@ -267,19 +267,6 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>validate</id>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <logViolationsToConsole>true</logViolationsToConsole>
-                    <failOnViolation>true</failOnViolation>
-                </configuration>
             </plugin>
         </plugins>
         <finalName>streampipes-connect-adapters-iiot</finalName>
diff --git a/streampipes-extensions/streampipes-connect-adapters/pom.xml b/streampipes-extensions/streampipes-connect-adapters/pom.xml
index 140000153..539d2b634 100644
--- a/streampipes-extensions/streampipes-connect-adapters/pom.xml
+++ b/streampipes-extensions/streampipes-connect-adapters/pom.xml
@@ -216,19 +216,6 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>validate</id>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <logViolationsToConsole>true</logViolationsToConsole>
-                    <failOnViolation>true</failOnViolation>
-                </configuration>
             </plugin>
         </plugins>
         <finalName>streampipes-connect-adapters</finalName>