ClipboardController.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package ui.controller;
  2. import java.awt.Color;
  3. import java.awt.Toolkit;
  4. import java.awt.datatransfer.Clipboard;
  5. import java.awt.datatransfer.StringSelection;
  6. import java.util.ArrayDeque;
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. import com.google.gson.Gson;
  10. import com.google.gson.GsonBuilder;
  11. import com.google.gson.JsonObject;
  12. import com.google.gson.JsonPrimitive;
  13. import TypeAdapter.AbstractCpsObjectAdapter;
  14. import TypeAdapter.ColorAdapter;
  15. import TypeAdapter.PositionAdapter;
  16. import classes.AbstractCpsObject;
  17. import classes.CpsEdge;
  18. import classes.CpsUpperNode;
  19. import classes.HolonObject;
  20. import classes.HolonSwitch;
  21. import classes.IdCounter;
  22. import classes.Position;
  23. import ui.controller.StoreController.EDGETYPE;
  24. import ui.controller.StoreController.GRAPHTYPE;
  25. import ui.controller.StoreController.NUMTYPE;
  26. import ui.controller.StoreController.TYPE;
  27. import ui.model.Model;
  28. public class ClipboardController {
  29. private Model model;
  30. private StoreController store;
  31. private LoadController load;
  32. private Gson gson;
  33. public ClipboardController(Model model, StoreController store, LoadController load) {
  34. this.model = model;
  35. this.store = store;
  36. this.load = load;
  37. initGson();
  38. }
  39. public void copy(CpsUpperNode upperNode) {
  40. ArrayList<AbstractCpsObject> foundObj = (upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes());
  41. ArrayList<CpsEdge> foundedge = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges());
  42. JsonObject file = new JsonObject();
  43. ArrayDeque<AbstractCpsObject> queue = new ArrayDeque<>();
  44. HashMap<Integer, Integer> idMap = new HashMap<>();
  45. AbstractCpsObject u = null;
  46. store.initNumeration();
  47. for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
  48. queue.add(abs);
  49. }
  50. while (!queue.isEmpty()) {
  51. u = queue.pop();
  52. String key = "CVSOBJECT" + store.getNumerator(NUMTYPE.OBJECT);
  53. idMapping(u, idMap);
  54. file.add(key, gson.toJsonTree(u, AbstractCpsObject.class));
  55. if (u instanceof HolonObject)
  56. store.elementsToJson(TYPE.CANVAS, file, u);
  57. if (u instanceof HolonSwitch)
  58. if (((HolonSwitch) u).getGraphPoints().size() != 0)
  59. store.unitgraphToJson(GRAPHTYPE.SWITCH, file, u.getID(), ((HolonSwitch) u).getGraphPoints());
  60. if (u instanceof CpsUpperNode) {
  61. for (AbstractCpsObject adjacent : ((CpsUpperNode) u).getNodes()) {
  62. queue.add(adjacent);
  63. }
  64. }
  65. }
  66. for (CpsEdge edge : foundedge) {
  67. if(model.getSelectedCpsObjects().contains(edge.getA()) && model.getSelectedCpsObjects().contains(edge.getB()))
  68. return;
  69. }
  70. StringSelection selection = new StringSelection(gson.toJson(file));
  71. Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  72. clipboard.setContents(selection, selection);
  73. }
  74. private void idMapping(AbstractCpsObject u, HashMap<Integer, Integer> idMap) {
  75. // TODO Auto-generated method stub
  76. int id = u.getID();
  77. u.setID(IdCounter.nextId());
  78. idMap.put(id, u.getID());
  79. }
  80. public void paste() {
  81. }
  82. private void edgeToJson(EDGETYPE type, JsonObject file, int id, CpsEdge edge) {
  83. // TODO Auto-generated method stub
  84. String k = null;
  85. boolean b = false;
  86. JsonObject temp = new JsonObject();
  87. // add properties and only the ids from a and b
  88. temp.add("properties", gson.toJsonTree(edge));
  89. temp.add("A", new JsonPrimitive(edge.getA().getID()));
  90. temp.add("B", new JsonPrimitive(edge.getB().getID()));
  91. // Key and occasionally the id of Uppernode
  92. switch (type) {
  93. case CANVAS:
  94. k = "CVSEDGE" + store.getNumerator(NUMTYPE.EDGE);
  95. break;
  96. case CONNECTION:
  97. k = "CONNEDGE" + store.getNumerator(NUMTYPE.CONNECTION);
  98. break;
  99. case NODE:
  100. temp.add("ID", new JsonPrimitive(id));
  101. k = "NODEEDGE" + store.getNumerator(NUMTYPE.NODEEDGE);
  102. break;
  103. case OLD:
  104. temp.add("ID", new JsonPrimitive(id));
  105. k = "OLDEDGE" + store.getNumerator(NUMTYPE.OLDEDGE);
  106. break;
  107. default:
  108. break;
  109. }
  110. // lookup if the CVS, NODE or OLDEDGE are also connections
  111. if (edge.getA().getConnections().contains(edge) && edge.getA().getConnections().contains(edge)
  112. && !type.equals(EDGETYPE.CANVAS))
  113. b = true;
  114. temp.add("connection", new JsonPrimitive(b));
  115. file.add(k, gson.toJsonTree(temp));
  116. temp = new JsonObject();
  117. }
  118. private void initGson() {
  119. // TODO Auto-generated method stub
  120. GsonBuilder builder = new GsonBuilder();
  121. builder.excludeFieldsWithoutExposeAnnotation().serializeNulls().setPrettyPrinting();
  122. builder.registerTypeAdapter(AbstractCpsObject.class, new AbstractCpsObjectAdapter());
  123. builder.registerTypeAdapter(Position.class, new PositionAdapter());
  124. builder.registerTypeAdapter(Color.class, new ColorAdapter());
  125. // use the builder and make a instance of the Gson
  126. this.gson = builder.create();
  127. }
  128. }