|
@@ -59,8 +59,10 @@ public class ClipboardController {
|
|
private Gson gson;
|
|
private Gson gson;
|
|
private JsonParser parser;
|
|
private JsonParser parser;
|
|
private Clipboard clipboard;
|
|
private Clipboard clipboard;
|
|
- private HashMap<Integer, Integer> idMap;
|
|
|
|
|
|
+ private HashMap<Integer, Integer> objIDMap;
|
|
|
|
+ private HashMap<Integer, Integer> eleIDMap;
|
|
private String sav;
|
|
private String sav;
|
|
|
|
+ private Point point;
|
|
|
|
|
|
public ClipboardController(Model model, StoreController store, LoadController load, CanvasController cvs,
|
|
public ClipboardController(Model model, StoreController store, LoadController load, CanvasController cvs,
|
|
ObjectController obj, NodeController uppC, MultiPurposeController mp) {
|
|
ObjectController obj, NodeController uppC, MultiPurposeController mp) {
|
|
@@ -88,7 +90,7 @@ public class ClipboardController {
|
|
|
|
|
|
store.initNumeration();
|
|
store.initNumeration();
|
|
|
|
|
|
- file.add("SAV", new JsonPrimitive((upperNode == null ? "CVS" : "" + upperNode.getID())));
|
|
|
|
|
|
+ file.add("SAV", new JsonPrimitive((upperNode == null ? "CVS" : "" + upperNode.getId())));
|
|
|
|
|
|
for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
|
|
for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
|
|
queue.add(abs);
|
|
queue.add(abs);
|
|
@@ -100,27 +102,27 @@ public class ClipboardController {
|
|
|
|
|
|
String key = "CVSOBJECT" + store.getNumerator(NUMTYPE.OBJECT);
|
|
String key = "CVSOBJECT" + store.getNumerator(NUMTYPE.OBJECT);
|
|
file.add(key, gson.toJsonTree(u, AbstractCpsObject.class));
|
|
file.add(key, gson.toJsonTree(u, AbstractCpsObject.class));
|
|
- edgeToJson(EDGETYPE.CONNECTION, file, u.getID(), u.getConnections());
|
|
|
|
|
|
+ edgeToJson(EDGETYPE.CONNECTION, file, u.getId(), u.getConnections());
|
|
|
|
|
|
if (u instanceof HolonObject)
|
|
if (u instanceof HolonObject)
|
|
store.elementsToJson(TYPE.CANVAS, file, u);
|
|
store.elementsToJson(TYPE.CANVAS, file, u);
|
|
|
|
|
|
if (u instanceof HolonSwitch)
|
|
if (u instanceof HolonSwitch)
|
|
if (((HolonSwitch) u).getGraphPoints().size() != 0)
|
|
if (((HolonSwitch) u).getGraphPoints().size() != 0)
|
|
- store.unitgraphToJson(GRAPHTYPE.SWITCH, file, u.getID(), ((HolonSwitch) u).getGraphPoints());
|
|
|
|
|
|
+ store.unitgraphToJson(GRAPHTYPE.SWITCH, file, u.getId(), ((HolonSwitch) u).getGraphPoints());
|
|
|
|
|
|
if (u instanceof CpsUpperNode) {
|
|
if (u instanceof CpsUpperNode) {
|
|
for (AbstractCpsObject adjacent : ((CpsUpperNode) u).getNodes()) {
|
|
for (AbstractCpsObject adjacent : ((CpsUpperNode) u).getNodes()) {
|
|
queue.add(adjacent);
|
|
queue.add(adjacent);
|
|
}
|
|
}
|
|
- edgeToJson(EDGETYPE.NODE, file, u.getID(), ((CpsUpperNode) u).getNodeEdges());
|
|
|
|
- edgeToJson(EDGETYPE.OLD, file, u.getID(), ((CpsUpperNode) u).getOldEdges());
|
|
|
|
|
|
+ edgeToJson(EDGETYPE.NODE, file, u.getId(), ((CpsUpperNode) u).getNodeEdges());
|
|
|
|
+ edgeToJson(EDGETYPE.OLD, file, u.getId(), ((CpsUpperNode) u).getOldEdges());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (upperNode == null)
|
|
if (upperNode == null)
|
|
edgeToJson(EDGETYPE.LAYER, file, 0, model.getEdgesOnCanvas());
|
|
edgeToJson(EDGETYPE.LAYER, file, 0, model.getEdgesOnCanvas());
|
|
else
|
|
else
|
|
- edgeToJson(EDGETYPE.LAYER, file, upperNode.getID(), model.getEdgesOnCanvas());
|
|
|
|
|
|
+ edgeToJson(EDGETYPE.LAYER, file, upperNode.getId(), upperNode.getNodeEdges());
|
|
|
|
|
|
StringSelection selection = new StringSelection(gson.toJson(file));
|
|
StringSelection selection = new StringSelection(gson.toJson(file));
|
|
clipboard.setContents(selection, selection);
|
|
clipboard.setContents(selection, selection);
|
|
@@ -131,10 +133,11 @@ public class ClipboardController {
|
|
*
|
|
*
|
|
* @param upperNode
|
|
* @param upperNode
|
|
*/
|
|
*/
|
|
- public void paste(CpsUpperNode upperNode, Point point) {
|
|
|
|
|
|
+ public void paste(CpsUpperNode upperNode, Point p) {
|
|
|
|
|
|
JsonObject json = new JsonObject();
|
|
JsonObject json = new JsonObject();
|
|
Transferable content = clipboard.getContents(null);
|
|
Transferable content = clipboard.getContents(null);
|
|
|
|
+ point = p;
|
|
|
|
|
|
if (content != null && content.isDataFlavorSupported(DataFlavor.stringFlavor)
|
|
if (content != null && content.isDataFlavorSupported(DataFlavor.stringFlavor)
|
|
&& !content.isDataFlavorSupported(DataFlavor.allHtmlFlavor))
|
|
&& !content.isDataFlavorSupported(DataFlavor.allHtmlFlavor))
|
|
@@ -156,20 +159,25 @@ public class ClipboardController {
|
|
|
|
|
|
HashMap<Integer, AbstractCpsObject> objDispatch = new HashMap<>();
|
|
HashMap<Integer, AbstractCpsObject> objDispatch = new HashMap<>();
|
|
HashMap<Integer, HolonElement> eleDispatch = new HashMap<>();
|
|
HashMap<Integer, HolonElement> eleDispatch = new HashMap<>();
|
|
- idMap = new HashMap<>();
|
|
|
|
|
|
+ objIDMap = new HashMap<>();
|
|
|
|
+ eleIDMap = new HashMap<>();
|
|
sav = json.get("SAV").getAsString();
|
|
sav = json.get("SAV").getAsString();
|
|
|
|
|
|
- objDist(keys, json, objDispatch, eleDispatch, upperNode);
|
|
|
|
- edgeDist(edges, json, objDispatch, upperNode);
|
|
|
|
|
|
+ forwardObjects(keys, json, objDispatch, eleDispatch, upperNode);
|
|
|
|
+ forwardEdges(edges, json, objDispatch, upperNode);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- private void edgeDist(List<String> edges, JsonObject json, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
|
|
|
|
+ public void cut(CpsUpperNode upperNode) {
|
|
|
|
+ copy(upperNode);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void forwardEdges(List<String> keys, JsonObject json, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
CpsUpperNode upperNode) {
|
|
CpsUpperNode upperNode) {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
List<String> conn = new ArrayList<>();
|
|
List<String> conn = new ArrayList<>();
|
|
|
|
|
|
- for (String edge : edges) {
|
|
|
|
|
|
+ for (String edge : keys) {
|
|
if (edge.contains("LAYEREDGE"))
|
|
if (edge.contains("LAYEREDGE"))
|
|
loadEdge(EDGETYPE.LAYER, json.get(edge), objDispatch, upperNode);
|
|
loadEdge(EDGETYPE.LAYER, json.get(edge), objDispatch, upperNode);
|
|
if (edge.contains("CONNEDGE"))
|
|
if (edge.contains("CONNEDGE"))
|
|
@@ -186,7 +194,7 @@ public class ClipboardController {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- private void objDist(List<String> keys, JsonObject json, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
|
|
|
|
+ private void forwardObjects(List<String> keys, JsonObject json, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
HashMap<Integer, HolonElement> eleDispatch, CpsUpperNode upperNode) {
|
|
HashMap<Integer, HolonElement> eleDispatch, CpsUpperNode upperNode) {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
|
|
|
|
@@ -207,13 +215,15 @@ public class ClipboardController {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
AbstractCpsObject temp = gson.fromJson(jsonElement.getAsJsonObject(), AbstractCpsObject.class);
|
|
AbstractCpsObject temp = gson.fromJson(jsonElement.getAsJsonObject(), AbstractCpsObject.class);
|
|
load.initObjects(temp);
|
|
load.initObjects(temp);
|
|
- idMapper(temp);
|
|
|
|
- if (temp.getSav().equals(sav))
|
|
|
|
- updateSav(temp, upperNode);
|
|
|
|
|
|
+ objIDMapper(temp);
|
|
|
|
+ updatePosition(temp);
|
|
|
|
|
|
// if its stored before on the canvas just put it there
|
|
// if its stored before on the canvas just put it there
|
|
- if (temp.getSav().equals("CVS")) {
|
|
|
|
- cvsC.addObject(temp);
|
|
|
|
|
|
+ if (temp.getSav().equals(sav)) {
|
|
|
|
+ if (upperNode == null)
|
|
|
|
+ cvsC.addObject(temp);
|
|
|
|
+ else
|
|
|
|
+ uppC.addObjectInUpperNode(temp, upperNode);
|
|
|
|
|
|
} else {
|
|
} else {
|
|
// else look up the table and put it into the right Uppernode
|
|
// else look up the table and put it into the right Uppernode
|
|
@@ -221,55 +231,7 @@ public class ClipboardController {
|
|
uppC.addObjectInUpperNode(temp, temp2);
|
|
uppC.addObjectInUpperNode(temp, temp2);
|
|
}
|
|
}
|
|
|
|
|
|
- objDispatch.put(temp.getID(), temp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void loadEdge(EDGETYPE type, JsonElement jsonElement, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
|
|
- CpsUpperNode upperNode) {
|
|
|
|
- // TODO Auto-generated method stub
|
|
|
|
- JsonObject object = jsonElement.getAsJsonObject();
|
|
|
|
- CpsEdge temp = gson.fromJson(object.get("properties"), CpsEdge.class);
|
|
|
|
- load.initCpsEdge(temp);
|
|
|
|
- // look for A and B inside the Table
|
|
|
|
- temp.setA(objDispatch.get(idMap.get(object.get("A").getAsInt())));
|
|
|
|
- temp.setB(objDispatch.get(idMap.get(object.get("B").getAsInt())));
|
|
|
|
-
|
|
|
|
- int sav = 0;
|
|
|
|
-
|
|
|
|
- switch (type) {
|
|
|
|
- case LAYER:
|
|
|
|
- // if in canvas add it into the canvas but delete connection before
|
|
|
|
- if (upperNode == null)
|
|
|
|
- model.getEdgesOnCanvas().add(temp);
|
|
|
|
- else
|
|
|
|
- upperNode.getNodeEdges().add(temp);
|
|
|
|
- break;
|
|
|
|
- case CONNECTION:
|
|
|
|
- // if no duplicates in connection store them into the given A and B
|
|
|
|
- if (!uppC.lookforDuplicates(temp.getA(), temp.getB(), temp.getA().getConnections()))
|
|
|
|
- temp.getA().getConnections().add(temp);
|
|
|
|
- if (!uppC.lookforDuplicates(temp.getA(), temp.getB(), temp.getB().getConnections()))
|
|
|
|
- temp.getB().getConnections().add(temp);
|
|
|
|
- break;
|
|
|
|
- case NODE:
|
|
|
|
- // put it into given nodeofnode
|
|
|
|
- sav = idMap.get(object.get("ID").getAsInt());
|
|
|
|
- ((CpsUpperNode) objDispatch.get(sav)).getNodeEdges().add(temp);
|
|
|
|
- break;
|
|
|
|
- case OLD:
|
|
|
|
- // same as above
|
|
|
|
- sav = idMap.get(object.get("ID").getAsInt());
|
|
|
|
- ((CpsUpperNode) objDispatch.get(sav)).getOldEdges().add(temp);
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (object.get("connection").getAsBoolean() && !type.equals(EDGETYPE.CONNECTION)) {
|
|
|
|
- temp.getA().getConnections().add(temp);
|
|
|
|
- temp.getB().getConnections().add(temp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ objDispatch.put(temp.getId(), temp);
|
|
}
|
|
}
|
|
|
|
|
|
private void loadCanvasElements(JsonElement jsonElement, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
private void loadCanvasElements(JsonElement jsonElement, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
@@ -279,9 +241,9 @@ public class ClipboardController {
|
|
|
|
|
|
HolonElement temp = gson.fromJson(object.get("properties"), HolonElement.class);
|
|
HolonElement temp = gson.fromJson(object.get("properties"), HolonElement.class);
|
|
load.initElements(temp);
|
|
load.initElements(temp);
|
|
- temp.setId(IdCounterElem.nextId());
|
|
|
|
|
|
+ eleIDMapper(temp);
|
|
// id which Object it was stored before
|
|
// id which Object it was stored before
|
|
- int stored = idMap.get(object.get("ID").getAsInt());
|
|
|
|
|
|
+ int stored = objIDMap.get(object.get("ID").getAsInt());
|
|
// lookup that object
|
|
// lookup that object
|
|
HolonObject temp2 = (HolonObject) objDispatch.get(stored);
|
|
HolonObject temp2 = (HolonObject) objDispatch.get(stored);
|
|
// add it
|
|
// add it
|
|
@@ -311,16 +273,18 @@ public class ClipboardController {
|
|
graphpoint.add(new Point(x, y));
|
|
graphpoint.add(new Point(x, y));
|
|
} else
|
|
} else
|
|
// else its an ID
|
|
// else its an ID
|
|
- sav = idMap.get(object.get(k).getAsInt());
|
|
|
|
|
|
+ sav = object.get(k).getAsInt();
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
switch (type) {
|
|
switch (type) {
|
|
case SWITCH:
|
|
case SWITCH:
|
|
|
|
+ sav = objIDMap.get(sav);
|
|
HolonSwitch sw = (HolonSwitch) objDispatch.get(sav);
|
|
HolonSwitch sw = (HolonSwitch) objDispatch.get(sav);
|
|
sw.setGraphPoints(graphpoint);
|
|
sw.setGraphPoints(graphpoint);
|
|
break;
|
|
break;
|
|
case ELEMENT:
|
|
case ELEMENT:
|
|
|
|
+ sav = eleIDMap.get(sav);
|
|
HolonElement ele = eleDispatch.get(sav);
|
|
HolonElement ele = eleDispatch.get(sav);
|
|
ele.setGraphPoints(graphpoint);
|
|
ele.setGraphPoints(graphpoint);
|
|
break;
|
|
break;
|
|
@@ -330,6 +294,51 @@ public class ClipboardController {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void loadEdge(EDGETYPE type, JsonElement jsonElement, HashMap<Integer, AbstractCpsObject> objDispatch,
|
|
|
|
+ CpsUpperNode upperNode) {
|
|
|
|
+ // TODO Auto-generated method stub
|
|
|
|
+ JsonObject object = jsonElement.getAsJsonObject();
|
|
|
|
+ CpsEdge temp = gson.fromJson(object.get("properties"), CpsEdge.class);
|
|
|
|
+ load.initCpsEdge(temp);
|
|
|
|
+ // look for A and B inside the Table
|
|
|
|
+ temp.setA(objDispatch.get(objIDMap.get(object.get("A").getAsInt())));
|
|
|
|
+ temp.setB(objDispatch.get(objIDMap.get(object.get("B").getAsInt())));
|
|
|
|
+
|
|
|
|
+ int sav = 0;
|
|
|
|
+
|
|
|
|
+ switch (type) {
|
|
|
|
+ case LAYER:
|
|
|
|
+ // if in canvas add it into the canvas but delete connection before
|
|
|
|
+ (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).add(temp);
|
|
|
|
+ break;
|
|
|
|
+ case CONNECTION:
|
|
|
|
+ // if no duplicates in connection store them into the given A and B
|
|
|
|
+ if (!uppC.lookforDuplicates(temp.getA(), temp.getB(), temp.getA().getConnections()))
|
|
|
|
+ temp.getA().getConnections().add(temp);
|
|
|
|
+ if (!uppC.lookforDuplicates(temp.getA(), temp.getB(), temp.getB().getConnections()))
|
|
|
|
+ temp.getB().getConnections().add(temp);
|
|
|
|
+ break;
|
|
|
|
+ case NODE:
|
|
|
|
+ // put it into given nodeofnode
|
|
|
|
+ sav = objIDMap.get(object.get("ID").getAsInt());
|
|
|
|
+ ((CpsUpperNode) objDispatch.get(sav)).getNodeEdges().add(temp);
|
|
|
|
+ break;
|
|
|
|
+ case OLD:
|
|
|
|
+ // same as above
|
|
|
|
+ sav = objIDMap.get(object.get("ID").getAsInt());
|
|
|
|
+ ((CpsUpperNode) objDispatch.get(sav)).getOldEdges().add(temp);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (object.get("connection").getAsBoolean() && !type.equals(EDGETYPE.CONNECTION)) {
|
|
|
|
+ temp.getA().getConnections().add(temp);
|
|
|
|
+ temp.getB().getConnections().add(temp);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
*
|
|
*
|
|
* @param type
|
|
* @param type
|
|
@@ -348,8 +357,8 @@ public class ClipboardController {
|
|
&& model.getClipboradObjects().contains(edge.getB())) {
|
|
&& model.getClipboradObjects().contains(edge.getB())) {
|
|
// add properties and only the ids from a and b
|
|
// add properties and only the ids from a and b
|
|
temp.add("properties", gson.toJsonTree(edge));
|
|
temp.add("properties", gson.toJsonTree(edge));
|
|
- temp.add("A", new JsonPrimitive(edge.getA().getID()));
|
|
|
|
- temp.add("B", new JsonPrimitive(edge.getB().getID()));
|
|
|
|
|
|
+ temp.add("A", new JsonPrimitive(edge.getA().getId()));
|
|
|
|
+ temp.add("B", new JsonPrimitive(edge.getB().getId()));
|
|
|
|
|
|
// Key and occasionally the id of Uppernode
|
|
// Key and occasionally the id of Uppernode
|
|
switch (type) {
|
|
switch (type) {
|
|
@@ -423,17 +432,24 @@ public class ClipboardController {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- private void idMapper(AbstractCpsObject temp) {
|
|
|
|
|
|
+ private void objIDMapper(AbstractCpsObject temp) {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
- int id = temp.getID();
|
|
|
|
- temp.setID(IdCounter.nextId());
|
|
|
|
- idMap.put(id, temp.getID());
|
|
|
|
|
|
+ int id = temp.getId();
|
|
|
|
+ temp.setId(IdCounter.nextId());
|
|
|
|
+ objIDMap.put(id, temp.getId());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void eleIDMapper(HolonElement temp) {
|
|
|
|
+ // TODO Auto-generated method stub
|
|
|
|
+ int id = temp.getId();
|
|
|
|
+ temp.setId(IdCounterElem.nextId());
|
|
|
|
+ eleIDMap.put(id, temp.getId());
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
- private void updateSav(AbstractCpsObject temp, CpsUpperNode upperNode) {
|
|
|
|
|
|
+ private void updatePosition(AbstractCpsObject temp) {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
- String newSav = (upperNode == null ? "CVS" : "" + upperNode.getID());
|
|
|
|
- temp.setSav(newSav);
|
|
|
|
|
|
+ temp.setPosition(new Position(temp.getPosition().x + point.x, temp.getPosition().y + point.y));
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|