Browse Source

Fixing Bugs

Tom Troppmann 3 years ago
parent
commit
909b8a7a86

+ 20 - 0
src/classes/GroupNode.java

@@ -62,12 +62,28 @@ public class GroupNode extends AbstractCanvasObject {
 		this.nodesIdx = nodesIdx;
 	}
 
+	public ArrayList<AbstractCanvasObject> getNodesAndGroupnodeNodes(){
+		ArrayList<AbstractCanvasObject> nodes = new ArrayList<AbstractCanvasObject>();
+		nodes.addAll(getNodes());
+		for (AbstractCanvasObject temp : getNodes()) {
+			if(temp instanceof GroupNode) {
+				nodes.addAll(((GroupNode) temp).getNodesAndGroupnodeNodes());
+			}
+		}
+		return nodes;
+	}
+	
+	
+	
 	public ArrayList<HolonObject> getNumHolonObj() {
 		ArrayList<HolonObject> onlyHolonObj = new ArrayList<HolonObject>();
 		for (AbstractCanvasObject temp : getNodes()) {
 			if (temp instanceof HolonObject) {
 				onlyHolonObj.add((HolonObject) temp);
 			}
+			if(temp instanceof GroupNode) {
+				onlyHolonObj.addAll(((GroupNode) temp).getNumHolonObj());
+			}
 		}
 		return onlyHolonObj;
 	}
@@ -78,6 +94,9 @@ public class GroupNode extends AbstractCanvasObject {
 			if (temp instanceof HolonSwitch) {
 				onlySwitsches.add((HolonSwitch) temp);
 			}
+			if(temp instanceof GroupNode) {
+				onlySwitsches.addAll(((GroupNode) temp).getNumSwitches());
+			}
 		}
 		return onlySwitsches;
 	}
@@ -87,6 +106,7 @@ public class GroupNode extends AbstractCanvasObject {
 		for (AbstractCanvasObject temp : getNodes()) {
 			if (temp instanceof GroupNode) {
 				onlyUpperNodes.add((GroupNode) temp);
+				onlyUpperNodes.addAll(((GroupNode) temp).getNumUpperNodes());
 			}
 		}
 		return onlyUpperNodes;

+ 34 - 38
src/ui/controller/CanvasController.java

@@ -3,6 +3,8 @@ package ui.controller;
 import java.awt.Point;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
 
 import classes.Edge;
 import classes.Node;
@@ -132,18 +134,10 @@ public class CanvasController {
 	 *            AbstractCpsObject
 	 */
 	public void deleteObjectOnCanvas(AbstractCanvasObject obj) {
-		Edge e = null;
-		for (AbstractCanvasObject cps : model.getObjectsOnCanvas()) {
-			for (Edge p : cps.getConnections()) {
-				if (p.getA() == obj || p.getB() == obj) {
-					e = p;
-				}
-			}
-			if (!model.getClipboradObjects().contains(cps)) {
-				cps.getConnectedTo().remove(e);
-			}
-			model.getEdgesOnCanvas().remove(e);
-		}
+		 if (obj instanceof GroupNode) {
+	        	this.bfsNodeCleaner((GroupNode) obj);        	
+	    }
+		removeAllConnectionsFromObject(obj);
 		mpC.decIdx(obj.getId(), model.getCvsObjIdx());
 		model.getCvsObjIdx().remove(obj.getId());
 		model.getObjectsOnCanvas().remove(obj);
@@ -156,19 +150,17 @@ public class CanvasController {
      * @param by the object that will replace it
      */
 	public void replaceObjectOnCanvas(AbstractCanvasObject toBeReplaced, AbstractCanvasObject by) {
-		/** let all edges of 'toBeReplaced' connect to 'by' */
-		for(Edge e: toBeReplaced.getConnections()){
-			if(e.getA() == toBeReplaced){
-				e.setA(by);
-			}else if(e.getB() == toBeReplaced){
-				e.setB(by);
+		
+		//Replace edges
+		ListIterator<Edge>  iter = model.getEdgesOnCanvas().listIterator();
+		while(iter.hasNext() ) {
+			Edge edge = iter.next();
+			if(edge.getA() == toBeReplaced && edge.getB() != by) {
+				edge.setA(by);
+			}
+			else if( edge.getB() == toBeReplaced && edge.getA() != by) {
+				edge.setB(by);
 			}
-			
-			/** if edge from an object to itself -> remove it */
-			if(e.getA() == e.getB())
-				removeEdgesOnCanvas(e);
-			else/** else add edge to 'by' */
-				by.addConnection(e);
 		}
 		/** delete 'toBeReplaced' new empty connections, to prevent Nullpointer*/
 		toBeReplaced.setConnections(new ArrayList<Edge>(1));
@@ -298,23 +290,27 @@ public class CanvasController {
 	 * @param node
 	 */
 	public void bfsNodeCleaner(GroupNode node) {
-
-		ArrayDeque<AbstractCanvasObject> queue = new ArrayDeque<>();
-		AbstractCanvasObject u = node;
-
-		queue.add(u);
-		while (!queue.isEmpty()) {
-			u = queue.pop();
-
-			deleteConnections(u);
-			if (u instanceof GroupNode)
-				for (AbstractCanvasObject adjacent : ((GroupNode) u).getNodes()) {
-					queue.add(adjacent);
-				}
+		List<AbstractCanvasObject> objectsInGroupNode = node.getNodesAndGroupnodeNodes();
+		ListIterator<Edge>  iter = model.getEdgesOnCanvas().listIterator();
+		while(iter.hasNext() ) {
+			Edge edge = iter.next();
+			if(objectsInGroupNode.contains(edge.getA()) || objectsInGroupNode.contains(edge.getB())) {
+				iter.remove();
+			}
 		}
-
 	}
 
+	public void removeAllConnectionsFromObject(AbstractCanvasObject obj) {
+		ListIterator<Edge>  iter = model.getEdgesOnCanvas().listIterator();
+		while(iter.hasNext() ) {
+			Edge edge = iter.next();
+			if(edge.getA() == obj || edge.getB() == obj) {
+				iter.remove();
+			}
+		}
+	}
+	
+	
 	/**
 	 * Deletes all Connections to Objects inside the to deleting UpperNode
 	 * 

+ 5 - 3
src/ui/controller/Control.java

@@ -319,9 +319,10 @@ public class Control {
      */
     public void delCanvasObject(AbstractCanvasObject obj, boolean save) {
         canvasController.deleteObjectOnCanvas(obj);
+        if (obj instanceof GroupNode) {
+        	canvasController.bfsNodeCleaner((GroupNode) obj);        	
+        }
         calculateStateAndVisualForCurrentTimeStep();
-        if (obj instanceof GroupNode)
-            canvasController.bfsNodeCleaner((GroupNode) obj);
         if (save)
             try {
                 autoSave();
@@ -795,7 +796,8 @@ public class Control {
     }
 
     public void delObjUpperNode(AbstractCanvasObject object, GroupNode upperNode) {
-        nodeController.deleteObjectInUpperNode(object, upperNode);
+        System.out.println("delObjUpperNode");
+    	nodeController.deleteObjectInUpperNode(object, upperNode);
         if (object instanceof GroupNode)
             canvasController.bfsNodeCleaner((GroupNode) object);
         try {

+ 0 - 1
src/ui/controller/NodeController.java

@@ -46,7 +46,6 @@ class NodeController {
 	 * Delete a CpsUpperNode from the Canvas
 	 */
     void undoUpperNode(GroupNode node, GroupNode upperNode) {
-
     	if(node.getNodes().size() == 0) {
     		cvs.deleteObjectOnCanvas(node);
     		return;

+ 10 - 10
src/ui/model/VisualRepresentationalState.java

@@ -136,6 +136,10 @@ public class VisualRepresentationalState {
 
 	private void createExitEdgesV2(TreeNode<TreeGroupNodeData> root, DecoratedCable cable,  AbstractCanvasObject insideObject,
 			GroupNode insideUpperNode, AbstractCanvasObject ousideObject, GroupNode outsideUpperNode, HashMap<GroupNode, TreeNode<TreeGroupNodeData>> fastaccess) {
+		
+		
+		
+		
 		//Create Up List
 		LinkedList<TreeNode<TreeGroupNodeData>> listFromStart = createList(insideUpperNode, fastaccess);
 		LinkedList<TreeNode<TreeGroupNodeData>> listFromEnd = createList(outsideUpperNode, fastaccess);
@@ -286,16 +290,12 @@ public class VisualRepresentationalState {
 				DecoratedGroupNode groupNodeFromBoth = createdGroupNodes.get(inGroupObjects.get(cable.getModel().getA()));
 				groupNodeFromBoth.getInternCableList().add(cable);				
 			}else {
-				//
-//				if(inGroupObjects.get(cable.getModel().getA()) == groupNodeFromObject.getModel() && inGroupObjects.get(cable.getModel().getB()) != groupNodeFromObject.getModel()) {					
-//					//addToGroupNode(new ExitCable(cable, groupNodeFromObject.getModel(),inGroupObjects.get(cable.getModel().getB()), cable.getModel().getA(), cable.getModel().getB()), groupNodeFromObject.getExitCableList());		
-//					exitCables.add(new IntermediateCalculationCable(cable, groupNodeFromObject.getModel(),inGroupObjects.get(cable.getModel().getB()), cable.getModel().getA(), cable.getModel().getB()));
-//				}else if(inGroupObjects.get(cable.getModel().getA()) != groupNodeFromObject.getModel() && inGroupObjects.get(cable.getModel().getB()) == groupNodeFromObject.getModel()) {					
-//					//addToGroupNode(new ExitCable(cable, groupNodeFromObject.getModel(),inGroupObjects.get(cable.getModel().getA()), cable.getModel().getB(), cable.getModel().getA()), groupNodeFromObject.getExitCableList());		
-//					exitCables.add(new IntermediateCalculationCable(cable, groupNodeFromObject.getModel(),inGroupObjects.get(cable.getModel().getA()), cable.getModel().getB(), cable.getModel().getA()));
-//				}
-//				
-				exitCables.add(new IntermediateCalculationCable(cable, inGroupObjects.get(cable.getModel().getA()),inGroupObjects.get(cable.getModel().getB()), cable.getModel().getA(), cable.getModel().getB()));
+				if(inGroupObjects.containsKey(cable.getModel().getA())) {
+					exitCables.add(new IntermediateCalculationCable(cable, inGroupObjects.get(cable.getModel().getA()),inGroupObjects.get(cable.getModel().getB()), cable.getModel().getA(), cable.getModel().getB()));
+				} else if(inGroupObjects.containsKey(cable.getModel().getB())) {
+					exitCables.add(new IntermediateCalculationCable(cable, inGroupObjects.get(cable.getModel().getB()),inGroupObjects.get(cable.getModel().getA()), cable.getModel().getB(), cable.getModel().getA()));
+				}
+				
 			}
 		}else {
 			cableList.add(cable);					

+ 7 - 24
src/ui/view/GroupNodeCanvas.java

@@ -266,18 +266,7 @@ public class GroupNodeCanvas extends AbstractCanvas implements MouseListener, Mo
                     controller.removeTrackingObj(cps);
                     // Remove UpperNodeTab if UpperNode deleted
                     if (cps instanceof GroupNode) {
-                        JSplitPane tempSplit = (JSplitPane) getParent().getParent().getParent().getParent();
-                        JTabbedPane tabbedPane;
-                        JTabbedPane tabbedPane2;
-                        // if SplitView is activated
-                        if (tempSplit.getLeftComponent() instanceof JTabbedPane
-                                && tempSplit.getRightComponent() instanceof JTabbedPane) {
-                            tabbedPane = (JTabbedPane) tempSplit.getLeftComponent();
-                            tabbedPane2 = (JTabbedPane) tempSplit.getRightComponent();
-                        } else {
-                            tabbedPane = (JTabbedPane) tempSplit.getLeftComponent();
-                            tabbedPane2 = null;
-                        }
+                        JTabbedPane tabbedPane = (JTabbedPane) getParent().getParent().getParent().getParent();
                         // Look if the uppernode is open in a Tab
                         for (int i = 4; i < tabbedPane.getTabCount(); i++) {
 
@@ -288,18 +277,7 @@ public class GroupNodeCanvas extends AbstractCanvas implements MouseListener, Mo
                                 break;
                             }
                         }
-                        // If SplitView is on and the view on
-                        // tabbedPane2 is the deleted upperNode
-                        try {
-                            if (tabbedPane2 != null
-                                    && ((GroupNodeCanvas) ((JScrollPane) tabbedPane2.getSelectedComponent())
-                                    .getViewport().getComponent(0)).upperNode.getId() == cps.getId()) {
-                                ((ButtonTabComponent) tabbedPane.getTabComponentAt(tabbedPane2.getSelectedIndex()))
-                                        .removeTabs();
-                            }
-                        } catch (Exception e2) {
-                        }
-
+                      
                     }
                 }
             }
@@ -483,6 +461,11 @@ public class GroupNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 		return percentages;
 	}
 	private void paintExitCable(Graphics2D g, ExitCable eCable) {
+		if(eCable.getStart() == null || eCable.getFinish() == null) {
+			System.out.println("Null wrong exitcable");
+			System.out.println(" wrongCable: " + " start:"  +eCable.getStart() + " end:"  +eCable.getFinish() + " state:" + eCable.getState());
+			return;
+		}
 		Position start = eCable.getStart().getPosition();
 		Position end = eCable.getFinish().getPosition();
 		float currentEnergy = eCable.getCable().getFlowEnergy();

+ 3 - 27
src/ui/view/MyCanvas.java

@@ -263,20 +263,10 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 					controller.removeTrackingObj(cps);
 					// Remove UpperNodeTab if UpperNode deleted
 				if (cps instanceof GroupNode) {
-					JSplitPane tempSplit = (JSplitPane) getParent().getParent()
+					System.out.println(getParent().getParent()
+							.getParent().getParent());
+					JTabbedPane tabbedPane = (JTabbedPane)getParent().getParent()
 							.getParent().getParent();
-					JTabbedPane tabbedPane;
-					JTabbedPane tabbedPane2;
-					// if SplitView is activated
-					if (tempSplit.getLeftComponent() instanceof JTabbedPane
-							&& tempSplit.getRightComponent() instanceof JTabbedPane) {
-						tabbedPane = (JTabbedPane) tempSplit.getLeftComponent();
-						tabbedPane2 = (JTabbedPane) tempSplit
-								.getRightComponent();
-					} else {
-						tabbedPane = (JTabbedPane) tempSplit.getLeftComponent();
-						tabbedPane2 = null;
-					}
 					// Look if the uppernode is open in a Tab
 					for (int i = 4; i < tabbedPane.getTabCount(); i++) {
 						if (tabbedPane.getComponentAt(i) != null
@@ -289,20 +279,6 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 							break;
 						}
 					}
-					// If SplitView is on and the view on
-					// tabbedPane2 is the deleted upperNode
-					try {
-						if (tabbedPane2 != null
-								&& ((GroupNodeCanvas) ((JScrollPane) tabbedPane2
-										.getSelectedComponent()).getViewport()
-										.getComponent(0)).upperNode.getId() == cps
-										.getId()) {
-							((ButtonTabComponent) tabbedPane
-									.getTabComponentAt(tabbedPane2
-											.getSelectedIndex())).removeTabs();
-						}
-					} catch (Exception e2) {
-					}
 				}
 				toolTip = false;
 			}