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 2022/04/23 07:52:49 UTC

[incubator-streampipes] branch dev updated: [hotfix] Move Gson serializers to storage module

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.git


The following commit(s) were added to refs/heads/dev by this push:
     new b775918f7 [hotfix] Move Gson serializers to storage module
     new c2329258c Merge branch 'dev' of github.com:apache/incubator-streampipes into dev
b775918f7 is described below

commit b775918f7595fd1f92fe1b4069494f8ab0359176
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Sat Apr 23 09:52:27 2022 +0200

    [hotfix] Move Gson serializers to storage module
---
 streampipes-serializers-json/pom.xml               |  6 +++
 .../json/ProcessingElementSerializer.java          | 57 ---------------------
 .../json/TransformationRuleSerializer.java         | 58 ----------------------
 .../apache/streampipes/serializers/json/Utils.java | 44 ----------------
 .../serializers/json/TestJacksonSerializer.java    | 16 +++++-
 streampipes-storage-couchdb/pom.xml                | 22 ++++++--
 .../couchdb/serializer}/AdapterSerializer.java     |  2 +-
 .../couchdb/serializer}/AdapterTypeAdapter.java    |  2 +-
 .../storage/couchdb/serializer}/EcTypeAdapter.java |  2 +-
 .../couchdb/serializer}/EpaTypeAdapter.java        |  2 +-
 .../couchdb/serializer}/GsonSerializer.java        |  2 +-
 .../couchdb/serializer}/JsonLdSerializer.java      |  2 +-
 .../storage/couchdb/serializer}/PeTypeAdapter.java |  2 +-
 .../couchdb/serializer}/PrincipalDeserializer.java |  2 +-
 .../couchdb/serializer}/RangeSerializer.java       |  2 +-
 .../serializer}/RuntimeTypeAdapterFactory.java     |  2 +-
 .../storage/couchdb/serializer}/UriSerializer.java |  2 +-
 .../streampipes/storage/couchdb/utils/Utils.java   |  2 +-
 .../couchdb/serializer}/TestGsonSerializer.java    | 18 +++++--
 streampipes-test-utils/pom.xml                     |  9 +++-
 .../template}/PipelineElementTemplateHelpers.java  | 15 +-----
 21 files changed, 73 insertions(+), 196 deletions(-)

diff --git a/streampipes-serializers-json/pom.xml b/streampipes-serializers-json/pom.xml
index 81566a9d5..1fd8b26c2 100644
--- a/streampipes-serializers-json/pom.xml
+++ b/streampipes-serializers-json/pom.xml
@@ -46,6 +46,12 @@
         </dependency>
 
         <!-- Test dependencies -->
+        <dependency>
+            <groupId>org.apache.streampipes</groupId>
+            <artifactId>streampipes-test-utils</artifactId>
+            <version>0.70.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/ProcessingElementSerializer.java b/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/ProcessingElementSerializer.java
deleted file mode 100644
index 416b51a03..000000000
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/ProcessingElementSerializer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.serializers.json;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-import java.lang.reflect.Type;
-
-public class ProcessingElementSerializer<T> implements JsonDeserializer<T>, JsonSerializer<T> {
-
-  @Override
-  public T deserialize(JsonElement json, Type typeOfT,
-                       JsonDeserializationContext context) throws JsonParseException {
-
-    JsonObject jsonObject = json.getAsJsonObject();
-    String type = jsonObject.get("sourceClass").getAsString();
-
-    try {
-      return context.deserialize(jsonObject, Class.forName(type));
-    } catch (ClassNotFoundException cnfe) {
-      throw new JsonParseException("Unknown element type: " + type, cnfe);
-    }
-  }
-
-  @Override
-  public JsonElement serialize(T src, Type typeOfSrc,
-                               JsonSerializationContext context) {
-    JsonElement result = context.serialize(src, src.getClass());
-    if (result.isJsonObject()) {
-      JsonObject jsonObject = (JsonObject) result;
-      jsonObject.add("sourceClass", new JsonPrimitive(src.getClass().getCanonicalName()));
-    }
-    return result;
-  }
-}
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/TransformationRuleSerializer.java b/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/TransformationRuleSerializer.java
deleted file mode 100644
index f22c6b13b..000000000
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/TransformationRuleSerializer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.serializers.json;
-
-import com.google.gson.*;
-import org.apache.streampipes.model.connect.rules.TransformationRuleDescription;
-
-import java.lang.reflect.MalformedParameterizedTypeException;
-import java.lang.reflect.Type;
-
-public class TransformationRuleSerializer implements JsonSerializer<TransformationRuleDescription>, JsonDeserializer<TransformationRuleDescription> {
-
-
-  @Override
-  public TransformationRuleDescription deserialize(JsonElement json, Type typeInfo, JsonDeserializationContext context) throws JsonParseException {
-    JsonObject jsonObject = json.getAsJsonObject();
-    String type = jsonObject.get("type").getAsString();
-    JsonElement element = jsonObject.get("properties");
-    JsonObject tmp = element.getAsJsonObject();
-    tmp.addProperty("_id", jsonObject.get("_id").getAsString());
-    tmp.addProperty("_rev", jsonObject.get("_rev").getAsString());
-
-    try {
-      return (TransformationRuleDescription) GsonSerializer.getGson().fromJson(element, Class.forName(type));
-    } catch (ClassNotFoundException cnfe) {
-      throw new JsonParseException("Unknown element type: " + type, cnfe);
-    }
-  }
-
-  @Override
-  public JsonElement serialize(TransformationRuleDescription src, Type type, JsonSerializationContext context) {
-    JsonObject result = new JsonObject();
-    try {
-      result.add("type", new JsonPrimitive(src.getClass().getCanonicalName()));
-      result.add("properties", GsonSerializer.getGson().toJsonTree(src));
-    } catch (MalformedParameterizedTypeException e) {
-      e.printStackTrace();
-    }
-
-    return result;
-  }
-}
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/Utils.java b/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/Utils.java
deleted file mode 100644
index de43ac09f..000000000
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/Utils.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.serializers.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import org.apache.streampipes.model.message.Message;
-import org.apache.streampipes.model.client.ontology.Range;
-
-
-public class Utils {
-
-	public static Gson getGson()
-	{
-		GsonBuilder gsonBuilder = getGsonBuilder();
-		Gson gson = gsonBuilder.create();
-		return gson;
-	}
-	
-	public static GsonBuilder getGsonBuilder()
-	{
-		GsonBuilder gsonBuilder = GsonSerializer.getGsonBuilder();
-		gsonBuilder.registerTypeAdapter(Range.class, new RangeSerializer());
-		gsonBuilder.registerTypeAdapter(Message.class, new JsonLdSerializer<Message>());
-		return gsonBuilder;	
-	}
-	
-}
diff --git a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestJacksonSerializer.java b/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestJacksonSerializer.java
index 4d12e6983..3c89ac9f3 100644
--- a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestJacksonSerializer.java
+++ b/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestJacksonSerializer.java
@@ -19,7 +19,8 @@ package org.apache.streampipes.serializers.json;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import org.apache.streampipes.model.template.PipelineElementTemplate;
-import org.apache.streampipes.serializers.utils.PipelineElementTemplateHelpers;
+import org.apache.streampipes.test.generator.template.PipelineElementTemplateHelpers;
+import org.junit.Assert;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -33,10 +34,21 @@ public class TestJacksonSerializer {
     try {
       String json = JacksonSerializer.getObjectMapper().writeValueAsString(template);
       PipelineElementTemplate template2 = JacksonSerializer.getObjectMapper().readValue(json, PipelineElementTemplate.class);
-      PipelineElementTemplateHelpers.assertions(template2);
+      assertions(template2);
       assertEquals(2, template2.getTemplateConfigs().get("test-key-2").getValue());
     } catch (JsonProcessingException e) {
       e.printStackTrace();
     }
   }
+
+  public static void assertions(PipelineElementTemplate template) {
+    Assert.assertEquals("name", template.getTemplateName());
+    Assert.assertEquals("description", template.getTemplateDescription());
+    Assert.assertEquals(2, template.getTemplateConfigs().size());
+    Assert.assertEquals("test-string", template.getTemplateConfigs().get("test-key").getValue());
+    Assert.assertTrue(template.getTemplateConfigs().get("test-key").isEditable());
+    Assert.assertTrue(template.getTemplateConfigs().get("test-key").isDisplayed());
+    Assert.assertTrue(template.getTemplateConfigs().get("test-key-2").isEditable());
+    Assert.assertFalse(template.getTemplateConfigs().get("test-key-2").isDisplayed());
+  }
 }
diff --git a/streampipes-storage-couchdb/pom.xml b/streampipes-storage-couchdb/pom.xml
index 73ffcb0d9..dd4bf66da 100644
--- a/streampipes-storage-couchdb/pom.xml
+++ b/streampipes-storage-couchdb/pom.xml
@@ -44,11 +44,6 @@
             <artifactId>streampipes-model-client</artifactId>
             <version>0.70.0-SNAPSHOT</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.streampipes</groupId>
-            <artifactId>streampipes-serializers-json</artifactId>
-            <version>0.70.0-SNAPSHOT</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.streampipes</groupId>
             <artifactId>streampipes-storage-api</artifactId>
@@ -56,6 +51,10 @@
         </dependency>
 
         <!-- External dependencies -->
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.lightcouch</groupId>
             <artifactId>lightcouch</artifactId>
@@ -68,5 +67,18 @@
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>fluent-hc</artifactId>
         </dependency>
+
+        <!-- Test dependencies -->
+        <dependency>
+            <groupId>org.apache.streampipes</groupId>
+            <artifactId>streampipes-test-utils</artifactId>
+            <version>0.70.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/AdapterSerializer.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/AdapterSerializer.java
similarity index 97%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/AdapterSerializer.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/AdapterSerializer.java
index b5fd815e6..e2f55ec8f 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/AdapterSerializer.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/AdapterSerializer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  *
  */
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.*;
 import org.apache.streampipes.model.connect.adapter.AdapterDescription;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/AdapterTypeAdapter.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/AdapterTypeAdapter.java
similarity index 96%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/AdapterTypeAdapter.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/AdapterTypeAdapter.java
index 45b0a5dfd..e21220545 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/AdapterTypeAdapter.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/AdapterTypeAdapter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  *
  */
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonWriter;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/EcTypeAdapter.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/EcTypeAdapter.java
similarity index 96%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/EcTypeAdapter.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/EcTypeAdapter.java
index 7418194d7..5fb9c543e 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/EcTypeAdapter.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/EcTypeAdapter.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonWriter;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/EpaTypeAdapter.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/EpaTypeAdapter.java
similarity index 96%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/EpaTypeAdapter.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/EpaTypeAdapter.java
index c714dd068..a9e01a835 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/EpaTypeAdapter.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/EpaTypeAdapter.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonWriter;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/GsonSerializer.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/GsonSerializer.java
similarity index 99%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/GsonSerializer.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/GsonSerializer.java
index 081a300af..af208ac96 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/GsonSerializer.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/GsonSerializer.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.ExclusionStrategy;
 import com.google.gson.FieldAttributes;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/JsonLdSerializer.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/JsonLdSerializer.java
similarity index 97%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/JsonLdSerializer.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/JsonLdSerializer.java
index ce04680d6..4891c8e99 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/JsonLdSerializer.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/JsonLdSerializer.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.JsonDeserializationContext;
 import com.google.gson.JsonDeserializer;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/PeTypeAdapter.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/PeTypeAdapter.java
similarity index 95%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/PeTypeAdapter.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/PeTypeAdapter.java
index b5459af76..afdb3d593 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/PeTypeAdapter.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/PeTypeAdapter.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.TypeAdapter;
 import com.google.gson.stream.JsonWriter;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/PrincipalDeserializer.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/PrincipalDeserializer.java
similarity index 97%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/PrincipalDeserializer.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/PrincipalDeserializer.java
index 83cf3c982..405ebeee7 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/PrincipalDeserializer.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/PrincipalDeserializer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  *
  */
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.*;
 import org.apache.streampipes.model.client.user.Principal;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/RangeSerializer.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/RangeSerializer.java
similarity index 97%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/RangeSerializer.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/RangeSerializer.java
index f6fc5a3b2..dd6a9a164 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/RangeSerializer.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/RangeSerializer.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.JsonDeserializationContext;
 import com.google.gson.JsonDeserializer;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/RuntimeTypeAdapterFactory.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/RuntimeTypeAdapterFactory.java
similarity index 99%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/RuntimeTypeAdapterFactory.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/RuntimeTypeAdapterFactory.java
index 204a4480c..bfa058807 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/RuntimeTypeAdapterFactory.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/RuntimeTypeAdapterFactory.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.Gson;
 import com.google.gson.JsonElement;
diff --git a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/UriSerializer.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/UriSerializer.java
similarity index 96%
rename from streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/UriSerializer.java
rename to streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/UriSerializer.java
index c44902441..d9b822f01 100644
--- a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/UriSerializer.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/serializer/UriSerializer.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import com.google.gson.JsonDeserializationContext;
 import com.google.gson.JsonDeserializer;
diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
index 024107df9..34a989ac6 100644
--- a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
@@ -18,7 +18,7 @@
 
 package org.apache.streampipes.storage.couchdb.utils;
 
-import org.apache.streampipes.serializers.json.GsonSerializer;
+import org.apache.streampipes.storage.couchdb.serializer.GsonSerializer;
 import org.lightcouch.CouchDbClient;
 import org.lightcouch.CouchDbProperties;
 
diff --git a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestGsonSerializer.java b/streampipes-storage-couchdb/src/test/java/org/apache/streampipes/storage/couchdb/serializer/TestGsonSerializer.java
similarity index 61%
rename from streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestGsonSerializer.java
rename to streampipes-storage-couchdb/src/test/java/org/apache/streampipes/storage/couchdb/serializer/TestGsonSerializer.java
index 53d877e1d..55129a274 100644
--- a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestGsonSerializer.java
+++ b/streampipes-storage-couchdb/src/test/java/org/apache/streampipes/storage/couchdb/serializer/TestGsonSerializer.java
@@ -15,10 +15,11 @@
  * limitations under the License.
  *
  */
-package org.apache.streampipes.serializers.json;
+package org.apache.streampipes.storage.couchdb.serializer;
 
 import org.apache.streampipes.model.template.PipelineElementTemplate;
-import org.apache.streampipes.serializers.utils.PipelineElementTemplateHelpers;
+import org.apache.streampipes.test.generator.template.PipelineElementTemplateHelpers;
+import org.junit.Assert;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -30,7 +31,18 @@ public class TestGsonSerializer {
 
     String json = GsonSerializer.getGsonWithIds().toJson(template);
     PipelineElementTemplate template2 = GsonSerializer.getGsonWithIds().fromJson(json, PipelineElementTemplate.class);
-    PipelineElementTemplateHelpers.assertions(template2);
+    assertions(template2);
     assertEquals(2.0, template2.getTemplateConfigs().get("test-key-2").getValue());
   }
+
+  public static void assertions(PipelineElementTemplate template) {
+    Assert.assertEquals("name", template.getTemplateName());
+    Assert.assertEquals("description", template.getTemplateDescription());
+    Assert.assertEquals(2, template.getTemplateConfigs().size());
+    Assert.assertEquals("test-string", template.getTemplateConfigs().get("test-key").getValue());
+    Assert.assertTrue(template.getTemplateConfigs().get("test-key").isEditable());
+    Assert.assertTrue(template.getTemplateConfigs().get("test-key").isDisplayed());
+    Assert.assertTrue(template.getTemplateConfigs().get("test-key-2").isEditable());
+    Assert.assertFalse(template.getTemplateConfigs().get("test-key-2").isDisplayed());
+  }
 }
diff --git a/streampipes-test-utils/pom.xml b/streampipes-test-utils/pom.xml
index f26e63c95..f1a48f196 100644
--- a/streampipes-test-utils/pom.xml
+++ b/streampipes-test-utils/pom.xml
@@ -34,7 +34,14 @@
             <artifactId>streampipes-model</artifactId>
             <version>0.70.0-SNAPSHOT</version>
         </dependency>
+
+        <!-- Test dependencies -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 
-</project>
\ No newline at end of file
+</project>
diff --git a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/utils/PipelineElementTemplateHelpers.java b/streampipes-test-utils/src/main/java/org/apache/streampipes/test/generator/template/PipelineElementTemplateHelpers.java
similarity index 68%
rename from streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/utils/PipelineElementTemplateHelpers.java
rename to streampipes-test-utils/src/main/java/org/apache/streampipes/test/generator/template/PipelineElementTemplateHelpers.java
index 18f89175a..a32ed4ac4 100644
--- a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/utils/PipelineElementTemplateHelpers.java
+++ b/streampipes-test-utils/src/main/java/org/apache/streampipes/test/generator/template/PipelineElementTemplateHelpers.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  *
  */
-package org.apache.streampipes.serializers.utils;
+package org.apache.streampipes.test.generator.template;
 
 import org.apache.streampipes.model.template.PipelineElementTemplate;
 import org.apache.streampipes.model.template.PipelineElementTemplateConfig;
@@ -23,8 +23,6 @@ import org.apache.streampipes.model.template.PipelineElementTemplateConfig;
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.junit.Assert.*;
-
 public class PipelineElementTemplateHelpers {
 
   public static PipelineElementTemplate makePipelineElementTemplate() {
@@ -35,17 +33,6 @@ public class PipelineElementTemplateHelpers {
     return new PipelineElementTemplate("name", "description", configs);
   }
 
-  public static void assertions(PipelineElementTemplate template) {
-    assertEquals("name", template.getTemplateName());
-    assertEquals("description", template.getTemplateDescription());
-    assertEquals(2, template.getTemplateConfigs().size());
-    assertEquals("test-string", template.getTemplateConfigs().get("test-key").getValue());
-    assertTrue(template.getTemplateConfigs().get("test-key").isEditable());
-    assertTrue(template.getTemplateConfigs().get("test-key").isDisplayed());
-    assertTrue(template.getTemplateConfigs().get("test-key-2").isEditable());
-    assertFalse(template.getTemplateConfigs().get("test-key-2").isDisplayed());
-  }
-
   private static PipelineElementTemplateConfig makeConfig(boolean editable, boolean displayed, Object value) {
     return new PipelineElementTemplateConfig(editable, displayed, value);
   }