Jelajahi Sumber

Merge branch 'master' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons

Conflicts:
	src/ui/model/Model.java
Edgardo Palza 7 tahun lalu
induk
melakukan
9967290a11

+ 36 - 0
src/classes/PropertyDataSet.java

@@ -0,0 +1,36 @@
+package classes;
+
+import java.awt.Color;
+
+public class PropertyDataSet {
+	//contains the Name of the Graph in which the information is shown//
+	private String assignedGraph;
+	//the color in which the Graph is drawn//
+	private Color color;
+	
+	public PropertyDataSet(){
+		assignedGraph = "";
+		color = new Color(0,0,0);
+	}
+	
+	public PropertyDataSet(String graph, Color color){
+		assignedGraph = graph;
+		this.color = color;
+	}
+	
+	public void setColor(Color color){
+		this.color = color;
+	}
+	
+	public void setGraph(String graph){
+		assignedGraph = graph;
+	}
+	
+	public Color getColor(){
+		return this.color;
+	}
+	
+	public String getAssignedGraph(){
+		return assignedGraph;
+	}
+}

+ 9 - 0
src/classes/graphDataSet.java

@@ -0,0 +1,9 @@
+package classes;
+
+import java.awt.Color;
+import java.util.Hashtable;
+
+public class graphDataSet {
+	Hashtable<String, PropertyDataSet> propertyTable;
+	
+}

+ 6 - 0
src/interfaces/GraphListener.java

@@ -1,7 +1,13 @@
 package interfaces;
 
+import java.util.ArrayList;
+
+import classes.HolonObject;
+
 public interface GraphListener {
 	
 	public void repaintGraph();
+	
+	public void addTrackedObject(ArrayList<HolonObject> hlList);
 
 }

+ 8 - 0
src/ui/controller/Control.java

@@ -686,6 +686,10 @@ public class Control {
 	public void setCanvasY(int canvasY) {
 		globalController.setCanvasY(canvasY);
 	}
+	
+	public void setMaxCapacity(float cap) {
+		globalController.setMaxCapacity(cap);
+	}
 
 	/**
 	 * Set the Algorithm.
@@ -755,4 +759,8 @@ public class Control {
 	public void delEdgeUpperNode(CpsEdge edge, CpsUpperNode upperNode) {
 		nodeController.deleteEdge(edge, upperNode);
 	}
+	
+	public void connectNodes(AbstractCpsObject a, AbstractCpsObject b, CpsUpperNode node) {
+		nodeController.connectNodes(a, b, node);
+	}
 }

+ 4 - 0
src/ui/controller/GlobalController.java

@@ -128,5 +128,9 @@ public class GlobalController {
 	public void addSubNetColor(Color c) {
 		model.addSubNetColor(c);
 	}
+	
+	public void setMaxCapacity(float cap) {
+		model.setMaxCapacity(cap);
+	}
 
 }

+ 37 - 3
src/ui/controller/NodeController.java

@@ -28,6 +28,7 @@ public class NodeController {
 	 * Add a CpsUpperNode into Canvas
 	 * 
 	 * @param nodeName
+	 * @param upperNode
 	 */
 	public void doUpperNode(String nodeName, CpsUpperNode upperNode) {
 
@@ -47,6 +48,7 @@ public class NodeController {
 	 * Delete a CpsUpperNode from the Canvas
 	 * 
 	 * @param node
+	 * @param upperNode
 	 */
 	public void undoUpperNode(CpsUpperNode node, CpsUpperNode upperNode) {
 		restoreOldEdges(node, upperNode);
@@ -62,11 +64,12 @@ public class NodeController {
 	 * Put selected Nodes inside the Upper Node
 	 * 
 	 * @param node
+	 * @param upperNode
 	 */
 	private void makeNodeOfNodes(CpsUpperNode node, CpsUpperNode upperNode) {
 
 		ArrayList<AbstractCpsObject> nodes = node.getNodes();
-		//ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
+		// ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
 
 		// Put all selected Nodes into the Upper Node
 		for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
@@ -101,23 +104,35 @@ public class NodeController {
 
 	}
 
+	/**
+	 * Transfer all relevant data from Node into the next higher layer of Node
+	 * (upperNode)
+	 * 
+	 * @param node
+	 * @param upperNode
+	 */
 	private void unmakeNodesOfNodes(CpsUpperNode node, CpsUpperNode upperNode) {
 		// TODO Auto-generated method stub
+		// add all nodes into upperNode
 		(upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes()).addAll(node.getNodes());
+		// add all indices of nodes into upperNode
 		(upperNode == null ? model.getCvsObjIdx() : upperNode.getNodesIdx()).putAll(node.getNodesIdx());
+		// add all Edges of node into upperNode
 		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).addAll(node.getNodeEdges());
 	}
 
 	/**
+	 * Look for adjacent Nodes connected with the new CpsUpperNode and make Connections
 	 * 
-	 * @return
+	 * @param node
+	 * @param upperNode
 	 */
 	private void makeAdjacent(CpsUpperNode node, CpsUpperNode upperNode) {
 
 		ArrayList<AbstractCpsObject> adj = new ArrayList<>();
 		ArrayList<Float> maxCapacity = new ArrayList<>();
+		
 		ArrayList<CpsEdge> oldEdges = node.getOldEdges();
-
 		ArrayList<CpsEdge> toDelete = new ArrayList<>();
 
 		// für alle Edges auf dem Canvas
@@ -175,6 +190,7 @@ public class NodeController {
 	}
 
 	/**
+	 * Restore the Old Connections from the adjacent Object
 	 * 
 	 * @param node
 	 * @param upperNode
@@ -183,6 +199,7 @@ public class NodeController {
 		// TODO Auto-generated method stub
 		ArrayList<CpsEdge> toDelete = new ArrayList<>();
 
+		//für jede Edge aus upperNode die Node enthält tu sie in toDelete
 		for (Iterator<CpsEdge> it = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges())
 				.iterator(); it.hasNext();) {
 
@@ -191,6 +208,7 @@ public class NodeController {
 				toDelete.add(edge);
 
 		}
+		//lösch alle Edges die in toDelete sind und wiederherstell alte Edges
 		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).removeAll(toDelete);
 		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).addAll(node.getOldEdges());
 	}
@@ -361,4 +379,20 @@ public class NodeController {
 		upperNode.getNodeEdges().remove(edge);
 	}
 
+	/**
+	 * Adds a Edge into Connections of AbstactCpsObjects
+	 * 
+	 * @param a
+	 * @param b
+	 */
+	public void connectNodes(AbstractCpsObject a, AbstractCpsObject b, CpsUpperNode node) {
+		// mache hier Connections in A und B rein
+		// mache diese Edge auch in OldEdges rein des aktuellen CpsUpperNodes
+		
+		 CpsEdge edge = new CpsEdge(a, b, model.getMaxCapacity());
+		 edge.getA().getConnections().add(edge);
+		 edge.getB().getConnections().add(edge);
+		 node.getOldEdges().add(edge);
+	}
+
 }

+ 2 - 5
src/ui/controller/StatsController.java

@@ -25,16 +25,13 @@ public class StatsController {
 
 	public void addTrackingObj(HolonObject obj) {
 		model.getTrackingObj().add(obj);
-		/*
-		for(int i = 0; i < model.getTrackingObj().size(); i++){
-			System.out.println(model.getTrackingObj().get(i).getName() + " " + model.getTrackingObj().get(i).getID());
-		}
-		*/
+		model.addObjectsToGraphListeners();
 	}
 
 	public void removeTrackingObj(HolonObject obj) {
 		ArrayList<HolonObject> objArr = model.getTrackingObj();
 		objArr.remove(obj);
 		model.setTrackingObj(objArr);
+		model.addObjectsToGraphListeners();
 	}
 }

+ 24 - 0
src/ui/model/Model.java

@@ -43,6 +43,8 @@ public class Model {
 	private ArrayList<AbstractCpsObject> clipboardObjects = new ArrayList<AbstractCpsObject>();
 	private Console console;
 	private HashMap<Integer, ArrayList<HolonElement>> eleToDelete;
+	// Capacity for Edge
+	private float maxCapacity;
 
 	private ArrayList<GraphListener> graphListeners = new ArrayList<GraphListener>();
 	// Iteration Speed
@@ -524,6 +526,21 @@ public class Model {
 		return console;
 	}
 
+	/**
+	 * @return the maxCapacity
+	 */
+	public float getMaxCapacity() {
+		return maxCapacity;
+	}
+
+	/**
+	 * @param maxCapacity
+	 *            the maxCapacity to set
+	 */
+	public void setMaxCapacity(float maxCapacity) {
+		this.maxCapacity = maxCapacity;
+	}
+
 	/**
 	 * Sets the Interval in ms between each Iteration.
 	 * 
@@ -675,4 +692,11 @@ public class Model {
 		this.tableModelHolonElementMulti = pt;
 	}
 
+	public void addObjectsToGraphListeners() {
+		for (GraphListener gl : graphListeners) {
+			gl.addTrackedObject(trackingObj);
+			gl.repaintGraph();
+		}
+	}
+
 }

+ 1 - 1
src/ui/view/EditEdgesPopUp.java

@@ -182,7 +182,7 @@ public class EditEdgesPopUp extends JDialog {
 	 *            the capacity
 	 */
 	public void changeForNew(float cap) {
-		canvas.setEdgeCapacity(cap);
+		controller.setMaxCapacity(cap);
 	}
 
 	/**

+ 35 - 25
src/ui/view/GUI.java

@@ -124,8 +124,9 @@ public class GUI<E> implements CategoryListener {
 	private String catOfObjToBeEdited;
 	private final JScrollPane statTab = new JScrollPane();
 
-	private StatisticPane statPane;
+	private splitPane statSplitPane;
 	private JScrollPane statScrollPane;
+	private UpperNodeCanvas unc;;
 
 	private final JLabel maxGraph = new JLabel("100%");
 	private final JLabel medGraph = new JLabel("50%");
@@ -232,7 +233,6 @@ public class GUI<E> implements CategoryListener {
 	private Console console = new Console();
 	private MyCanvas canvas;
 	private UnitGraph unitGraph;
-	private StatisticGraph statGraph;
 	private final JSplitPane splitPane3 = new JSplitPane();
 	private final JSlider sizeSlider = new JSlider();
 	private final JLabel lblImageSize = new JLabel(Languages.getLanguage()[94]);
@@ -277,12 +277,11 @@ public class GUI<E> implements CategoryListener {
 	public GUI(Control control) {
 		this.controller = control;
 		this.model = control.getModel();
-		statPane = new StatisticPane(model, controller);
-		model.addGraphListener(statPane);
-		statScrollPane = new JScrollPane(statPane);
+		statSplitPane = new splitPane();
+		model.addGraphListener(statSplitPane);
+		statScrollPane = new JScrollPane(statSplitPane);
 		this.canvas = new MyCanvas(model, control);
 		this.unitGraph = new UnitGraph(model, control);
-		this.statGraph = new StatisticGraph(model, controller);
 		control.initListener(this);
 		controller.setCanvas(canvas);
 		model.setConsole(console);
@@ -1916,7 +1915,7 @@ public class GUI<E> implements CategoryListener {
 	 * Open a new Tab with an UpperNodeCanvas
 	 */
 	private void openNewUpperNodeTab() {
-		UpperNodeCanvas unc;
+
 		if (((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getComponent(0) instanceof MyCanvas) {
 			unc = new UpperNodeCanvas(model, controller, (CpsUpperNode) temp, "");
 		} else {
@@ -1925,26 +1924,37 @@ public class GUI<E> implements CategoryListener {
 							.getComponent(0)).path + " -> ");
 		}
 
-		unc.setBorder(null);
-		unc.setBackground(Color.WHITE);
-		unc.setPreferredSize(new Dimension(model.getCanvasX(), model.getCanvasY()));
-
-		unc.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mousePressed(MouseEvent e) {
-				temp = unc.tempCps;
-				if (doubleClick() && temp instanceof CpsUpperNode) {
-					openNewUpperNodeTab();
-				}
+		// check if tab already open for clicked NodeOfNode
+		boolean dupl = false;
+		for (int i = 2; i < tabbedPane.getTabCount() && dupl == false; i++) {
+			if (((UpperNodeCanvas) ((JScrollPane) tabbedPane.getComponentAt(i)).getViewport().getComponent(0)).upperNode
+					.getID() == temp.getID()) {
+				dupl = true;
+				tabbedPane.setSelectedComponent(tabbedPane.getComponentAt(i));
 			}
-		});
+		}
+		if (!dupl) {
+			unc.setBorder(null);
+			unc.setBackground(Color.WHITE);
+			unc.setPreferredSize(new Dimension(model.getCanvasX(), model.getCanvasY()));
 
-		JScrollPane sp = new JScrollPane(unc);
-		sp.setBorder(null);
-		tabbedPane.add(temp.getName(), sp);
-		tabbedPane.setSelectedComponent(sp);
-		tabbedPane.setTabComponentAt(tabbedPane.getTabCount() - 1, new ButtonTabComponent(tabbedPane));
-		temp = null;
+			unc.addMouseListener(new MouseAdapter() {
+				@Override
+				public void mousePressed(MouseEvent e) {
+					temp = unc.tempCps;
+					if (doubleClick() && temp instanceof CpsUpperNode) {
+						openNewUpperNodeTab();
+					}
+				}
+			});
+
+			JScrollPane sp = new JScrollPane(unc);
+			sp.setBorder(null);
+			tabbedPane.add(temp.getName(), sp);
+			tabbedPane.setSelectedComponent(sp);
+			tabbedPane.setTabComponentAt(tabbedPane.getTabCount() - 1, new ButtonTabComponent(tabbedPane));
+			temp = null;
+		}
 	}
 
 }

+ 23 - 17
src/ui/view/MyCanvas.java

@@ -23,6 +23,8 @@ import javax.swing.ImageIcon;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
 import javax.swing.JToolTip;
 
 import classes.CpsEdge;
@@ -83,7 +85,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 												// rightclicked
 
 	// contains the value of the Capacity for new created Edges
-	private float edgeCapacity;
+
 
 	/**
 	 * Constructor.
@@ -102,7 +104,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 
 		showedInformation[0] = true;
 		showedInformation[1] = true;
-		edgeCapacity = 10000;
+		control.setMaxCapacity(10000);
 
 		popmenu.add(itemCut);
 		popmenu.add(itemCopy);
@@ -202,6 +204,17 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 				// Remove the selected Object objects
 				for (AbstractCpsObject cps : model.getSelectedCpsObjects()) {
 					controller.delCanvasObject(cps);
+					// Remove UpperNodeTab if UpperNode deleted
+					if(cps instanceof CpsUpperNode){
+						JTabbedPane tabbedPane = (JTabbedPane) getParent().getParent().getParent();
+						for (int i = 2; i < tabbedPane.getTabCount(); i++) {
+							if (((UpperNodeCanvas) ((JScrollPane) tabbedPane.getComponentAt(i)).getViewport().getComponent(0)).upperNode
+									.getID() == cps.getID()) {
+								tabbedPane.remove(i);
+								i = tabbedPane.getTabCount();				
+							}
+						}
+					}	
 				}
 				model.getSelectedCpsObjects().clear();
 				tempCps = null;
@@ -460,12 +473,13 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		dataSelected = null;
 		edgeHighlight = null;
 		controller.setSelecteEdge(null);
+		
 		// Object Selection
 		for (AbstractCpsObject cps : model.getObjectsOnCanvas()) {
 			cx = cps.getPosition().x;
 			cy = cps.getPosition().y;
 			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
-				tempCps = cps;
+				tempCps = cps;				
 				controller.addTextToConsole("Selected: ", Color.BLACK, 12, false, false, false);
 				controller.addTextToConsole("" + cps.getName(), Color.BLUE, 12, true, false, false);
 				controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
@@ -734,7 +748,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 					}
 				}
 				if (newEdge) {
-					e = new CpsEdge(cps, tempCps, edgeCapacity);
+					e = new CpsEdge(cps, tempCps, model.getMaxCapacity());
 					controller.addEdgeOnCanvas(e);
 				}
 			}
@@ -757,11 +771,11 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 				r = p.getA();
 				k = p.getB();
 
-				e = new CpsEdge(n, tempCps, edgeCapacity);
+				e = new CpsEdge(n, tempCps, model.getMaxCapacity());
 
-				e1 = new CpsEdge(n, r, edgeCapacity);
+				e1 = new CpsEdge(n, r, model.getMaxCapacity());
 
-				e2 = new CpsEdge(n, k, edgeCapacity);
+				e2 = new CpsEdge(n, k, model.getMaxCapacity());
 
 				controller.removeEdgesOnCanvas(p);
 				controller.addEdgeOnCanvas(e);
@@ -777,7 +791,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 			n.setPosition(x - model.getScaleDiv2(), y - model.getScaleDiv2());
 			controller.addObjectCanvas(n);
 
-			e = new CpsEdge(n, tempCps, edgeCapacity);
+			e = new CpsEdge(n, tempCps, model.getMaxCapacity());
 
 			controller.addEdgeOnCanvas(e);
 		}
@@ -852,15 +866,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		return false;
 	}
 
-	/**
-	 * sets the Edge Capacity.
-	 * 
-	 * @param cap
-	 *            capacity
-	 */
-	public void setEdgeCapacity(float cap) {
-		edgeCapacity = cap;
-	}
+
 
 	/**
 	 * Set if Information should be shown.

+ 15 - 1
src/ui/view/StatisticPane.java

@@ -8,6 +8,7 @@ import java.awt.BorderLayout;
 import java.awt.FlowLayout;
 import javax.swing.GroupLayout;
 import javax.swing.GroupLayout.Alignment;
+import javax.swing.GroupLayout.Group;
 import javax.swing.JLabel;
 import java.awt.Font;
 import javax.swing.JCheckBox;
@@ -25,6 +26,7 @@ import ui.model.Model;
 import javax.swing.JComboBox;
 import javax.swing.JButton;
 import java.awt.event.ActionListener;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.awt.event.ActionEvent;
 
@@ -98,9 +100,15 @@ public class StatisticPane extends JPanel implements GraphListener{
     	btnAddGraph.addActionListener(new ActionListener() {
     		public void actionPerformed(ActionEvent e) {
     			JPanel tmp = new JPanel();
-    			//groupLayout.
     		}
     	});
+    	
+    	/*
+		Group gr = groupLayout.createParallelGroup();
+		for(int i = 0; i < 4; i++){
+			gr.addComponent(statGraph2, GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE);
+		}
+		*/
     	groupLayout = new GroupLayout(this);
     	groupLayout.setHorizontalGroup(
     		groupLayout.createParallelGroup(Alignment.LEADING)
@@ -214,4 +222,10 @@ public class StatisticPane extends JPanel implements GraphListener{
 		// TODO Auto-generated method stub
 		statGraph1.repaint();
 	}
+
+	@Override
+	public void addTrackedObject(ArrayList<HolonObject> hl) {
+		// TODO Auto-generated method stub
+		
+	}
 }

+ 238 - 92
src/ui/view/UpperNodeCanvas.java

@@ -25,6 +25,7 @@ import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
 import javax.swing.JToolTip;
 
 import classes.CpsEdge;
@@ -34,6 +35,7 @@ import classes.AbstractCpsObject;
 import classes.HolonElement;
 import classes.HolonObject;
 import classes.HolonSwitch;
+import classes.Position;
 import classes.SubNet;
 import ui.controller.Control;
 import ui.model.Model;
@@ -56,6 +58,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	private int cx, cy;
 	private int sx, sy; // Mark Coords
 	private float scalediv20;
+	private int borderPos = 0; // Border Position
 
 	// Path
 	public String path;
@@ -86,13 +89,12 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	public JMenuItem itemUngroup = new JMenuItem("Ungroup");
 	public JMenuItem itemTrack = new JMenuItem("Track");
 	public JMenuItem itemUntrack = new JMenuItem("Untrack");
-	private JToolTip objectTT = new JToolTip();
+	// private JToolTip objectTT = new JToolTip();
 
 	private Point mousePosition = new Point(); // Mouse Position when
 												// rightclicked
 
 	// contains the value of the Capacity for new created Edges
-	private float edgeCapacity;
 
 	/**
 	 * Constructor.
@@ -103,7 +105,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	 *            the Controller
 	 */
 	public UpperNodeCanvas(Model mod, Control control, CpsUpperNode UpperNode, String parentPath) {
-		this.add(objectTT);
+		// this.add(objectTT);
 		this.controller = control;
 		this.model = mod;
 		this.upperNode = UpperNode;
@@ -112,9 +114,15 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		// this.add(breadCrumb);
 		scalediv20 = model.getScale() / 20;
 
+		for (AbstractCpsObject cps : upperNode.getNodes()) {
+			if (cps.getPosition().x < model.getScaleDiv2() + borderPos + 5) {
+				cps.setPosition(new Position(borderPos + 5, cps.getPosition().y));
+			}
+		}
+
 		showedInformation[0] = true;
 		showedInformation[1] = true;
-		edgeCapacity = 10000;
+		control.setMaxCapacity(10000);
 
 		popmenu.add(itemCut);
 		popmenu.add(itemCopy);
@@ -138,7 +146,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		itemGroup.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				controller.addUpperNode("NodeOfNode", UpperNode);
+				controller.addUpperNode("NodeOfNode", upperNode);
 				repaint();
 			}
 		});
@@ -146,7 +154,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		itemUngroup.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				controller.delUpperNode((CpsUpperNode) tempCps, UpperNode);
+				controller.delUpperNode((CpsUpperNode) tempCps, upperNode);
 				repaint();
 			}
 		});
@@ -213,7 +221,18 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			public void actionPerformed(ActionEvent e) {
 				// Remove the selected Object objects
 				for (AbstractCpsObject cps : model.getSelectedCpsObjects()) {
-					controller.delObjUpperNode(cps, UpperNode);
+					controller.delObjUpperNode(cps, upperNode);
+					// Remove UpperNodeTab if UpperNode deleted
+					if (cps instanceof CpsUpperNode) {
+						JTabbedPane tabbedPane = (JTabbedPane) getParent().getParent().getParent();
+						for (int i = 2; i < tabbedPane.getTabCount(); i++) {
+							if (((UpperNodeCanvas) ((JScrollPane) tabbedPane.getComponentAt(i)).getViewport()
+									.getComponent(0)).upperNode.getID() == cps.getID()) {
+								tabbedPane.remove(i);
+								i = tabbedPane.getTabCount();
+							}
+						}
+					}
 				}
 				model.getSelectedCpsObjects().clear();
 				tempCps = null;
@@ -266,6 +285,13 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 		g2.setRenderingHints(rh);
 
+		// Left Border
+		borderPos = (int) (model.getScale() + scalediv20 + scalediv20 + 10);
+		g2.setColor(new Color(230, 230, 230));
+		g2.fillRect(0, 0, borderPos, this.getHeight());
+		g2.setColor(Color.BLACK);
+		g2.drawLine(0, 0, this.getWidth(), 0);
+
 		// Test SubNet Coloring
 		int i = 0;
 		for (SubNet s : controller.getSimManager().getSubNets()) {
@@ -378,7 +404,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			}
 		}
 
-		// Objects
+		// Objects in upper node
 		for (AbstractCpsObject cps : upperNode.getNodes()) {
 			// Border Highlighting
 			g2.setColor(cps.getBorderColor());
@@ -437,10 +463,89 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					null);
 		}
 
+		// Objects connected to upperNode
+		int count = 0;
+		for (CpsEdge e : upperNode.getConnections()) {
+			AbstractCpsObject cps;
+			if (e.getA().equals(this.upperNode)) {
+				cps = e.getB();
+			} else {
+				cps = e.getA();
+			}
+			// Show and Highlight
+			if (model.getSelectedCpsObjects().contains(cps)) {
+				for (CpsEdge ed : cps.getConnections()) {
+					AbstractCpsObject obj = null;
+					if (upperNode.getNodes().contains(ed.getA())) {
+						obj = ed.getA();
+					} else if (upperNode.getNodes().contains(ed.getB())) {
+						obj = ed.getB();
+					}
+					if (obj != null) {
+						g2.setColor(Color.BLUE);
+						g2.drawLine(obj.getPosition().x + model.getScaleDiv2(),
+								obj.getPosition().y + model.getScaleDiv2(), (borderPos >> 1),
+								(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count)
+										+ model.getScaleDiv2());
+					}
+				}
+			}
+
+			// Border Highlighting
+			g2.setColor(cps.getBorderColor());
+			if (g2.getColor() != Color.WHITE) {
+				g2.fillRect((int) ((borderPos >> 1) - model.getScaleDiv2() - scalediv20) - 3,
+						(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count - scalediv20) - 3,
+						(int) (controller.getScale() + ((scalediv20 + 3) * 2)),
+						(int) (controller.getScale() + ((scalediv20 + 3) * 2)));
+			}
+
+			// node image
+			if (cps instanceof CpsNode && (cps == tempCps || model.getSelectedCpsObject() == cps
+					|| model.getSelectedCpsObjects().contains(cps) || tempSelected.contains(cps))) {
+				img = new ImageIcon(this.getClass().getResource("/Images/node_selected.png")).getImage();
+			} else {
+				if (cps instanceof HolonSwitch) {
+					if (((HolonSwitch) cps).getActiveAt()[model.getCurIteration()]) {
+						((HolonSwitch) cps).setAutoState(true);
+					} else {
+						((HolonSwitch) cps).setAutoState(false);
+					}
+				}
+				// Highlighting
+				if ((cps == tempCps && model.getSelectedCpsObjects().size() == 0 && tempSelected.size() == 0)
+						|| model.getSelectedCpsObjects().contains(cps) || tempSelected.contains(cps)) {
+					g2.setColor(Color.BLUE);
+					g2.fillRect((int) ((borderPos >> 1) - model.getScaleDiv2() - scalediv20),
+							(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count - scalediv20),
+							(int) (controller.getScale() + (scalediv20 * 2)),
+							(int) (controller.getScale() + (scalediv20 * 2)));
+				} else if (cps instanceof HolonObject) {
+					g2.setColor(((HolonObject) cps).getColor());
+
+					g2.fillRect((int) ((borderPos >> 1) - model.getScaleDiv2() - scalediv20),
+							(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count - scalediv20),
+							(int) (controller.getScale() + (scalediv20 * 2)),
+							(int) (controller.getScale() + (scalediv20 * 2)));
+				}
+				// draw image
+				File checkPath = new File(cps.getImage());
+				if (checkPath.exists()) {
+					img = new ImageIcon(cps.getImage()).getImage();
+				} else {
+					img = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage();
+				}
+			}
+			g2.drawImage(img, (borderPos >> 1) - model.getScaleDiv2(),
+					(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count), controller.getScale(),
+					controller.getScale(), null);
+			count++;
+		}
+
 		// Dragg Highlighting
+		g2.setStroke(new BasicStroke(1));
 		if (doMark) {
 			g2.setColor(Color.BLACK);
-			g2.setStroke(new BasicStroke(1));
 			if (sx > x && sy > y) {
 				g2.drawRect(x, y, sx - x, sy - y);
 			} else if (sx < x && sy < y) {
@@ -451,6 +556,10 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				g2.drawRect(sx, y, x - sx, sy - y);
 			}
 		}
+
+		// Border Line
+		g2.setColor(Color.BLACK);
+		g2.drawLine(borderPos, 0, borderPos, this.getHeight());
 	}
 
 	@Override
@@ -473,31 +582,64 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		edgeHighlight = null;
 		controller.setSelecteEdge(null);
 		// Object Selection
-		for (AbstractCpsObject cps : upperNode.getNodes()) {
-			cx = cps.getPosition().x;
-			cy = cps.getPosition().y;
-			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
-				tempCps = cps;
-				controller.addTextToConsole("Selected: ", Color.BLACK, 12, false, false, false);
-				controller.addTextToConsole("" + cps.getName(), Color.BLUE, 12, true, false, false);
-				controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
-				controller.addTextToConsole("" + cps.getID(), Color.RED, 12, true, false, true);
-				dragging = true;
-				controller.setSelectedObjectID(tempCps.getID());
-				// If drawing an Edge (CTRL down)
-				if (tempCps.getClass() == HolonObject.class) {
-					HolonObject tempObj = ((HolonObject) tempCps);
-					dataSelected = tempObj.getElements();
+		if (e.getX() > borderPos) {
+			for (AbstractCpsObject cps : upperNode.getNodes()) {
+				cx = cps.getPosition().x;
+				cy = cps.getPosition().y;
+				if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
+					tempCps = cps;
+					controller.addTextToConsole("Selected: ", Color.BLACK, 12, false, false, false);
+					controller.addTextToConsole("" + cps.getName(), Color.BLUE, 12, true, false, false);
+					controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
+					controller.addTextToConsole("" + cps.getID(), Color.RED, 12, true, false, true);
+					dragging = true;
+					controller.setSelectedObjectID(tempCps.getID());
+					// If drawing an Edge (CTRL down)
+					if (tempCps.getClass() == HolonObject.class) {
+						HolonObject tempObj = ((HolonObject) tempCps);
+						dataSelected = tempObj.getElements();
+					}
+					if (e.isShiftDown()) {
+						drawEdge = true;
+						dragging = false;
+					}
+				}
+			}
+		} else {
+			int count = 0;
+			for (CpsEdge ed : upperNode.getConnections()) {
+				AbstractCpsObject cps;
+				if (ed.getA().equals(this.upperNode)) {
+					cps = ed.getB();
+				} else {
+					cps = ed.getA();
 				}
-				if (e.isShiftDown()) {
-					drawEdge = true;
-					dragging = false;
+				if (x - controller.getScale() <= ((borderPos >> 1) - model.getScaleDiv2())
+						&& y - controller.getScale() <= (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count)
+						&& x >= (borderPos >> 1) - model.getScaleDiv2()
+						&& y >= (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count)) {
+					tempCps = cps;
+					controller.addTextToConsole("Selected: ", Color.BLACK, 12, false, false, false);
+					controller.addTextToConsole("" + cps.getName(), Color.BLUE, 12, true, false, false);
+					controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
+					controller.addTextToConsole("" + cps.getID(), Color.RED, 12, true, false, true);
+					controller.setSelectedObjectID(tempCps.getID());
+					// If drawing an Edge (CTRL down)
+					if (tempCps.getClass() == HolonObject.class) {
+						HolonObject tempObj = ((HolonObject) tempCps);
+						dataSelected = tempObj.getElements();
+					}
+					if (e.isShiftDown()) {
+						drawEdge = true;
+					}
 				}
+				count++;
 			}
 		}
+
 		// Selection of CpsObject
 		model.setSelectedCpsObject(tempCps);
-		
+
 		// Edge Selection
 		if (tempCps == null) {
 			edgeHighlight = mousePositionOnEdge(x, y);
@@ -610,48 +752,55 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		}
 		if (dragging) {
 			try {
-				dragged = true;
-				float xDist, yDist; // Distance
-
-				x = e.getX() - controller.getScaleDiv2();
-				y = e.getY() - controller.getScaleDiv2();
-
-				// Make sure its in bounds
-				if (e.getX() < controller.getScaleDiv2())
-					x = 0;
-				else if (e.getX() > this.getWidth() - controller.getScaleDiv2())
-					x = this.getWidth() - controller.getScale();
-				if (e.getY() < controller.getScaleDiv2())
-					y = 0;
-				else if (e.getY() > this.getHeight() - controller.getScaleDiv2())
-					y = this.getHeight() - controller.getScale();
-
-				// Distance
-				xDist = x - tempCps.getPosition().x;
-				yDist = y - tempCps.getPosition().y;
-
-				tempCps.setPosition(x, y); // Drag Position
-				// TipText Position and name
-				objectTT.setTipText(tempCps.getName() + ", " + tempCps.getID());
-				objectTT.setLocation(x, y + controller.getScale());
-
-				// All Selected Objects
-				for (AbstractCpsObject cps : model.getSelectedCpsObjects()) {
-					if (cps != tempCps) {
-						x = (int) (cps.getPosition().x + xDist);
-						y = (int) (cps.getPosition().y + yDist);
-
-						// Make sure its in bounds
-						if (x <= 0)
-							x = 0;
-						else if (x > this.getWidth() - controller.getScale())
-							x = this.getWidth() - controller.getScale();
-						if (y <= 0)
-							y = 0;
-						else if (y > this.getHeight() - controller.getScale())
-							y = this.getHeight() - controller.getScale();
-
-						cps.setPosition(x, y);
+				if (upperNode.getNodes().contains(tempCps)) {
+					dragged = true;
+					float xDist, yDist; // Distance
+
+					x = e.getX() - controller.getScaleDiv2();
+					y = e.getY() - controller.getScaleDiv2();
+
+					// tempCps in the upperNode? if not its a connected Object
+					// from
+					// outside
+
+					// Make sure its in bounds
+					if (e.getX() < controller.getScaleDiv2() + borderPos + 5)
+						x = borderPos + 5;
+					else if (e.getX() > this.getWidth() - controller.getScaleDiv2())
+						x = this.getWidth() - controller.getScale();
+					if (e.getY() < controller.getScaleDiv2())
+						y = 0;
+					else if (e.getY() > this.getHeight() - controller.getScaleDiv2())
+						y = this.getHeight() - controller.getScale();
+
+					// Distance
+					xDist = x - tempCps.getPosition().x;
+					yDist = y - tempCps.getPosition().y;
+
+					tempCps.setPosition(x, y); // Drag Position
+					// TipText Position and name
+					// objectTT.setTipText(tempCps.getName() + ", " +
+					// tempCps.getID());
+					// objectTT.setLocation(x, y + controller.getScale());
+
+					// All Selected Objects
+					for (AbstractCpsObject cps : model.getSelectedCpsObjects()) {
+						if (cps != tempCps) {
+							x = (int) (cps.getPosition().x + xDist);
+							y = (int) (cps.getPosition().y + yDist);
+
+							// Make sure its in bounds
+							if (x <= 0)
+								x = 0;
+							else if (x > this.getWidth() - controller.getScale())
+								x = this.getWidth() - controller.getScale();
+							if (y <= 0)
+								y = 0;
+							else if (y > this.getHeight() - controller.getScale())
+								y = this.getHeight() - controller.getScale();
+
+							cps.setPosition(x, y);
+						}
 					}
 				}
 				repaint();
@@ -692,22 +841,19 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		x = e.getX();
 		y = e.getY();
 		// Everytghing for the tooltip :)
-		boolean on = false;
-		for (AbstractCpsObject cps : upperNode.getNodes()) {
-
-			cx = cps.getPosition().x;
-			cy = cps.getPosition().y;
-			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
-
-				objectTT.setTipText(cps.getName() + ", " + cps.getID());
-				objectTT.setLocation(cx, cy + controller.getScale());
-				on = true;
-			}
-		}
-		if (!on) {
-			objectTT.setLocation(-200, -200);
-			objectTT.setTipText("");
-		}
+		/*
+		 * boolean on = false; for (AbstractCpsObject cps :
+		 * upperNode.getNodes()) {
+		 * 
+		 * cx = cps.getPosition().x; cy = cps.getPosition().y; if (x -
+		 * controller.getScale() <= cx && y - controller.getScale() <= cy && x
+		 * >= cx && y >= cy) {
+		 * 
+		 * objectTT.setTipText(cps.getName() + ", " + cps.getID());
+		 * objectTT.setLocation(cx, cy + controller.getScale()); on = true; } }
+		 * if (!on) { objectTT.setLocation(-200, -200); objectTT.setTipText("");
+		 * }
+		 */
 	}
 
 	/**
@@ -747,7 +893,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					}
 				}
 				if (newEdge) {
-					e = new CpsEdge(cps, tempCps, edgeCapacity);
+					e = new CpsEdge(cps, tempCps, model.getMaxCapacity());
 					controller.addEdgeUpperNode(e, upperNode);
 				}
 			}
@@ -770,11 +916,11 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				r = p.getA();
 				k = p.getB();
 
-				e = new CpsEdge(n, tempCps, edgeCapacity);
+				e = new CpsEdge(n, tempCps, model.getMaxCapacity());
 
-				e1 = new CpsEdge(n, r, edgeCapacity);
+				e1 = new CpsEdge(n, r, model.getMaxCapacity());
 
-				e2 = new CpsEdge(n, k, edgeCapacity);
+				e2 = new CpsEdge(n, k, model.getMaxCapacity());
 
 				controller.delEdgeUpperNode(p, upperNode);
 				controller.addEdgeUpperNode(e, upperNode);
@@ -790,7 +936,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			n.setPosition(x - model.getScaleDiv2(), y - model.getScaleDiv2());
 			controller.addObjUpperNode(n, upperNode);
 
-			e = new CpsEdge(n, tempCps, edgeCapacity);
+			e = new CpsEdge(n, tempCps, model.getMaxCapacity());
 
 			controller.addEdgeUpperNode(e, upperNode);
 		}
@@ -870,7 +1016,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	 *            capacity
 	 */
 	public void setEdgeCapacity(float cap) {
-		edgeCapacity = cap;
+		controller.setMaxCapacity(cap);
 	}
 
 	/**

+ 257 - 0
src/ui/view/splitPane.java

@@ -0,0 +1,257 @@
+package ui.view;
+
+import javax.swing.JSplitPane;
+import javax.swing.JScrollPane;
+import javax.swing.JPanel;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import javax.swing.GroupLayout;
+import javax.swing.GroupLayout.Alignment;
+import javax.swing.JLabel;
+import javax.swing.LayoutStyle.ComponentPlacement;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.MutableTreeNode;
+import javax.swing.tree.TreeNode;
+
+import classes.HolonObject;
+import classes.PropertyDataSet;
+import interfaces.GraphListener;
+
+import javax.swing.JTextField;
+import javax.swing.JComboBox;
+import javax.swing.JButton;
+import javax.swing.JTree;
+import java.awt.Color;
+import javax.swing.border.LineBorder;
+
+public class splitPane extends JSplitPane implements GraphListener {
+	private JTextField graphNrTxtField;
+	private JTextField redField;
+	private JTextField greenField;
+	private JTextField blueField;
+	private JTree objectTree;
+	private DefaultTreeModel treeModel;
+	private DefaultMutableTreeNode objectsNode;
+	private DefaultMutableTreeNode wholeHolon;
+	private Hashtable<String, Hashtable<String, PropertyDataSet>> objectHashtable;
+
+	JLabel showObjectlbl;
+	JLabel showPropertylbl;
+	public splitPane() {
+		
+		objectHashtable = new Hashtable<String, Hashtable<String, PropertyDataSet>>();
+
+		JPanel panel = new JPanel();
+		setLeftComponent(panel);
+		
+		JScrollPane treeScrollPane = new JScrollPane();
+		
+		JLabel lblObject = new JLabel("Object(s):");
+		
+		showObjectlbl = new JLabel("...");
+		
+		JLabel lblProperty = new JLabel("Property:");
+		
+		showPropertylbl = new JLabel("...");
+		
+		JLabel lblGraph = new JLabel("Graph:");
+		
+		graphNrTxtField = new JTextField();
+		graphNrTxtField.setColumns(10);
+		
+		JLabel lblColor = new JLabel("Color:");
+		
+		JComboBox colorComboBox = new JComboBox();
+		
+		redField = new JTextField();
+		redField.setColumns(10);
+		
+		greenField = new JTextField();
+		greenField.setColumns(10);
+		
+		blueField = new JTextField();
+		blueField.setColumns(10);
+		
+		JLabel lblR = new JLabel("R:");
+		
+		JLabel lblG = new JLabel("G:");
+		
+		JLabel lblB = new JLabel("B:");
+		
+		JButton btnAdd = new JButton("Add");
+		
+		JPanel colorPanel = new JPanel();
+		colorPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
+		colorPanel.setBackground(Color.WHITE);
+		GroupLayout gl_panel = new GroupLayout(panel);
+		gl_panel.setHorizontalGroup(
+			gl_panel.createParallelGroup(Alignment.LEADING)
+				.addGroup(gl_panel.createSequentialGroup()
+					.addContainerGap()
+					.addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
+						.addComponent(treeScrollPane, GroupLayout.PREFERRED_SIZE, 165, GroupLayout.PREFERRED_SIZE)
+						.addGroup(gl_panel.createSequentialGroup()
+							.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
+								.addComponent(lblGraph)
+								.addComponent(lblObject)
+								.addComponent(lblProperty)
+								.addComponent(lblColor)
+								.addGroup(gl_panel.createSequentialGroup()
+									.addComponent(lblR)
+									.addPreferredGap(ComponentPlacement.RELATED)
+									.addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
+										.addComponent(colorPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+										.addComponent(redField, GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE))))
+							.addPreferredGap(ComponentPlacement.RELATED)
+							.addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
+								.addComponent(showObjectlbl, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+								.addComponent(showPropertylbl, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+								.addComponent(colorComboBox, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+								.addGroup(gl_panel.createSequentialGroup()
+									.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
+										.addComponent(btnAdd)
+										.addGroup(gl_panel.createSequentialGroup()
+											.addComponent(lblG)
+											.addPreferredGap(ComponentPlacement.RELATED)
+											.addComponent(greenField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)))
+									.addPreferredGap(ComponentPlacement.RELATED)
+									.addComponent(lblB)
+									.addPreferredGap(ComponentPlacement.RELATED)
+									.addComponent(blueField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE))
+								.addComponent(graphNrTxtField))))
+					.addContainerGap())
+		);
+		gl_panel.setVerticalGroup(
+			gl_panel.createParallelGroup(Alignment.LEADING)
+				.addGroup(gl_panel.createSequentialGroup()
+					.addContainerGap()
+					.addComponent(treeScrollPane, GroupLayout.PREFERRED_SIZE, 153, GroupLayout.PREFERRED_SIZE)
+					.addGap(27)
+					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
+						.addComponent(lblObject, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
+						.addComponent(showObjectlbl))
+					.addPreferredGap(ComponentPlacement.RELATED)
+					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
+						.addComponent(lblProperty)
+						.addComponent(showPropertylbl))
+					.addPreferredGap(ComponentPlacement.RELATED)
+					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
+						.addComponent(lblGraph)
+						.addComponent(graphNrTxtField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
+					.addPreferredGap(ComponentPlacement.RELATED)
+					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
+						.addComponent(lblColor)
+						.addComponent(colorComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
+					.addGap(18)
+					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
+						.addComponent(lblR)
+						.addComponent(redField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+						.addComponent(lblG)
+						.addComponent(greenField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+						.addComponent(lblB)
+						.addComponent(blueField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
+					.addPreferredGap(ComponentPlacement.RELATED)
+					.addComponent(colorPanel, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
+					.addPreferredGap(ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
+					.addComponent(btnAdd)
+					.addContainerGap())
+		);
+		
+		objectTree = new JTree();
+		treeModel = (DefaultTreeModel)objectTree.getModel();
+		DefaultMutableTreeNode root = new DefaultMutableTreeNode("Statistics");
+		wholeHolon = new DefaultMutableTreeNode("whole Holon");
+		wholeHolon.add(new DefaultMutableTreeNode("total Production"));
+		wholeHolon.add(new DefaultMutableTreeNode("total Consumption"));
+		wholeHolon.add(new DefaultMutableTreeNode("Percentage of Supplied Objects"));
+		wholeHolon.add(new DefaultMutableTreeNode("Percentage of not Supplied Objects"));
+		wholeHolon.add(new DefaultMutableTreeNode("Percentage of partially Supplied Objects"));
+
+		objectsNode = new DefaultMutableTreeNode("Objects");
+		DefaultMutableTreeNode defaultNode = new DefaultMutableTreeNode("empty");
+	
+		objectsNode.add(defaultNode);
+		treeModel.setRoot(root);
+		root.add(wholeHolon);
+		root.add(objectsNode);
+		objectTree.setModel(treeModel);
+		
+		treeScrollPane.setViewportView(objectTree);
+		
+		objectTree.addTreeSelectionListener(new TreeSelectionListener(){
+
+			@Override
+			public void valueChanged(TreeSelectionEvent e) {
+				showObjectlbl.setText("...");
+				showPropertylbl.setText("...");
+				 DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)objectTree.getLastSelectedPathComponent();
+				 if(selectedNode == null){
+					 return;
+				 }else{
+					 if(selectedNode.getLevel() == 1){
+						 showObjectlbl.setText(selectedNode.toString());
+					 }
+					 if(selectedNode.getLevel() == 2){
+						 if(((DefaultMutableTreeNode)selectedNode.getParent()).toString().equals("whole Holon")){
+							 showPropertylbl.setText(selectedNode.toString());
+							 showObjectlbl.setText(selectedNode.getParent().toString());
+						 }else{
+							 showObjectlbl.setText(selectedNode.toString());
+						 }
+					 }
+					 if(selectedNode.getLevel() == 3){
+						 String object = ((DefaultMutableTreeNode)selectedNode.getParent()).toString();
+						 String property = selectedNode.toString();
+						 int r = objectHashtable.get(object).get(property).getColor().getRed();
+						 redField.setText(Integer.toString(r));
+						 int g = objectHashtable.get(object).get(property).getColor().getGreen();
+						 greenField.setText(Integer.toString(g));
+						 int b = objectHashtable.get(object).get(property).getColor().getBlue();
+						 blueField.setText(Integer.toString(b));
+						 
+						 showObjectlbl.setText(object);
+						 showPropertylbl.setText(property);
+						 graphNrTxtField.setText(objectHashtable.get(object).get(property).getAssignedGraph());
+					 }
+				 }
+			}
+			
+		});
+		panel.setLayout(gl_panel);
+		
+		JScrollPane graphScrollPane = new JScrollPane();
+		setRightComponent(graphScrollPane);
+		repaintGraph();
+	}
+	@Override
+	public void repaintGraph() {
+		treeModel.reload();
+	}
+	@Override
+	public void addTrackedObject(ArrayList<HolonObject> hlList) {
+		if(hlList.size() > 0 && hlList != null){
+			objectsNode.removeAllChildren();
+			for(HolonObject hO : hlList){
+				Hashtable<String, PropertyDataSet> tmpHash = new Hashtable<String, PropertyDataSet>();
+				String name = hO.getName() + " " + hO.getID();
+				DefaultMutableTreeNode tmp = new DefaultMutableTreeNode(name);
+				tmp.add(new DefaultMutableTreeNode("total Production"));
+				tmp.add(new DefaultMutableTreeNode("total Consumption"));
+				tmp.add(new DefaultMutableTreeNode("number of activated Elements"));
+				tmpHash.put("total Production", new PropertyDataSet());
+				tmpHash.put("total Consumption", new PropertyDataSet());
+				tmpHash.put("number of activated Elements", new PropertyDataSet());
+				objectHashtable.put(name, tmpHash);
+				objectsNode.add(tmp);
+			}
+		}else{
+			objectsNode.add(new DefaultMutableTreeNode("empty"));
+		}
+		
+	}
+}