summaryrefslogtreecommitdiffstats
path: root/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2019-02-28 21:59:33 -0500
committerJim Hahn <jrh3@att.com>2019-03-01 01:08:42 -0500
commitddb5911efe46953200be8965ac65ae9bbc8a36ee (patch)
tree5e328e8205d2076b262943b65ade74584893430d /utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
parent3849ce18d51e308bbd58b71219472c23b5f3e814 (diff)
Add StandardCoderObject to hide GSON internals
Added StandardCoderObject to hide GSON's JsonElement so that classes are not dependent on the use of JsonElement, making it easier to switch out serialization mechanisms in the future. Added a test for field-not-found. Converted tabs to spaces in json test file. Simplified StandardCoderObject and added methods to Coder for translating to and from StandardCoderObject. Removed a test for a method that no longer exists. Added more tests to a test case. Change-Id: I5123dc3f17c940ded431ef7f9ccd8c4bff6b1c5f Issue-ID: POLICY-1444 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java')
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java56
1 files changed, 55 insertions, 1 deletions
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
index 389720f9..69a211b6 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
@@ -21,6 +21,11 @@
package org.onap.policy.common.utils.coder;
import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.TypeAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -42,7 +47,8 @@ public class StandardCoder implements Coder {
/**
* Gson object used to encode and decode messages.
*/
- private static final Gson GSON = new Gson();
+ private static final Gson GSON = new GsonBuilder()
+ .registerTypeAdapter(StandardCoderObject.class, new StandardTypeAdapter()).create();
/**
* Constructs the object.
@@ -137,6 +143,26 @@ public class StandardCoder implements Coder {
}
}
+ @Override
+ public StandardCoderObject toStandard(Object object) throws CoderException {
+ try {
+ return new StandardCoderObject(GSON.toJsonTree(object));
+
+ } catch (RuntimeException e) {
+ throw new CoderException(e);
+ }
+ }
+
+ @Override
+ public <T> T fromStandard(StandardCoderObject sco, Class<T> clazz) throws CoderException {
+ try {
+ return GSON.fromJson(sco.getData(), clazz);
+
+ } catch (RuntimeException e) {
+ throw new CoderException(e);
+ }
+ }
+
// the remaining methods are wrappers that can be overridden by junit tests
/**
@@ -223,4 +249,32 @@ public class StandardCoder implements Coder {
protected <T> T fromJson(Reader source, Class<T> clazz) {
return GSON.fromJson(source, clazz);
}
+
+ /**
+ * Adapter for standard objects.
+ */
+ private static class StandardTypeAdapter extends TypeAdapter<StandardCoderObject> {
+
+ /**
+ * Used to read/write a JsonElement.
+ */
+ private static TypeAdapter<JsonElement> elementAdapter = new Gson().getAdapter(JsonElement.class);
+
+ /**
+ * Constructs the object.
+ */
+ public StandardTypeAdapter() {
+ super();
+ }
+
+ @Override
+ public void write(JsonWriter out, StandardCoderObject value) throws IOException {
+ elementAdapter.write(out, value.getData());
+ }
+
+ @Override
+ public StandardCoderObject read(JsonReader in) throws IOException {
+ return new StandardCoderObject(elementAdapter.read(in));
+ }
+ }
}