You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2020/05/24 13:59:56 UTC

[incubator-streampipes-extensions] 03/03: [STREAMPIPES-141] Extract assets from adapter descriptions

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

riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git

commit b09a7dfeb503677b7b00c269a48ccdc5934fc2a2
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Sun May 24 15:59:37 2020 +0200

    [STREAMPIPES-141] Extract assets from adapter descriptions
---
 .../adapters/coindesk/CoindeskBitcoinAdapter.java  |  14 ++++---
 .../connect/adapters/gdelt/GdeltAdapter.java       |  10 +++--
 .../connect/adapters/iex/IexCloudAdapter.java      |   7 +++-
 .../connect/adapters/iex/IexCloudNewsAdapter.java  |  13 ++++---
 .../connect/adapters/iex/IexCloudStockAdapter.java |  12 +++---
 .../adapters/influxdb/InfluxDbSetAdapter.java      |  26 ++++++-------
 .../adapters/influxdb/InfluxDbStreamAdapter.java   |  28 +++++++-------
 .../connect/adapters/mysql/MySqlSetAdapter.java    |  23 +++++------
 .../connect/adapters/mysql/MySqlStreamAdapter.java |  23 +++++------
 .../trafficcamera/NswTrafficCameraAdapter.java     |  11 +++---
 .../connect/adapters/opcua/OpcUaAdapter.java       |  36 ++++++++++--------
 .../adapters/simulator/RandomDataSetAdapter.java   |  14 +++----
 .../simulator/RandomDataStreamAdapter.java         |  11 +++---
 .../connect/adapters/slack/SlackAdapter.java       |  10 +++--
 .../wikipedia/WikipediaEditedArticlesAdapter.java  |   8 ++--
 .../wikipedia/WikipediaNewArticlesAdapter.java     |   9 +++--
 .../connect/protocol/set/FileProtocol.java         |   9 +++--
 .../connect/protocol/set/HttpProtocol.java         |   9 +++--
 .../protocol/stream/FileStreamProtocol.java        |  19 +++++-----
 .../protocol/stream/HttpStreamProtocol.java        |  12 +++---
 .../connect/protocol/stream/KafkaProtocol.java     |  23 ++++++-----
 .../protocol/stream/pulsar/PulsarProtocol.java     |  16 ++++----
 .../documentation.md                               |  38 +++++++++++++++++++
 .../icon.png                                       | Bin 0 -> 17868 bytes
 .../strings.en                                     |   6 +++
 .../documentation.md                               |  36 ++++++++++++++++++
 .../icon.png                                       | Bin 0 -> 33450 bytes
 .../strings.en                                     |   4 ++
 .../documentation.md                               |  42 +++++++++++++++++++++
 .../icon.png                                       | Bin 0 -> 15675 bytes
 .../strings.en                                     |   8 ++++
 .../documentation.md                               |  41 ++++++++++++++++++++
 .../icon.png                                       | Bin 0 -> 15675 bytes
 .../strings.en                                     |   8 ++++
 .../documentation.md                               |  35 +++++++++++++++++
 .../icon.png                                       | Bin 0 -> 9982 bytes
 .../strings.en                                     |  23 +++++++++++
 .../documentation.md                               |  35 +++++++++++++++++
 .../icon.png                                       | Bin 0 -> 9982 bytes
 .../strings.en                                     |  26 +++++++++++++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 99909 bytes
 .../strings.en                                     |  23 +++++++++++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 99909 bytes
 .../strings.en                                     |  24 ++++++++++++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 3016 bytes
 .../strings.en                                     |   6 +++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 5087 bytes
 .../strings.en                                     |  28 ++++++++++++++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 13079 bytes
 .../strings.en                                     |   9 +++++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 13079 bytes
 .../strings.en                                     |   6 +++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 17473 bytes
 .../strings.en                                     |   6 +++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 65221 bytes
 .../strings.en                                     |   3 ++
 .../documentation.md                               |  33 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 65221 bytes
 .../strings.en                                     |   3 ++
 .../documentation.md                               |  32 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 12881 bytes
 .../strings.en                                     |  16 ++++++++
 .../documentation.md                               |  32 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 17467 bytes
 .../strings.en                                     |  10 +++++
 .../documentation.md                               |  32 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 9110 bytes
 .../strings.en                                     |  13 +++++++
 .../documentation.md                               |  32 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 22890 bytes
 .../strings.en                                     |  13 +++++++
 .../documentation.md                               |  32 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 12881 bytes
 .../strings.en                                     |   7 ++++
 .../documentation.md                               |  32 ++++++++++++++++
 .../icon.png                                       | Bin 0 -> 17467 bytes
 .../strings.en                                     |   7 ++++
 85 files changed, 1153 insertions(+), 155 deletions(-)

diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java
index 2027bce..e0757f9 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/coindesk/CoindeskBitcoinAdapter.java
@@ -33,7 +33,9 @@ import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.EpProperties;
 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.vocabulary.SO;
 
 import java.io.IOException;
@@ -45,6 +47,7 @@ public class CoindeskBitcoinAdapter extends PullAdapter {
 
   public static final String ID = "org.apache.streampipes.connect.adapters.coindesk";
 
+  private static final String CURRENCY_KEY = "currency";
   private static final String CoindeskUrl = "https://api.coindesk.com/v1/bpi/currentprice.json";
 
   private Currency currency;
@@ -56,7 +59,7 @@ public class CoindeskBitcoinAdapter extends PullAdapter {
   public CoindeskBitcoinAdapter(SpecificAdapterStreamDescription adapterDescription) {
     super(adapterDescription);
     ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
-    this.currency = Currency.valueOf(extractor.selectedSingleValueOption("currency"));
+    this.currency = Currency.valueOf(extractor.selectedSingleValueOption(CURRENCY_KEY));
 
   }
 
@@ -93,12 +96,11 @@ public class CoindeskBitcoinAdapter extends PullAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    return SpecificDataStreamAdapterBuilder.create(ID, "Coindesk Bitcoin Stream", "The current " +
-            "bitcoin price from the Coindesk API.")
-            .iconUrl("coindesk.png")
+    return SpecificDataStreamAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.Finance)
-            .requiredSingleValueSelection(Labels.from("currency", "Currency", "The currency of the" +
-                    " bitcoin rate"), Options.from("USD", "EUR", "GBP"))
+            .requiredSingleValueSelection(Labels.withId(CURRENCY_KEY), Options.from("USD", "EUR", "GBP"))
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java
index fd88c34..743ccfa 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/gdelt/GdeltAdapter.java
@@ -29,6 +29,8 @@ import org.apache.streampipes.model.schema.EventProperty;
 import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
 
 import java.io.BufferedReader;
@@ -44,6 +46,8 @@ 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() {
@@ -61,10 +65,10 @@ public class GdeltAdapter extends PullAdapter {
 
     @Override
     public SpecificAdapterStreamDescription declareModel() {
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID, "GDELT", "Global Database of Society")
-                .iconUrl("gdelt.png")
+        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
                 .build();
-        description.setAppId(ID);
         return  description;
     }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java
index 6aa59fd..648eaa4 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudAdapter.java
@@ -30,6 +30,9 @@ 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 TOKEN_KEY = "token";
+  protected static final String STOCK_SYMBOL_KEY = "stock-symbol";
+
   protected String apiToken;
   protected String stockQuote;
   private String iexCloudInstanceUrl;
@@ -38,8 +41,8 @@ public abstract class IexCloudAdapter extends PullAdapter {
   public IexCloudAdapter(SpecificAdapterStreamDescription adapterDescription, String restPath) {
     super(adapterDescription);
     ParameterExtractor extractor = new ParameterExtractor(adapterDescription.getConfig());
-    this.apiToken = extractor.secretValue("token");
-    this.stockQuote = extractor.singleValue("stock");
+    this.apiToken = extractor.secretValue(TOKEN_KEY);
+    this.stockQuote = extractor.singleValue(STOCK_SYMBOL_KEY);
     this.iexCloudInstanceUrl = IexCloudBaseUrl + stockQuote + restPath + Token + apiToken;
 
   }
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java
index a51525e..3aca9be 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudNewsAdapter.java
@@ -30,6 +30,8 @@ import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.EpProperties;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.vocabulary.SO;
 
 import java.io.IOException;
@@ -40,6 +42,7 @@ import java.util.concurrent.TimeUnit;
 public class IexCloudNewsAdapter extends IexCloudAdapter {
 
   public static final String ID = "org.apache.streampipes.connect.adapters.iex.news";
+
   private static final String News = "/news";
 
   private static final String Timestamp = "timestamp";
@@ -92,12 +95,12 @@ public class IexCloudNewsAdapter extends IexCloudAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    return SpecificDataStreamAdapterBuilder.create(ID, "IEX Cloud News", "Fetches news for a " +
-            "given company (10 news / minutes maximum)")
-            .iconUrl("iexcloud.png")
+    return SpecificDataStreamAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.Finance, AdapterType.News)
-            .requiredSecret(Labels.from("token", "API Token", "The IEXCloud API token"))
-            .requiredTextParameter(Labels.from("stock", "Stock", "The stock symbol (e.g., AAPL)"))
+            .requiredSecret(Labels.withId(TOKEN_KEY))
+            .requiredTextParameter(Labels.withId(STOCK_SYMBOL_KEY))
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java
index f9390ec..1860e9f 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/iex/IexCloudStockAdapter.java
@@ -30,6 +30,8 @@ import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.EpProperties;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.vocabulary.SO;
 
 import java.io.IOException;
@@ -56,12 +58,12 @@ public class IexCloudStockAdapter extends IexCloudAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    return SpecificDataStreamAdapterBuilder.create(ID, "IEX Cloud Stock Quotes", "Live stock data" +
-            " provided by <a href='https://iexcloud.io'>IEX Cloud</a>")
-            .iconUrl("iexcloud.png")
+    return SpecificDataStreamAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.Finance)
-            .requiredSecret(Labels.from("token", "API Token", "The IEXCloud API token"))
-            .requiredTextParameter(Labels.from("stock", "Stock", "The stock symbol (e.g., AAPL)"))
+            .requiredSecret(Labels.withId(TOKEN_KEY))
+            .requiredTextParameter(Labels.withId(STOCK_SYMBOL_KEY))
             .build();
 
   }
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbSetAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbSetAdapter.java
index 4cb4d3a..42c17bd 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbSetAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbSetAdapter.java
@@ -28,15 +28,17 @@ import org.apache.streampipes.model.connect.adapter.SpecificAdapterSetDescriptio
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataSetAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.helpers.Tuple2;
+import org.apache.streampipes.sdk.utils.Assets;
 
 import java.util.List;
 import java.util.Map;
 
 public class InfluxDbSetAdapter extends SpecificDataSetAdapter {
 
-    public static final String ID = "http://streampipes.org/adapter/specific/influxdbset";
+    public static final String ID = "org.apache.streampipes.connect.adapters.influxdb.set";
     public static final int BATCH_SIZE = 8192;
 
     private InfluxDbClient influxDbClient;
@@ -99,18 +101,16 @@ public class InfluxDbSetAdapter extends SpecificDataSetAdapter {
 
     @Override
     public SpecificAdapterSetDescription declareModel() {
-        SpecificAdapterSetDescription description = SpecificDataSetAdapterBuilder.create(
-                ID,
-                "InfluxDB Set Adapter",
-                "Creates a data set for a InfluxDB measurement")
-                .iconUrl("influxdb.png")
-                .requiredTextParameter(Labels.from(InfluxDbClient.HOST, "Hostname", "Hostname of the InfluxDB Server"))
-                .requiredIntegerParameter(Labels.from(InfluxDbClient.PORT, "Port", "Port of the InfluxDB Server"))
-                .requiredTextParameter(Labels.from(InfluxDbClient.DATABASE, "Database", "Name of the database"))
-                .requiredTextParameter(Labels.from(InfluxDbClient.MEASUREMENT, "Measurement", "Name of the measurement, which should be observed"))
-                .requiredTextParameter(Labels.from(InfluxDbClient.USERNAME, "Username", "The username to log into the InfluxDB"))
-                .requiredSecret(Labels.from(InfluxDbClient.PASSWORD, "Password", "The password to log into the InfluxDB"))
-                .requiredSingleValueSelection(Labels.from(InfluxDbClient.REPLACE_NULL_VALUES, "Replace Null Values", "Should null values in the incoming data be replace by defaults? If not, these events are skipped"),
+        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)))
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbStreamAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbStreamAdapter.java
index c37c747..dc3be82 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbStreamAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/influxdb/InfluxDbStreamAdapter.java
@@ -28,8 +28,10 @@ import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescrip
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.helpers.Tuple2;
+import org.apache.streampipes.sdk.utils.Assets;
 
 import java.util.List;
 import java.util.Map;
@@ -38,7 +40,7 @@ import static org.apache.streampipes.connect.adapters.influxdb.InfluxDbClient.ge
 
 public class InfluxDbStreamAdapter extends SpecificDataStreamAdapter {
 
-    public static final String ID = "org.apache.streampipes.connect.adapters.influxdb";
+    public static final String ID = "org.apache.streampipes.connect.adapters.influxdb.stream";
 
     private static final String POLLING_INTERVAL = "pollingInterval";
 
@@ -133,19 +135,17 @@ public class InfluxDbStreamAdapter extends SpecificDataStreamAdapter {
 
     @Override
     public SpecificAdapterStreamDescription declareModel() {
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(
-                ID,
-                "InfluxDB Stream Adapter",
-                "Creates a data stream for a InfluxDB measurement")
-                .iconUrl("influxdb.png")
-                .requiredTextParameter(Labels.from(InfluxDbClient.HOST, "Hostname", "Hostname of the InfluxDB Server (needs an \"http://\" in front)"))
-                .requiredIntegerParameter(Labels.from(InfluxDbClient.PORT, "Port", "Port of the InfluxDB Server (e.g. 8086"), 8086)
-                .requiredTextParameter(Labels.from(InfluxDbClient.DATABASE, "Database", "Name of the database"))
-                .requiredTextParameter(Labels.from(InfluxDbClient.MEASUREMENT, "Measurement", "Name of the measurement, which should be observed"))
-                .requiredTextParameter(Labels.from(InfluxDbClient.USERNAME, "Username", "The username to log into the InfluxDB"))
-                .requiredSecret(Labels.from(InfluxDbClient.PASSWORD, "Password", "The password to log into the InfluxDB"))
-                .requiredIntegerParameter(Labels.from(POLLING_INTERVAL, "Polling interval (MS)", "How often the database should be checked for new entries (in MS)"))
-                .requiredSingleValueSelection(Labels.from(InfluxDbClient.REPLACE_NULL_VALUES, "Replace Null Values", "Should null values in the incoming data be replace by defaults? If not, these events are skipped"),
+        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)))
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlSetAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlSetAdapter.java
index aab68ed..a321ffe 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlSetAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlSetAdapter.java
@@ -27,8 +27,10 @@ import org.apache.streampipes.model.connect.adapter.SpecificAdapterSetDescriptio
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataSetAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.helpers.Tuple2;
+import org.apache.streampipes.sdk.utils.Assets;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -124,17 +126,16 @@ public class MySqlSetAdapter extends SpecificDataSetAdapter {
 
     @Override
     public SpecificAdapterSetDescription declareModel() {
-        SpecificAdapterSetDescription description = SpecificDataSetAdapterBuilder.create(ID,
-                "MySql Set Adapter",
-                "Creates a data set of a SQL table")
-                .iconUrl("sql.png")
-                .requiredTextParameter(Labels.from(MySqlClient.HOST, "Hostname", "Hostname of the MySql Server"))
-                .requiredIntegerParameter(Labels.from(MySqlClient.PORT, "Port", "Port of the MySql Server. Default: 3306"), 3306)
-                .requiredTextParameter(Labels.from(MySqlClient.DATABASE, "Database", "Database in which the table is located"))
-                .requiredTextParameter(Labels.from(MySqlClient.TABLE, "Table", "Table which should be watched"))
-                .requiredTextParameter(Labels.from(MySqlClient.USER, "Username", "Username of the user"))
-                .requiredSecret(Labels.from(MySqlClient.PASSWORD, "Password", "Password of the user"))
-                .requiredSingleValueSelection(Labels.from(MySqlClient.REPLACE_NULL_VALUES, "Replace Null Values", "Should null values in the incoming data be replace by defaults? If not, these events are skipped"),
+        SpecificAdapterSetDescription description = SpecificDataSetAdapterBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
+                .requiredTextParameter(Labels.withId(MySqlClient.HOST))
+                .requiredIntegerParameter(Labels.withId(MySqlClient.PORT), 3306)
+                .requiredTextParameter(Labels.withId(MySqlClient.DATABASE))
+                .requiredTextParameter(Labels.withId(MySqlClient.TABLE))
+                .requiredTextParameter(Labels.withId(MySqlClient.USER))
+                .requiredSecret(Labels.withId(MySqlClient.PASSWORD))
+                .requiredSingleValueSelection(Labels.withId(MySqlClient.REPLACE_NULL_VALUES),
                         Options.from(
                                 new Tuple2<>("Yes", MySqlClient.DO_REPLACE_NULL_VALUES),
                                 new Tuple2<>("No", MySqlClient.DO_NOT_REPLACE_NULL_VALUES)))
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlStreamAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlStreamAdapter.java
index c152c84..1e5840d 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlStreamAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/mysql/MySqlStreamAdapter.java
@@ -30,8 +30,10 @@ import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescrip
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.helpers.Options;
 import org.apache.streampipes.sdk.helpers.Tuple2;
+import org.apache.streampipes.sdk.utils.Assets;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -67,17 +69,16 @@ public class MySqlStreamAdapter extends SpecificDataStreamAdapter {
 
     @Override
     public SpecificAdapterStreamDescription declareModel() {
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID,
-                "MySql Stream Adapter",
-                "Creates a data stream for a SQL table")
-                .iconUrl("sql.png")
-                .requiredTextParameter(Labels.from(MySqlClient.HOST, "Hostname", "Hostname of the MySql Server"))
-                .requiredIntegerParameter(Labels.from(MySqlClient.PORT, "Port", "Port of the MySql Server. Default: 3306"), 3306)
-                .requiredTextParameter(Labels.from(MySqlClient.DATABASE, "Database", "Database in which the table is located"))
-                .requiredTextParameter(Labels.from(MySqlClient.TABLE, "Table", "Table which should be watched"))
-                .requiredTextParameter(Labels.from(MySqlClient.USER, "Username", "Username of the user"))
-                .requiredSecret(Labels.from(MySqlClient.PASSWORD, "Password", "Password of the user"))
-                .requiredSingleValueSelection(Labels.from(MySqlClient.REPLACE_NULL_VALUES, "Replace Null Values", "Should null values in the incoming data be replace by defaults? If not, these events are skipped"),
+        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
+                .requiredTextParameter(Labels.withId(MySqlClient.HOST))
+                .requiredIntegerParameter(Labels.withId(MySqlClient.PORT), 3306)
+                .requiredTextParameter(Labels.withId(MySqlClient.DATABASE))
+                .requiredTextParameter(Labels.withId(MySqlClient.TABLE))
+                .requiredTextParameter(Labels.withId(MySqlClient.USER))
+                .requiredSecret(Labels.withId(MySqlClient.PASSWORD))
+                .requiredSingleValueSelection(Labels.withId(MySqlClient.REPLACE_NULL_VALUES),
                         Options.from(
                                 new Tuple2<>("Yes", MySqlClient.DO_REPLACE_NULL_VALUES),
                                 new Tuple2<>("No", MySqlClient.DO_NOT_REPLACE_NULL_VALUES)))
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/nswaustralia/trafficcamera/NswTrafficCameraAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/nswaustralia/trafficcamera/NswTrafficCameraAdapter.java
index 72b1364..7cee65b 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/nswaustralia/trafficcamera/NswTrafficCameraAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/nswaustralia/trafficcamera/NswTrafficCameraAdapter.java
@@ -32,6 +32,8 @@ import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.EpProperties;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
 
 import java.io.IOException;
@@ -86,12 +88,11 @@ public class NswTrafficCameraAdapter extends PullAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID, "NSW Traffic Cameras", "Traffic camera " +
-            "images produced by NSW Australia")
+    SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.OpenData)
-            .requiredTextParameter(Labels.from("api-key", "API Key", "The TfNSW " +
-                    "API key"))
-            .iconUrl("nsw.png")
+            .requiredTextParameter(Labels.withId("api-key"))
             .build();
 
     description.setAppId(ID);
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
index 7deb38a..80f393b 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
@@ -18,15 +18,10 @@
 
 package org.apache.streampipes.connect.adapters.opcua;
 
-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;
 import org.apache.streampipes.connect.adapter.Adapter;
 import org.apache.streampipes.connect.adapter.exception.AdapterException;
 import org.apache.streampipes.connect.adapter.exception.ParseException;
 import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
-import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
-import org.apache.streampipes.container.api.ResolvesContainerProvidedOptions;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
@@ -38,8 +33,16 @@ import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuild
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
 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;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class OpcUaAdapter extends SpecificDataStreamAdapter {
 
@@ -84,19 +87,20 @@ public class OpcUaAdapter extends SpecificDataStreamAdapter {
     @Override
     public SpecificAdapterStreamDescription declareModel() {
 
-        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID, "OPC UA", "Reads values from an OPC-UA server")
-                .iconUrl("opc.png")
+        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
                 .category(AdapterType.Generic, AdapterType.Manufacturing)
-                .requiredAlternatives(Labels.from(OPC_HOST_OR_URL, "OPC Server", ""),
-                        Alternatives.from(Labels.from(OPC_URL, "URL", ""),
-                                StaticProperties.stringFreeTextProperty(Labels.from(OPC_SERVER_URL, "URL", "Example: opc.tcp://test-server.com:4840"))
+                .requiredAlternatives(Labels.withId(OPC_HOST_OR_URL),
+                        Alternatives.from(Labels.withId(OPC_URL),
+                                StaticProperties.stringFreeTextProperty(Labels.withId(OPC_SERVER_URL))
                         ),
-                        Alternatives.from(Labels.from(OPC_HOST, "Host/Port", ""),
+                        Alternatives.from(Labels.withId(OPC_HOST),
                                 StaticProperties.group(Labels.withId("host-port"),
-                                        StaticProperties.stringFreeTextProperty(Labels.from(OPC_SERVER_HOST, "Host", "Example: test-server.com (No leading opc.tcp://) ")),
-                                        StaticProperties.stringFreeTextProperty(Labels.from(OPC_SERVER_PORT, "Port", "Example: 4840")))))
-                .requiredTextParameter(Labels.from(NAMESPACE_INDEX, "Namespace Index", "Example: 2"))
-                .requiredTextParameter(Labels.from(NODE_ID, "Node Id", "Id of the Node to read the values from"))
+                                        StaticProperties.stringFreeTextProperty(Labels.withId(OPC_SERVER_HOST)),
+                                        StaticProperties.stringFreeTextProperty(Labels.withId(OPC_SERVER_PORT)))))
+                .requiredTextParameter(Labels.withId(NAMESPACE_INDEX))
+                .requiredTextParameter(Labels.withId(NODE_ID))
                 .build();
         description.setAppId(ID);
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataSetAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataSetAdapter.java
index f231acf..fa68270 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataSetAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataSetAdapter.java
@@ -27,6 +27,8 @@ import org.apache.streampipes.model.connect.adapter.SpecificAdapterSetDescriptio
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataSetAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 
 public class RandomDataSetAdapter extends SpecificDataSetAdapter {
 
@@ -51,14 +53,12 @@ public class RandomDataSetAdapter extends SpecificDataSetAdapter {
 
   @Override
   public SpecificAdapterSetDescription declareModel() {
-    return SpecificDataSetAdapterBuilder.create(ID, "Random Data Simulator (Set)",
-            "Publishes a bounded stream of random events")
-            .iconUrl("dice.png")
+    return SpecificDataSetAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION)
+            .withLocales(Locales.EN)
             .category(AdapterType.Debugging)
-            .requiredIntegerParameter(Labels.from(WaitTimeMs, "Wait Time (MS)", "The time to " +
-                    "wait between two events in milliseconds"))
-            .requiredIntegerParameter(Labels.from(NumberOfEvents, "Number of Events", "The number" +
-                    " of events to send."))
+            .requiredIntegerParameter(Labels.withId(WaitTimeMs))
+            .requiredIntegerParameter(Labels.withId(NumberOfEvents))
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataStreamAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataStreamAdapter.java
index ac883c7..1c1116a 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataStreamAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/simulator/RandomDataStreamAdapter.java
@@ -27,6 +27,8 @@ import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescrip
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 
 public class RandomDataStreamAdapter extends SpecificDataStreamAdapter {
 
@@ -49,12 +51,11 @@ public class RandomDataStreamAdapter extends SpecificDataStreamAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    return SpecificDataStreamAdapterBuilder.create(ID, "Random Data Simulator (Stream)",
-            "Publishes an endless stream of random events")
-            .iconUrl("dice.png")
+    return SpecificDataStreamAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.Debugging)
-            .requiredIntegerParameter(Labels.from(WaitTimeMs, "Wait Time (MS)", "The time to " +
-                    "wait between two events in milliseconds"))
+            .requiredIntegerParameter(Labels.withId(WaitTimeMs))
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/slack/SlackAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/slack/SlackAdapter.java
index 18c6a06..a51e61d 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/slack/SlackAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/slack/SlackAdapter.java
@@ -28,6 +28,8 @@ import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.vocabulary.SO;
 
 import static org.apache.streampipes.sdk.helpers.EpProperties.stringEp;
@@ -59,11 +61,11 @@ public class SlackAdapter extends SpecificDataStreamAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    return SpecificDataStreamAdapterBuilder.create(ID, "Slack", "Subscribes to a Slack channel")
+    return SpecificDataStreamAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.SocialMedia)
-            .iconUrl("slack.png")
-            .requiredTextParameter(Labels.from(SlackToken, "Slack API Token", "The API token of " +
-                    "your Slack workspace"))
+            .requiredTextParameter(Labels.withId(SlackToken))
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaEditedArticlesAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaEditedArticlesAdapter.java
index 1828e35..50190c4 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaEditedArticlesAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaEditedArticlesAdapter.java
@@ -21,6 +21,8 @@ import org.apache.streampipes.connect.adapter.Adapter;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 
 public class WikipediaEditedArticlesAdapter extends WikipediaAdapter {
 
@@ -38,10 +40,10 @@ public class WikipediaEditedArticlesAdapter extends WikipediaAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    return SpecificDataStreamAdapterBuilder.create(ID, "Wikipedia Edits", "Continuously publishes" +
-            " recent Wikipedia edits")
+    return SpecificDataStreamAdapterBuilder.create(ID)
+            .withLocales(Locales.EN)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
             .category(AdapterType.SocialMedia, AdapterType.OpenData)
-            .iconUrl("wikipedia.png")
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaNewArticlesAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaNewArticlesAdapter.java
index 3916c2f..24448cf 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaNewArticlesAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/wikipedia/WikipediaNewArticlesAdapter.java
@@ -21,6 +21,8 @@ import org.apache.streampipes.connect.adapter.Adapter;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
 
 public class WikipediaNewArticlesAdapter extends WikipediaAdapter {
 
@@ -38,11 +40,10 @@ public class WikipediaNewArticlesAdapter extends WikipediaAdapter {
 
   @Override
   public SpecificAdapterStreamDescription declareModel() {
-    return SpecificDataStreamAdapterBuilder.create(ID, "Wikipedia New Articles", "Continuously " +
-            "publishes" +
-            " articles recently created on Wikipedia")
+    return SpecificDataStreamAdapterBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.SocialMedia, AdapterType.OpenData)
-            .iconUrl("wikipedia.png")
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/FileProtocol.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/FileProtocol.java
index 76d918f..6e1d667 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/FileProtocol.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/FileProtocol.java
@@ -19,6 +19,8 @@
 package org.apache.streampipes.connect.protocol.set;
 
 
+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.SendToPipeline;
@@ -61,11 +63,12 @@ public class FileProtocol extends Protocol {
 
     @Override
     public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID, "File Set", "Reads the content from a local file.")
+        return ProtocolDescriptionBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
                 .sourceType(AdapterSourceType.SET)
                 .category(AdapterType.Generic)
-                .iconUrl("file.png")
-                .requiredFile(Labels.from("filePath", "File", "File Path"))
+                .requiredFile(Labels.withId("filePath"))
                 .build();
     }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/HttpProtocol.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/HttpProtocol.java
index 492626e..ba913cf 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/HttpProtocol.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/set/HttpProtocol.java
@@ -19,6 +19,8 @@
 package org.apache.streampipes.connect.protocol.set;
 
 import org.apache.http.client.fluent.Request;
+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.SendToPipeline;
@@ -61,11 +63,12 @@ public class HttpProtocol extends Protocol {
 
     @Override
     public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID, "HTTP Set", "Regularly poll an HTTP endpoint")
+        return ProtocolDescriptionBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
                 .category(AdapterType.Generic)
                 .sourceType(AdapterSourceType.SET)
-                .iconUrl("rest.png")
-                .requiredTextParameter(Labels.from("url", "Url", "Example: http(s)://test-server.com"))
+                .requiredTextParameter(Labels.withId("url"))
                 .build();
     }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/FileStreamProtocol.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/FileStreamProtocol.java
index d8ff199..3e29488 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/FileStreamProtocol.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/FileStreamProtocol.java
@@ -18,6 +18,8 @@
 
 package org.apache.streampipes.connect.protocol.stream;
 
+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.SendToPipeline;
@@ -174,19 +176,16 @@ public class FileStreamProtocol extends Protocol {
 
   @Override
   public ProtocolDescription declareModel() {
-    return ProtocolDescriptionBuilder.create(ID, "File Stream", "Continuously streams the content of a " +
-            "file.")
+    return ProtocolDescriptionBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .sourceType(AdapterSourceType.STREAM)
             .category(AdapterType.Generic)
-            .iconUrl("file.png")
-            .requiredFile(Labels.from("filePath", "File", "File path"))
-            .requiredSingleValueSelection(Labels.from("replaceTimestamp", "Use current time for timestamp?",
-                    "Keep timestamps from File or replace with current."),
+            .requiredFile(Labels.withId("filePath"))
+            .requiredSingleValueSelection(Labels.withId("replaceTimestamp"),
                 Options.from("True", "False"))
-            .requiredFloatParameter(Labels.from("speed", "Replay Speed",
-                    "Replay Speed. For original speed set it to 1"))
-            .requiredFloatParameter(Labels.from("time-between-replay", "Time Between Replay",
-                    "Time between two rounds of replay. Time in seconds"))
+            .requiredFloatParameter(Labels.withId("speed"))
+            .requiredFloatParameter(Labels.withId("time-between-replay"))
             .build();
   }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/HttpStreamProtocol.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/HttpStreamProtocol.java
index c17adfa..c37ff07 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/HttpStreamProtocol.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/HttpStreamProtocol.java
@@ -19,6 +19,8 @@
 package org.apache.streampipes.connect.protocol.stream;
 
 import org.apache.http.client.fluent.Request;
+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.adapter.exception.ParseException;
@@ -84,13 +86,13 @@ public class HttpStreamProtocol extends PullProtocol {
 
     @Override
     public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID, "HTTP Stream", "This is the " +
-                "description for the http stream protocol")
+        return ProtocolDescriptionBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
                 .sourceType(AdapterSourceType.STREAM)
                 .category(AdapterType.Generic)
-                .iconUrl("rest.png")
-                .requiredTextParameter(Labels.from(URL_PROPERTY, "Url", "Example: http(s)://test-server.com"))
-                .requiredIntegerParameter(Labels.from(INTERVAL_PROPERTY, "Interval", "Example: 5 (Polling interval in seconds)"))
+                .requiredTextParameter(Labels.withId(URL_PROPERTY))
+                .requiredIntegerParameter(Labels.withId(INTERVAL_PROPERTY))
                 //.requiredTextParameter(Labels.from(ACCESS_TOKEN_PROPERTY, "Access Token", "Http
                 // Access Token"))
                 .build();
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/KafkaProtocol.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/KafkaProtocol.java
index be5da3d..5959ad6 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/KafkaProtocol.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/KafkaProtocol.java
@@ -23,8 +23,6 @@ import org.apache.kafka.clients.consumer.*;
 import org.apache.kafka.common.TopicPartition;
 import org.apache.kafka.common.serialization.LongDeserializer;
 import org.apache.kafka.common.serialization.StringDeserializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.connect.SendToPipeline;
 import org.apache.streampipes.connect.adapter.exception.ParseException;
@@ -43,6 +41,10 @@ import org.apache.streampipes.sdk.builder.adapter.ProtocolDescriptionBuilder;
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
 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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -53,7 +55,7 @@ public class KafkaProtocol extends BrokerProtocol implements ResolvesContainerPr
 
     Logger logger = LoggerFactory.getLogger(KafkaProtocol.class);
 
-    public static final String ID = "rg.apache.streampipes.connect.protocol.stream.kafka";
+    public static final String ID = "org.apache.streampipes.connect.protocol.stream.kafka";
 
     private Thread thread;
     private SpKafkaConsumer kafkaConsumer;
@@ -78,17 +80,14 @@ public class KafkaProtocol extends BrokerProtocol implements ResolvesContainerPr
 
     @Override
     public ProtocolDescription declareModel() {
-        return ProtocolDescriptionBuilder.create(ID,"Apache Kafka","Consumes messages from an " +
-                "Apache Kafka broker")
-                .iconUrl("kafka.jpg")
+        return ProtocolDescriptionBuilder.create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
                 .category(AdapterType.Generic, AdapterType.Manufacturing)
                 .sourceType(AdapterSourceType.STREAM)
-                .requiredTextParameter(Labels.from("broker_url", "Broker Hostname",
-                        "Example: test.server.com (No protocol)"))
-                .requiredIntegerParameter(Labels.from("broker_port", "Broker Port", "Example: " +
-                        "9092"))
-                .requiredSingleValueSelectionFromContainer(Labels.from("topic", "Topic",
-                        "Example: test.topic"), Arrays.asList("broker_url", "broker_port"))
+                .requiredTextParameter(Labels.withId("broker_url"))
+                .requiredIntegerParameter(Labels.withId("broker_port"))
+                .requiredSingleValueSelectionFromContainer(Labels.withId("topic"), Arrays.asList("broker_url", "broker_port"))
                 .build();
     }
 
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/pulsar/PulsarProtocol.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/pulsar/PulsarProtocol.java
index 9c1276c..856eb5a 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/pulsar/PulsarProtocol.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/protocol/stream/pulsar/PulsarProtocol.java
@@ -19,6 +19,8 @@ package org.apache.streampipes.connect.protocol.stream.pulsar;
 
 import org.apache.pulsar.client.api.PulsarClient;
 import org.apache.pulsar.client.api.PulsarClientException;
+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.SendToPipeline;
@@ -95,16 +97,14 @@ public class PulsarProtocol extends BrokerProtocol implements ResolvesContainerP
 
   @Override
   public ProtocolDescription declareModel() {
-    return ProtocolDescriptionBuilder.create(ID,"Apache Pulsar","Consumes messages from an " +
-            "Apache Pulsar broker")
-            .iconUrl("pulsar.png")
+    return ProtocolDescriptionBuilder.create(ID)
+            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withLocales(Locales.EN)
             .category(AdapterType.Generic)
             .sourceType(AdapterSourceType.STREAM)
-            .requiredTextParameter(Labels.from(PULSAR_BROKER_HOST, "Broker Hostname",
-                    "Example: test.server.com"))
-            .requiredIntegerParameter(Labels.from(PULSAR_BROKER_PORT, "Broker Port", "Example: " +
-                    "6650"))
-            .requiredTextParameter(Labels.from(PULSAR_TOPIC, "Topic", ""))
+            .requiredTextParameter(Labels.withId(PULSAR_BROKER_HOST))
+            .requiredIntegerParameter(Labels.withId(PULSAR_BROKER_PORT), 6650)
+            .requiredTextParameter(Labels.withId(PULSAR_TOPIC))
 //            .requiredSingleValueSelectionFromContainer(Labels.from(PULSAR_TOPIC, "Topic",
 //                    "Example: topic"), Arrays.asList(PULSAR_BROKER_HOST, PULSAR_BROKER_PORT))
             .build();
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/documentation.md
new file mode 100644
index 0000000..986577b
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/documentation.md
@@ -0,0 +1,38 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Coindesk Bitcoin Price
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+This adapter continuously provides the current bitcoin price from the Coindesk API.
+
+## Configuration
+
+### Currency
+
+The current in which the price should be provided.
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/icon.png
new file mode 100644
index 0000000..420be61
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/strings.en
new file mode 100644
index 0000000..dbf7c4b
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.coindesk/strings.en
@@ -0,0 +1,6 @@
+org.apache.streampipes.connect.adapters.coindesk.title=Coindesk Bitcoin Price
+org.apache.streampipes.connect.adapters.coindesk.description=The current bitcoin price from the Coindesk API.
+
+currency.title=Currency
+currency.description=The currency of the bitcoin rate
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/documentation.md
new file mode 100644
index 0000000..85c0788
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/documentation.md
@@ -0,0 +1,36 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## GDELT - Global Database of Society
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+This adapter provides news events from the GDELT API.
+
+## Configuration
+
+(no futher configuration required)
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/icon.png
new file mode 100644
index 0000000..b9ec80c
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/strings.en
new file mode 100644
index 0000000..28a6f91
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.gdelt/strings.en
@@ -0,0 +1,4 @@
+org.apache.streampipes.connect.adapters.gdelt.title=GDELT
+org.apache.streampipes.connect.adapters.gdelt.description=Global Database of Society
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/documentation.md
new file mode 100644
index 0000000..6c61c7b
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/documentation.md
@@ -0,0 +1,42 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## IEX Cloud News
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+This adapter provides news events from the IEXCloud news API. An API key from IEXCloud is required.
+Visit <a href='https://iexcloud.io'>IEX Cloud</a> for more info.
+
+***
+
+## Configuration
+
+
+### API Token
+A valid API token from the IEXCloud API.
+
+### Stock Symbol
+A stock symbol that should be monitored.
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/icon.png
new file mode 100644
index 0000000..48afa81
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/strings.en
new file mode 100644
index 0000000..abc7ec3
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.news/strings.en
@@ -0,0 +1,8 @@
+org.apache.streampipes.connect.adapters.iex.news.title=IEX Cloud News
+org.apache.streampipes.connect.adapters.iex.news.description=Fetches news for a given company (10 news / minutes maximum)
+
+token.title=API Token
+token.description=The IEXCloud API token
+
+stock-symbol.title=Stock Symbol
+stock-symbol.description=The stock symbol (e.g., AAPL)
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/documentation.md
new file mode 100644
index 0000000..7add22f
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/documentation.md
@@ -0,0 +1,41 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## IEX Cloud Stock Quotes
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+This adapter provides news events from the IEXCloud news API. An API key from IEXCloud is required.
+Visit <a href='https://iexcloud.io'>IEX Cloud</a> for more info.
+
+***
+
+## Configuration
+
+
+### API Token
+A valid API token from the IEXCloud API.
+
+### Stock Symbol
+A stock symbol that should be monitored.
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/icon.png
new file mode 100644
index 0000000..48afa81
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/strings.en
new file mode 100644
index 0000000..ba15067
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.iex.stocks/strings.en
@@ -0,0 +1,8 @@
+org.apache.streampipes.connect.adapters.iex.stocks.title=IEX Cloud Stock Quotes
+org.apache.streampipes.connect.adapters.iex.stocks.description=Live stock data provided by the IEXCloud API
+
+token.title=API Token
+token.description=The IEXCloud API token
+
+stock-symbol.title=Stock Symbol
+stock-symbol.description=The stock symbol (e.g., AAPL)
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/documentation.md
new file mode 100644
index 0000000..e943bff
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/documentation.md
@@ -0,0 +1,35 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## InfluxDB Set Adapter
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+Creates a data set for an InfluxDB measurement.
+
+***
+
+## Configuration
+
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/icon.png
new file mode 100644
index 0000000..1f9bb88
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/strings.en
new file mode 100644
index 0000000..7deaf5d
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.set/strings.en
@@ -0,0 +1,23 @@
+org.apache.streampipes.connect.adapters.influxdb.set.title=InfluxDB Set Adapter
+org.apache.streampipes.connect.adapters.influxdb.set.description=Creates a data set for an InfluxDB measurement
+
+influxDbHost.title=Hostname
+influxDbHost.description=Hostname of the InfluxDB Server
+
+influxDbPort.title=Port
+influxDbPort.description=Port of the InfluxDB Server
+
+influxDbDatabase.title=Database
+influxDbDatabase.description=Name of the database
+
+influxDbMeasurement.title=Measurement
+influxDbMeasurement.description=Name of the measurement which should be observed
+
+influxDbUsername.title=Username
+influxDbUsername.description=The username to log into the InfluxDB
+
+influxDbPassword.title=Password
+influxDbPassword.description=The password to log into the InfluxDB
+
+replaceNullValues.title=Replace Null Values
+replaceNullValues.description=Should null values in the incoming data be replace by defaults? If not, these events are skipped
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/documentation.md
new file mode 100644
index 0000000..25032ce
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/documentation.md
@@ -0,0 +1,35 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## InfluxDB Stream Adapter
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+Creates a data stream for an InfluxDB measurement.
+
+***
+
+## Configuration
+
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/icon.png
new file mode 100644
index 0000000..1f9bb88
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/strings.en
new file mode 100644
index 0000000..425c03b
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.influxdb.stream/strings.en
@@ -0,0 +1,26 @@
+org.apache.streampipes.connect.adapters.influxdb.stream.title=InfluxDB Stream Adapter
+org.apache.streampipes.connect.adapters.influxdb.stream.description=Creates a data stream for an InfluxDB measurement
+
+influxDbHost.title=Hostname
+influxDbHost.description=Hostname of the InfluxDB Server (needs an "http://" in front)
+
+influxDbPort.title=Port
+influxDbPort.description=Port of the InfluxDB Server (e.g. 8086)
+
+influxDbDatabase.title=Database
+influxDbDatabase.description=Name of the database
+
+influxDbMeasurement.title=Measurement
+influxDbMeasurement.description=Name of the measurement which should be observed
+
+influxDbUsername.title=Username
+influxDbUsername.description=The username to log into the InfluxDB
+
+influxDbPassword.title=Password
+influxDbPassword.description=The password to log into the InfluxDB
+
+replaceNullValues.title=Replace Null Values
+replaceNullValues.description=Should null values in the incoming data be replace by defaults? If not, these events are skipped
+
+pollingInterval.title=Polling interval (MS)
+pollingInterval.description=How often the database should be checked for new entries (in MS)
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/documentation.md
new file mode 100644
index 0000000..add7783
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## MySQL Data Set Adapter
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Creates a data set from an SQL table
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/icon.png
new file mode 100644
index 0000000..084246f
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/strings.en
new file mode 100644
index 0000000..b710ede
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.set/strings.en
@@ -0,0 +1,23 @@
+org.apache.streampipes.connect.adapters.mysql.set.title=MySQL Set Adapter
+org.apache.streampipes.connect.adapters.mysql.set.description=Creates a data set from an SQL table
+
+mysqlHost.title=Hostname
+mysqlHost.description=Hostname of the MySql Server
+
+mysqlPort.title=Port
+mysqlPort.description=Port of the MySql Server. Default: 3306
+
+mysqlDatabase.title=Database
+mysqlDatabase.description=Database in which the table is located
+
+mysqlTable.title=Table
+mysqlTable.description=Table which should be watched
+
+mysqlUser.title=Username
+mysqlUser.description=Username of the user
+
+mysqlPassword.title=Password
+mysqlPassword.description=Password of the user
+
+replaceNullValues.title=Replace Null Values
+replaceNullValues.description=Should null values in the incoming data be replace by defaults? If not, these events are skipped
\ No newline at end of file
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/documentation.md
new file mode 100644
index 0000000..9704ffd
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## MySQL Data Stream Adapter
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Creates a data stream for a SQL table
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/icon.png
new file mode 100644
index 0000000..084246f
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/strings.en
new file mode 100644
index 0000000..48690e1
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.mysql.stream/strings.en
@@ -0,0 +1,24 @@
+org.apache.streampipes.connect.adapters.mysql.stream.title=MySql Stream Adapter
+org.apache.streampipes.connect.adapters.mysql.stream.description=Creates a data stream for a SQL table
+
+
+mysqlHost.title=Hostname
+mysqlHost.description=Hostname of the MySql Server
+
+mysqlPort.title=Port
+mysqlPort.description=Port of the MySql Server. Default: 3306
+
+mysqlDatabase.title=Database
+mysqlDatabase.description=Database in which the table is located
+
+mysqlTable.title=Table
+mysqlTable.description=Table which should be watched
+
+mysqlUser.title=Username
+mysqlUser.description=Username of the user
+
+mysqlPassword.title=Password
+mysqlPassword.description=Password of the user
+
+replaceNullValues.title=Replace Null Values
+replaceNullValues.description=Should null values in the incoming data be replace by defaults? If not, these events are skipped
\ No newline at end of file
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/documentation.md
new file mode 100644
index 0000000..b9c718e
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## NSW Traffic Cameras
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Traffic camera images produced by NSW Australia
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/icon.png
new file mode 100644
index 0000000..f9ab06c
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/strings.en
new file mode 100644
index 0000000..92b409e
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera/strings.en
@@ -0,0 +1,6 @@
+org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera.title=NSW Traffic Cameras
+org.apache.streampipes.connect.adapters.nswaustralia.trafficcamera.description=Traffic camera images produced by NSW Australia
+
+
+api-key.title=API Key
+api-key.description=The TfNSW API key
\ No newline at end of file
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/documentation.md
new file mode 100644
index 0000000..215a988
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## OPC-UA
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Read values from an OPC-UA server
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/icon.png
new file mode 100644
index 0000000..ab68d43
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/strings.en
new file mode 100644
index 0000000..55d5d79
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/strings.en
@@ -0,0 +1,28 @@
+org.apache.streampipes.connect.adapters.opcua.title=OPC UA
+org.apache.streampipes.connect.adapters.opcua.description=Reads values from an OPC-UA server
+
+
+OPC_HOST_OR_URL.title=OPC Server
+OPC_HOST_OR_URL.description=
+
+OPC_URL.title=URL
+OPC_URL.description=
+
+OPC_HOST.title=Host/PPort
+OPC_HOST.description=
+
+OPC_SERVER_URL.title=URL
+OPC_SERVER_URL.description=Example: opc.tcp://test-server.com:4840
+
+OPC_SERVER_HOST.title=Host
+OPC_SERVER_HOST.description=Example: test-server.com (No leading opc.tcp://)
+
+OPC_SERVER_PORT.title=Port
+OPC_SERVER_PORT.description=Example: 4840
+
+NAMESPACE_INDEX.title=Namespace Index
+NAMESPACE.INDEX.description=Example: 2
+
+NODE_ID.title=Node ID
+NODE_ID.description=Id of the Node to read the values from
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/documentation.md
new file mode 100644
index 0000000..acd8fb5
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Random Data Simulator (Set)
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Publishes a bounded stream of random events.
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/icon.png
new file mode 100644
index 0000000..05cc7c3
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/strings.en
new file mode 100644
index 0000000..f2c2c8a
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdataset/strings.en
@@ -0,0 +1,9 @@
+org.apache.streampipes.connect.adapters.simulator.randomdataset.title=Random Data Simulator (Set)
+org.apache.streampipes.connect.adapters.simulator.randomdataset.description=Publishes a bounded stream of random events
+
+
+wait-time-ms.title=Wait Time (MS)
+wait-time-ms.description=The time to wait between two events in milliseconds
+
+number-of-events.title=Number of Events
+number-of-events.description=The number of events to send
\ No newline at end of file
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/documentation.md
new file mode 100644
index 0000000..0220bae
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Random Data Simulator (Stream)
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Publishes a continuous stream of random events
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/icon.png
new file mode 100644
index 0000000..05cc7c3
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/strings.en
new file mode 100644
index 0000000..d5d3c95
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.simulator.randomdatastream/strings.en
@@ -0,0 +1,6 @@
+org.apache.streampipes.connect.adapters.simulator.randomdatastream.title=Random Data Simulator (Stream)
+org.apache.streampipes.connect.adapters.simulator.randomdatastream.description=Publishes a continuous stream of random events
+
+
+wait-time-ms.title=Wait Time (MS)
+wait-time-ms.description=The time to wait between two events in milliseconds"
\ No newline at end of file
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/documentation.md
new file mode 100644
index 0000000..b9b33c5
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Slack
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Subscribes to a Slack channel
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/icon.png
new file mode 100644
index 0000000..4a86273
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/strings.en
new file mode 100644
index 0000000..291c093
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.slack/strings.en
@@ -0,0 +1,6 @@
+org.apache.streampipes.connect.adapters.slack.title=Slack
+org.apache.streampipes.connect.adapters.slack.description=Subscribes to a Slack channel
+
+
+slack-token.title=Slack API Token
+slack-token.description=The API token of your Slack workspace
\ No newline at end of file
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/documentation.md
new file mode 100644
index 0000000..26353e4
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Wikipedia Edits
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Continuously publishes recent Wikipedia edits
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/icon.png
new file mode 100644
index 0000000..46112dc
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/strings.en
new file mode 100644
index 0000000..1388aeb
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.edit/strings.en
@@ -0,0 +1,3 @@
+org.apache.streampipes.connect.adapters.wikipedia.edit.title=Wikipedia Edits
+org.apache.streampipes.connect.adapters.wikipedia.edit.description=Continuously publishes recent Wikipedia edits
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/documentation.md
new file mode 100644
index 0000000..948d3cd
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/documentation.md
@@ -0,0 +1,33 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Wikipedia New Articles
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Continuously publishes articles created on Wikipedia
+
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/icon.png
new file mode 100644
index 0000000..46112dc
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/strings.en
new file mode 100644
index 0000000..a2e240c
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.wikipedia.new/strings.en
@@ -0,0 +1,3 @@
+org.apache.streampipes.connect.adapters.wikipedia.new.title=Wikipedia New Articles
+org.apache.streampipes.connect.adapters.wikipedia.new.description=Continuously publishes articles created on Wikipedia
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/documentation.md
new file mode 100644
index 0000000..a03969e
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/documentation.md
@@ -0,0 +1,32 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## File (Stream)
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Continuously streams the content from a file
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/icon.png
new file mode 100644
index 0000000..2b3a037
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/strings.en
new file mode 100644
index 0000000..51049b8
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.file/strings.en
@@ -0,0 +1,16 @@
+org.apache.streampipes.connect.protocol.stream.file.title=File Stream
+org.apache.streampipes.connect.protocol.stream.file=Continuously streams the content from a file.
+
+filePath.title=File
+filePath.description=File Path
+
+replaceTimestamp.title=Use current time for timestamp?
+replaceTimestamp.description=Keep timestamps from File or replace with current.
+
+speed.title=Replay Speed
+speed.description=Replay Speed. For original speed, set it to 1
+
+time-between-replay.title=Time Between Replay
+time-between-replay.description=Time between two rounds of replay. Time in seconds
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/documentation.md
new file mode 100644
index 0000000..aeb5205
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/documentation.md
@@ -0,0 +1,32 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## HTTP (Stream)
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Continuously fetched events from an HTTP REST endpoint.
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/icon.png
new file mode 100644
index 0000000..b44424d
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/strings.en
new file mode 100644
index 0000000..a597048
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.http/strings.en
@@ -0,0 +1,10 @@
+org.apache.streampipes.connect.protocol.stream.http.title=HTTP Stream
+org.apache.streampipes.connect.protocol.stream.http.description=Continuously fetched events from an HTTP REST endpoint.
+
+url.title=URL
+url.description=Example: http(s)://test-server.com
+
+interval.title=Interval [sec]
+interval.description=Example: 5 (Polling interval in seconds)
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/documentation.md
new file mode 100644
index 0000000..7b261ed
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/documentation.md
@@ -0,0 +1,32 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Apache Kafka
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Consumes messages from an Apache Kafka broker
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/icon.png
new file mode 100644
index 0000000..8b72662
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/strings.en
new file mode 100644
index 0000000..f3d70e3
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.kafka/strings.en
@@ -0,0 +1,13 @@
+org.apache.streampipes.connect.protocol.stream.kafka.title=Apache Kafka
+org.apache.streampipes.connect.protocol.stream.kafka.description=Consumes messages from an Apache Kafka broker
+
+broker_url.title=Broker Hostname
+broker_url.description=Example: test.server.com (No protocol)
+
+broker_port.title=Broker Port
+broker_port.description=9092
+
+topic.title=Topic
+topic.description=Example: test.topic
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/documentation.md
new file mode 100644
index 0000000..0493b65
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/documentation.md
@@ -0,0 +1,32 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## Apache Pulsar
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Consumes messages from an Apache Pulsar broker
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/icon.png
new file mode 100644
index 0000000..d1b1228
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/strings.en
new file mode 100644
index 0000000..9e37e8d
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.protocol.stream.pulsar/strings.en
@@ -0,0 +1,13 @@
+org.apache.streampipes.connect.protocol.stream.pulsar.title=Apache Pulsar
+org.apache.streampipes.connect.protocol.stream.pulsar.description=Consumes messages from an Apache Pulsar broker
+
+pulsar-broker-host.title=Broker Hostname
+pulsar-broker-host.description=Example: test.server.com (No protocol)
+
+pulsar-broker-port.title=Broker Port
+pulsar-broker-port.description=Example: 6650
+
+pulsar-topic.title=Topic
+pulsar-topic.description=Example: test.topic
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/documentation.md
new file mode 100644
index 0000000..4fb4f06
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/documentation.md
@@ -0,0 +1,32 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## File (Set)
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Reads the content from a local file.
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/icon.png
new file mode 100644
index 0000000..2b3a037
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/strings.en
new file mode 100644
index 0000000..1092433
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.file/strings.en
@@ -0,0 +1,7 @@
+org.apache.streampipes.protocol.set.file.title=File Set
+org.apache.streampipes.protocol.set.file.description=Reads the content from a local file.
+
+filePath.title=File
+filePath.description=File Path
+
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/documentation.md
new file mode 100644
index 0000000..2ea9640
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/documentation.md
@@ -0,0 +1,32 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+## HTTP (Set)
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Regularly poll an HTTP endpoint
+
+***
+
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/icon.png
new file mode 100644
index 0000000..b44424d
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/strings.en
new file mode 100644
index 0000000..678f412
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.protocol.set.http/strings.en
@@ -0,0 +1,7 @@
+org.apache.streampipes.protocol.set.http.title=HTTP Set
+org.apache.streampipes.protocol.set.http.description=Regularly poll an HTTP endpoint
+
+url.title=URL
+url.description=Example: http(s)://test-server.com
+
+