123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- package ui.view;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Component;
- import java.util.ArrayList;
- import javax.swing.ImageIcon;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTabbedPane;
- import javax.swing.JTree;
- 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 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.DecoratedHolonObject.HolonObjectState;
- import ui.model.DecoratedNetwork;
- import ui.model.MinimumModel;
- import ui.model.MinimumNetwork;
- import ui.model.Model;
- 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");
-
- ArrayList<MinimumNetwork> list;
-
- Outliner(JFrame parentFrame, Model model, Control controller, GUI gui){
- 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);
- this.getContentPane().add(tabbedPane);
- }
- 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()) {
- 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);
- }
- 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);
- }
- networkNode.add(consumerListNode);
- }
- if (!dNet.getSupplierList().isEmpty()) {
- networkNode.add(supplierListNode);
- for (Supplier sup : dNet.getSupplierList()) {
- supplierListNode.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(sup.getModel())));
- }
- }
- 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)));
- }
- 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);
- 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);
- }
- JScrollPane listScroller = new JScrollPane(tree);
- contentPanel.add(listScroller);
- return contentPanel;
- }
- 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));
- ImageIcon LeafIcon = new ImageIcon(Util.loadImage("/Button_Images/Leaf.png",9,9));
- if (ClosedIcon != null && OpenIcon != null && LeafIcon!= null) {
- DefaultTreeCellRenderer renderer =
- new DefaultTreeCellRenderer();
- renderer.setClosedIcon(ClosedIcon);
- renderer.setOpenIcon(OpenIcon);
- renderer.setLeafIcon(LeafIcon);
- 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
- public void treeNodesChanged(TreeModelEvent tmE) {
- // TODO Auto-generated method stub
- System.out.println("treeNodesChanged");
- }
- @Override
- public void treeNodesInserted(TreeModelEvent tmE) {
- // TODO Auto-generated method stub
- System.out.println("treeNodesInserted");
- }
- @Override
- public void treeNodesRemoved(TreeModelEvent tmE) {
- // TODO Auto-generated method stub
- System.out.println("treeNodesRemoved");
- }
- @Override
- public void treeStructureChanged(TreeModelEvent tmE) {
- // TODO Auto-generated method stub
- System.out.println("treeStructureChanged");
- }
-
- }
- /*
- *
- * 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:
- return new Color(230, 120, 100);
- case NO_ENERGY:
- return Color.WHITE;
- case OVER_SUPPLIED:
- return new Color(138, 43, 226);
- case PARTIALLY_SUPPLIED:
- return Color.YELLOW;
- case PRODUCER:
- return Color.lightGray;
- case SUPPLIED:
- return Color.GREEN;
- default:
- return null;
- }
- }
-
-
- @SuppressWarnings("serial")
- class ColoredTreeNode extends DefaultMutableTreeNode{
- private Color color;
- public ColoredTreeNode(String string, String state, Color color) {
- //"<html>Some text <font color='red'>" + "bla" + "some text in red</font></html>"
- //Integer.toHexString(color.getRGB()).substring(2)
- //String c = string + "<html><font bgcolor='#132122'>" + state +"</font></html>";
- super(( "<html>" + string + "<font bgcolor='#" + Integer.toHexString(color.getRGB()).substring(2) + "'>" + state +"</font></html>"));
- //this.color = color;
- }
- public Color getColor(){
- return color;
- }
- public void setColor(Color color) {
- this.color = color;
- }
-
- }
-
- class AbstractCpsObjectInfo {
- private AbstractCpsObject aCps;
- AbstractCpsObjectInfo(AbstractCpsObject aCps){
- this.aCps = aCps;
- }
- @Override
- public String toString(){
- return aCps.getName() + " Id:"+ aCps.getId();
- }
-
- public AbstractCpsObject getAbstractCpsObject()
- {
- 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;
- }
- }
- }
|