|
@@ -23,7 +23,10 @@ import javax.swing.tree.TreeNode;
|
|
|
|
|
|
import DataSets.GraphDataSet;
|
|
|
import DataSets.PropertyDataSet;
|
|
|
+import classes.AbstractCpsObject;
|
|
|
+import classes.CpsUpperNode;
|
|
|
import classes.HolonObject;
|
|
|
+import classes.HolonSwitch;
|
|
|
import classes.TrackedDataSet;
|
|
|
import interfaces.GraphListener;
|
|
|
import ui.controller.Control;
|
|
@@ -54,23 +57,55 @@ import java.awt.BorderLayout;
|
|
|
|
|
|
public class splitPane extends JSplitPane implements GraphListener {
|
|
|
// Property Integers
|
|
|
- public static final int CONSUMPTION = 0;
|
|
|
- public static final int PRODUCTION = 1;
|
|
|
- public static final int ACTIVATED_ELEMENTS = 2;
|
|
|
- public static final int ON_OFF = 3;
|
|
|
-
|
|
|
+ public static final int CONS_OBJ_INT = 0;
|
|
|
+ public static final int PROD_OBJ_INT = 1;
|
|
|
+ public static final int ACTIVE_ELEMENTS_INT = 2;
|
|
|
+ public static final int SW_ACTIVE_INT = 3;
|
|
|
+ public static final int PROD_HOLON_INT = 4;
|
|
|
+ public static final int CONS_HOLON_INT = 5;
|
|
|
+ public static final int SUPPLIED_INT = 6;
|
|
|
+ public static final int NOT_SUPPLIED_INT = 7;
|
|
|
+ public static final int PART_SUPPLIED_INT = 8;
|
|
|
+ public static final int GRID_PROD_INT = 9;
|
|
|
+ public static final int GRID_CONS_INT = 10;
|
|
|
+
|
|
|
+ // Property Strings
|
|
|
+ public static final String TOT_PROD_HOLON = "total Holon Production";
|
|
|
+ public static final String TOT_CONS_HOLON = "total Holon Consumption";
|
|
|
+ public static final String SUPPLIED_OBJ = "Percentage of supplied Objects";
|
|
|
+ public static final String NOT_SUPPLIED_OBJ = "Percentage of not supplied Objects";
|
|
|
+ public static final String PART_SUPPLIED_OBJ = "Percentage of partially supplied Objects";
|
|
|
+
|
|
|
+ public static final String TOT_PROD_OBJ = "total Production";
|
|
|
+ public static final String TOT_CONS_OBJ = "total Consumption";
|
|
|
+ public static final String NR_ACTIVE_ELEMENTS = "active Elements";
|
|
|
+
|
|
|
+ public static final String SW_ACTIVE = "active";
|
|
|
+
|
|
|
+ public static final String TOT_PROD_GRID = "total Grid Production";
|
|
|
+ public static final String TOT_CONS_GRID = "total Grid Consumption";
|
|
|
+
|
|
|
+ // editable textfields
|
|
|
private JTextField graphNrTxtField;
|
|
|
private JTextField redField;
|
|
|
private JTextField greenField;
|
|
|
private JTextField blueField;
|
|
|
+
|
|
|
+ // Tree Properties
|
|
|
private JTree objectTree;
|
|
|
private DefaultTreeModel treeModel;
|
|
|
private DefaultMutableTreeNode objectsNode;
|
|
|
private DefaultMutableTreeNode wholeHolon;
|
|
|
+ private DefaultMutableTreeNode switchesNode;
|
|
|
+ private DefaultMutableTreeNode gridsNode;
|
|
|
+
|
|
|
private Hashtable<String, GraphDataSet> objectHashtable;
|
|
|
private Hashtable<String, StatisticGraphPanel> graphHashtable;
|
|
|
+ private Hashtable<String, PropertyDataSet> holonHashtable;
|
|
|
private Hashtable<String, Integer> propValTable;
|
|
|
private JPanel colorPanel;
|
|
|
+
|
|
|
+ //contains information about a selected property
|
|
|
private PropertyDataSet currentProperty = new PropertyDataSet();
|
|
|
private JComboBox colorComboBox;
|
|
|
private Control controller;
|
|
@@ -83,10 +118,27 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
this.controller = cont;
|
|
|
objectHashtable = new Hashtable<String, GraphDataSet>();
|
|
|
graphHashtable = new Hashtable<String, StatisticGraphPanel>();
|
|
|
+
|
|
|
+ holonHashtable = new Hashtable<String, PropertyDataSet>();
|
|
|
+ holonHashtable.put(TOT_PROD_HOLON, new PropertyDataSet());
|
|
|
+ holonHashtable.put(TOT_CONS_HOLON, new PropertyDataSet());
|
|
|
+ holonHashtable.put(SUPPLIED_OBJ, new PropertyDataSet());
|
|
|
+ holonHashtable.put(NOT_SUPPLIED_OBJ, new PropertyDataSet());
|
|
|
+ holonHashtable.put(PART_SUPPLIED_OBJ, new PropertyDataSet());
|
|
|
+
|
|
|
+ //propValTable associates the Strings to the numbers
|
|
|
propValTable = new Hashtable<String, Integer>();
|
|
|
- propValTable.put("total Production", PRODUCTION);
|
|
|
- propValTable.put("total Consumption", CONSUMPTION);
|
|
|
- propValTable.put("number of activated Elements", ACTIVATED_ELEMENTS);
|
|
|
+ propValTable.put(TOT_PROD_OBJ, PROD_OBJ_INT);
|
|
|
+ propValTable.put(TOT_CONS_OBJ, CONS_OBJ_INT);
|
|
|
+ propValTable.put(NR_ACTIVE_ELEMENTS, ACTIVE_ELEMENTS_INT);
|
|
|
+ propValTable.put(SW_ACTIVE, SW_ACTIVE_INT);
|
|
|
+ propValTable.put(TOT_PROD_HOLON, PROD_HOLON_INT);
|
|
|
+ propValTable.put(TOT_CONS_HOLON, CONS_HOLON_INT);
|
|
|
+ propValTable.put(SUPPLIED_OBJ, SUPPLIED_INT);
|
|
|
+ propValTable.put(NOT_SUPPLIED_OBJ, NOT_SUPPLIED_INT);
|
|
|
+ propValTable.put(PART_SUPPLIED_OBJ, PART_SUPPLIED_INT);
|
|
|
+ propValTable.put(TOT_PROD_GRID, GRID_PROD_INT);
|
|
|
+ propValTable.put(TOT_CONS_GRID, GRID_CONS_INT);
|
|
|
|
|
|
JScrollPane dataPane = new JScrollPane();
|
|
|
setLeftComponent(dataPane);
|
|
@@ -94,6 +146,10 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
dataPane.setViewportView(panel);
|
|
|
|
|
|
JScrollPane treeScrollPane = new JScrollPane();
|
|
|
+
|
|
|
+
|
|
|
+ //================= LABLES ON THE LEFT SIDE =================//
|
|
|
+
|
|
|
JLabel lblObject = new JLabel("Object(s):");
|
|
|
|
|
|
showObjectlbl = new JLabel("...");
|
|
@@ -105,7 +161,12 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
JLabel lblGraph = new JLabel("Graph:");
|
|
|
|
|
|
JLabel lblColor = new JLabel("Color:");
|
|
|
-
|
|
|
+
|
|
|
+ //================= LABLES END ===============================//
|
|
|
+
|
|
|
+
|
|
|
+ //================= COLOR COMBOBOX ===========================//
|
|
|
+
|
|
|
colorComboBox = new JComboBox();
|
|
|
colorComboBox.addItem("");
|
|
|
colorComboBox.addItem("Red");
|
|
@@ -174,6 +235,8 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
}
|
|
|
|
|
|
});
|
|
|
+
|
|
|
+ // ==================== COLORBOX END ==========================//
|
|
|
|
|
|
// ====================GRAPH NR TEXTFIELD======================//
|
|
|
graphNrTxtField = new JTextField();
|
|
@@ -363,6 +426,9 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
JLabel lblG = new JLabel("G:");
|
|
|
|
|
|
JLabel lblB = new JLabel("B:");
|
|
|
+
|
|
|
+
|
|
|
+ //======================== ADD BUTTON =============================//
|
|
|
|
|
|
JButton btnAdd = new JButton("Add");
|
|
|
btnAdd.addActionListener(new ActionListener() {
|
|
@@ -400,10 +466,16 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
+ //============================== ADD BUTTON END ==============================//
|
|
|
|
|
|
colorPanel = new JPanel();
|
|
|
colorPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
|
|
|
colorPanel.setBackground(Color.WHITE);
|
|
|
+
|
|
|
+
|
|
|
+ //================== LAYOUT FOR COMPONENTS ON THE LEFT SIDE ==================//
|
|
|
+
|
|
|
GroupLayout gl_panel = new GroupLayout(panel);
|
|
|
gl_panel.setHorizontalGroup(gl_panel.createParallelGroup(Alignment.LEADING)
|
|
|
.addGroup(gl_panel.createSequentialGroup().addContainerGap().addGroup(gl_panel
|
|
@@ -475,24 +547,36 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
.addComponent(colorPanel, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
|
|
|
.addPreferredGap(ComponentPlacement.RELATED).addComponent(btnAdd)
|
|
|
.addContainerGap(35, Short.MAX_VALUE)));
|
|
|
-
|
|
|
+
|
|
|
+ //======================== LAYOUT END ================================//
|
|
|
+
|
|
|
+
|
|
|
+ //======================== TREE STRUCTURE=============================//
|
|
|
+
|
|
|
objectTree = new JTree();
|
|
|
treeModel = (DefaultTreeModel) objectTree.getModel();
|
|
|
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Statistics");
|
|
|
wholeHolon = new DefaultMutableTreeNode("whole Holon");
|
|
|
- wholeHolon.add(new DefaultMutableTreeNode("total Production"));
|
|
|
- wholeHolon.add(new DefaultMutableTreeNode("total Consumption"));
|
|
|
- wholeHolon.add(new DefaultMutableTreeNode("Percentage of Supplied Objects"));
|
|
|
- wholeHolon.add(new DefaultMutableTreeNode("Percentage of not Supplied Objects"));
|
|
|
- wholeHolon.add(new DefaultMutableTreeNode("Percentage of partially Supplied Objects"));
|
|
|
+ wholeHolon.add(new DefaultMutableTreeNode(TOT_PROD_HOLON));
|
|
|
+ wholeHolon.add(new DefaultMutableTreeNode(TOT_CONS_HOLON));
|
|
|
+ wholeHolon.add(new DefaultMutableTreeNode(SUPPLIED_OBJ));
|
|
|
+ wholeHolon.add(new DefaultMutableTreeNode(NOT_SUPPLIED_OBJ));
|
|
|
+ wholeHolon.add(new DefaultMutableTreeNode(PART_SUPPLIED_OBJ));
|
|
|
|
|
|
objectsNode = new DefaultMutableTreeNode("Objects");
|
|
|
- DefaultMutableTreeNode defaultNode = new DefaultMutableTreeNode("empty");
|
|
|
-
|
|
|
- objectsNode.add(defaultNode);
|
|
|
+ objectsNode.add(new DefaultMutableTreeNode("empty"));
|
|
|
+
|
|
|
+ switchesNode = new DefaultMutableTreeNode("Switches");
|
|
|
+ switchesNode.add(new DefaultMutableTreeNode("empty"));
|
|
|
+
|
|
|
+ gridsNode = new DefaultMutableTreeNode("Grids");
|
|
|
+ gridsNode.add(new DefaultMutableTreeNode("empty"));
|
|
|
+
|
|
|
treeModel.setRoot(root);
|
|
|
root.add(wholeHolon);
|
|
|
root.add(objectsNode);
|
|
|
+ root.add(switchesNode);
|
|
|
+ root.add(gridsNode);
|
|
|
objectTree.setModel(treeModel);
|
|
|
|
|
|
treeScrollPane.setViewportView(objectTree);
|
|
@@ -507,7 +591,7 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
.getLastSelectedPathComponent();
|
|
|
if (selectedNode.getLevel() == 2 && !selectedNode.getParent().toString().equals("whole Holon")) {
|
|
|
String object = selectedNode.toString();
|
|
|
- controller.removeTrackingObj((HolonObject) objectHashtable.get(object).getObject());
|
|
|
+ controller.removeTrackingObj(objectHashtable.get(object).getObject());
|
|
|
}
|
|
|
}
|
|
|
});
|
|
@@ -531,16 +615,29 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
if (selectedNode.getLevel() == 1) {
|
|
|
disableFields();
|
|
|
currentProperty = null;
|
|
|
+ graphNrTxtField.setText("");
|
|
|
showObjectlbl.setText(selectedNode.toString());
|
|
|
}
|
|
|
if (selectedNode.getLevel() == 2) {
|
|
|
if (((DefaultMutableTreeNode) selectedNode.getParent()).toString().equals("whole Holon")) {
|
|
|
enableFields();
|
|
|
- showPropertylbl.setText(selectedNode.toString());
|
|
|
- showObjectlbl.setText(selectedNode.getParent().toString());
|
|
|
+ String object = selectedNode.getParent().toString();
|
|
|
+ String property = selectedNode.toString();
|
|
|
+ currentProperty = holonHashtable.get(property);
|
|
|
+ Color color = currentProperty.getColor();
|
|
|
+
|
|
|
+ redField.setText(Integer.toString(color.getRed()));
|
|
|
+ greenField.setText(Integer.toString(color.getGreen()));
|
|
|
+ blueField.setText(Integer.toString(color.getBlue()));
|
|
|
+
|
|
|
+ showPropertylbl.setText(property);
|
|
|
+ showObjectlbl.setText(object);
|
|
|
+ graphNrTxtField.setText(currentProperty.getAssignedGraph());
|
|
|
+ colorPanel.setBackground(color);
|
|
|
} else {
|
|
|
disableFields();
|
|
|
currentProperty = null;
|
|
|
+ graphNrTxtField.setText("");
|
|
|
showObjectlbl.setText(selectedNode.toString());
|
|
|
}
|
|
|
}
|
|
@@ -563,6 +660,10 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
}
|
|
|
|
|
|
});
|
|
|
+
|
|
|
+ //========================= TREE STRUCTURE END ============================//
|
|
|
+
|
|
|
+
|
|
|
panel.setLayout(gl_panel);
|
|
|
|
|
|
JScrollPane graphScrollPane = new JScrollPane();
|
|
@@ -575,34 +676,68 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
graphScrollPane.setViewportView(graphPanel);
|
|
|
repaintTree();
|
|
|
}
|
|
|
+
|
|
|
+ //=============================== END CONSTRUCTOR ==============================//
|
|
|
|
|
|
+
|
|
|
+ //=============================== METHODS ======================================//
|
|
|
@Override
|
|
|
public void repaintTree() {
|
|
|
treeModel.reload();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void addTrackedObject(ArrayList<HolonObject> hlList) {
|
|
|
+ public void addTrackedObject(ArrayList<AbstractCpsObject> hlList) {
|
|
|
objectsNode.removeAllChildren();
|
|
|
+ switchesNode.removeAllChildren();
|
|
|
+ gridsNode.removeAllChildren();
|
|
|
objectHashtable.clear();
|
|
|
if (hlList.size() > 0 && hlList != null) {
|
|
|
- for (HolonObject hO : hlList) {
|
|
|
- Hashtable<String, PropertyDataSet> tmpHash = new Hashtable<String, PropertyDataSet>();
|
|
|
- String name = hO.getName() + " " + hO.getID();
|
|
|
+ for (AbstractCpsObject abs : hlList) {
|
|
|
+ String name = abs.getName() + " " + abs.getID();
|
|
|
DefaultMutableTreeNode tmp = new DefaultMutableTreeNode(name);
|
|
|
- tmp.add(new DefaultMutableTreeNode("total Production"));
|
|
|
- tmp.add(new DefaultMutableTreeNode("total Consumption"));
|
|
|
- tmp.add(new DefaultMutableTreeNode("number of activated Elements"));
|
|
|
- tmpHash.put("total Production", new PropertyDataSet());
|
|
|
- tmpHash.put("total Consumption", new PropertyDataSet());
|
|
|
- tmpHash.put("number of activated Elements", new PropertyDataSet());
|
|
|
- GraphDataSet gS = new GraphDataSet(hO, tmpHash);
|
|
|
+ Hashtable<String, PropertyDataSet> tmpHash = new Hashtable<String, PropertyDataSet>();
|
|
|
+
|
|
|
+ //HolonObjects
|
|
|
+ if(abs instanceof HolonObject){
|
|
|
+ tmp.add(new DefaultMutableTreeNode(TOT_PROD_OBJ));
|
|
|
+ tmp.add(new DefaultMutableTreeNode(TOT_CONS_OBJ));
|
|
|
+ tmp.add(new DefaultMutableTreeNode(NR_ACTIVE_ELEMENTS));
|
|
|
+ tmpHash.put(TOT_PROD_OBJ, new PropertyDataSet());
|
|
|
+ tmpHash.put(TOT_CONS_OBJ, new PropertyDataSet());
|
|
|
+ tmpHash.put(NR_ACTIVE_ELEMENTS, new PropertyDataSet());
|
|
|
+ objectsNode.add(tmp);
|
|
|
+ }
|
|
|
+
|
|
|
+ //HolonSwitches
|
|
|
+ if(abs instanceof HolonSwitch){
|
|
|
+ tmp.add(new DefaultMutableTreeNode(SW_ACTIVE));
|
|
|
+ tmpHash.put(SW_ACTIVE, new PropertyDataSet());
|
|
|
+ switchesNode.add(tmp);
|
|
|
+ }
|
|
|
+
|
|
|
+ //NodesOfNodes
|
|
|
+ if(abs instanceof CpsUpperNode){
|
|
|
+ tmp.add(new DefaultMutableTreeNode(TOT_PROD_GRID));
|
|
|
+ tmp.add(new DefaultMutableTreeNode(TOT_CONS_GRID));
|
|
|
+ tmpHash.put(TOT_PROD_GRID, new PropertyDataSet());
|
|
|
+ tmpHash.put(TOT_CONS_GRID, new PropertyDataSet());
|
|
|
+ gridsNode.add(tmp);
|
|
|
+ }
|
|
|
+
|
|
|
+ GraphDataSet gS = new GraphDataSet(abs, tmpHash);
|
|
|
objectHashtable.put(name, gS);
|
|
|
- objectsNode.add(tmp);
|
|
|
}
|
|
|
- } else {
|
|
|
+ }
|
|
|
+ if(objectsNode.getChildCount() == 0){
|
|
|
objectsNode.add(new DefaultMutableTreeNode("empty"));
|
|
|
}
|
|
|
+ if(switchesNode.getChildCount() == 0){
|
|
|
+ switchesNode.add(new DefaultMutableTreeNode("empty"));
|
|
|
+ }
|
|
|
+ if(gridsNode.getChildCount() == 0){
|
|
|
+ gridsNode.add(new DefaultMutableTreeNode("empty"));
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -615,7 +750,6 @@ public class splitPane extends JSplitPane implements GraphListener {
|
|
|
redField.setText("");
|
|
|
greenField.setText("");
|
|
|
blueField.setText("");
|
|
|
- // graphNrTxtField.setText("");
|
|
|
colorComboBox.setSelectedIndex(0);
|
|
|
}
|
|
|
|