Teh-Hai Julian Zheng 8 سال پیش
والد
کامیت
a4dae044b0
3فایلهای تغییر یافته به همراه129 افزوده شده و 40 حذف شده
  1. 2 27
      bin/.gitignore
  2. 32 0
      src/classes/CpsUpperNode.java
  3. 95 13
      src/ui/controller/NodeController.java

+ 2 - 27
bin/.gitignore

@@ -1,27 +1,2 @@
-
-/.checkstyle
-/.classpath
-/.gitignore
-/.gradle/
-/.project
-/0
-/API_Instruction
-/Button_Images/
-/Examples/
-/Images/
-/QS-Gruppe14-FinalVersion.pdf
-/README.md
-/api/
-/build/
-/build.gradle
-/classes/
-/doc/
-/exceptions/
-/gradle/
-/gradlew
-/gradlew.bat
-/interfaces/
-/jars/
-/settings.gradle
-/tests/
-/ui/
+bin/
+build/

+ 32 - 0
src/classes/CpsUpperNode.java

@@ -6,6 +6,8 @@ import java.util.HashMap;
 public class CpsUpperNode extends AbstractCpsObject{
 
 	private ArrayList<AbstractCpsObject> nodes;
+	private ArrayList<CpsEdge> nodeEdges;
+	private ArrayList<CpsEdge> oldEdges;
 	private HashMap<Integer, Integer> nodesIdx;
 	
 	public CpsUpperNode(String nodeName) {
@@ -15,6 +17,8 @@ public class CpsUpperNode extends AbstractCpsObject{
 		this.setSav("CVS");
 		this.setID(IdCounter.nextId());
 		this.setNodes(new ArrayList<AbstractCpsObject>());
+		this.setNodeEdges(new ArrayList<>());
+		this.setOldEdges(new ArrayList<CpsEdge>());
 		this.setNodesIdx(new HashMap<Integer,Integer>());
 		// TODO Auto-generated constructor stub
 	}
@@ -33,6 +37,34 @@ public class CpsUpperNode extends AbstractCpsObject{
 		this.nodes = nodes;
 	}
 
+	/**
+	 * @return the nodeEdges
+	 */
+	public ArrayList<CpsEdge> getNodeEdges() {
+		return nodeEdges;
+	}
+
+	/**
+	 * @param nodeEdges the nodeEdges to set
+	 */
+	public void setNodeEdges(ArrayList<CpsEdge> nodeEdges) {
+		this.nodeEdges = nodeEdges;
+	}
+
+	/**
+	 * @return the oldEdges
+	 */
+	public ArrayList<CpsEdge> getOldEdges() {
+		return oldEdges;
+	}
+
+	/**
+	 * @param oldEdges the oldEdges to set
+	 */
+	public void setOldEdges(ArrayList<CpsEdge> oldEdges) {
+		this.oldEdges = oldEdges;
+	}
+
 	/**
 	 * @return the nodesIdx
 	 */

+ 95 - 13
src/ui/controller/NodeController.java

@@ -1,6 +1,7 @@
 package ui.controller;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 
 import classes.AbstractCpsObject;
 import classes.CpsEdge;
@@ -11,25 +12,106 @@ public class NodeController {
 
 	private Model model;
 	private MultiPurposeController mpC;
-	
+
 	public NodeController(Model model, MultiPurposeController mpC) {
 		// TODO Auto-generated constructor stub
 		this.model = model;
 		this.mpC = mpC;
 	}
-	
-	public void addNode(CpsUpperNode node) {
-		model.getCvsObjIdx().put(node.getID(), model.getObjectsOnCanvas().size());
+
+	/**
+	 * Add a CpsUpperNode into Canvas
+	 * 
+	 * @param nodeName
+	 */
+	public void addNode(CpsUpperNode nodeName) {
+		CpsUpperNode node = nodeName;
+		connectAdjacent(node);
+		makeNodeOfNodes(node);
 		model.getObjectsOnCanvas().add(node);
 	}
-	
-	public void addNewObject() {
-		
-		CpsUpperNode node = new CpsUpperNode("UpperNode");
-		node.setSav("CVS");
-		node.setConnections(new ArrayList<CpsEdge>());
-		addNode(node);
+
+	/**
+	 * 
+	 * @param node
+	 */
+	public void makeNodeOfNodes(CpsUpperNode node) {
+
+		ArrayList<AbstractCpsObject> nodes = node.getNodes();
+		ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
+
+		for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
+
+			AbstractCpsObject obj = it.next();
+			nodes.add(obj);
+			model.getObjectsOnCanvas().remove(obj);
+		}
+
+		for (Iterator<CpsEdge> it = model.getEdgesOnCanvas().iterator(); it.hasNext();) {
+
+			CpsEdge edge = it.next();
+			if (nodes.contains(edge.getA()) && nodes.contains(edge.getB())) {
+				nodeEdges.add(edge);
+				model.removeEdgesOnCanvas(edge);
+			}
+
+		}
+
 	}
-	
-	private void getAdja
+
+	/**
+	 * 
+	 * @return
+	 */
+	private void connectAdjacent(CpsUpperNode node) {
+
+		ArrayList<AbstractCpsObject> adj = new ArrayList<>();
+		ArrayList<Float> maxCapacity = new ArrayList<>();
+		ArrayList<CpsEdge> oldEdges = node.getOldEdges();
+
+		// float maxCapacity = 0;
+
+		// für alle Edges auf dem Canvas
+		for (Iterator<CpsEdge> it = model.getEdgesOnCanvas().iterator(); it.hasNext();) {
+
+			CpsEdge edge = it.next();
+
+			// if (edge.getCapacity() > maxCapacity)
+			// maxCapacity = edge.getCapacity();
+
+			// wenn ausgewählte Objekte in edge und andere auserhalb
+			if (model.getSelectedCpsObjects().contains(edge.getA())
+					&& !model.getSelectedCpsObjects().contains(edge.getB())) {
+				// und wenn in der adj noch nicht vorhanden
+				if (!adj.contains(edge.getA()))
+					adj.add(edge.getB());
+				// wenn vorhanden teste maxCapacity
+				else if (maxCapacity.get(adj.indexOf(edge.getB())) < edge.getCapacity())
+					maxCapacity.set(adj.indexOf(edge.getB()), edge.getCapacity());
+				// speichere alte edge
+				oldEdges.add(edge);
+				model.getEdgesOnCanvas().remove(edge);
+			}
+
+			// Analog
+			else if (!model.getSelectedCpsObjects().contains(edge.getA())
+					&& model.getSelectedCpsObjects().contains(edge.getB())) {
+				if (!adj.contains(edge.getB()))
+					adj.add(edge.getA());
+				else if (maxCapacity.get(adj.indexOf(edge.getA())) < edge.getCapacity())
+					maxCapacity.set(adj.indexOf(edge.getA()), edge.getCapacity());
+
+				oldEdges.add(edge);
+				model.getEdgesOnCanvas().remove(edge);
+			}
+		}
+		// für alle objekte in adjazenzliste mach
+		for (AbstractCpsObject cps : adj) {
+			CpsEdge newEdge = new CpsEdge(cps, node, maxCapacity.get(adj.indexOf(cps)));
+			// !! Eventuell noch bei getConnections() hinzufügem
+			model.addEdgeOnCanvas(newEdge);
+			node.getConnections().add(newEdge);
+		}
+	}
+
 }