1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package holeg.adapter;
- import java.lang.reflect.Type;
- 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 holeg.model.AbstractCanvasObject;
- import holeg.model.GroupNode;
- public class AbstractCpsObjectAdapter
- implements JsonSerializer<AbstractCanvasObject>, JsonDeserializer<AbstractCanvasObject> {
- @Override
- public JsonElement serialize(AbstractCanvasObject object, Type type, JsonSerializationContext context) {
- JsonObject jsonObject = new JsonObject();
- jsonObject.add("type", new JsonPrimitive(object.getClass().getSimpleName()));
- jsonObject.add("properties", context.serialize(object, object.getClass()));
- if (object instanceof GroupNode)
- jsonObject.add("hash", new JsonPrimitive(object.hashCode()));
- return jsonObject;
- }
- @Override
- public AbstractCanvasObject deserialize(JsonElement ele, Type type, JsonDeserializationContext context)
- throws JsonParseException {
- JsonObject object = ele.getAsJsonObject();
- String typeName = object.get("type").getAsString();
- JsonElement element = object.get("properties");
- try {
- String packageName = AbstractCanvasObject.class.getPackageName() + ".";
- return context.deserialize(element, Class.forName(packageName + typeName));
- } catch (ClassNotFoundException cnfe) {
- throw new JsonParseException("Unknown element type: " + type, cnfe);
- }
- }
- }
|