Browse Source

Topologie GroupNode update

Tom Troppmann 4 years ago
parent
commit
14aa275862
1 changed files with 33 additions and 7 deletions
  1. 33 7
      src/api/TopologieAlgorithmFramework.java

+ 33 - 7
src/api/TopologieAlgorithmFramework.java

@@ -87,7 +87,7 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 	private HashMap<Integer, AbstractCanvasObject> accessIntToObject = new HashMap<Integer, AbstractCanvasObject>();
 	private HashMap<AbstractCanvasObject, Integer> accessObjectToInt = new HashMap<AbstractCanvasObject, Integer>();
 	private HashMap<Integer, AbstractCanvasObject> accessIntegerToWildcard = new HashMap<Integer, AbstractCanvasObject>();
-	
+	private HashMap<AbstractCanvasObject, GroupNode> accessGroupNode = new HashMap<AbstractCanvasObject, GroupNode>(); 
 	
 	private HashSet<IndexCable> cableSet = new HashSet<IndexCable>();
 	private ArrayList<IndexCable> cableList = new ArrayList<IndexCable>();
@@ -95,6 +95,7 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 	private int countForAccessMap = 0;
 	private int amountOfExistingCables = 0;
 	private ArrayList<HolonSwitch> switchList = new ArrayList<HolonSwitch>();
+	private HashMap<HolonSwitch, GroupNode> accessSwitchGroupNode = new HashMap<HolonSwitch, GroupNode>(); 
 	private ArrayList<Edge> edgeList = new ArrayList<Edge>();
 	
 	
@@ -665,6 +666,7 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 		accessObjectToInt.clear();
 		cableSet.clear();
 		cableList.clear();
+		accessGroupNode.clear();
 		//<---
 		Category category = control.searchCategory("Wildcards");
 		if(category != null) {
@@ -678,7 +680,7 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 		
 		
 		List<Integer> initialState = new ArrayList<Integer>();
-		generateAccess(model.getObjectsOnCanvas());			
+		generateAccess(model.getObjectsOnCanvas(), null);			
 		addCables(model.getEdgesOnCanvas());
 		model.getEdgesOnCanvas().clear();
 		//New Cables
@@ -712,7 +714,7 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 	 * @param positionToInit
 	 * @param timeStep
 	 */
-	private void generateAccess(List<AbstractCanvasObject> nodes) {
+	private void generateAccess(List<AbstractCanvasObject> nodes, GroupNode groupnode) {
 		for(AbstractCanvasObject aCps : nodes) {
 			if(aCps instanceof HolonObject) {
 				HolonObject hO = (HolonObject) aCps;
@@ -721,9 +723,12 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 				if(hO.getName().equals("Wildcard")) {
 					accessWildcards.add(new AccessWrapper(hO));
 				}
+				if(groupnode != null) {
+					accessGroupNode.put(hO, groupnode);
+				}
 			}
 			else if(aCps instanceof GroupNode) {
-				generateAccess(((GroupNode)aCps).getNodes());
+				generateAccess(((GroupNode)aCps).getNodes(), (GroupNode) aCps);
 			}
 		}
 	}
@@ -782,9 +787,21 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 			AbstractCanvasObject toObject =  accessIntToObject.get(cable.second);
 			int middleX = (fromObject.getPosition().x +   toObject.getPosition().x)/2;
 			int middleY = (fromObject.getPosition().y +   toObject.getPosition().y)/2;
-			HolonSwitch newSwitch = new HolonSwitch("Switch12368");
+			HolonSwitch newSwitch = new HolonSwitch("Switch");
 			newSwitch.setPosition(middleX, middleY);
-			control.getModel().getObjectsOnCanvas().add(newSwitch);
+			//If fromObject is in Group
+			if(accessGroupNode.containsKey(fromObject)) {
+				GroupNode groupnode = accessGroupNode.get(fromObject);
+				groupnode.getNodes().add(newSwitch);
+				accessSwitchGroupNode.put(newSwitch, groupnode);
+			} else if(accessGroupNode.containsKey(toObject)) {
+				GroupNode groupnode = accessGroupNode.get(toObject);
+				groupnode.getNodes().add(newSwitch);
+				accessSwitchGroupNode.put(newSwitch, groupnode);
+			}else {
+				control.getModel().getObjectsOnCanvas().add(newSwitch);				
+			}
+			//else if toObject is in Group
 			this.switchList.add(newSwitch);
 			
 			//Generate Cable From Object A To Switch
@@ -808,7 +825,16 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 	private void removeAllAddedObjects() {
 		control.getModel().getEdgesOnCanvas().removeAll(edgeList);
 		addedIndexCable.clear();
-		control.getModel().getObjectsOnCanvas().removeAll(switchList);
+		//control.getModel().getObjectsOnCanvas().removeAll(switchList);
+		for(HolonSwitch hSwitch: switchList) {
+			if(this.accessSwitchGroupNode.containsKey(hSwitch)) {
+				accessSwitchGroupNode.get(hSwitch).getNodes().remove(hSwitch);
+			}
+			else {
+				control.getModel().getObjectsOnCanvas().remove(hSwitch);
+			}
+		}
+		accessSwitchGroupNode.clear();
 		switchList.clear();
 		edgeList.clear();
 	}