123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487 |
- package ui.view;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.FlowLayout;
- import java.awt.Dialog.ModalityType;
- import java.awt.event.ItemEvent;
- import java.awt.image.BufferedImage;
- import java.math.RoundingMode;
- import java.text.NumberFormat;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Locale;
- import javax.swing.BorderFactory;
- import javax.swing.Box;
- import javax.swing.BoxLayout;
- import javax.swing.DefaultComboBoxModel;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JCheckBox;
- import javax.swing.JComboBox;
- import javax.swing.JDialog;
- import javax.swing.JFormattedTextField;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTabbedPane;
- import javax.swing.JTree;
- import javax.swing.border.EmptyBorder;
- import javax.swing.text.NumberFormatter;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.DefaultTreeModel;
- import classes.AbstractCpsObject;
- import classes.CpsUpperNode;
- import classes.Flexibility;
- import classes.HolonElement;
- import classes.HolonObject;
- import ui.model.Model;
- public class FlexWindow extends JFrame {
- private JPanel nothingSelectedPanel;
- private JPanel selectedPanel;
-
-
- private JTabbedPane contentPanel = new JTabbedPane();
- private JPanel usageViewPanel;
-
- private Model model;
-
-
-
- //Flexibility Intermediate
- private Flexibility intermediateFlex = new Flexibility(null);
- private boolean offered = true, onConstrain = true, offConstrain =false;
-
-
-
- //JTree
- private DefaultMutableTreeNode listOfAllSelectedHolonObjects;
- private JTree stateTree;
- private DefaultTreeModel treeModel;
-
-
-
-
- public FlexWindow(JFrame parentFrame, Model model){
- this.intermediateFlex.name = "name";
- //InitWindow
- createMenuBar();
- initWindowPanel(parentFrame);
- this.model = model;
- selectedCpsObjectsChanged();
- System.out.println("Ich wurde erstellt.");
- //this.pack();
- }
- private void initWindowPanel(JFrame parentFrame) {
- this.setBounds(0, 0, 400, parentFrame.getHeight()>20?parentFrame.getHeight()- 20:parentFrame.getHeight());
- this.setIconImage(Util.loadImage("/Images/Holeg.png", 30, 30));
- this.setTitle("Flexibility");
- this.setLocationRelativeTo(parentFrame);
- this.setVisible(true);
-
- createNothingSelectedPanel();
- createSelectedPanel();
- createUsageViewPanel();
- contentPanel.addTab("Settings", nothingSelectedPanel);
- contentPanel.addTab("Order", usageViewPanel);
- contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
- this.setContentPane(contentPanel);
- this.revalidate();
-
- }
- private void createMenuBar(){
- JMenuBar menuBar = new JMenuBar();
- JMenu canvas = new JMenu("Canvas");
- menuBar.add(canvas);
- JMenuItem selectAllMenuItem = new JMenuItem("Select All");
- selectAllMenuItem.addActionListener(clicked -> selectAll());
- canvas.add(selectAllMenuItem);
- JMenuItem updateMenuItem = new JMenuItem("Update");
- updateMenuItem.addActionListener(clicked -> selectedCpsObjectsChanged());
- canvas.add(updateMenuItem);
- JMenu flex = new JMenu("Flex");
- menuBar.add(flex);
- JMenuItem addMenuItem = new JMenuItem("Add Flexibility");
- addMenuItem.addActionListener(clicked -> createAddDialog());
- flex.add(addMenuItem);
- JMenuItem deleteMenuItem = new JMenuItem("Delete Flexibility");
- deleteMenuItem.addActionListener(clicked -> createDeleteDialog());
- flex.add(deleteMenuItem);
-
- this.setJMenuBar(menuBar);
- }
-
-
- private void selectAll() {
- model.getSelectedCpsObjects().clear();
- model.getSelectedCpsObjects().addAll(model.getObjectsOnCanvas());
- selectedCpsObjectsChanged();
- }
-
- private void createUsageViewPanel() {
- usageViewPanel = new JPanel();
- usageViewPanel.setLayout(new BoxLayout(usageViewPanel, BoxLayout.PAGE_AXIS));
- usageViewPanel.add(new JLabel("Test bla"));
- addFlexToUsageView(this.intermediateFlex);
- addFlexToUsageView(this.intermediateFlex);
- addFlexToUsageView(this.intermediateFlex);
- addFlexToUsageView(this.intermediateFlex);
- addFlexToUsageView(this.intermediateFlex);
- }
-
- private void addFlexToUsageView(Flexibility flex) {
- JPanel newFlexRow = new JPanel(new FlowLayout( FlowLayout.CENTER));
- newFlexRow.add(new JLabel(flex.name));
- JButton useFlexButton = new JButton("Use Flex");
- useFlexButton.addActionListener(clicked ->{
- System.out.println("Use Flex button pressed");
- });
- newFlexRow.add(useFlexButton);
-
- usageViewPanel.add(newFlexRow);
- }
-
- private void createSelectedPanel() {
- //Liste aller Flexibilities
- listOfAllSelectedHolonObjects = new DefaultMutableTreeNode("HolonObjects");
- treeModel = new DefaultTreeModel(listOfAllSelectedHolonObjects);
- stateTree = new JTree(treeModel);
- selectedPanel = new JPanel(new BorderLayout());
- selectedPanel.add(new JScrollPane(stateTree));
- }
- private void createNothingSelectedPanel() {
- nothingSelectedPanel = new JPanel();
- nothingSelectedPanel.setLayout(new BoxLayout(nothingSelectedPanel, BoxLayout.PAGE_AXIS));
- JLabel nothingSelectedTextLabel = new JLabel("No HolonObject selected.");
- nothingSelectedTextLabel.setForeground(Color.gray);
- nothingSelectedTextLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
- nothingSelectedPanel.add(Box.createVerticalGlue());
- nothingSelectedPanel.add(nothingSelectedTextLabel);
- nothingSelectedPanel.add(Box.createVerticalGlue());
- }
-
- public void selectedCpsObjectsChanged() {
- if(model.getSelectedCpsObjects().isEmpty()) {
- contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), nothingSelectedPanel);
- contentPanel.revalidate();
- //this.revalidate();
- return;
- }
-
- listOfAllSelectedHolonObjects.removeAllChildren();
- //Init with HolonObjects
- for(AbstractCpsObject aCps: model.getSelectedCpsObjects()) {
- DefaultMutableTreeNode newObjectChild = new DefaultMutableTreeNode(aCps.getName());
- if(aCps instanceof HolonObject) expandTreeHolonObject((HolonObject)aCps, newObjectChild);
- if(aCps instanceof CpsUpperNode)expandTreeUpperNode((CpsUpperNode)aCps, newObjectChild);
- listOfAllSelectedHolonObjects.add(newObjectChild);
- System.out.println("Added: " + aCps.getName());
- }
- treeModel.nodeStructureChanged(listOfAllSelectedHolonObjects);
- stateTree.revalidate();
- expandAll(stateTree);
- selectedPanel.revalidate();
- contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), selectedPanel);
- contentPanel.revalidate();
- this.revalidate();
- }
- private void expandAll(JTree tree) {
- for(int i = 0; i< tree.getRowCount() ; i++) {
- tree.expandRow(i);
- }
-
- }
- private void expandTreeUpperNode(CpsUpperNode groupNode, DefaultMutableTreeNode root) {
- for(AbstractCpsObject aCps: groupNode.getNodes()) {
- DefaultMutableTreeNode newObjectChild = new DefaultMutableTreeNode(aCps.getName());
- if(aCps instanceof HolonObject) expandTreeHolonObject((HolonObject)aCps, newObjectChild);
- if(aCps instanceof CpsUpperNode)expandTreeUpperNode((CpsUpperNode)aCps, newObjectChild);
- root.add(newObjectChild);
- }
-
- }
- private void expandTreeHolonObject(HolonObject hObject, DefaultMutableTreeNode root) {
- for(HolonElement hElement: hObject.getElements()) {
- DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(hElement.getEleName());
- expandTreeFlex(hElement, newChild);
- root.add(newChild);
- }
- }
- private void expandTreeFlex(HolonElement hElement, DefaultMutableTreeNode root) {
- for(Flexibility flex: hElement.flexList) {
- DefaultMutableTreeNode newChild = new DefaultMutableTreeNode("<html>"+"Flex: "+ "<b>" + flex.name+ "</b>" + "</html>");
- root.add(newChild);
- }
- }
-
-
- private void createDeleteDialog() {
-
- List<HolonObject> list= createListOfHolonObjects(model.getObjectsOnCanvas());
-
- //String test = list.stream().map(Object::toString).collect(Collectors.joining(","));
- Object[] allFlexes = list.stream().flatMap(hObject -> hObject.getElements().stream()).flatMap(hElement -> hElement.flexList.stream()).toArray(size -> new Flexibility[size]);
- if(allFlexes.length == 0) {
- JOptionPane.showMessageDialog(this,
- "No Flexibility exist.",
- "Warning",
- JOptionPane.WARNING_MESSAGE);
- return;
- }
-
-
-
- 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) {
- System.out.println("ToDelete:" + toDeleteFlex);
- toDeleteFlex.getElement().flexList.remove(toDeleteFlex);
- selectedCpsObjectsChanged();
- }
- }
-
-
-
- private List<HolonObject> createListOfHolonObjects(List<AbstractCpsObject> objectsOnCanvas) {
- List<HolonObject> list = new ArrayList<HolonObject>();
- for(AbstractCpsObject aCps : objectsOnCanvas) {
- if(aCps instanceof HolonObject) list.add((HolonObject) aCps);
- else list.addAll(createListOfHolonObjects(((CpsUpperNode)aCps).getNodes()));
- }
- return list;
- }
- //Add Element
- private void createAddDialog(){
- if(model.getObjectsOnCanvas().isEmpty()) {
- JOptionPane.showMessageDialog(this,
- "No HolonObject exist.",
- "Warning",
- JOptionPane.WARNING_MESSAGE);
- return;
- }
- JDialog addDialog = new JDialog();
- addDialog.setTitle("Create Flexibility");
- addDialog.setBounds(0, 0, 820, 400);
- addDialog.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
- JPanel dialogPanel = new JPanel(new BorderLayout());
- addDialog.setContentPane(dialogPanel);
- JPanel selectionPanel = new JPanel(null);
- dialogPanel.add(selectionPanel, BorderLayout.CENTER);
- JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- dialogPanel.add(buttonPanel, BorderLayout.PAGE_END);
-
-
-
-
- addDialog.setModalityType(ModalityType.APPLICATION_MODAL);
- //Erstelle HolonObject AuswahlBox
- HolonObject[] holonObjects = createListOfHolonObjects(model.getObjectsOnCanvas()).stream().toArray(HolonObject[]::new);
- DefaultComboBoxModel<HolonObject> comboBoxModel = new DefaultComboBoxModel<HolonObject>( holonObjects );
- JComboBox<HolonObject> holonObjectSelector = new JComboBox<HolonObject>(comboBoxModel);
- holonObjectSelector.setBounds(10,30, 800, 30);
- selectionPanel.add(holonObjectSelector);
-
- DefaultComboBoxModel<HolonElement> comboBoxModelElements = new DefaultComboBoxModel<HolonElement>( holonObjects[0].getElements().stream().toArray(size -> new HolonElement[size]));
- JComboBox<HolonElement> holonElementSelector = new JComboBox<HolonElement>(comboBoxModelElements);
- holonElementSelector.setBounds(10,80, 800, 30);
- selectionPanel.add(holonElementSelector);
-
-
- holonObjectSelector.addItemListener(aListener -> {
- 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]));
- holonElementSelector.setModel(newComboBoxModelElements);
- }
- });
-
- JLabel selectObjectLabel = new JLabel("Select HolonObject:");
- selectObjectLabel.setBounds(10, 10, 200, 20);
- selectionPanel.add(selectObjectLabel);
- JLabel selectElementLabel = new JLabel("Select HolonElement:");
- selectElementLabel.setBounds(10, 60, 200, 20);
- selectionPanel.add(selectElementLabel);
-
- JPanel flexAttributesBorderPanel = new JPanel(null);
- flexAttributesBorderPanel.setBounds(10, 120, 800, 200);
- flexAttributesBorderPanel.setBorder(BorderFactory.createTitledBorder("Flexibility Attributes"));
- selectionPanel.add(flexAttributesBorderPanel);
- JLabel flexNameLabel = new JLabel("Name:");
- flexNameLabel.setBounds(10,20, 50, 20);
- flexAttributesBorderPanel.add(flexNameLabel);
- JFormattedTextField nameTextField = new JFormattedTextField(intermediateFlex.name);
- nameTextField.addPropertyChangeListener(changed -> intermediateFlex.name = nameTextField.getText());
- nameTextField.setBounds(80, 15, 200, 30);
- flexAttributesBorderPanel.add(nameTextField);
- JLabel flexSpeedLabel = new JLabel("Speed:");
- flexSpeedLabel.setBounds(10,55, 50, 20);
- flexAttributesBorderPanel.add(flexSpeedLabel);
- //Integer formatter
- NumberFormat format = NumberFormat.getIntegerInstance();
- format.setGroupingUsed(false);
- format.setParseIntegerOnly(true);
- NumberFormatter integerFormatter = new NumberFormatter(format);
- integerFormatter.setMinimum(0);
- integerFormatter.setCommitsOnValidEdit(true);
-
-
- JFormattedTextField speedTextField = new JFormattedTextField(integerFormatter);
- speedTextField.setValue(intermediateFlex.speed);
- speedTextField.setToolTipText("Only positive Integer.");
- speedTextField.addPropertyChangeListener(actionEvent -> intermediateFlex.speed = Integer.parseInt(speedTextField.getValue().toString()));
- speedTextField.setBounds(80, 50, 200, 30);
- flexAttributesBorderPanel.add(speedTextField);
- speedTextField.setEnabled(false);
-
- JLabel flexDurationLabel = new JLabel("Duration:");
- flexDurationLabel.setBounds(10,90, 70, 20);
- flexAttributesBorderPanel.add(flexDurationLabel);
-
-
- NumberFormatter moreThenZeroIntegerFormater = new NumberFormatter(format);
- moreThenZeroIntegerFormater.setMinimum(1);
- moreThenZeroIntegerFormater.setCommitsOnValidEdit(true);
-
- JFormattedTextField durationTextField = new JFormattedTextField(moreThenZeroIntegerFormater);
- durationTextField.setValue(intermediateFlex.getDuration());
- durationTextField.setToolTipText("Only positive Integer bigger then 0.");
- durationTextField.addPropertyChangeListener(actionEvent -> intermediateFlex.setDuration(Integer.parseInt(durationTextField.getValue().toString())));
- durationTextField.setBounds(80, 85, 200, 30);
- flexAttributesBorderPanel.add(durationTextField);
-
- JLabel flexCostsLabel = new JLabel("Costs:");
- flexCostsLabel.setBounds(10,125, 70, 20);
- flexAttributesBorderPanel.add(flexCostsLabel);
-
- //Double Format:
- NumberFormat doubleFormat = NumberFormat.getNumberInstance(Locale.US);
- doubleFormat.setMinimumFractionDigits(1);
- doubleFormat.setMaximumFractionDigits(2);
- doubleFormat.setRoundingMode(RoundingMode.HALF_UP);
- //CostFormatter:
- NumberFormatter costsFormatter = new NumberFormatter(doubleFormat);
- costsFormatter.setMinimum(0.0);
-
- JFormattedTextField costTextField = new JFormattedTextField(costsFormatter);
- costTextField.setValue(intermediateFlex.cost);
- costTextField.setToolTipText("Only non negative Double with DecimalSeperator Point('.').");
- costTextField.addPropertyChangeListener(propertyChange -> intermediateFlex.cost = Float.parseFloat(costTextField.getValue().toString()));
- costTextField.setBounds(80, 120, 200, 30);
- flexAttributesBorderPanel.add(costTextField);
-
-
-
- JLabel flexCooldownLabel = new JLabel("Cooldown:");
- flexCooldownLabel.setBounds(310,20, 70, 20);
- flexAttributesBorderPanel.add(flexCooldownLabel);
-
-
- JFormattedTextField cooldownTextField = new JFormattedTextField(moreThenZeroIntegerFormater);
- cooldownTextField.setValue(intermediateFlex.getCooldown());
- cooldownTextField.setToolTipText("Only positive Integer.");
- cooldownTextField.addPropertyChangeListener(actionEvent -> intermediateFlex.setCooldown(Integer.parseInt(cooldownTextField.getValue().toString())));
- cooldownTextField.setBounds(380, 15, 200, 30);
- flexAttributesBorderPanel.add(cooldownTextField);
-
- JCheckBox offeredCheckBox = new JCheckBox("Offered");
- offeredCheckBox.setSelected(this.offered);
- offeredCheckBox.setBounds(310, 55, 200, 20);
- flexAttributesBorderPanel.add(offeredCheckBox);
-
- JCheckBox onConstrainCheckBox = new JCheckBox("On_Constrain");
- onConstrainCheckBox.setSelected(this.onConstrain);
- onConstrainCheckBox.setBounds(310, 80, 200, 20);
- flexAttributesBorderPanel.add(onConstrainCheckBox);
-
- JCheckBox offConstrainCheckBox = new JCheckBox("Off_Constrain");
- offConstrainCheckBox.setSelected(this.offConstrain);
- offConstrainCheckBox.setBounds(310, 105, 200, 20);
- flexAttributesBorderPanel.add(offConstrainCheckBox);
-
-
-
-
- //Both cant be true....
- onConstrainCheckBox.addActionListener(clicked -> {
- if(onConstrainCheckBox.isSelected()) offConstrainCheckBox.setSelected(false);
- });
- offConstrainCheckBox.addActionListener(clicked -> {
- if(offConstrainCheckBox.isSelected()) onConstrainCheckBox.setSelected(false);
- });
-
- JButton createFlexButton = new JButton("Create");
- createFlexButton.addActionListener(clicked -> {
- //createFlexButton.requestFocus();
- //createFlexButton.grabFocus();
- HolonElement ele = (HolonElement) holonElementSelector.getSelectedItem();
- Flexibility toCreateFlex = new Flexibility(ele);
- toCreateFlex.name = intermediateFlex.name;
- toCreateFlex.speed = intermediateFlex.speed;
- toCreateFlex.setDuration(intermediateFlex.getDuration());
- toCreateFlex.cost = intermediateFlex.cost;
- toCreateFlex.setCooldown(intermediateFlex.getCooldown());
- toCreateFlex.offered=offeredCheckBox.isSelected();
- if(onConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Flexibility.onConstrain);
- if(offConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Flexibility.offConstrain);
-
- ele.flexList.add(toCreateFlex);
- //save checkboxes
- this.offered=offeredCheckBox.isSelected();
- this.onConstrain = onConstrainCheckBox.isSelected();
- this.offConstrain = offConstrainCheckBox.isSelected();
-
-
- if(!model.getSelectedCpsObjects().contains(holonObjectSelector.getSelectedItem()))model.getSelectedCpsObjects().add((AbstractCpsObject)holonObjectSelector.getSelectedItem());
- selectedCpsObjectsChanged();
- addDialog.dispose();
- });
- buttonPanel.add(createFlexButton);
- JButton cancelButton = new JButton("Cancel");
- cancelButton.addActionListener(clicked -> {
- addDialog.dispose();
- });
- buttonPanel.add(cancelButton);
-
-
-
- //last
- addDialog.setLocationRelativeTo(this);
- addDialog.setVisible(true);
- }
-
-
- }
|