瀏覽代碼

UpdateController and some changes in the PropertyTable for CpsUpperNodes

Edgardo Palza 8 年之前
父節點
當前提交
e64afe2468

+ 41 - 7
src/classes/CpsUpperNode.java

@@ -3,13 +3,13 @@ package classes;
 import java.util.ArrayList;
 import java.util.HashMap;
 
-public class CpsUpperNode extends AbstractCpsObject{
+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) {
 		super(nodeName);
 		this.setConnections(new ArrayList<CpsEdge>());
@@ -19,7 +19,7 @@ public class CpsUpperNode extends AbstractCpsObject{
 		this.setNodes(new ArrayList<AbstractCpsObject>());
 		this.setNodeEdges(new ArrayList<CpsEdge>());
 		this.setOldEdges(new ArrayList<CpsEdge>());
-		this.setNodesIdx(new HashMap<Integer,Integer>());
+		this.setNodesIdx(new HashMap<Integer, Integer>());
 		// TODO Auto-generated constructor stub
 	}
 
@@ -31,7 +31,8 @@ public class CpsUpperNode extends AbstractCpsObject{
 	}
 
 	/**
-	 * @param nodes the nodes to set
+	 * @param nodes
+	 *            the nodes to set
 	 */
 	public void setNodes(ArrayList<AbstractCpsObject> nodes) {
 		this.nodes = nodes;
@@ -45,7 +46,8 @@ public class CpsUpperNode extends AbstractCpsObject{
 	}
 
 	/**
-	 * @param nodeEdges the nodeEdges to set
+	 * @param nodeEdges
+	 *            the nodeEdges to set
 	 */
 	public void setNodeEdges(ArrayList<CpsEdge> nodeEdges) {
 		this.nodeEdges = nodeEdges;
@@ -59,7 +61,8 @@ public class CpsUpperNode extends AbstractCpsObject{
 	}
 
 	/**
-	 * @param oldEdges the oldEdges to set
+	 * @param oldEdges
+	 *            the oldEdges to set
 	 */
 	public void setOldEdges(ArrayList<CpsEdge> oldEdges) {
 		this.oldEdges = oldEdges;
@@ -73,10 +76,41 @@ public class CpsUpperNode extends AbstractCpsObject{
 	}
 
 	/**
-	 * @param nodesIdx the nodesIdx to set
+	 * @param nodesIdx
+	 *            the nodesIdx to set
 	 */
 	public void setNodesIdx(HashMap<Integer, Integer> nodesIdx) {
 		this.nodesIdx = nodesIdx;
 	}
 
+	public ArrayList<HolonObject> getNumHolonObj() {
+		ArrayList<HolonObject> onlyHolonObj = new ArrayList<HolonObject>();
+		for (AbstractCpsObject temp : getNodes()) {
+			if (temp instanceof HolonObject) {
+				onlyHolonObj.add((HolonObject) temp);
+			}
+		}
+		return onlyHolonObj;
+	}
+
+	public ArrayList<HolonSwitch> getNumSwitches() {
+		ArrayList<HolonSwitch> onlySwitsches = new ArrayList<HolonSwitch>();
+		for (AbstractCpsObject temp : getNodes()) {
+			if (temp instanceof HolonSwitch) {
+				onlySwitsches.add((HolonSwitch) temp);
+			}
+		}
+		return onlySwitsches;
+	}
+
+	public ArrayList<CpsUpperNode> getNumUpperNodes() {
+		ArrayList<CpsUpperNode> onlyUpperNodes = new ArrayList<CpsUpperNode>();
+		for (AbstractCpsObject temp : getNodes()) {
+			if (temp instanceof CpsUpperNode) {
+				onlyUpperNodes.add((CpsUpperNode) temp);
+			}
+		}
+		return onlyUpperNodes;
+	}
+
 }

+ 68 - 0
src/ui/controller/UpdateController.java

@@ -1,6 +1,7 @@
 package ui.controller;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import classes.AbstractCpsObject;
 import classes.HolonElement;
@@ -119,4 +120,71 @@ public class UpdateController {
 		return obtTemp;
 	}
 
+	/**
+	 * Search for actual selected HolonElement.
+	 * 
+	 * @param obj
+	 *            selected HolonObject, if obj==null means multi-selection
+	 *            active
+	 * @param yValue
+	 *            Y-Coord in the HolonElementsTable
+	 * @param toMultiHash
+	 *            0 means no MultiSelection, 1 means MultiSelection without
+	 *            Control, 2 means MultiSelection with Control
+	 * @return the selected HolonElement
+	 */
+	public HolonElement getActualHolonElement(HolonObject obj, int yValue, int toMultiHash,
+			ArrayList<PropertyTable> tables) {
+		final int yTemp = (int) Math.floor(yValue / 16);
+		int rowsTotal = 0;
+		// Filter for search --> single and multi selection
+		if (obj == null) {
+			rowsTotal = tables.get(1).getRowCount();
+		} else {
+			rowsTotal = tables.get(0).getRowCount();
+		}
+		// search for the clicked HolonObject and HolonElement --> in the
+		// HolonElementTable
+		HolonObject obtTemp = null;
+		HolonElement toReturnEle = null;
+		int id = 0;
+		if (rowsTotal != 0 && rowsTotal > yTemp) {
+			// Multi-Selection search
+			if (obj == null) {
+				String tempStringObj = tables.get(1).getValueAt(yTemp, 0).toString();
+				int idTempObj = Integer.parseInt(tempStringObj.split(", ")[1]);
+				obtTemp = (HolonObject) controller.searchByID(idTempObj);
+				id = Integer.parseInt(tables.get(1).getValueAt(yTemp, 1).toString());
+				ArrayList<HolonElement> eleTemp = new ArrayList<HolonElement>();
+				if (model.getEleToDelete().containsKey(idTempObj) && toMultiHash == 2) {
+					eleTemp = model.getEleToDelete().get(idTempObj);
+					if (!eleTemp.contains(obtTemp.searchElementById(id))) {
+						eleTemp.add(obtTemp.searchElementById(id));
+						model.getEleToDelete().replace(idTempObj, eleTemp);
+					}
+				} else if (toMultiHash == 2) {
+					eleTemp.add(obtTemp.searchElementById(id));
+					model.getEleToDelete().put(idTempObj, eleTemp);
+				} else if (toMultiHash == 1) {
+					model.setEleToDelete(new HashMap<Integer, ArrayList<HolonElement>>());
+					eleTemp.add(obtTemp.searchElementById(id));
+					model.getEleToDelete().put(idTempObj, eleTemp);
+				} else if (toMultiHash == 0) {
+					toReturnEle = obtTemp.searchElementById(id);
+				}
+			} // Single-Selection search
+			else {
+				model.setEleToDelete(new HashMap<Integer, ArrayList<HolonElement>>());
+				id = Integer.parseInt(tables.get(0).getValueAt(yTemp, 0).toString());
+				toReturnEle = obj.searchElementById(id);
+			}
+			model.setSelectedHolonElement(toReturnEle);
+			return toReturnEle;
+		} // If no HolonObject selected
+		else {
+			model.setEleToDelete(new HashMap<Integer, ArrayList<HolonElement>>());
+			model.setSelectedHolonElement(null);
+			return null;
+		}
+	}
 }

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

@@ -16,6 +16,7 @@ import interfaces.CategoryListener;
 import interfaces.GraphListener;
 import interfaces.ObjectListener;
 import ui.view.Console;
+import ui.view.PropertyTable;
 
 /**
  * The Class Model is the class where everything is saved. All changes made to
@@ -41,6 +42,7 @@ public class Model {
 	private ArrayList<AbstractCpsObject> selectedObjects = new ArrayList<AbstractCpsObject>();
 	private ArrayList<AbstractCpsObject> clipboardObjects = new ArrayList<AbstractCpsObject>();
 	private Console console;
+	private HashMap<Integer, ArrayList<HolonElement>> eleToDelete;
 
 	private ArrayList<GraphListener> graphListeners = new ArrayList<GraphListener>();
 	// Iteration Speed
@@ -87,6 +89,8 @@ public class Model {
 	private List<CategoryListener> categoryListeners;
 	private List<ObjectListener> objectListeners;
 
+	private PropertyTable tableModelHolonElementMulti;
+	private PropertyTable tableModelHolonElementSingle;
 	/*
 	 * Object that runs the Algorithm
 	 */
@@ -107,6 +111,9 @@ public class Model {
 		setCvsObjIdx(new HashMap<Integer, Integer>());
 		setClipboradObjects(new ArrayList<AbstractCpsObject>());
 		setTrackingObj(new ArrayList<HolonObject>());
+		setEleToDelete(new HashMap<Integer, ArrayList<HolonElement>>());
+		setSingleTable(new PropertyTable());
+		setMultiTable(new PropertyTable());
 	}
 
 	/**
@@ -644,4 +651,28 @@ public class Model {
 		graphListeners.add(gl);
 	}
 
+	public void setEleToDelete(HashMap<Integer, ArrayList<HolonElement>> theHash) {
+		this.eleToDelete = theHash;
+	}
+
+	public HashMap<Integer, ArrayList<HolonElement>> getEleToDelete() {
+		return this.eleToDelete;
+	}
+
+	public void setSingleTable(PropertyTable pt) {
+		this.tableModelHolonElementSingle = pt;
+	}
+
+	public PropertyTable getSingleTable() {
+		return this.tableModelHolonElementSingle;
+	}
+
+	public PropertyTable getMultiTable() {
+		return this.tableModelHolonElementMulti;
+	}
+
+	public void setMultiTable(PropertyTable pt) {
+		this.tableModelHolonElementMulti = pt;
+	}
+
 }

+ 58 - 112
src/ui/view/GUI.java

@@ -133,7 +133,6 @@ public class GUI<E> implements CategoryListener {
 	private final JLabel elementGraph = new JLabel("None ");
 	private final ArrayList<HolonElement> selectedElements = new ArrayList<HolonElement>();
 	private String holonEleNamesDisplayed = "None ";
-	private HashMap<Integer, ArrayList<HolonElement>> eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
 	private final JTree tree = new JTree();
 	/******************************************
 	 ************* Right Container*************
@@ -151,8 +150,6 @@ public class GUI<E> implements CategoryListener {
 	// Table for HolonElements --> all cells are editable
 	private JTable tableHolonElement = new JTable();
 	// Model for single or multi selection
-	private PropertyTable tableModelHolonElementMulti = new PropertyTable();
-	private PropertyTable tableModelHolonElementSingle = new PropertyTable();
 	private final JPanel scrollElements = new JPanel();
 	private JScrollPane tableHolonElementScrollPane = new JScrollPane();
 
@@ -261,6 +258,7 @@ public class GUI<E> implements CategoryListener {
 
 	private String[] columnNamesMulti = { "Object", "Nr.", "Device", "Energy", "Quantity", "Activated" };
 	private String[] columnNamesSingle = { "Nr.", "Device", "Energy", "Quantity", "Activated" };
+	private ArrayList<PropertyTable> tables = new ArrayList<PropertyTable>();
 	private String[] colNames = { "Field", "Information" };
 	private String[] comboBoxCat = { "Category", "Object", "Switch" };
 	private String warningText = "Warning";
@@ -627,8 +625,8 @@ public class GUI<E> implements CategoryListener {
 		// Set up of the HolonElements section
 		// Two different Models: Multi for multi-selection mode and Single for
 		// single-selection mode (CPS-Object)
-		tableModelHolonElementMulti.setColumnIdentifiers(columnNamesMulti);
-		tableModelHolonElementSingle.setColumnIdentifiers(columnNamesSingle);
+		model.getMultiTable().setColumnIdentifiers(columnNamesMulti);
+		model.getSingleTable().setColumnIdentifiers(columnNamesSingle);
 		tableHolonElement.setBorder(null);
 		tableHolonElement.setFillsViewportHeight(true);
 		tableHolonElement.setCellSelectionEnabled(true);
@@ -668,6 +666,8 @@ public class GUI<E> implements CategoryListener {
 		scrollGraph.setRowHeaderView(graphLabel);
 		scrollGraph.setColumnHeaderView(toolBarGraph);
 
+		tables.add(model.getSingleTable());
+		tables.add(model.getMultiTable());
 		/***********************
 		 * HolonElement Table Actions
 		 **********************/
@@ -688,7 +688,7 @@ public class GUI<E> implements CategoryListener {
 							controller.addElementCanvasObject(tempCpsObject.getID(), ele.getEleName(), ele.getAmount(),
 									ele.getEnergy());
 						}
-						updCon.refreshTableHolonElement(tableModelHolonElementMulti, tableModelHolonElementSingle);
+						updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
 						updCon.refreshTableProperties(tableModelProperties);
 						controller.calculateStateForTimeStep(model.getCurIteration());
 					}
@@ -707,24 +707,24 @@ public class GUI<E> implements CategoryListener {
 						HolonObject obj = (HolonObject) getActualCps();
 						for (HolonElement e : selectedElements) {
 							controller.deleteElementCanvas(obj.getID(), e.getId());
-							updCon.refreshTableHolonElement(tableModelHolonElementMulti, tableModelHolonElementSingle);
+							updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
 							updCon.refreshTableProperties(tableModelProperties);
 							controller.calculateStateForTimeStep(model.getCurIteration());
 							// Names displayed in graph are not updated
 						}
-						eleToDelete.clear();
+						model.getEleToDelete().clear();
 						selectedElements.clear();
 					}
 					// For MultiSelection of CpsObject
 				} else if (model.getSelectedCpsObjects().size() > 1) {
-					for (Integer i : eleToDelete.keySet()) {
-						for (HolonElement e : eleToDelete.get(i)) {
+					for (Integer i : model.getEleToDelete().keySet()) {
+						for (HolonElement e : model.getEleToDelete().get(i)) {
 							controller.deleteElementCanvas(i, e.getId());
 						}
 					}
-					updCon.refreshTableHolonElement(tableModelHolonElementMulti, tableModelHolonElementSingle);
+					updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
 					updCon.refreshTableProperties(tableModelProperties);
-					eleToDelete.clear();
+					model.getEleToDelete().clear();
 					selectedElements.clear();
 				}
 				elementGraph.setText("None ");
@@ -742,9 +742,9 @@ public class GUI<E> implements CategoryListener {
 				HolonElement ele = null;
 				// Search for current clicked HolonElement
 				if (model.getSelectedCpsObjects().size() == 1) {
-					ele = getActualHolonElement(obj, yValueElements, 0);
+					ele = updCon.getActualHolonElement(obj, yValueElements, 0, tables);
 				} else {
-					ele = getActualHolonElement(null, yValueElements, 0);
+					ele = updCon.getActualHolonElement(null, yValueElements, 0, tables);
 				}
 				// Multi-Selection of HolonElements through control button +
 				// mouse click
@@ -758,12 +758,12 @@ public class GUI<E> implements CategoryListener {
 						}
 						unitGraph.repaintWithNewElement(selectedElements);
 					}
-					getActualHolonElement(null, yValueElements, 2);
+					updCon.getActualHolonElement(null, yValueElements, 2, tables);
 				} // if no control-button pressed but a HolonElement choose
 				else if (ele != null) {
 					selectedElements.clear();
 					selectedElements.add(ele);
-					getActualHolonElement(null, yValueElements, 1);
+					updCon.getActualHolonElement(null, yValueElements, 1, tables);
 					holonEleNamesDisplayed = ele.getEleName() + " ";
 					unitGraph.repaintWithNewElement(selectedElements);
 				} // If any empty space is clicked
@@ -804,18 +804,18 @@ public class GUI<E> implements CategoryListener {
 					if (model.getSelectedCpsObjects().size() > 1) {
 						int selectedValueX = (int) Math.floor(xThis / (tableHolonElement.getWidth() / 6));
 						int selectedValueBX = (int) Math.floor(xBThis / (tableHolonElement.getWidth() / 6));
-						if (updCon.getHolonObj(yMouse, tableModelHolonElementMulti) != null) {
+						if (updCon.getHolonObj(yMouse, model.getMultiTable()) != null) {
 							// For last column (boolean with a checkbox)
 							if (selectedValueBX == 5) {
-								HolonElement eleBTemp = getActualHolonElement(null, yBMouse, 0);
-								String newBStuff = tableModelHolonElementMulti
-										.getValueAt(selectedValueBY, selectedValueBX).toString();
+								HolonElement eleBTemp = updCon.getActualHolonElement(null, yBMouse, 0, tables);
+								String newBStuff = model.getMultiTable().getValueAt(selectedValueBY, selectedValueBX)
+										.toString();
 								Boolean bTemp = Boolean.parseBoolean(newBStuff);
 								eleBTemp.setActive(bTemp);
 							} else {
 								// Update of HolonElement
-								HolonElement eleTemp = getActualHolonElement(null, yMouse, 0);
-								String newStuff = tableModelHolonElementMulti.getValueAt(selectedValueY, selectedValueX)
+								HolonElement eleTemp = updCon.getActualHolonElement(null, yMouse, 0, tables);
+								String newStuff = model.getMultiTable().getValueAt(selectedValueY, selectedValueX)
 										.toString();
 								// Name update
 								if (selectedValueX == 2) {
@@ -840,16 +840,18 @@ public class GUI<E> implements CategoryListener {
 						if (getActualCps() != null && getActualCps().getClass() == HolonObject.class) {
 							// For last column (boolean with a checkbox)
 							if (selectedValueBX == 4) {
-								HolonElement eleBTemp = getActualHolonElement((HolonObject) getActualCps(), yBMouse, 0);
-								String newBStuff = tableModelHolonElementSingle
-										.getValueAt(selectedValueBY, selectedValueBX).toString();
+								HolonElement eleBTemp = updCon.getActualHolonElement((HolonObject) getActualCps(),
+										yBMouse, 0, tables);
+								String newBStuff = model.getSingleTable().getValueAt(selectedValueBY, selectedValueBX)
+										.toString();
 								Boolean bTemp = Boolean.parseBoolean(newBStuff);
 								eleBTemp.setActive(bTemp);
 							} else {
 								// Update of HolonElement
-								HolonElement eleTemp = getActualHolonElement((HolonObject) getActualCps(), yMouse, 0);
-								String newStuff = tableModelHolonElementSingle
-										.getValueAt(selectedValueY, selectedValueX).toString();
+								HolonElement eleTemp = updCon.getActualHolonElement((HolonObject) getActualCps(),
+										yMouse, 0, tables);
+								String newStuff = model.getSingleTable().getValueAt(selectedValueY, selectedValueX)
+										.toString();
 								// Name update
 								if (selectedValueX == 1) {
 									eleTemp.setEleName(newStuff);
@@ -866,7 +868,7 @@ public class GUI<E> implements CategoryListener {
 						}
 					}
 					updCon.refreshTableProperties(tableModelProperties);
-					tableModelHolonElementSingle.fireTableDataChanged();
+					model.getSingleTable().fireTableDataChanged();
 					controller.calculateStateForTimeStep(model.getCurIteration());
 					unitGraph.repaint();
 				} catch (Exception e) {
@@ -1089,8 +1091,8 @@ public class GUI<E> implements CategoryListener {
 							.getPathForLocation(e.getX(), e.getY()).getLastPathComponent();
 					if (selectedNode.getLevel() == 2) {
 						controller.searchCategoryObject(selectedNode.getParent().toString(), selectedNode.toString());
-						updCon.deleteRows(tableModelHolonElementSingle);
-						updCon.deleteRows(tableModelHolonElementMulti);
+						updCon.deleteRows(model.getSingleTable());
+						updCon.deleteRows(model.getMultiTable());
 						// if (selected instanceof HolonObject && selected !=
 						// null) {
 						// selected = (HolonObject) selected;
@@ -1248,7 +1250,7 @@ public class GUI<E> implements CategoryListener {
 					// For HolonObjects the Total Energy (production or
 					// consumption) is calculated
 					if (temp instanceof HolonObject) {
-						updCon.refreshTableHolonElement(tableModelHolonElementMulti, tableModelHolonElementSingle);
+						updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
 						Object[] tempEnergy = { Languages.getLanguage()[73], ((HolonObject) temp).getCurrentEnergy() };
 						tableModelProperties.addRow(tempEnergy);
 						tableModelProperties.setCellEditable(0, 1, true);
@@ -1257,8 +1259,8 @@ public class GUI<E> implements CategoryListener {
 					} // For HolonSwitches is showed the actual status (active
 						// or inactive)
 					else if (temp instanceof HolonSwitch) {
-						updCon.deleteRows(tableModelHolonElementSingle);
-						updCon.deleteRows(tableModelHolonElementMulti);
+						updCon.deleteRows(model.getSingleTable());
+						updCon.deleteRows(model.getMultiTable());
 						Object[] tempMode = { Languages.getLanguage()[74], ((HolonSwitch) temp).getManualMode() };
 						tableModelProperties.addRow(tempMode);
 						if (((HolonSwitch) temp).getManualMode()) {
@@ -1276,9 +1278,20 @@ public class GUI<E> implements CategoryListener {
 						elementGraph.setText(temp.getName());
 						tableModelProperties.setCellEditable(0, 1, true);
 						tableModelProperties.setCellEditable(2, 1, true);
+					} else if (temp instanceof CpsUpperNode) {
+						updCon.deleteRows(model.getSingleTable());
+						updCon.deleteRows(model.getMultiTable());
+						Object[] numEle = { "Number of Elements", ((CpsUpperNode) temp).getNodes().size() };
+						Object[] numObj = { "Number of HolonObject", ((CpsUpperNode) temp).getNumHolonObj().size() };
+						Object[] numSwi = { "Number of HolonSwitch", ((CpsUpperNode) temp).getNumSwitches().size() };
+						Object[] numUpp = { "Number of UpperNodes", ((CpsUpperNode) temp).getNumUpperNodes().size() };
+						tableModelProperties.addRow(numEle);
+						tableModelProperties.addRow(numObj);
+						tableModelProperties.addRow(numSwi);
+						tableModelProperties.addRow(numUpp);
 					} else {
-						updCon.deleteRows(tableModelHolonElementSingle);
-						updCon.deleteRows(tableModelHolonElementMulti);
+						updCon.deleteRows(model.getSingleTable());
+						updCon.deleteRows(model.getMultiTable());
 					}
 					// For Objects the only editable cell is the name
 					ArrayList<CpsEdge> tempArray = temp.getConnections();
@@ -1334,14 +1347,14 @@ public class GUI<E> implements CategoryListener {
 					tableModelProperties.setCellEditable(2, 1, true);
 					tableModelProperties.setCellEditable(3, 1, true);
 				} else if (getActualCps() == null) {
-					updCon.deleteRows(tableModelHolonElementSingle);
-					updCon.deleteRows(tableModelHolonElementMulti);
+					updCon.deleteRows(model.getSingleTable());
+					updCon.deleteRows(model.getMultiTable());
 				} // Update of the HolonElementTable (Single- or
 					// Multi-Selection)
 				if (model.getSelectedCpsObjects().size() > 1) {
-					tableHolonElement.setModel(tableModelHolonElementMulti);
+					tableHolonElement.setModel(model.getMultiTable());
 				} else if (model.getSelectedCpsObjects().size() == 1) {
-					tableHolonElement.setModel(tableModelHolonElementSingle);
+					tableHolonElement.setModel(model.getSingleTable());
 				}
 				// New Tab with NodeOfNode
 				if (doubleClick() && temp instanceof CpsUpperNode) {
@@ -1351,12 +1364,12 @@ public class GUI<E> implements CategoryListener {
 
 			@Override
 			public void mouseReleased(MouseEvent e) {
-				updCon.refreshTableHolonElement(tableModelHolonElementMulti, tableModelHolonElementSingle);
+				updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
 				updCon.refreshTableProperties(tableModelProperties);
 				if (model.getSelectedCpsObjects().size() > 1) {
-					tableHolonElement.setModel(tableModelHolonElementMulti);
+					tableHolonElement.setModel(model.getMultiTable());
 				} else if (model.getSelectedCpsObjects().size() == 1) {
-					tableHolonElement.setModel(tableModelHolonElementSingle);
+					tableHolonElement.setModel(model.getSingleTable());
 				}
 			}
 
@@ -1790,73 +1803,6 @@ public class GUI<E> implements CategoryListener {
 		return tempCps;
 	}
 
-	/**
-	 * Search for actual selected HolonElement.
-	 * 
-	 * @param obj
-	 *            selected HolonObject, if obj==null means multi-selection
-	 *            active
-	 * @param yValue
-	 *            Y-Coord in the HolonElementsTable
-	 * @param toMultiHash
-	 *            0 means no MultiSelection, 1 means MultiSelection without
-	 *            Control, 2 means MultiSelection with Control
-	 * @return the selected HolonElement
-	 */
-	private HolonElement getActualHolonElement(HolonObject obj, int yValue, int toMultiHash) {
-		final int yTemp = (int) Math.floor(yValue / 16);
-		int rowsTotal = 0;
-		// Filter for search --> single and multi selection
-		if (obj == null) {
-			rowsTotal = tableModelHolonElementMulti.getRowCount();
-		} else {
-			rowsTotal = tableModelHolonElementSingle.getRowCount();
-		}
-		// search for the clicked HolonObject and HolonElement --> in the
-		// HolonElementTable
-		HolonObject obtTemp = null;
-		HolonElement toReturnEle = null;
-		int id = 0;
-		if (rowsTotal != 0 && rowsTotal > yTemp) {
-			// Multi-Selection search
-			if (obj == null) {
-				String tempStringObj = tableModelHolonElementMulti.getValueAt(yTemp, 0).toString();
-				int idTempObj = Integer.parseInt(tempStringObj.split(", ")[1]);
-				obtTemp = (HolonObject) controller.searchByID(idTempObj);
-				id = Integer.parseInt(tableModelHolonElementMulti.getValueAt(yTemp, 1).toString());
-				ArrayList<HolonElement> eleTemp = new ArrayList<HolonElement>();
-				if (eleToDelete.containsKey(idTempObj) && toMultiHash == 2) {
-					eleTemp = eleToDelete.get(idTempObj);
-					if (!eleTemp.contains(obtTemp.searchElementById(id))) {
-						eleTemp.add(obtTemp.searchElementById(id));
-						eleToDelete.replace(idTempObj, eleTemp);
-					}
-				} else if (toMultiHash == 2) {
-					eleTemp.add(obtTemp.searchElementById(id));
-					eleToDelete.put(idTempObj, eleTemp);
-				} else if (toMultiHash == 1) {
-					eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
-					eleTemp.add(obtTemp.searchElementById(id));
-					eleToDelete.put(idTempObj, eleTemp);
-				} else if (toMultiHash == 0) {
-					toReturnEle = obtTemp.searchElementById(id);
-				}
-			} // Single-Selection search
-			else {
-				eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
-				id = Integer.parseInt(tableModelHolonElementSingle.getValueAt(yTemp, 0).toString());
-				toReturnEle = obj.searchElementById(id);
-			}
-			model.setSelectedHolonElement(toReturnEle);
-			return toReturnEle;
-		} // If no HolonObject selected
-		else {
-			eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
-			model.setSelectedHolonElement(null);
-			return null;
-		}
-	}
-
 	/**
 	 * Adds a Popup.
 	 * 
@@ -1911,11 +1857,11 @@ public class GUI<E> implements CategoryListener {
 		for (int i = 0; i < columnNamesMulti.length; i++) {
 			columnNamesMulti[i] = tempArray[i + 17];
 		}
-		tableModelHolonElementMulti.setColumnIdentifiers(columnNamesMulti);
+		model.getMultiTable().setColumnIdentifiers(columnNamesMulti);
 		for (int i = 0; i < columnNamesSingle.length; i++) {
 			columnNamesSingle[i] = tempArray[i + 18];
 		}
-		tableModelHolonElementSingle.setColumnIdentifiers(columnNamesSingle);
+		model.getSingleTable().setColumnIdentifiers(columnNamesSingle);
 		colNames[0] = tempArray[23];
 		colNames[1] = tempArray[24];
 		tableModelProperties.setColumnIdentifiers(colNames);

+ 8 - 2
src/ui/view/MyCanvas.java

@@ -156,9 +156,12 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 							controller.addTrackingObj((HolonObject) o);
 							((HolonObject) o).updateTrackingInfo();
 						}
+						controller.addTextToConsole("Tracking: ", Color.BLACK, 12, false, false, false);
+						controller.addTextToConsole("" + o.getName(), Color.BLUE, 12, true, false, false);
+						controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
+						controller.addTextToConsole("" + o.getID(), Color.RED, 12, true, false, true);
 					}
 				}
-				System.out.println(controller.getTrackingObj());
 			}
 		});
 
@@ -183,9 +186,12 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 							((HolonObject) o).setTrackingProd(new float[100]);
 							((HolonObject) o).setTrackingCons(new float[100]);
 						}
+						controller.addTextToConsole("Untracking: ", Color.BLACK, 12, false, false, false);
+						controller.addTextToConsole("" + o.getName(), Color.BLUE, 12, true, false, false);
+						controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
+						controller.addTextToConsole("" + o.getID(), Color.RED, 12, true, false, true);
 					}
 				}
-				System.out.println(controller.getTrackingObj());
 			}
 		});
 

+ 13 - 7
src/ui/view/UpperNodeCanvas.java

@@ -142,7 +142,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				repaint();
 			}
 		});
-		
+
 		itemUngroup.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -151,7 +151,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			}
 		});
 
-		itemTrack.addActionListener(new ActionListener() {
+		itemUntrack.addActionListener(new ActionListener() {
+
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				for (AbstractCpsObject o : model.getSelectedCpsObjects()) {
@@ -164,16 +165,21 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 								}
 							}
 						}
-						if (!found) {
-							controller.addTrackingObj((HolonObject) o);
-							((HolonObject) o).updateTrackingInfo();
+						if (found) {
+							// Removed from tracking array and tracking
+							// information reseted
+							controller.removeTrackingObj((HolonObject) o);
+							((HolonObject) o).setTrackingProd(new float[100]);
+							((HolonObject) o).setTrackingCons(new float[100]);
 						}
+						controller.addTextToConsole("Untracking: ", Color.BLACK, 12, false, false, false);
+						controller.addTextToConsole("" + o.getName(), Color.BLUE, 12, true, false, false);
+						controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
+						controller.addTextToConsole("" + o.getID(), Color.RED, 12, true, false, true);
 					}
 				}
-				System.out.println(controller.getTrackingObj());
 			}
 		});
-
 		itemUntrack.addActionListener(new ActionListener() {
 
 			@Override