All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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