Add Gson EMap TypeAdapter
Change-Id: I418f3b64d2b6fc1ad9003251ce7fc4edcf85030e
Signed-off-by: Daniel Haftstein <haftsteind@gmail.com>
diff --git a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/json/Json.java b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/json/Json.java
index 7ca739e..02d7e61 100644
--- a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/json/Json.java
+++ b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/json/Json.java
@@ -30,6 +30,7 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
+import org.eclipse.emf.common.util.EMap;
import org.eclipse.epp.logging.aeri.core.IReport;
import org.eclipse.jdt.annotation.Nullable;
@@ -39,7 +40,10 @@
import com.google.common.io.InputSupplier;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
public class Json {
public static final Type T_LIST_STRING = new TypeToken<List<String>>() {
@@ -71,6 +75,7 @@
private static Gson createGson(boolean pretty) {
GsonBuilder builder = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); //$NON-NLS-1$
builder.registerTypeAdapter(UUID.class, new UuidTypeAdapter());
+ builder.registerTypeHierarchyAdapter(EMap.class, new EMapTypeAdapter());
builder.addSerializationExclusionStrategy(new EmfFieldExclusionStrategy());
if (pretty) {
builder.setPrettyPrinting();
@@ -156,4 +161,30 @@
}
return res;
}
+
+ private static final class EMapTypeAdapter extends TypeAdapter<EMap> {
+ @Override
+ public void write(JsonWriter out, EMap map) throws IOException {
+ if (map == null) {
+ out.nullValue();
+ return;
+ }
+ out.beginObject();
+ for (Object key : map.keySet()) {
+ out.name(key.toString());
+ Object value = map.get(key);
+ if (value == null) {
+ out.nullValue();
+ } else {
+ out.value(value.toString());
+ }
+ }
+ out.endObject();
+ }
+
+ @Override
+ public EMap read(JsonReader in) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+ }
}