AbstractCpsObjectAdapter.java 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package TypeAdapter;
  2. import java.lang.reflect.Type;
  3. import com.google.gson.JsonDeserializationContext;
  4. import com.google.gson.JsonDeserializer;
  5. import com.google.gson.JsonElement;
  6. import com.google.gson.JsonObject;
  7. import com.google.gson.JsonParseException;
  8. import com.google.gson.JsonPrimitive;
  9. import com.google.gson.JsonSerializationContext;
  10. import com.google.gson.JsonSerializer;
  11. import classes.AbstractCanvasObject;
  12. import classes.GroupNode;
  13. import ui.view.GroupNodeCanvas;
  14. public class AbstractCpsObjectAdapter
  15. implements JsonSerializer<AbstractCanvasObject>, JsonDeserializer<AbstractCanvasObject> {
  16. @Override
  17. public JsonElement serialize(AbstractCanvasObject arg0, Type arg1, JsonSerializationContext arg2) {
  18. // TODO Auto-generated method stub
  19. JsonObject object = new JsonObject();
  20. object.add("type", new JsonPrimitive(arg0.getClass().getSimpleName()));
  21. object.add("properties", arg2.serialize(arg0, arg0.getClass()));
  22. if (arg0 instanceof GroupNode)
  23. object.add("hash", new JsonPrimitive(arg0.hashCode()));
  24. return object;
  25. }
  26. @Override
  27. public AbstractCanvasObject deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2)
  28. throws JsonParseException {
  29. // TODO Auto-generated method stub
  30. JsonObject object = arg0.getAsJsonObject();
  31. String type = object.get("type").getAsString();
  32. JsonElement element = object.get("properties");
  33. try {
  34. String packageName = "classes.";
  35. return arg2.deserialize(element, Class.forName(packageName + type));
  36. } catch (ClassNotFoundException cnfe) {
  37. // TODO: handle exception
  38. throw new JsonParseException("Unknown element type: " + type, cnfe);
  39. }
  40. }
  41. }