From 63282767a16d5ddeaee6681d29fb7dfaf512646f Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Fri, 7 May 2021 12:05:14 +0200 Subject: [PATCH] Switch from Gson to Moshi --- pom.xml | 7 +- .../dbengine/client/query/QueryGson.java | 89 ------------------- .../dbengine/client/query/QueryMoshi.java | 44 +++++++++ 3 files changed, 45 insertions(+), 95 deletions(-) delete mode 100644 src/main/java/it/cavallium/dbengine/client/query/QueryGson.java create mode 100644 src/main/java/it/cavallium/dbengine/client/query/QueryMoshi.java diff --git a/pom.xml b/pom.xml index a806724..101462a 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.warp common-utils - 1.1.2 + 1.1.3 io.netty @@ -212,11 +212,6 @@ data-generator 0.9.0-SNAPSHOT - - com.google.code.gson - gson - 2.8.6 - src/test/java diff --git a/src/main/java/it/cavallium/dbengine/client/query/QueryGson.java b/src/main/java/it/cavallium/dbengine/client/query/QueryGson.java deleted file mode 100644 index 59e235f..0000000 --- a/src/main/java/it/cavallium/dbengine/client/query/QueryGson.java +++ /dev/null @@ -1,89 +0,0 @@ -package it.cavallium.dbengine.client.query; - -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import com.google.gson.GsonBuilder; -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 com.google.gson.JsonSyntaxException; -import it.cavallium.dbengine.client.query.current.CurrentVersion; -import it.cavallium.dbengine.client.query.current.data.IBasicType; -import it.cavallium.dbengine.client.query.current.data.IType; -import java.lang.reflect.Modifier; -import java.lang.reflect.Type; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Set; - -public class QueryGson { - - private static final HashMap, Set>> implementationClassesSerializers = new HashMap<>(); - private static final JsonElement EMPTY_JSON_OBJECT = new JsonObject(); - - static { - for (var superTypeClass : CurrentVersion.getSuperTypeClasses()) { - implementationClassesSerializers.put(superTypeClass, CurrentVersion.getSuperTypeSubtypesClasses(superTypeClass)); - } - } - - public static GsonBuilder registerAdapters(GsonBuilder gsonBuilder) { - implementationClassesSerializers.forEach((interfaceClass, implementationClasses) -> { - gsonBuilder.registerTypeAdapter(interfaceClass, new DbClassesGenericSerializer<>(implementationClasses)); - }); - return gsonBuilder; - } - - @SuppressWarnings("DuplicatedCode") - public static class DbClassesGenericSerializer implements JsonSerializer, JsonDeserializer { - - private final BiMap> subTypes; - - public DbClassesGenericSerializer(Set> implementationClasses) { - subTypes = HashBiMap.create(implementationClasses.size()); - for (Class implementationClass : implementationClasses) { - var name = implementationClass.getSimpleName(); - this.subTypes.put(name, implementationClass); - } - } - - @Override - public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) { - JsonObject result = new JsonObject(); - Class type = src.getClass(); - if (!subTypes.inverse().containsKey(type)) { - throw new JsonSyntaxException("Unknown element type: " + type.getCanonicalName()); - } - result.add("type", new JsonPrimitive(subTypes.inverse().get(src.getClass()))); - if (Arrays - .stream(src.getClass().getDeclaredFields()) - .anyMatch(field -> !Modifier.isStatic(field.getModifiers()) && !Modifier.isTransient(field.getModifiers()))) { - result.add("properties", context.serialize(src, src.getClass())); - } - - return result; - } - - @Override - public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - JsonObject jsonObject = json.getAsJsonObject(); - String type = jsonObject.get("type").getAsString(); - JsonElement element; - if (jsonObject.has("properties")) { - element = jsonObject.get("properties"); - } else { - element = EMPTY_JSON_OBJECT; - } - - if (!subTypes.containsKey(type)) { - throw new JsonParseException("Unknown element type: " + type); - } - return context.deserialize(element, subTypes.get(type)); - } - } -} \ No newline at end of file diff --git a/src/main/java/it/cavallium/dbengine/client/query/QueryMoshi.java b/src/main/java/it/cavallium/dbengine/client/query/QueryMoshi.java new file mode 100644 index 0000000..5da3da0 --- /dev/null +++ b/src/main/java/it/cavallium/dbengine/client/query/QueryMoshi.java @@ -0,0 +1,44 @@ +package it.cavallium.dbengine.client.query; + +import it.cavallium.dbengine.client.query.current.CurrentVersion; +import it.cavallium.dbengine.client.query.current.data.IBasicType; +import it.cavallium.dbengine.client.query.current.data.IType; +import java.util.HashSet; +import java.util.Set; +import org.warp.commonutils.moshi.MoshiPolymorphic; + +public class QueryMoshi extends MoshiPolymorphic { + + private final Set> abstractClasses; + private final Set> concreteClasses; + + @SuppressWarnings({"unchecked", "RedundantCast", "rawtypes"}) + public QueryMoshi() { + HashSet> abstractClasses = new HashSet<>(); + HashSet> concreteClasses = new HashSet<>(); + for (var superTypeClass : CurrentVersion.getSuperTypeClasses()) { + for (Class superTypeSubtypesClass : CurrentVersion.getSuperTypeSubtypesClasses( + superTypeClass)) { + concreteClasses.add((Class) (Class) superTypeSubtypesClass); + } + abstractClasses.add((Class) (Class) superTypeClass); + } + this.abstractClasses = abstractClasses; + this.concreteClasses = concreteClasses; + } + + @Override + protected Set> getAbstractClasses() { + return abstractClasses; + } + + @Override + protected Set> getConcreteClasses() { + return concreteClasses; + } + + @Override + protected boolean shouldIgnoreField(String fieldName) { + return false; + } +} \ No newline at end of file