|
@@ -7,6 +7,7 @@ import java.awt.FlowLayout;
|
|
import java.awt.GridBagConstraints;
|
|
import java.awt.GridBagConstraints;
|
|
import java.awt.GridBagLayout;
|
|
import java.awt.GridBagLayout;
|
|
import java.awt.Insets;
|
|
import java.awt.Insets;
|
|
|
|
+import java.awt.Rectangle;
|
|
import java.awt.Dialog.ModalityType;
|
|
import java.awt.Dialog.ModalityType;
|
|
import java.awt.Dimension;
|
|
import java.awt.Dimension;
|
|
import java.awt.event.ItemEvent;
|
|
import java.awt.event.ItemEvent;
|
|
@@ -87,6 +88,7 @@ public class FlexWindow extends JFrame {
|
|
private DefaultTreeModel treeModel;
|
|
private DefaultTreeModel treeModel;
|
|
private FlexManager flexmanager;
|
|
private FlexManager flexmanager;
|
|
|
|
|
|
|
|
+ //FlexToFlexWrapper()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -103,7 +105,7 @@ public class FlexWindow extends JFrame {
|
|
isClosed = true;
|
|
isClosed = true;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- selectAll();
|
|
|
|
|
|
+ updateSelectedPanel();
|
|
//this.pack();
|
|
//this.pack();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -119,7 +121,7 @@ public class FlexWindow extends JFrame {
|
|
createNothingSelectedPanel();
|
|
createNothingSelectedPanel();
|
|
createSelectedPanel();
|
|
createSelectedPanel();
|
|
createUsageViewPanel();
|
|
createUsageViewPanel();
|
|
- contentPanel.addTab("Settings", nothingSelectedPanel);
|
|
|
|
|
|
+ contentPanel.addTab("Overview", nothingSelectedPanel);
|
|
contentPanel.addTab("Order", usageViewPanel);
|
|
contentPanel.addTab("Order", usageViewPanel);
|
|
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
|
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
|
this.setContentPane(contentPanel);
|
|
this.setContentPane(contentPanel);
|
|
@@ -131,11 +133,8 @@ public class FlexWindow extends JFrame {
|
|
JMenuBar menuBar = new JMenuBar();
|
|
JMenuBar menuBar = new JMenuBar();
|
|
JMenu canvas = new JMenu("Canvas");
|
|
JMenu canvas = new JMenu("Canvas");
|
|
menuBar.add(canvas);
|
|
menuBar.add(canvas);
|
|
- JMenuItem selectAllMenuItem = new JMenuItem("Select All");
|
|
|
|
- selectAllMenuItem.addActionListener(clicked -> selectAll());
|
|
|
|
- canvas.add(selectAllMenuItem);
|
|
|
|
JMenuItem updateMenuItem = new JMenuItem("Update");
|
|
JMenuItem updateMenuItem = new JMenuItem("Update");
|
|
- updateMenuItem.addActionListener(clicked -> selectedCpsObjectsChanged());
|
|
|
|
|
|
+ updateMenuItem.addActionListener(clicked -> updateSelectedPanel());
|
|
canvas.add(updateMenuItem);
|
|
canvas.add(updateMenuItem);
|
|
JMenu flex = new JMenu("Flex");
|
|
JMenu flex = new JMenu("Flex");
|
|
menuBar.add(flex);
|
|
menuBar.add(flex);
|
|
@@ -150,11 +149,6 @@ public class FlexWindow extends JFrame {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- private void selectAll() {
|
|
|
|
- model.getSelectedCpsObjects().clear();
|
|
|
|
- model.getSelectedCpsObjects().addAll(model.getObjectsOnCanvas());
|
|
|
|
- selectedCpsObjectsChanged();
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
private void createUsageViewPanel() {
|
|
private void createUsageViewPanel() {
|
|
@@ -290,7 +284,8 @@ public class FlexWindow extends JFrame {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- public void updateFlexOrderMenu() {
|
|
|
|
|
|
+ public void update() {
|
|
|
|
+ updateSelectedPanel();
|
|
createUsageViewPanel();
|
|
createUsageViewPanel();
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Order"), usageViewPanel);
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Order"), usageViewPanel);
|
|
contentPanel.revalidate();
|
|
contentPanel.revalidate();
|
|
@@ -304,7 +299,79 @@ public class FlexWindow extends JFrame {
|
|
listOfAllSelectedHolonObjects = new DefaultMutableTreeNode("HolonObjects");
|
|
listOfAllSelectedHolonObjects = new DefaultMutableTreeNode("HolonObjects");
|
|
treeModel = new DefaultTreeModel(listOfAllSelectedHolonObjects);
|
|
treeModel = new DefaultTreeModel(listOfAllSelectedHolonObjects);
|
|
stateTree = new JTree(treeModel);
|
|
stateTree = new JTree(treeModel);
|
|
- stateTree.setComponentPopupMenu(new PopUpDemo(stateTree, treeModel));
|
|
|
|
|
|
+ stateTree.addMouseListener ( new MouseAdapter ()
|
|
|
|
+ {
|
|
|
|
+ public void mousePressed ( MouseEvent e )
|
|
|
|
+ {
|
|
|
|
+ if ( SwingUtilities.isRightMouseButton ( e ) )
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ TreePath pathUnderCursor = stateTree.getPathForLocation ( e.getX (), e.getY () );
|
|
|
|
+ Rectangle pathBounds = stateTree.getUI ().getPathBounds ( stateTree, pathUnderCursor );
|
|
|
|
+ if ( pathBounds != null && pathBounds.contains ( e.getX (), e.getY () ) )
|
|
|
|
+ {
|
|
|
|
+ TreePath[] selectedPaths = stateTree.getSelectionPaths();
|
|
|
|
+ if(selectedPaths == null) {
|
|
|
|
+ stateTree.addSelectionPath(pathUnderCursor);
|
|
|
|
+ }else {
|
|
|
|
+ boolean isInselectedPaths = false;
|
|
|
|
+ for (TreePath path : stateTree.getSelectionPaths()) {
|
|
|
|
+ if(path.equals(pathUnderCursor)) {
|
|
|
|
+ isInselectedPaths = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(!isInselectedPaths) {
|
|
|
|
+ stateTree.clearSelection();
|
|
|
|
+ stateTree.addSelectionPath(pathUnderCursor);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ JPopupMenu menu = new JPopupMenu ();
|
|
|
|
+ JMenuItem priorityItem = new JMenuItem("EditPriorities");
|
|
|
|
+ JMenuItem flexItem = new JMenuItem("AddFlex");
|
|
|
|
+
|
|
|
|
+ priorityItem.addActionListener(clicked -> {
|
|
|
|
+ Priority prio = null;
|
|
|
|
+ if (stateTree.getSelectionPaths() != null)
|
|
|
|
+ for (TreePath path : stateTree.getSelectionPaths()) {
|
|
|
|
+ Object treeNodeUserObject = ((DefaultMutableTreeNode) path.getLastPathComponent())
|
|
|
|
+ .getUserObject();
|
|
|
|
+ if (treeNodeUserObject instanceof ElementInfo) {
|
|
|
|
+ if (prio == null)
|
|
|
|
+ prio = (Priority) JOptionPane.showInputDialog(stateTree,
|
|
|
|
+ "Select the Priority:", "Priority?", JOptionPane.OK_OPTION,
|
|
|
|
+ new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)),
|
|
|
|
+ Priority.values(), "");
|
|
|
|
+ if (prio == null)
|
|
|
|
+ break;
|
|
|
|
+ ElementInfo eleInfo = (ElementInfo) treeNodeUserObject;
|
|
|
|
+ eleInfo.ele.setPriority(prio);
|
|
|
|
+ treeModel.reload((DefaultMutableTreeNode) path.getLastPathComponent());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ flexItem.addActionListener(clicked -> {
|
|
|
|
+ TreePath path = stateTree.getSelectionPath();
|
|
|
|
+ if (path == null)
|
|
|
|
+ return;
|
|
|
|
+ Object treeNodeUserObject = ((DefaultMutableTreeNode) path.getLastPathComponent())
|
|
|
|
+ .getUserObject();
|
|
|
|
+ if (!(treeNodeUserObject instanceof ElementInfo))
|
|
|
|
+ return;
|
|
|
|
+ createAddDialog(((ElementInfo) treeNodeUserObject).ele);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ menu.add ( priorityItem );
|
|
|
|
+ menu.add ( flexItem );
|
|
|
|
+ menu.show ( stateTree, pathBounds.x, pathBounds.y + pathBounds.height );
|
|
|
|
+ }else {
|
|
|
|
+ JPopupMenu menu = new JPopupMenu ();
|
|
|
|
+ menu.add ( new JMenuItem ( "Other Test" ) );
|
|
|
|
+ menu.show ( stateTree, e.getX(), e.getY() );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } );
|
|
selectedPanel = new JPanel(new BorderLayout());
|
|
selectedPanel = new JPanel(new BorderLayout());
|
|
selectedPanel.add(new JScrollPane(stateTree));
|
|
selectedPanel.add(new JScrollPane(stateTree));
|
|
}
|
|
}
|
|
@@ -313,7 +380,7 @@ public class FlexWindow extends JFrame {
|
|
private void createNothingSelectedPanel() {
|
|
private void createNothingSelectedPanel() {
|
|
nothingSelectedPanel = new JPanel();
|
|
nothingSelectedPanel = new JPanel();
|
|
nothingSelectedPanel.setLayout(new BoxLayout(nothingSelectedPanel, BoxLayout.PAGE_AXIS));
|
|
nothingSelectedPanel.setLayout(new BoxLayout(nothingSelectedPanel, BoxLayout.PAGE_AXIS));
|
|
- JLabel nothingSelectedTextLabel = new JLabel("No HolonObject selected.");
|
|
|
|
|
|
+ JLabel nothingSelectedTextLabel = new JLabel("No HolonObject exist.");
|
|
nothingSelectedTextLabel.setForeground(Color.gray);
|
|
nothingSelectedTextLabel.setForeground(Color.gray);
|
|
nothingSelectedTextLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
|
nothingSelectedTextLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
|
nothingSelectedPanel.add(Box.createVerticalGlue());
|
|
nothingSelectedPanel.add(Box.createVerticalGlue());
|
|
@@ -321,18 +388,13 @@ public class FlexWindow extends JFrame {
|
|
nothingSelectedPanel.add(Box.createVerticalGlue());
|
|
nothingSelectedPanel.add(Box.createVerticalGlue());
|
|
}
|
|
}
|
|
|
|
|
|
- public void selectedCpsObjectsChanged() {
|
|
|
|
- updateFlexOrderMenu();
|
|
|
|
- if(model.getSelectedCpsObjects().isEmpty()) {
|
|
|
|
- contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), nothingSelectedPanel);
|
|
|
|
- contentPanel.revalidate();
|
|
|
|
- //this.revalidate();
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ public void updateSelectedPanel() {
|
|
|
|
+ //UpdateFlexManager
|
|
|
|
+ flexmanager = controller.getSimManager().getActualFlexManager();
|
|
|
|
|
|
listOfAllSelectedHolonObjects.removeAllChildren();
|
|
listOfAllSelectedHolonObjects.removeAllChildren();
|
|
//Init with HolonObjects
|
|
//Init with HolonObjects
|
|
- for(AbstractCanvasObject aCps: model.getSelectedCpsObjects()) {
|
|
|
|
|
|
+ for(AbstractCanvasObject aCps: model.getObjectsOnCanvas()) {
|
|
DefaultMutableTreeNode newObjectChild = new DefaultMutableTreeNode(aCps.getName() + " ID:" + aCps.getId());
|
|
DefaultMutableTreeNode newObjectChild = new DefaultMutableTreeNode(aCps.getName() + " ID:" + aCps.getId());
|
|
if(aCps instanceof HolonObject) expandTreeHolonObject((HolonObject)aCps, newObjectChild);
|
|
if(aCps instanceof HolonObject) expandTreeHolonObject((HolonObject)aCps, newObjectChild);
|
|
if(aCps instanceof GroupNode)expandTreeUpperNode((GroupNode)aCps, newObjectChild);
|
|
if(aCps instanceof GroupNode)expandTreeUpperNode((GroupNode)aCps, newObjectChild);
|
|
@@ -341,15 +403,6 @@ public class FlexWindow extends JFrame {
|
|
treeModel.nodeStructureChanged(listOfAllSelectedHolonObjects);
|
|
treeModel.nodeStructureChanged(listOfAllSelectedHolonObjects);
|
|
|
|
|
|
stateTree.revalidate();
|
|
stateTree.revalidate();
|
|
-// stateTree.addMouseListener(new MouseAdapter() {
|
|
|
|
-//
|
|
|
|
-// @Override
|
|
|
|
-// public void mousePressed(MouseEvent e) {
|
|
|
|
-// System.out.println("MouseEvent");
|
|
|
|
-// if (!SwingUtilities.isRightMouseButton(e)) return;
|
|
|
|
-//
|
|
|
|
-// }
|
|
|
|
-// });
|
|
|
|
expandAll(stateTree);
|
|
expandAll(stateTree);
|
|
selectedPanel.revalidate();
|
|
selectedPanel.revalidate();
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), selectedPanel);
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), selectedPanel);
|
|
@@ -389,7 +442,13 @@ public class FlexWindow extends JFrame {
|
|
}
|
|
}
|
|
private void expandTreeFlex(HolonElement hElement, DefaultMutableTreeNode root) {
|
|
private void expandTreeFlex(HolonElement hElement, DefaultMutableTreeNode root) {
|
|
for(Flexibility flex: hElement.flexList) {
|
|
for(Flexibility flex: hElement.flexList) {
|
|
- DefaultMutableTreeNode newChild = new DefaultMutableTreeNode("<html>"+"Flex: "+ "<b>" + flex.name+ "</b>" + "</html>");
|
|
|
|
|
|
+ FlexWrapper flexWrapper = this.flexmanager.getFlexWrapperFromFlexibility(flex);
|
|
|
|
+ String flexState = "";
|
|
|
|
+ if(flexWrapper != null) {
|
|
|
|
+ Color color = this.FlexStateToColor(flexWrapper.getState());
|
|
|
|
+ flexState = "<font bgcolor='#" + Integer.toHexString(color.getRGB()).substring(2) + "'>" + flexWrapper.getState().name() + "</font>";
|
|
|
|
+ }
|
|
|
|
+ DefaultMutableTreeNode newChild = new DefaultMutableTreeNode("<html>"+ flexState + " <b>" + flex.name+ "</b>" + "</html>");
|
|
root.add(newChild);
|
|
root.add(newChild);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -413,10 +472,9 @@ public class FlexWindow extends JFrame {
|
|
|
|
|
|
Flexibility toDeleteFlex =(Flexibility) JOptionPane.showInputDialog(this, "Select to Delete Flexibility:", "Flexibility?", JOptionPane.OK_OPTION,new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) , allFlexes, "");
|
|
Flexibility toDeleteFlex =(Flexibility) JOptionPane.showInputDialog(this, "Select to Delete Flexibility:", "Flexibility?", JOptionPane.OK_OPTION,new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) , allFlexes, "");
|
|
if(toDeleteFlex != null) {
|
|
if(toDeleteFlex != null) {
|
|
- System.out.println("ToDelete:" + toDeleteFlex);
|
|
|
|
toDeleteFlex.getElement().flexList.remove(toDeleteFlex);
|
|
toDeleteFlex.getElement().flexList.remove(toDeleteFlex);
|
|
controller.getSimManager().calculateStateForTimeStep(model.getCurIteration(), true);
|
|
controller.getSimManager().calculateStateForTimeStep(model.getCurIteration(), true);
|
|
- selectedCpsObjectsChanged();
|
|
|
|
|
|
+ updateSelectedPanel();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -476,7 +534,6 @@ public class FlexWindow extends JFrame {
|
|
|
|
|
|
holonObjectSelector.addItemListener(aListener -> {
|
|
holonObjectSelector.addItemListener(aListener -> {
|
|
if(aListener.getStateChange() == ItemEvent.SELECTED) {
|
|
if(aListener.getStateChange() == ItemEvent.SELECTED) {
|
|
- System.out.println("Selected");
|
|
|
|
DefaultComboBoxModel<HolonElement> newComboBoxModelElements = new DefaultComboBoxModel<HolonElement>( ((HolonObject) aListener.getItem()).getElements().stream().toArray(size -> new HolonElement[size]));
|
|
DefaultComboBoxModel<HolonElement> newComboBoxModelElements = new DefaultComboBoxModel<HolonElement>( ((HolonObject) aListener.getItem()).getElements().stream().toArray(size -> new HolonElement[size]));
|
|
holonElementSelector.setModel(newComboBoxModelElements);
|
|
holonElementSelector.setModel(newComboBoxModelElements);
|
|
}
|
|
}
|
|
@@ -639,8 +696,9 @@ public class FlexWindow extends JFrame {
|
|
|
|
|
|
|
|
|
|
//if(!model.getSelectedCpsObjects().contains(holonObjectSelector.getSelectedItem()))model.getSelectedCpsObjects().add((AbstractCpsObject)holonObjectSelector.getSelectedItem());
|
|
//if(!model.getSelectedCpsObjects().contains(holonObjectSelector.getSelectedItem()))model.getSelectedCpsObjects().add((AbstractCpsObject)holonObjectSelector.getSelectedItem());
|
|
- controller.getSimManager().calculateStateForTimeStep(model.getCurIteration(), false);
|
|
|
|
- selectedCpsObjectsChanged();
|
|
|
|
|
|
+ controller.getSimManager().calculateStateForTimeStep(model.getCurIteration(), true);
|
|
|
|
+
|
|
|
|
+ update();
|
|
addDialog.dispose();
|
|
addDialog.dispose();
|
|
});
|
|
});
|
|
buttonPanel.add(createFlexButton);
|
|
buttonPanel.add(createFlexButton);
|
|
@@ -657,46 +715,6 @@ public class FlexWindow extends JFrame {
|
|
addDialog.setVisible(true);
|
|
addDialog.setVisible(true);
|
|
}
|
|
}
|
|
|
|
|
|
- class PopUpDemo extends JPopupMenu {
|
|
|
|
- JMenuItem priorityItem = new JMenuItem("EditPriorities");
|
|
|
|
- JMenuItem flexItem = new JMenuItem("AddFlex");
|
|
|
|
- public PopUpDemo(JTree jTree, DefaultTreeModel model) {
|
|
|
|
- priorityItem.addActionListener( clicked -> {
|
|
|
|
- TreePath[] paths = jTree.getSelectionPaths();
|
|
|
|
- if(paths == null) {
|
|
|
|
- jTree.setSelectionInterval(0, jTree.getRowCount());
|
|
|
|
- paths = jTree.getSelectionPaths();
|
|
|
|
- }
|
|
|
|
- Priority prio = null;
|
|
|
|
- for (TreePath path : paths) {
|
|
|
|
- Object treeNodeUserObject = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject();
|
|
|
|
- if(treeNodeUserObject instanceof ElementInfo)
|
|
|
|
- {
|
|
|
|
- if(prio == null) prio = makePriorityDialog();
|
|
|
|
- if(prio == null) break;
|
|
|
|
- ElementInfo eleInfo = (ElementInfo)treeNodeUserObject;
|
|
|
|
- eleInfo.ele.setPriority(prio);
|
|
|
|
- model.reload((DefaultMutableTreeNode)path.getLastPathComponent());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- flexItem.addActionListener( clicked -> {
|
|
|
|
- TreePath path = jTree.getSelectionPath();
|
|
|
|
- if(path == null) return;
|
|
|
|
- Object treeNodeUserObject = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject();
|
|
|
|
- if(!(treeNodeUserObject instanceof ElementInfo)) return;
|
|
|
|
- createAddDialog(((ElementInfo)treeNodeUserObject).ele);
|
|
|
|
- });
|
|
|
|
- add(priorityItem);
|
|
|
|
- add(flexItem);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- private Priority makePriorityDialog() {
|
|
|
|
- return (Priority) JOptionPane.showInputDialog(this, "Select the Priority:", "Priority?", JOptionPane.OK_OPTION,new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) , Priority.values(), "");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
class ElementInfo {
|
|
class ElementInfo {
|
|
HolonElement ele;
|
|
HolonElement ele;
|
|
@@ -709,6 +727,20 @@ public class FlexWindow extends JFrame {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+ public Color FlexStateToColor(FlexState state) {
|
|
|
|
+ switch(state) {
|
|
|
|
+ case IN_USE:
|
|
|
|
+ return new Color(173,247,182);
|
|
|
|
+ case NOT_OFFERED:
|
|
|
|
+ return new Color(252,245,199);
|
|
|
|
+ case OFFERED:
|
|
|
|
+ return new Color(160,206,217);
|
|
|
|
+ case ON_COOLDOWN:
|
|
|
|
+ return new Color(255,238,147);
|
|
|
|
+ case UNAVAILABLE:
|
|
|
|
+ default:
|
|
|
|
+ return new Color(255,192,159);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|