|
@@ -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);
|