
com.ardoq.adapter.ModelAdapter Maven / Gradle / Ivy
package com.ardoq.adapter;
import com.ardoq.model.Model;
import com.ardoq.model.Workspace;
import com.google.gson.*;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class ModelAdapter implements JsonDeserializer, JsonSerializer {
public Model deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
JsonObject jsonObject = jsonElement.getAsJsonObject();
Map referenceTypes = getReferenceTypes(jsonObject);
JsonObject root = jsonObject.getAsJsonObject("root");
Map document = (Map) new Gson().fromJson(root, Object.class);
Map componentTypes = getComponentTypes(document);
return new Model(
jsonObject.get("_id").getAsString(),
jsonObject.get("name").getAsString(),
jsonObject.get("description") != null ? jsonObject.get("description").getAsString() : "",
jsonObject.get("useAsTemplate") != null ? jsonObject.get("useAsTemplate").getAsBoolean() : false,
componentTypes,
referenceTypes);
}
private Map getComponentTypes(Map document) {
HashMap componentTypes = new HashMap();
for (Map.Entry entries : document.entrySet()) {
Map value = (Map) entries.getValue();
componentTypes.put((String) value.get("name"), entries.getKey());
componentTypes.putAll(getComponentTypes((Map) value.get("children")));
}
return componentTypes;
}
private Map getReferenceTypes(JsonObject jsonObject) {
Map references = new HashMap();
JsonElement referenceTypes = jsonObject.get("referenceTypes");
if (referenceTypes instanceof JsonObject) {
JsonObject document = (JsonObject) referenceTypes;
if (document != null) {
Set> entries = document.entrySet();
for (Map.Entry entry : entries) {
JsonObject value = (JsonObject) entry.getValue();
references.put(value.get("name").getAsString(), value.get("id").getAsInt());
}
}
}
return references;
}
private Gson gson() {
return new GsonBuilder()
.registerTypeAdapter(Date.class, new Iso8601Adapter())
.create();
}
public JsonElement serialize(Model reference, Type type, JsonSerializationContext jsonSerializationContext) {
JsonElement jsonElement = gson().toJsonTree(reference, Model.class);
JsonObject jsonObject = jsonElement.getAsJsonObject();
JsonUtils.removeReservedNullVaules(jsonObject);
return jsonElement;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy