|
@@ -2,8 +2,9 @@ package ui.view;
|
|
|
|
|
|
import java.awt.BorderLayout;
|
|
|
import java.awt.Color;
|
|
|
-import java.awt.Component;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
import javax.swing.ImageIcon;
|
|
|
import javax.swing.JFrame;
|
|
|
|
|
@@ -15,24 +16,22 @@ import javax.swing.event.TreeModelEvent;
|
|
|
import javax.swing.event.TreeModelListener;
|
|
|
import javax.swing.tree.DefaultMutableTreeNode;
|
|
|
import javax.swing.tree.DefaultTreeCellRenderer;
|
|
|
-import javax.swing.tree.DefaultTreeModel;
|
|
|
|
|
|
import classes.AbstractCpsObject;
|
|
|
-import classes.CpsEdge;
|
|
|
-import classes.HolonObject;
|
|
|
-import ui.controller.CalculataModel;
|
|
|
+
|
|
|
+import classes.CpsNode;
|
|
|
+
|
|
|
import ui.controller.Control;
|
|
|
-import ui.controller.UpdateController;
|
|
|
-import ui.model.CableWithState;
|
|
|
+
|
|
|
import ui.model.Consumer;
|
|
|
-import ui.model.Consumer.SupplierListEntry;
|
|
|
-import ui.model.DecoratedCable.CableState;
|
|
|
-import ui.model.DecoratedHolonObject;
|
|
|
+import ui.model.DecoratedCable;
|
|
|
import ui.model.DecoratedHolonObject.HolonObjectState;
|
|
|
import ui.model.DecoratedNetwork;
|
|
|
-import ui.model.MinimumModel;
|
|
|
+import ui.model.DecoratedState;
|
|
|
+import ui.model.DecoratedSwitch;
|
|
|
import ui.model.MinimumNetwork;
|
|
|
import ui.model.Model;
|
|
|
+import ui.model.Passiv;
|
|
|
import ui.model.Supplier;
|
|
|
|
|
|
|
|
@@ -42,193 +41,117 @@ import ui.model.Supplier;
|
|
|
|
|
|
public class Outliner extends JFrame {
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
- private JTree tree;
|
|
|
- DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
|
|
|
- DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
|
|
|
- DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
|
|
|
- DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
|
|
|
-
|
|
|
+ JTabbedPane tabbedPane = new JTabbedPane();
|
|
|
+ JPanel listPanel = new JPanel(new BorderLayout());
|
|
|
+ JPanel statePanel = new JPanel(new BorderLayout());
|
|
|
+ public boolean isClosed = false;
|
|
|
ArrayList<MinimumNetwork> list;
|
|
|
-
|
|
|
- Outliner(JFrame parentFrame, Model model, Control controller, GUI gui){
|
|
|
+ Outliner(JFrame parentFrame, Model model, Control controller, GUI gui, List<Outliner> outlinerList){
|
|
|
setBounds(0, 0, 400, parentFrame.getHeight());
|
|
|
this.setIconImage(Util.loadImage("/Images/Holeg.png", 30, 30));
|
|
|
this.setTitle("Outliner");
|
|
|
setLocationRelativeTo(parentFrame);
|
|
|
this.setVisible(true);
|
|
|
- JTabbedPane tabbedPane = new JTabbedPane();
|
|
|
- JPanel listPanel = createOutlinerListPanel(model, controller, gui);
|
|
|
- tabbedPane.addTab("List", listPanel);
|
|
|
- MinimumModel mm = new MinimumModel(model.getObjectsOnCanvas(), model.getEdgesOnCanvas());
|
|
|
- //set all working:
|
|
|
- for(CableWithState cable : mm.getEdgeList()) {
|
|
|
- cable.setState(CableState.Working);
|
|
|
- }
|
|
|
- list = CalculataModel.calculateNetworks(mm, model.getCurIteration(), null);
|
|
|
- JPanel networkPanel = createNetworkPanel();
|
|
|
- tabbedPane.addTab("Networks", networkPanel);
|
|
|
- ArrayList<DecoratedNetwork> computedList = new ArrayList<DecoratedNetwork>();
|
|
|
- for (MinimumNetwork net : list) {
|
|
|
- computedList.add(new DecoratedNetwork(net, model.getCurIteration()));
|
|
|
- }
|
|
|
- JPanel decoratedNetworkPanel = generateDecoratedNetworkPanel(computedList);
|
|
|
- tabbedPane.addTab("Computed Networks", decoratedNetworkPanel);
|
|
|
+ repaintWithDecoratedState(controller.getSimManager().getActualDecorState());
|
|
|
this.getContentPane().add(tabbedPane);
|
|
|
+ this.addWindowListener(new java.awt.event.WindowAdapter() {
|
|
|
+ @Override
|
|
|
+ public void windowClosing(java.awt.event.WindowEvent windowEvent) {
|
|
|
+ isClosed = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ tabbedPane.addTab("List", listPanel);
|
|
|
+ tabbedPane.addTab("State", statePanel);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private JPanel generateDecoratedNetworkPanel(ArrayList<DecoratedNetwork> computedList) {
|
|
|
- JPanel decoratedNetworkPanel = new JPanel(new BorderLayout());
|
|
|
- DefaultMutableTreeNode top = new DefaultMutableTreeNode();
|
|
|
- for (DecoratedNetwork dNet : computedList) {
|
|
|
- DefaultMutableTreeNode networkNode = new DefaultMutableTreeNode("Network");
|
|
|
- DefaultMutableTreeNode consumerListNode = new DefaultMutableTreeNode("ConsumerList");
|
|
|
- DefaultMutableTreeNode supplierListNode = new DefaultMutableTreeNode("SupplierList");
|
|
|
- if (!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
|
|
|
+ public void repaintWithDecoratedState(DecoratedState decoratedState) {
|
|
|
+ //tabbedPane.removeAll();
|
|
|
+ listPanel.removeAll();
|
|
|
+ statePanel.removeAll();
|
|
|
+ DefaultMutableTreeNode topListPanel = new DefaultMutableTreeNode();
|
|
|
+ DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
|
|
|
+ DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
|
|
|
+ DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
|
|
|
+ DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
|
|
|
+ topListPanel.add(objects);
|
|
|
+ topListPanel.add(switches);
|
|
|
+ topListPanel.add(nodes);
|
|
|
+ topListPanel.add(cables);
|
|
|
+ DefaultMutableTreeNode topStatePanel = new DefaultMutableTreeNode();
|
|
|
+
|
|
|
+ for(DecoratedSwitch dSwitch: decoratedState.getDecoratedSwitches()) {
|
|
|
+ switches.add(new DefaultMutableTreeNode(dSwitch.getModel().getName()));
|
|
|
+ }
|
|
|
+
|
|
|
+ for(CpsNode node: decoratedState.getNodeList()) {
|
|
|
+ nodes.add(new DefaultMutableTreeNode(node.getName()));
|
|
|
+ }
|
|
|
+
|
|
|
+ for(DecoratedNetwork dNet: decoratedState.getNetworkList()) {
|
|
|
+ DefaultMutableTreeNode network = new DefaultMutableTreeNode("Network");
|
|
|
+ if(!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
|
|
|
+ DefaultMutableTreeNode consumer = new DefaultMutableTreeNode("ConsumerList");
|
|
|
for (Consumer con : dNet.getConsumerList()) {
|
|
|
DefaultMutableTreeNode consumerNode = new ColoredTreeNode(con.toString(),con.getState().toString(), getStateColor(con.getState()) );
|
|
|
- for(Consumer.SupplierListEntry sup: con.getSupplierList())
|
|
|
- {
|
|
|
- consumerNode.add(new DefaultMutableTreeNode(sup.supplier.getModel().getName() + " Energy:" + sup.energyFromSupplier));
|
|
|
- }
|
|
|
- consumerListNode.add(consumerNode);
|
|
|
+ consumer.add(consumerNode);
|
|
|
+ objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
|
|
|
}
|
|
|
for (Consumer con : dNet.getConsumerSelfSuppliedList()) {
|
|
|
DefaultMutableTreeNode consumerNode = new DefaultMutableTreeNode(con.toString() + con.getState());
|
|
|
- for(Consumer.SupplierListEntry sup: con.getSupplierList())
|
|
|
- {
|
|
|
- consumerNode.add(new DefaultMutableTreeNode(sup.supplier.getModel().getName() + " Energy:" + sup.energyFromSupplier));
|
|
|
- }
|
|
|
- consumerListNode.add(consumerNode);
|
|
|
+ consumer.add(consumerNode);
|
|
|
+ objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
|
|
|
}
|
|
|
- networkNode.add(consumerListNode);
|
|
|
+ network.add(consumer);
|
|
|
}
|
|
|
- if (!dNet.getSupplierList().isEmpty()) {
|
|
|
- networkNode.add(supplierListNode);
|
|
|
+ if(!dNet.getSupplierList().isEmpty()) {
|
|
|
+ DefaultMutableTreeNode supplier = new DefaultMutableTreeNode("SupplierList");
|
|
|
for (Supplier sup : dNet.getSupplierList()) {
|
|
|
- supplierListNode.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(sup.getModel())));
|
|
|
+ supplier.add(new DefaultMutableTreeNode(sup.toString()));
|
|
|
+ objects.add(new DefaultMutableTreeNode(sup.getModel().getName()));
|
|
|
}
|
|
|
+ network.add(supplier);
|
|
|
}
|
|
|
- top.add(networkNode);
|
|
|
- }
|
|
|
- JTree networkTree = new JTree(top);
|
|
|
- signIconsForTree(networkTree);
|
|
|
- networkTree.setRootVisible(false);
|
|
|
- for (int i = 0; i < networkTree.getRowCount(); i++) {
|
|
|
- networkTree.expandRow(i);
|
|
|
- }
|
|
|
- JScrollPane listScroller = new JScrollPane(networkTree);
|
|
|
- decoratedNetworkPanel.add(listScroller);
|
|
|
- return decoratedNetworkPanel;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private JPanel createNetworkPanel() {
|
|
|
- JPanel networkPanel = new JPanel(new BorderLayout());
|
|
|
- DefaultMutableTreeNode top = new DefaultMutableTreeNode();
|
|
|
- for (MinimumNetwork net : list) {
|
|
|
- DefaultMutableTreeNode networkNode = new DefaultMutableTreeNode("Network");
|
|
|
- for (HolonObject hObject : net.getHolonObjectList()) {
|
|
|
- networkNode.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(hObject)));
|
|
|
+ for(Passiv pas: dNet.getPassivNoEnergyList()) {
|
|
|
+ objects.add(new DefaultMutableTreeNode(pas.getModel().getName()));
|
|
|
+ }
|
|
|
+ topStatePanel.add(network);
|
|
|
+ for(DecoratedCable cable : dNet.getDecoratedCableList()) {
|
|
|
+ cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
|
|
|
}
|
|
|
- top.add(networkNode);
|
|
|
}
|
|
|
-
|
|
|
- JTree networkTree = new JTree(top);
|
|
|
- signIconsForTree(networkTree);
|
|
|
- networkTree.setRootVisible(false);
|
|
|
- for (int i = 0; i < networkTree.getRowCount(); i++) {
|
|
|
- networkTree.expandRow(i);
|
|
|
+
|
|
|
+ for(DecoratedCable cable : decoratedState.getLeftOverEdges()) {
|
|
|
+ cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
|
|
|
}
|
|
|
- JScrollPane listScroller = new JScrollPane(networkTree);
|
|
|
- networkPanel.add(listScroller);
|
|
|
- return networkPanel;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private JPanel createOutlinerListPanel(Model model, Control controller, GUI gui) {
|
|
|
- JPanel contentPanel = new JPanel(new BorderLayout());
|
|
|
- DefaultMutableTreeNode top =new DefaultMutableTreeNode();
|
|
|
- DefaultTreeModel treeModel = new DefaultTreeModel(top);
|
|
|
- treeModel.addTreeModelListener(new MyTreeModelListener());
|
|
|
|
|
|
- createCategorys(top);
|
|
|
- popullateCategorys(model);
|
|
|
- tree = new JTree(treeModel);
|
|
|
- tree.setRootVisible(false);
|
|
|
- UpdateController updCon = new UpdateController(model, controller);
|
|
|
- tree.addTreeSelectionListener(tsl -> {
|
|
|
- if(tree.getSelectionPath() == null) return;
|
|
|
- DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tsl.getPath().getLastPathComponent();
|
|
|
- System.out.println(tsl.getPath().getPathCount());
|
|
|
- if(tsl.getPath().getPathCount() == 3) // 2 is Category 3 is ObjectIn Category
|
|
|
- {
|
|
|
- if(selectedNode.getParent().equals(objects))
|
|
|
- {
|
|
|
- AbstractCpsObjectInfo info = (AbstractCpsObjectInfo)selectedNode.getUserObject();
|
|
|
- //treeModel.nodeChanged(selectedNode);
|
|
|
-
|
|
|
- model.getSelectedCpsObjects().clear();
|
|
|
- controller.addSelectedObject(info.getAbstractCpsObject());
|
|
|
- if(info.getAbstractCpsObject() instanceof HolonObject)
|
|
|
- {
|
|
|
- HolonObject hO = (HolonObject) info.getAbstractCpsObject();
|
|
|
- System.out.println("HolonObject" + hO);
|
|
|
- System.out.println("getEnergyAtTimestep:" + hO.getEnergyAtTimeStep(0));
|
|
|
- System.out.println("getEnergyNeededFromConsumingElements:" + hO.getEnergyNeededFromConsumingElements(0));
|
|
|
- System.out.println("getEnergySelfProducing:" + hO.getEnergySelfProducingFromProducingElements(0));
|
|
|
- System.out.println("getMinimumConsumingElement:" + hO.getMinimumConsumingElement(0));
|
|
|
- System.out.println("countConsumingElements:" + hO.countConsumingElements(0));
|
|
|
- System.out.println("countProducingElements:" + hO.countProducingElements(0));
|
|
|
- }
|
|
|
- DefaulTable propertyTable = model.getPropertyTable();
|
|
|
- if (propertyTable.getRowCount() > 0) {
|
|
|
- for (int i = propertyTable.getRowCount() - 1; i > -1; i--) {
|
|
|
- propertyTable.removeRow(i);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- updCon.paintProperties(info.getAbstractCpsObject());
|
|
|
- updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
|
|
|
- updCon.refreshTableProperties(model.getPropertyTable());
|
|
|
- gui.getFrmCyberPhysical().repaint();
|
|
|
- }
|
|
|
- else if(selectedNode.getParent().equals(cables))
|
|
|
- {
|
|
|
- EdgeInfo info = (EdgeInfo)selectedNode.getUserObject();
|
|
|
- model.setSelectedEdge(info.getEdge());
|
|
|
- DefaulTable propertyTable = model.getPropertyTable();
|
|
|
- if (propertyTable.getRowCount() > 0) {
|
|
|
- for (int i = propertyTable.getRowCount() - 1; i > -1; i--) {
|
|
|
- propertyTable.removeRow(i);
|
|
|
- }
|
|
|
- }
|
|
|
- controller.setSelecteEdge(info.getEdge());
|
|
|
- //controller.setSelectedObjectID(0);
|
|
|
- updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
|
|
|
- updCon.refreshTableProperties(model.getPropertyTable());
|
|
|
- gui.getFrmCyberPhysical().repaint();
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- signIconsForTree(tree);
|
|
|
- for (int i = 0; i < tree.getRowCount(); i++) {
|
|
|
- tree.expandRow(i);
|
|
|
+
|
|
|
+ JTree listTree = new JTree(topListPanel);
|
|
|
+ signIconsForTree(listTree);
|
|
|
+ listTree.setRootVisible(false);
|
|
|
+ for (int i = 0; i < listTree.getRowCount(); i++) {
|
|
|
+ listTree.expandRow(i);
|
|
|
+ }
|
|
|
+ JScrollPane listScroller = new JScrollPane(listTree);
|
|
|
+ listPanel.add(listScroller);
|
|
|
+
|
|
|
+ JTree stateTree = new JTree(topStatePanel);
|
|
|
+ signIconsForTree(stateTree);
|
|
|
+ stateTree.setRootVisible(false);
|
|
|
+ for (int i = 0; i < stateTree.getRowCount(); i++) {
|
|
|
+ stateTree.expandRow(i);
|
|
|
}
|
|
|
- JScrollPane listScroller = new JScrollPane(tree);
|
|
|
- contentPanel.add(listScroller);
|
|
|
- return contentPanel;
|
|
|
+ statePanel.add(new JScrollPane(stateTree));
|
|
|
+
|
|
|
+ listPanel.revalidate();;
|
|
|
+ statePanel.revalidate();
|
|
|
+ listPanel.repaint();
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
private void signIconsForTree(JTree t) {
|
|
|
ImageIcon ClosedIcon = new ImageIcon(Util.loadImage("/Button_Images/Close.png",9,9));
|
|
|
ImageIcon OpenIcon = new ImageIcon(Util.loadImage("/Button_Images/Open.png",9,9));
|
|
@@ -242,32 +165,7 @@ public class Outliner extends JFrame {
|
|
|
t.setCellRenderer(renderer);
|
|
|
}
|
|
|
}
|
|
|
- private void createCategorys(DefaultMutableTreeNode top) {
|
|
|
- top.add(objects);
|
|
|
- top.add(cables);
|
|
|
- top.add(switches);
|
|
|
- top.add(nodes);
|
|
|
- }
|
|
|
- private void popullateCategorys(Model m)
|
|
|
- {
|
|
|
- m.defineLists();
|
|
|
- for(AbstractCpsObject aCps :m.getHolonObjectsOnCanvas())
|
|
|
- {
|
|
|
- objects.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(aCps)));
|
|
|
- }
|
|
|
- for(AbstractCpsObject aCps :m.getNodesOnCanvas())
|
|
|
- {
|
|
|
- nodes.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(aCps)));
|
|
|
- }
|
|
|
- for(AbstractCpsObject aCps :m.getSwitchsOnCanvas())
|
|
|
- {
|
|
|
- switches.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(aCps)));
|
|
|
- }
|
|
|
- for(CpsEdge edge :m.getEdgesOnCanvas())
|
|
|
- {
|
|
|
- cables.add(new DefaultMutableTreeNode(new EdgeInfo(edge)));
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
class MyTreeModelListener implements TreeModelListener {
|
|
|
|
|
|
@Override
|
|
@@ -295,33 +193,6 @@ public class Outliner extends JFrame {
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- /*
|
|
|
- *
|
|
|
- * case NO_ENERGY:
|
|
|
- stateColor = Color.WHITE;
|
|
|
- break;
|
|
|
-
|
|
|
- case NOT_SUPPLIED:
|
|
|
- stateColor = new Color(230, 120, 100);
|
|
|
- break;
|
|
|
-
|
|
|
- case SUPPLIED:
|
|
|
- stateColor = Color.GREEN;
|
|
|
- break;
|
|
|
-
|
|
|
- case PRODUCER:
|
|
|
- stateColor = Color.lightGray;
|
|
|
- break;
|
|
|
-
|
|
|
- case PARTIALLY_SUPPLIED:
|
|
|
- stateColor = Color.YELLOW;
|
|
|
- break;
|
|
|
-
|
|
|
- case OVER_SUPPLIED:
|
|
|
- // find different purple-tones at
|
|
|
- // http://www.rapidtables.com/web/color/purple-color.htm
|
|
|
- stateColor = new Color(138, 43, 226);
|
|
|
- */
|
|
|
private Color getStateColor(HolonObjectState state) {
|
|
|
switch(state) {
|
|
|
case NOT_SUPPLIED:
|
|
@@ -376,18 +247,4 @@ public class Outliner extends JFrame {
|
|
|
return aCps;
|
|
|
}
|
|
|
}
|
|
|
- class EdgeInfo {
|
|
|
- private CpsEdge aEdge;
|
|
|
- EdgeInfo(CpsEdge aEdge){
|
|
|
- this.aEdge = aEdge;
|
|
|
- }
|
|
|
- @Override
|
|
|
- public String toString(){
|
|
|
- return aEdge.toString();
|
|
|
- }
|
|
|
- public CpsEdge getEdge()
|
|
|
- {
|
|
|
- return aEdge;
|
|
|
- }
|
|
|
- }
|
|
|
}
|