From 0fe1aa0e3887fbe4d8fd902951d90fda605496f1 Mon Sep 17 00:00:00 2001
From: Jonas Blatt <jonasblatt@uni-koblenz.de>
Date: Mon, 9 Sep 2019 20:13:14 +0200
Subject: [PATCH] New Json Serializer Strategy

---
 .../de/unikoblenz/fgbks/base/json/Adapter.java  | 17 -----------------
 .../fgbks/base/json/JsonConfiguration.java      |  9 ++++-----
 .../json/JsonSimpleValueObjectSerializer.java   | 14 ++++++++++++++
 .../base/json/PrivateVisibilityStrategy.java    |  9 +++++++--
 4 files changed, 25 insertions(+), 24 deletions(-)
 delete mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/Adapter.java
 create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonSimpleValueObjectSerializer.java

diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/Adapter.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/Adapter.java
deleted file mode 100644
index f8b1a9b8..00000000
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/Adapter.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.unikoblenz.fgbks.base.json;
-
-import de.unikoblenz.fgbks.base.value.SimpleValueObject;
-import javax.json.bind.adapter.JsonbAdapter;
-
-public class Adapter implements JsonbAdapter<SimpleValueObject, String> {
-
-  @Override
-  public String adaptToJson(SimpleValueObject obj) throws Exception {
-    return obj.getValue().toString();
-  }
-
-  @Override
-  public SimpleValueObject adaptFromJson(String obj) throws Exception {
-    return null;
-  }
-}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonConfiguration.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonConfiguration.java
index 455c61af..8dd0ce4f 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonConfiguration.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonConfiguration.java
@@ -13,10 +13,9 @@ public class JsonConfiguration implements ContextResolver<Jsonb> {
   public Jsonb getContext(Class<?> type) {
     JsonbConfig config =
         new JsonbConfig()
-            .withAdapters(new Adapter())
-            .withFormatting(true)
-            .withStrictIJSON(true)
-            .withPropertyVisibilityStrategy(new PrivateVisibilityStrategy());
-    return JsonbBuilder.newBuilder().withConfig(config).build();
+            .withPropertyVisibilityStrategy(new PrivateVisibilityStrategy())
+            .withSerializers(new JsonSimpleValueObjectSerializer())
+            .withFormatting(true);
+    return JsonbBuilder.create(config);
   }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonSimpleValueObjectSerializer.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonSimpleValueObjectSerializer.java
new file mode 100644
index 00000000..a5a6eb7b
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/JsonSimpleValueObjectSerializer.java
@@ -0,0 +1,14 @@
+package de.unikoblenz.fgbks.base.json;
+
+import de.unikoblenz.fgbks.base.value.SimpleValueObject;
+import javax.json.bind.serializer.JsonbSerializer;
+import javax.json.bind.serializer.SerializationContext;
+import javax.json.stream.JsonGenerator;
+
+public class JsonSimpleValueObjectSerializer implements JsonbSerializer<SimpleValueObject> {
+
+  @Override
+  public void serialize(SimpleValueObject obj, JsonGenerator generator, SerializationContext ctx) {
+    ctx.serialize(obj.getValue(), generator);
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/PrivateVisibilityStrategy.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/PrivateVisibilityStrategy.java
index abccee34..4eb02b8a 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/PrivateVisibilityStrategy.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/json/PrivateVisibilityStrategy.java
@@ -2,17 +2,22 @@ package de.unikoblenz.fgbks.base.json;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import javax.json.bind.annotation.JsonbProperty;
+import javax.json.bind.annotation.JsonbTransient;
 import javax.json.bind.config.PropertyVisibilityStrategy;
 
 public class PrivateVisibilityStrategy implements PropertyVisibilityStrategy {
 
   @Override
   public boolean isVisible(Field field) {
-    return false;
+    return !field.isAnnotationPresent(JsonbTransient.class);
   }
 
   @Override
   public boolean isVisible(Method method) {
-    return true;
+    return Modifier.isPublic(method.getModifiers())
+            && !method.isAnnotationPresent(JsonbTransient.class)
+        || method.isAnnotationPresent(JsonbProperty.class);
   }
 }
-- 
GitLab