Quellcode durchsuchen

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

# Conflicts:
#	src/ui/view/MyCanvas.java
Teh-Hai Julian Zheng vor 8 Jahren
Ursprung
Commit
6d6ecd83ff

+ 125 - 1
src/ui/controller/UpdateController.java

@@ -1,21 +1,26 @@
 package ui.controller;
 
+import java.awt.event.MouseEvent;
 import java.util.ArrayList;
 import java.util.HashMap;
 
 import classes.AbstractCpsObject;
+import classes.CpsEdge;
+import classes.CpsUpperNode;
 import classes.HolonElement;
 import classes.HolonObject;
+import classes.HolonSwitch;
 import ui.view.DefaulTable;
 import ui.view.Languages;
 import ui.view.PropertyTable;
+import ui.view.UnitGraph;
 import ui.model.*;
 import ui.controller.*;
 
 /**
  * This class is for all update methods and more ;)
  * 
- * @author Edgardo
+ * @author Gruppe14
  *
  */
 public class UpdateController {
@@ -32,6 +37,7 @@ public class UpdateController {
 	 * Update the information concerning properties of the selected CpsObject.
 	 */
 	public void refreshTableProperties(DefaulTable table) {
+
 		if (model.getSelectedCpsObjects().size() == 1) {
 			AbstractCpsObject tempCps = model.getSelectedCpsObject();
 			if (tempCps != null && tempCps.getClass() == HolonObject.class) {
@@ -195,7 +201,125 @@ public class UpdateController {
 	 */
 	public AbstractCpsObject getActualCps() {
 		int tempID = model.getSelectedObjectID();
+		System.out.println(model.getSelectedObjectID());
 		AbstractCpsObject tempCps = controller.searchByID(tempID);
 		return tempCps;
 	}
+
+	public void paintProperties(AbstractCpsObject obj) {
+		if (obj != null) {
+			// Name of the CpsObject
+			Object[] tempName = { Languages.getLanguage()[72], obj.getName() };
+			model.getPropertyTable().addRow(tempName);
+			// Id of the CpsObject
+			Object[] tempId = { "ID", obj.getID() };
+			model.getPropertyTable().addRow(tempId);
+			// For HolonObjects the Total Energy (production or
+			// consumption) is calculated
+			if (obj instanceof HolonObject) {
+				refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
+				Object[] tempEnergy = { Languages.getLanguage()[73], ((HolonObject) obj).getCurrentEnergy() };
+				model.getPropertyTable().addRow(tempEnergy);
+				model.getPropertyTable().setCellEditable(0, 1, true);
+				model.getPropertyTable().setCellEditable(2, 1, false);
+				model.getPropertyTable().setCellEditable(3, 1, false);
+			} // For HolonSwitches is showed the actual status (active
+				// or inactive)
+			else if (obj instanceof HolonSwitch) {
+				deleteRows(model.getSingleTable());
+				deleteRows(model.getMultiTable());
+				Object[] tempMode = { Languages.getLanguage()[74], ((HolonSwitch) obj).getManualMode() };
+				model.getPropertyTable().addRow(tempMode);
+				if (((HolonSwitch) obj).getManualMode()) {
+					Object[] tempActive = { Languages.getLanguage()[75], ((HolonSwitch) obj).getActiveManual() };
+					model.getPropertyTable().addRow(tempActive);
+					model.getPropertyTable().setCellEditable(3, 1, true);
+				} else {
+					Object[] tempActive = { Languages.getLanguage()[75],
+							((HolonSwitch) obj).getActiveAt()[model.getCurIteration()] };
+					model.getPropertyTable().addRow(tempActive);
+					model.getPropertyTable().setCellEditable(3, 1, false);
+				}
+				// unitGraph.repaintWithNewSwitch((HolonSwitch) obj);
+				// elementGraph.setText(obj.getName());
+				model.getPropertyTable().setCellEditable(0, 1, true);
+				model.getPropertyTable().setCellEditable(2, 1, true);
+			} else if (obj instanceof CpsUpperNode) {
+				deleteRows(model.getSingleTable());
+				deleteRows(model.getMultiTable());
+				Object[] numEle = { "Number of Elements", ((CpsUpperNode) obj).getNodes().size() };
+				Object[] numObj = { "Number of HolonObject", ((CpsUpperNode) obj).getNumHolonObj().size() };
+				Object[] numSwi = { "Number of HolonSwitch", ((CpsUpperNode) obj).getNumSwitches().size() };
+				Object[] numUpp = { "Number of UpperNodes", ((CpsUpperNode) obj).getNumUpperNodes().size() };
+				model.getPropertyTable().addRow(numEle);
+				model.getPropertyTable().addRow(numObj);
+				model.getPropertyTable().addRow(numSwi);
+				model.getPropertyTable().addRow(numUpp);
+			} else {
+				deleteRows(model.getSingleTable());
+				deleteRows(model.getMultiTable());
+			}
+			// For Objects the only editable cell is the name
+			ArrayList<CpsEdge> tempArray = obj.getConnections();
+			// If the clicked object has connections
+			if (!tempArray.isEmpty()) {
+				boolean first = true;
+				for (CpsEdge temp2 : tempArray) {
+					if (first) {
+						first = false;
+						if (obj.getID() != temp2.getA().getID()) {
+							Object[] tempConnection = { obj.getName() + Languages.getLanguage()[76],
+									temp2.getA().getName() + Languages.getLanguage()[77] + temp2.getA().getID() };
+							model.getPropertyTable().addRow(tempConnection);
+						} else {
+							Object[] tempConnection = { obj.getName() + Languages.getLanguage()[76],
+									temp2.getB().getName() + Languages.getLanguage()[77] + temp2.getB().getID() };
+							model.getPropertyTable().addRow(tempConnection);
+						}
+					} else {
+						if (obj.getID() != temp2.getA().getID()) {
+							Object[] tempConnection = { "",
+									temp2.getA().getName() + Languages.getLanguage()[77] + temp2.getA().getID() };
+							model.getPropertyTable().addRow(tempConnection);
+						} else {
+							Object[] tempConnection = { "",
+									temp2.getB().getName() + Languages.getLanguage()[77] + temp2.getB().getID() };
+							model.getPropertyTable().addRow(tempConnection);
+						}
+					}
+				}
+			}
+		} // If the clicked Object is an edge
+		else if (model.getSelectedEdge() != null) {
+			// Name displayed
+			Object[] tempName = { Languages.getLanguage()[72],
+					Languages.getLanguage()[78] + model.getSelectedEdge().getA().getName() + Languages.getLanguage()[79]
+							+ model.getSelectedEdge().getB().getName() };
+			model.getPropertyTable().addRow(tempName);
+			// Current Flow displayed
+			Object[] tempFlow = { Languages.getLanguage()[80], model.getSelectedEdge().getFlow() };
+			model.getPropertyTable().addRow(tempFlow);
+			// Max Capacity displayed
+			Object[] tempCapacity = { Languages.getLanguage()[81], model.getSelectedEdge().getCapacity() };
+			model.getPropertyTable().addRow(tempCapacity);
+			// Status displayed
+			Object[] tempStatus = { Languages.getLanguage()[82], model.getSelectedEdge().getState() };
+			model.getPropertyTable().addRow(tempStatus);
+			// For edges, the only possible editable cell is the max
+			// flow
+			model.getPropertyTable().setCellEditable(0, 1, false);
+			model.getPropertyTable().setCellEditable(2, 1, true);
+			model.getPropertyTable().setCellEditable(3, 1, true);
+		} else if (getActualCps() == null) {
+			deleteRows(model.getSingleTable());
+			deleteRows(model.getMultiTable());
+		}
+		// Update of the HolonElementTable (Single- or Multi-Selection)
+		if (model.getSelectedCpsObjects().size() > 1) {
+			model.getTableHolonElement().setModel(model.getMultiTable());
+		} else if (model.getSelectedCpsObjects().size() == 1) {
+			model.getTableHolonElement().setModel(model.getSingleTable());
+		}
+	}
+
 }

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

@@ -7,6 +7,8 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 
+import javax.swing.JTable;
+
 import classes.Category;
 import classes.CpsEdge;
 import classes.AbstractCpsObject;
@@ -48,6 +50,9 @@ public class Model {
 	// Capacity for Edge
 	private float maxCapacity;
 
+	// Table for HolonElements --> all cells are editable
+	private JTable tableHolonElement;
+
 	private ArrayList<GraphListener> graphListeners = new ArrayList<GraphListener>();
 	// Iteration Speed
 	private int timerSpeed = 1000;
@@ -122,6 +127,7 @@ public class Model {
 		setMultiTable(new PropertyTable());
 		setPropertyTable(new DefaulTable(1000, colNames.length));
 		getPropertyTable().setColumnIdentifiers(colNames);
+		setTableHolonElement(new JTable());
 	}
 
 	/**
@@ -713,4 +719,12 @@ public class Model {
 		this.tableModelProperties = pt;
 	}
 
+	public JTable getTableHolonElement() {
+		return tableHolonElement;
+	}
+
+	public void setTableHolonElement(JTable tableHolonElement) {
+		this.tableHolonElement = tableHolonElement;
+	}
+
 }

+ 45 - 144
src/ui/view/GUI.java

@@ -118,6 +118,7 @@ public class GUI<E> implements CategoryListener {
 
 	private final JScrollPane canvasSP = new JScrollPane();
 	private final JScrollPane scrollPane1 = new JScrollPane();
+	private final JScrollPane holonSP = new JScrollPane();
 	private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 	private final JPanel panelTapped_SimMenu = new JPanel();
 	private JPopupMenu popmenuEdit = new JPopupMenu();
@@ -149,8 +150,6 @@ public class GUI<E> implements CategoryListener {
 	// In this section are all the Holonelements that correspond to the clicked
 	// HolonObject with consumption/production, name and amount.
 
-	// Table for HolonElements --> all cells are editable
-	private JTable tableHolonElement = new JTable();
 	// Model for single or multi selection
 	private final JPanel scrollElements = new JPanel();
 	private JScrollPane tableHolonElementScrollPane = new JScrollPane();
@@ -583,7 +582,7 @@ public class GUI<E> implements CategoryListener {
 				JOptionPane.showMessageDialog(null, myPanel);
 				controller.setCanvasX(Integer.parseInt(field1.getText()));
 				controller.setCanvasY(Integer.parseInt(field2.getText()));
-				for (int i = 2; i < tabbedPane.getTabCount(); i++) {
+				for (int i = 3; i < tabbedPane.getTabCount(); i++) {
 					tabbedPane.getComponentAt(i)
 							.setPreferredSize(new Dimension(model.getCanvasX(), model.getCanvasY()));
 					tabbedPane.getComponentAt(i).repaint();
@@ -625,11 +624,11 @@ public class GUI<E> implements CategoryListener {
 		// single-selection mode (CPS-Object)
 		model.getMultiTable().setColumnIdentifiers(columnNamesMulti);
 		model.getSingleTable().setColumnIdentifiers(columnNamesSingle);
-		tableHolonElement.setBorder(null);
-		tableHolonElement.setFillsViewportHeight(true);
-		tableHolonElement.setCellSelectionEnabled(true);
-		tableHolonElement.setColumnSelectionAllowed(true);
-		tableHolonElementScrollPane.setViewportView(tableHolonElement);
+		model.getTableHolonElement().setBorder(null);
+		model.getTableHolonElement().setFillsViewportHeight(true);
+		model.getTableHolonElement().setCellSelectionEnabled(true);
+		model.getTableHolonElement().setColumnSelectionAllowed(true);
+		tableHolonElementScrollPane.setViewportView(model.getTableHolonElement());
 		scrollElements.setLayout(new BorderLayout(0, 0));
 		scrollElements.add(panelHolonEl, BorderLayout.NORTH);
 		scrollElements.add(tableHolonElementScrollPane);
@@ -729,11 +728,12 @@ public class GUI<E> implements CategoryListener {
 		});
 		/*
 		 * Communication between HolonElement Table and displayed Graph and
-		 * Properties, as well as selection of differet HolonElements
+		 * Properties, as well as selection of different HolonElements
 		 */
-		tableHolonElement.addMouseListener(new MouseAdapter() {
+		model.getTableHolonElement().addMouseListener(new MouseAdapter() {
 			public void mousePressed(MouseEvent e) {
 				HolonObject obj = (HolonObject) updCon.getActualCps();
+				System.out.println(obj);
 				yValueElements = e.getY();
 				HolonElement ele = null;
 				// Search for current clicked HolonElement
@@ -788,7 +788,7 @@ public class GUI<E> implements CategoryListener {
 		/*
 		 * Triggered every time a change is made
 		 */
-		tableHolonElement.addPropertyChangeListener(new PropertyChangeListener() {
+		model.getTableHolonElement().addPropertyChangeListener(new PropertyChangeListener() {
 			@Override
 			public void propertyChange(PropertyChangeEvent evt) {
 				try {
@@ -798,8 +798,8 @@ public class GUI<E> implements CategoryListener {
 					int selectedValueBY = (int) Math.floor(yBMouse / 16);
 					// for multi-selection mode
 					if (model.getSelectedCpsObjects().size() > 1) {
-						int selectedValueX = (int) Math.floor(xThis / (tableHolonElement.getWidth() / 6));
-						int selectedValueBX = (int) Math.floor(xBThis / (tableHolonElement.getWidth() / 6));
+						int selectedValueX = (int) Math.floor(xThis / (model.getTableHolonElement().getWidth() / 6));
+						int selectedValueBX = (int) Math.floor(xBThis / (model.getTableHolonElement().getWidth() / 6));
 						if (updCon.getHolonObj(yMouse, model.getMultiTable()) != null) {
 							// For last column (boolean with a checkbox)
 							if (selectedValueBX == 5) {
@@ -831,8 +831,8 @@ public class GUI<E> implements CategoryListener {
 						}
 					} // For single-selection mode
 					else if (model.getSelectedCpsObjects().size() == 1) {
-						int selectedValueX = (int) Math.floor(xThis / (tableHolonElement.getWidth() / 5));
-						int selectedValueBX = (int) Math.floor(xBThis / (tableHolonElement.getWidth() / 5));
+						int selectedValueX = (int) Math.floor(xThis / (model.getTableHolonElement().getWidth() / 5));
+						int selectedValueBX = (int) Math.floor(xBThis / (model.getTableHolonElement().getWidth() / 5));
 						if (updCon.getActualCps() != null && updCon.getActualCps().getClass() == HolonObject.class) {
 							// For last column (boolean with a checkbox)
 							if (selectedValueBX == 4) {
@@ -1239,122 +1239,7 @@ public class GUI<E> implements CategoryListener {
 					}
 				}
 				// Write new data in the PropertyTable
-				if (temp != null) {
-					// Name of the CpsObject
-					Object[] tempName = { Languages.getLanguage()[72], temp.getName() };
-					model.getPropertyTable().addRow(tempName);
-					// Id of the CpsObject
-					Object[] tempId = { "ID", temp.getID() };
-					model.getPropertyTable().addRow(tempId);
-					// For HolonObjects the Total Energy (production or
-					// consumption) is calculated
-					if (temp instanceof HolonObject) {
-						updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
-						Object[] tempEnergy = { Languages.getLanguage()[73], ((HolonObject) temp).getCurrentEnergy() };
-						model.getPropertyTable().addRow(tempEnergy);
-						model.getPropertyTable().setCellEditable(0, 1, true);
-						model.getPropertyTable().setCellEditable(2, 1, false);
-						model.getPropertyTable().setCellEditable(3, 1, false);
-					} // For HolonSwitches is showed the actual status (active
-						// or inactive)
-					else if (temp instanceof HolonSwitch) {
-						updCon.deleteRows(model.getSingleTable());
-						updCon.deleteRows(model.getMultiTable());
-						Object[] tempMode = { Languages.getLanguage()[74], ((HolonSwitch) temp).getManualMode() };
-						model.getPropertyTable().addRow(tempMode);
-						if (((HolonSwitch) temp).getManualMode()) {
-							Object[] tempActive = { Languages.getLanguage()[75],
-									((HolonSwitch) temp).getActiveManual() };
-							model.getPropertyTable().addRow(tempActive);
-							model.getPropertyTable().setCellEditable(3, 1, true);
-						} else {
-							Object[] tempActive = { Languages.getLanguage()[75],
-									((HolonSwitch) temp).getActiveAt()[model.getCurIteration()] };
-							model.getPropertyTable().addRow(tempActive);
-							model.getPropertyTable().setCellEditable(3, 1, false);
-						}
-						unitGraph.repaintWithNewSwitch((HolonSwitch) temp);
-						elementGraph.setText(temp.getName());
-						model.getPropertyTable().setCellEditable(0, 1, true);
-						model.getPropertyTable().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() };
-						model.getPropertyTable().addRow(numEle);
-						model.getPropertyTable().addRow(numObj);
-						model.getPropertyTable().addRow(numSwi);
-						model.getPropertyTable().addRow(numUpp);
-					} else {
-						updCon.deleteRows(model.getSingleTable());
-						updCon.deleteRows(model.getMultiTable());
-					}
-					// For Objects the only editable cell is the name
-					ArrayList<CpsEdge> tempArray = temp.getConnections();
-					// If the clicked object has connections
-					if (!tempArray.isEmpty()) {
-						boolean first = true;
-						for (CpsEdge temp2 : tempArray) {
-							if (first) {
-								first = false;
-								if (temp.getID() != temp2.getA().getID()) {
-									Object[] tempConnection = { temp.getName() + Languages.getLanguage()[76],
-											temp2.getA().getName() + Languages.getLanguage()[77]
-													+ temp2.getA().getID() };
-									model.getPropertyTable().addRow(tempConnection);
-								} else {
-									Object[] tempConnection = { temp.getName() + Languages.getLanguage()[76],
-											temp2.getB().getName() + Languages.getLanguage()[77]
-													+ temp2.getB().getID() };
-									model.getPropertyTable().addRow(tempConnection);
-								}
-							} else {
-								if (temp.getID() != temp2.getA().getID()) {
-									Object[] tempConnection = { "", temp2.getA().getName() + Languages.getLanguage()[77]
-											+ temp2.getA().getID() };
-									model.getPropertyTable().addRow(tempConnection);
-								} else {
-									Object[] tempConnection = { "", temp2.getB().getName() + Languages.getLanguage()[77]
-											+ temp2.getB().getID() };
-									model.getPropertyTable().addRow(tempConnection);
-								}
-							}
-						}
-					}
-				} // If the clicked Object is an edge
-				else if (model.getSelectedEdge() != null) {
-					// Name displayed
-					Object[] tempName = { Languages.getLanguage()[72],
-							Languages.getLanguage()[78] + model.getSelectedEdge().getA().getName()
-									+ Languages.getLanguage()[79] + model.getSelectedEdge().getB().getName() };
-					model.getPropertyTable().addRow(tempName);
-					// Current Flow displayed
-					Object[] tempFlow = { Languages.getLanguage()[80], model.getSelectedEdge().getFlow() };
-					model.getPropertyTable().addRow(tempFlow);
-					// Max Capacity displayed
-					Object[] tempCapacity = { Languages.getLanguage()[81], model.getSelectedEdge().getCapacity() };
-					model.getPropertyTable().addRow(tempCapacity);
-					// Status displayed
-					Object[] tempStatus = { Languages.getLanguage()[82], model.getSelectedEdge().getState() };
-					model.getPropertyTable().addRow(tempStatus);
-					// For edges, the only possible editable cell is the max
-					// flow
-					model.getPropertyTable().setCellEditable(0, 1, false);
-					model.getPropertyTable().setCellEditable(2, 1, true);
-					model.getPropertyTable().setCellEditable(3, 1, true);
-				} else if (updCon.getActualCps() == null) {
-					updCon.deleteRows(model.getSingleTable());
-					updCon.deleteRows(model.getMultiTable());
-				} // Update of the HolonElementTable (Single- or
-					// Multi-Selection)
-				if (model.getSelectedCpsObjects().size() > 1) {
-					tableHolonElement.setModel(model.getMultiTable());
-				} else if (model.getSelectedCpsObjects().size() == 1) {
-					tableHolonElement.setModel(model.getSingleTable());
-				}
+				updCon.paintProperties(temp);
 				// New Tab with NodeOfNode
 				if (doubleClick() && temp instanceof CpsUpperNode) {
 					openNewUpperNodeTab();
@@ -1366,9 +1251,9 @@ public class GUI<E> implements CategoryListener {
 				updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
 				updCon.refreshTableProperties(model.getPropertyTable());
 				if (model.getSelectedCpsObjects().size() > 1) {
-					tableHolonElement.setModel(model.getMultiTable());
+					model.getTableHolonElement().setModel(model.getMultiTable());
 				} else if (model.getSelectedCpsObjects().size() == 1) {
-					tableHolonElement.setModel(model.getSingleTable());
+					model.getTableHolonElement().setModel(model.getSingleTable());
 				}
 			}
 
@@ -1649,6 +1534,7 @@ public class GUI<E> implements CategoryListener {
 		splitPaneCanvasConsole.setLeftComponent(panelTapped_SimMenu);
 		tabbedPane.addTab("View", canvasSP);
 		tabbedPane.addTab("Statistics", statScrollPane);
+		tabbedPane.addTab("Holon", holonSP);
 
 		splitPaneCanvasConsole.setRightComponent(console);
 		splitPane1.setLeftComponent(splitPaneCanvasConsole);
@@ -1692,19 +1578,33 @@ public class GUI<E> implements CategoryListener {
 			int dialogResult = JOptionPane.showConfirmDialog(null, "Old autosave file was found, should it be loaded?",
 					warningText, dialogButton);
 			if (dialogResult == JOptionPane.YES_OPTION) {
+				if(dest.exists()){
 				model.setAutoSaveNr(dest.listFiles().length - 1);
 				mntmRedo.doClick();
-			} else {
-				controller.deleteDirectory(dest);
-				dest.mkdirs();
-				try {
-					controller.autoSave();
-				} catch (IOException e1) {
-					// TODO Auto-generated catch block
-					e1.printStackTrace();
+				}else{
+					JOptionPane.showMessageDialog(frmCyberPhysical, "Autosave could not be loaded.");
+					setUpAutoSave(dest);
 				}
+			} else {
+				setUpAutoSave(dest);
 			}
-
+		}
+	}
+	
+	/**
+	 * Sets up autosave if no old one is loaded at the beginning
+	 * 
+	 * @param dest
+	 * 			path to save-folder
+	 */
+	public void setUpAutoSave(File dest){
+		controller.deleteDirectory(dest);
+		dest.mkdirs();
+		try {
+			controller.autoSave();
+		} catch (IOException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
 		}
 	}
 
@@ -1915,7 +1815,7 @@ public class GUI<E> implements CategoryListener {
 
 		// check if tab already open for clicked NodeOfNode
 		boolean dupl = false;
-		for (int i = 2; i < tabbedPane.getTabCount() && dupl == false; i++) {
+		for (int i = 3; i < tabbedPane.getTabCount() && dupl == false; i++) {
 			if (((UpperNodeCanvas) ((JScrollPane) tabbedPane.getComponentAt(i)).getViewport().getComponent(0)).upperNode
 					.getID() == temp.getID()) {
 				dupl = true;
@@ -1930,7 +1830,8 @@ public class GUI<E> implements CategoryListener {
 			unc.addMouseListener(new MouseAdapter() {
 				@Override
 				public void mousePressed(MouseEvent e) {
-					temp = ((UpperNodeCanvas) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getComponent(0)).tempCps;
+					temp = ((UpperNodeCanvas) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
+							.getComponent(0)).tempCps;
 					if (doubleClick() && temp instanceof CpsUpperNode) {
 						openNewUpperNodeTab();
 					}

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

@@ -472,8 +472,6 @@ 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;

+ 86 - 50
src/ui/view/StatisticGraph.java

@@ -4,11 +4,16 @@ import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
+import java.awt.Image;
 import java.awt.RenderingHints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.geom.GeneralPath;
 import java.util.ArrayList;
 
+import javax.swing.ImageIcon;
 import javax.swing.JPanel;
+import javax.swing.Timer;
 
 import classes.HolonElement;
 import classes.HolonObject;
@@ -53,6 +58,8 @@ public class StatisticGraph extends JPanel {
 		this.controller = control;
 		this.model = model;
 
+		
+	
 		this.setBackground(Color.WHITE);
 	}
 
@@ -81,39 +88,39 @@ public class StatisticGraph extends JPanel {
 			g2.drawLine(0, i, this.getWidth(), i);
 		}
 
-		if (model != null) {
-			isSimRunning = model.getIsSimulation();
-
-			// if sim is on
-			if (isSimRunning) {
-				g2.setStroke(new BasicStroke(3));
-
-				// Calculate the Maximum
-				calcMaximum();
-
-				// Calculate values for each set and add them
-				addValues();
-
-				// Create Paths and draw them
-				for (TrackedDataSet set : objects) {
-					path.reset();
-					switch (set.getProperty()) {
-					case TrackedDataSet.CONSUMPTION:
-					case TrackedDataSet.PRODUCTION:
-					case TrackedDataSet.ACTIVATED_ELEMENTS:
-						createPathFloats(set);
-						break;
-					case TrackedDataSet.ON_OFF:
-						createPathBooleans(set);
-						break;
-					default:
-						break;
-					}
-					g2.setColor(set.getColor());
-					g2.draw(path);
+		isSimRunning = model.getIsSimulation();
+
+		// if sim is on
+		if (isSimRunning) {
+			g2.setStroke(new BasicStroke(3));
+
+			// Calculate the Maximum
+			calcMaximum();
+
+			// Calculate values for each set and add them
+			addValues();
+
+			// Create Paths and draw them
+			for (TrackedDataSet set : objects) {
+				path.reset();
+				switch (set.getProperty()) {
+				case TrackedDataSet.CONSUMPTION:
+				case TrackedDataSet.PRODUCTION:
+				case TrackedDataSet.ACTIVATED_ELEMENTS:
+					createPathFloats(set);
+					break;
+				case TrackedDataSet.ON_OFF:
+					createPathBooleans(set);
+					break;
+				default:
+					break;
 				}
+				g2.setColor(set.getColor());
+				g2.draw(path);
+
 			}
 		}
+
 	}
 
 	/**
@@ -191,11 +198,12 @@ public class StatisticGraph extends JPanel {
 				break;
 			case TrackedDataSet.ACTIVATED_ELEMENTS:
 				for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
-					if (h.getEnergy() < 0) {
-						val += h.getAmount();
-					}
+					val += h.getAmount();
 				}
 				break;
+			case TrackedDataSet.ON_OFF:
+				val = 1;
+				break;
 			default:
 				break;
 			}
@@ -210,34 +218,46 @@ public class StatisticGraph extends JPanel {
 	 */
 	private void addValues() {
 		for (TrackedDataSet set : objects) {
+			int val = 0;
 			switch (set.getProperty()) {
 			case TrackedDataSet.CONSUMPTION:
 				for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
 					if (h.getEnergy() < 0) {
-						set.setValAt(-h.getEnergyAt()[model.getCurIteration()], model.getCurIteration());
+						val += Math.abs(h.getEnergyAt()[model.getCurIteration()]);
 					}
+					set.setValAt(val, model.getCurIteration());
 				}
 				break;
 			case TrackedDataSet.PRODUCTION:
 				for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
 					if (h.getEnergy() > 0) {
-						set.setValAt(h.getEnergyAt()[model.getCurIteration()], model.getCurIteration());
+						val += Math.abs(h.getEnergyAt()[model.getCurIteration()]);
 					}
+					set.setValAt(val, model.getCurIteration());
 				}
 
 				break;
 			case TrackedDataSet.ACTIVATED_ELEMENTS:
 				for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
-					if (h.getEnergy() < 0) {
-
+					if (h.getActive()) {
+						val += h.getAmount();
 					}
+					set.setValAt(val, model.getCurIteration());
 				}
 				break;
 			case TrackedDataSet.ON_OFF:
-				if (((HolonSwitch) set.getCpsObject()).getState()) {
-					set.setValAt(1, model.getCurIteration());
+				if (((HolonSwitch) set.getCpsObject()).getManualMode()) {
+					if (((HolonSwitch) set.getCpsObject()).getActiveManual()) {
+						set.setValAt(1, model.getCurIteration());
+					} else {
+						set.setValAt(0, model.getCurIteration());
+					}
 				} else {
-					set.setValAt(0, model.getCurIteration());
+					if (((HolonSwitch) set.getCpsObject()).getActiveAt()[model.getCurIteration()]) {
+						set.setValAt(1, model.getCurIteration());
+					} else {
+						set.setValAt(0, model.getCurIteration());
+					}
 				}
 				break;
 			default:
@@ -253,13 +273,22 @@ public class StatisticGraph extends JPanel {
 	 */
 	private void createPathFloats(TrackedDataSet set) {
 		boolean init = true;
-		for (int i = 0; i < set.getValues().length - 1; i++) {
-			if (init && set.getValues()[i] != -1) {
-				path.moveTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1,
-						convertToCanvasY(Math.abs(set.getValues()[i])));
+		path.moveTo(0, 0);
+		for (int i = 0; i < model.getCurIteration() - 1; i++) {
+			controller.addTextToConsole(path.getCurrentPoint().getX() + ", " + path.getCurrentPoint().getY());
+			if (init /* && set.getValues()[i] != -1 */) {
+				path.moveTo(i * this.getWidth() / model.getIterations() - 1, convertToCanvasY(set.getValues()[i]));
+				init = false;
 			}
-			path.lineTo(model.getCurIteration() * this.getWidth() / model.getIterations(),
-					convertToCanvasY(Math.abs(set.getValues()[i + 1])));
+			if (!init) {
+				if (set.getValues()[i + 1] != -1) {
+					path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
+							convertToCanvasY(set.getValues()[i + 1]));
+				} else {
+					break;
+				}
+			}
+
 		}
 	}
 
@@ -270,13 +299,20 @@ public class StatisticGraph extends JPanel {
 	 */
 	private void createPathBooleans(TrackedDataSet set) {
 		boolean init = true;
-		for (int i = 0; i < set.getValues().length - 1; i++) {
+		for (int i = 0; i < model.getCurIteration() - 1; i++) {
 			if (init && set.getValues()[i] != -1) {
-				path.moveTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1,
+				path.moveTo(i * this.getWidth() / model.getIterations() - 1,
 						convertToCanvasY((float) (set.getValues()[i] * maximum)));
+				init = false;
+			}
+			if (!init) {
+				if (set.getValues()[i + 1] != -1) {
+					path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
+							convertToCanvasY((float) (set.getValues()[i + 1] * maximum)));
+				} else {
+					break;
+				}
 			}
-			path.lineTo(model.getCurIteration() * this.getWidth() / model.getIterations(),
-					convertToCanvasY((float) (set.getValues()[i + 1] * maximum)));
 		}
 	}
 

+ 120 - 0
src/ui/view/StatisticGraphPanel.java

@@ -0,0 +1,120 @@
+package ui.view;
+
+import javax.swing.JPanel;
+
+import classes.TrackedDataSet;
+import ui.controller.Control;
+import ui.model.Model;
+
+import javax.swing.JLabel;
+import javax.swing.JButton;
+import javax.swing.SwingConstants;
+import java.awt.BorderLayout;
+import javax.swing.border.LineBorder;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class StatisticGraphPanel extends JPanel {
+
+	private static final long serialVersionUID = 1L;
+
+	// Model/Controller
+	private Model model;
+	private Control controller;
+
+	// Components
+	private StatisticGraph sGraph;
+	private final JLabel graphNameLabel;
+	private final JLabel maximumLabel = new JLabel("0");
+	private JPanel topPanel = new JPanel();
+	private JButton closeButton = new JButton("X");
+
+	// Variables
+	String graphName;
+	private final JPanel Legendpanel = new JPanel();
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param mod
+	 *            the Model
+	 * @param cont
+	 *            the Controller
+	 */
+	public StatisticGraphPanel(Model mod, Control cont, String name) {
+		super();
+		this.model = mod;
+		this.controller = cont;
+		this.sGraph = new StatisticGraph(mod, cont);
+		this.graphName = name;
+		setLayout(new BorderLayout(0, 0));
+
+		// ******************** Component Propertys ***************//
+		// Graph Name
+		graphNameLabel = new JLabel(graphName);
+		graphNameLabel.setHorizontalTextPosition(JLabel.CENTER);
+
+		// Panel on top (Name and Close Button)
+		topPanel.setLayout(new BorderLayout(0, 0));
+		topPanel.add(graphNameLabel, BorderLayout.CENTER);
+		topPanel.add(closeButton, BorderLayout.EAST);
+		topPanel.setBorder(null);
+
+		// Maximum Label
+		maximumLabel.setVerticalAlignment(SwingConstants.TOP);
+		maximumLabel.setPreferredSize(new Dimension(30, 10));
+		// ******************** Component Listener ****************//
+
+		JPanel that = this;
+		closeButton.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				JPanel parent = (JPanel) that.getParent();
+				for (int i = 0; i < parent.getComponentCount(); i++) {
+					if (parent.getComponent(i).equals(that)) {
+						parent.remove(parent.getComponent(i+1));
+						break;
+					}
+				}
+				parent.remove(that);
+				parent.updateUI();
+			}
+		});
+
+		// ******************** add everything ********************//
+		this.add(sGraph);
+		this.add(topPanel, BorderLayout.NORTH);
+		this.add(maximumLabel, BorderLayout.WEST);
+		this.add(Legendpanel, BorderLayout.SOUTH);
+		
+
+	}
+
+	/**
+	 * Adds the Set to the Graph.
+	 * 
+	 * @param set
+	 */
+	public void addObjec(TrackedDataSet set) {
+		sGraph.addObject(set);
+	}
+
+	/**
+	 * Repaint the Graph.
+	 */
+	public void repaintGraph() {
+		sGraph.repaint();
+	}
+
+	/**
+	 * Set the Maximum Label
+	 *
+	 * @param max
+	 */
+	public void setMaximumLabel(int max) {
+		maximumLabel.setText(Integer.toString(max));
+	}
+}

+ 22 - 15
src/ui/view/UpperNodeCanvas.java

@@ -193,6 +193,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				}
 			}
 		});
+
 		itemUntrack.addActionListener(new ActionListener() {
 
 			@Override
@@ -604,6 +605,13 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		controller.setSelecteEdge(null);
 		// Object Selection
 
+		// Erase old data in the PropertyTable
+		if (model.getPropertyTable().getRowCount() > 0) {
+			for (int i = model.getPropertyTable().getRowCount() - 1; i > -1; i--) {
+				model.getPropertyTable().removeRow(i);
+			}
+		}
+
 		if (e.getX() > borderPos) {
 			for (AbstractCpsObject cps : upperNode.getNodes()) {
 				cx = cps.getPosition().x;
@@ -616,14 +624,12 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					controller.addTextToConsole("" + cps.getID(), Color.RED, 12, true, false, true);
 					dragging = true;
 					if (e.isControlDown() && tempCps != null) {
-						System.out.println(tempCps.getName() + " " + tempCps.getID());
 						if (model.getSelectedCpsObjects().contains(tempCps)) {
 							controller.deleteSelectedObject(tempCps);
 						} else {
 							controller.addSelectedObject(tempCps);
 						}
-					} else {
-						System.out.println("HEre");
+					} else if (e.getButton() != MouseEvent.BUTTON3) {
 						controller.setSelectedObjectID(tempCps.getID());
 						model.getSelectedCpsObjects().clear();
 						controller.addSelectedObject(tempCps);
@@ -673,14 +679,6 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			}
 		}
 
-		if (e.isControlDown() && tempCps != null) {
-			if (model.getSelectedCpsObjects().contains(tempCps)) {
-				controller.deleteSelectedObject(tempCps);
-			} else {
-				controller.addSelectedObject(tempCps);
-			}
-		}
-
 		// Selection of CpsObject
 		// model.setSelectedCpsObject(tempCps);
 
@@ -701,10 +699,11 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			sy = e.getY();
 			doMark = true;
 		}
-		for (AbstractCpsObject temp : model.getSelectedCpsObjects()) {
-			System.out.println(temp.getName() + " " + temp.getID());
-		}
-		System.out.println("");
+		// System.out.println("Selected Objects");
+		// for (AbstractCpsObject temp : model.getSelectedCpsObjects()) {
+		// System.out.println(temp.getName() + " " + temp.getID());
+		// }
+		updCon.paintProperties(tempCps);
 		updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
 		updCon.refreshTableProperties(model.getPropertyTable());
 		repaint();
@@ -713,6 +712,14 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	@Override
 	public void mouseReleased(MouseEvent e) {
 		dragging = false;
+		// updCon.refreshTableHolonElement(model.getMultiTable(),
+		// model.getSingleTable());
+		// updCon.refreshTableProperties(model.getPropertyTable());
+		if (model.getSelectedCpsObjects().size() > 1) {
+			model.getTableHolonElement().setModel(model.getMultiTable());
+		} else if (model.getSelectedCpsObjects().size() == 1) {
+			model.getTableHolonElement().setModel(model.getSingleTable());
+		}
 
 		if (drawEdge) {
 			drawEdge = false;

+ 31 - 16
src/ui/view/splitPane.java

@@ -37,6 +37,7 @@ import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 
+import javax.swing.border.CompoundBorder;
 import javax.swing.border.LineBorder;
 import javax.swing.JPopupMenu;
 import java.awt.Component;
@@ -44,8 +45,11 @@ import java.awt.Dimension;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import javax.swing.JMenuItem;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
 import javax.swing.BoxLayout;
 import java.awt.FlowLayout;
+import java.awt.BorderLayout;
 
 public class splitPane extends JSplitPane implements GraphListener {
 	private JTextField graphNrTxtField;
@@ -76,7 +80,6 @@ public class splitPane extends JSplitPane implements GraphListener {
 		dataPane.setViewportView(panel);
 		
 		JScrollPane treeScrollPane = new JScrollPane();
-		
 		JLabel lblObject = new JLabel("Object(s):");
 		
 		showObjectlbl = new JLabel("...");
@@ -339,10 +342,25 @@ public class splitPane extends JSplitPane implements GraphListener {
 		JButton btnAdd = new JButton("Add");
 		btnAdd.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
-				StatisticGraph tmp = new StatisticGraph(controller.getModel(), controller);
-				graphPanel.add(tmp);
-				graphPanel.revalidate();
-				graphPanel.updateUI();
+				/*
+				 DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)objectTree.getLastSelectedPathComponent();
+				 if(selectedNode == null){
+					 return;
+				 }else{
+					 if(selectedNode.getLevel() == 3){
+
+					 }
+				 }
+				 */
+				 StatisticGraphPanel tmp = new StatisticGraphPanel(controller.getModel(), controller, graphNrTxtField.getText());
+				 tmp.setPreferredSize(new Dimension(280,120));
+				 tmp.setMaximumSize(new Dimension(1000,120));
+				 tmp.setMinimumSize(new Dimension(100,45));
+				 tmp.setBorder(new LineBorder(new Color(0, 0, 0), 1));
+				 graphPanel.add(tmp);
+				 graphPanel.add(Box.createRigidArea(new Dimension(50,50)));
+				 graphPanel.revalidate();
+				 graphPanel.updateUI();
 			}
 		});
 		
@@ -354,11 +372,9 @@ public class splitPane extends JSplitPane implements GraphListener {
 			gl_panel.createParallelGroup(Alignment.LEADING)
 				.addGroup(gl_panel.createSequentialGroup()
 					.addContainerGap()
-					.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
-						.addGroup(gl_panel.createSequentialGroup()
-							.addComponent(treeScrollPane, GroupLayout.DEFAULT_SIZE, 187, Short.MAX_VALUE)
-							.addContainerGap())
-						.addGroup(gl_panel.createSequentialGroup()
+					.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING, false)
+						.addComponent(treeScrollPane, Alignment.LEADING)
+						.addGroup(Alignment.LEADING, gl_panel.createSequentialGroup()
 							.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
 								.addComponent(lblGraph)
 								.addComponent(lblObject)
@@ -386,8 +402,8 @@ public class splitPane extends JSplitPane implements GraphListener {
 									.addPreferredGap(ComponentPlacement.RELATED)
 									.addComponent(lblB)
 									.addPreferredGap(ComponentPlacement.RELATED)
-									.addComponent(blueField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)))
-							.addGap(32))))
+									.addComponent(blueField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)))))
+					.addGap(32))
 		);
 		gl_panel.setVerticalGroup(
 			gl_panel.createParallelGroup(Alignment.LEADING)
@@ -516,11 +532,10 @@ public class splitPane extends JSplitPane implements GraphListener {
 		setRightComponent(graphScrollPane);
 		
 		graphPanel = new JPanel();
-		graphScrollPane.setViewportView(graphPanel);
 		graphPanel.setLayout(new BoxLayout(graphPanel, BoxLayout.Y_AXIS));
-		
-		JPanel panel_1 = new JPanel();
-		graphPanel.add(panel_1);
+		graphPanel.revalidate();
+		graphPanel.updateUI();
+		graphScrollPane.setViewportView(graphPanel);
 		repaintGraph();
 	}
 	@Override