Browse Source

View of HolonElementTable and PropertiesTable for UpperNodeCanvas

Edgardo Palza 7 years ago
parent
commit
37fbc27bcc

+ 124 - 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) {
@@ -198,4 +204,121 @@ public class UpdateController {
 		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;
+	}
+
 }

+ 15 - 132
src/ui/view/GUI.java

@@ -148,8 +148,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();
@@ -624,11 +622,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);
@@ -728,9 +726,9 @@ 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();
 				yValueElements = e.getY();
@@ -787,7 +785,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 {
@@ -797,8 +795,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) {
@@ -830,8 +828,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) {
@@ -1238,122 +1236,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();
@@ -1365,9 +1248,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());
 				}
 			}
 

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

@@ -472,7 +472,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		dataSelected = null;
 		edgeHighlight = null;
 		controller.setSelecteEdge(null);
-		System.out.println(model.getEdgesOnCanvas().size());
+		// System.out.println(model.getEdgesOnCanvas().size());
 		// Object Selection
 		for (AbstractCpsObject cps : model.getObjectsOnCanvas()) {
 			cx = cps.getPosition().x;

+ 21 - 13
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;
@@ -623,7 +631,6 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 							controller.addSelectedObject(tempCps);
 						}
 					} else {
-						System.out.println("HEre");
 						controller.setSelectedObjectID(tempCps.getID());
 						model.getSelectedCpsObjects().clear();
 						controller.addSelectedObject(tempCps);
@@ -673,14 +680,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 +700,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();
@@ -714,6 +714,14 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	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;
 			drawDeleteEdge();