RandomOfferdFlexibility.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package addOns;
  2. import java.awt.BorderLayout;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.GridLayout;
  6. import java.util.ArrayList;
  7. import java.util.Hashtable;
  8. import java.util.List;
  9. import java.util.stream.Collectors;
  10. import javax.swing.BorderFactory;
  11. import javax.swing.BoxLayout;
  12. import javax.swing.JButton;
  13. import javax.swing.JCheckBox;
  14. import javax.swing.JFrame;
  15. import javax.swing.JLabel;
  16. import javax.swing.JPanel;
  17. import javax.swing.JSlider;
  18. import api.AddOn;
  19. import classes.AbstractCanvasObject;
  20. import classes.GroupNode;
  21. import classes.Flexibility;
  22. import classes.HolonElement;
  23. import classes.HolonElement.Priority;
  24. import classes.HolonObject;
  25. import classes.HolonSwitch;
  26. import ui.controller.Control;
  27. /**
  28. * A short algorithm to distribute the Priorities for the whole Canvas.
  29. * @author tom
  30. *
  31. */
  32. public class RandomOfferdFlexibility implements AddOn {
  33. private Control control;
  34. private JPanel content = new JPanel();
  35. private JSlider activeSlider = new JSlider(JSlider.HORIZONTAL,0, 100, 50);
  36. private JCheckBox lowCheckbox = new JCheckBox("Low", true);
  37. private JCheckBox mediumCheckbox = new JCheckBox("Medium", true);
  38. private JCheckBox highCheckbox = new JCheckBox("High", true);
  39. private JCheckBox essentialCheckbox = new JCheckBox("Essential", true);
  40. private JSlider lowFlexTargetSlider = new JSlider(JSlider.HORIZONTAL,0, 100, 50);
  41. private JSlider mediumFlexTargetSlider = new JSlider(JSlider.HORIZONTAL,0, 100, 50);
  42. private JSlider highFlexTargetSlider = new JSlider(JSlider.HORIZONTAL,0, 100, 50);
  43. private JSlider essentialFlexTargetSlider = new JSlider(JSlider.HORIZONTAL,0, 100, 50);
  44. private JLabel lowPositiveLabel = new JLabel("0(0)");
  45. private JLabel mediumPositiveLabel = new JLabel("0(0)");
  46. private JLabel highPositiveLabel = new JLabel("0(0)");
  47. private JLabel essentialPositiveLabel = new JLabel("0(0)");
  48. private JLabel lowNegativeLabel = new JLabel("0(0)");
  49. private JLabel mediumNegativeLabel = new JLabel("0(0)");
  50. private JLabel highNegativeLabel = new JLabel("0(0)");
  51. private JLabel essentialNegativeLabel = new JLabel("0(0)");
  52. public static void main(String[] args)
  53. {
  54. JFrame newFrame = new JFrame("exampleWindow");
  55. RandomOfferdFlexibility instance = new RandomOfferdFlexibility();
  56. newFrame.setContentPane(instance.getPanel());
  57. newFrame.pack();
  58. newFrame.setVisible(true);
  59. newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  60. }
  61. public RandomOfferdFlexibility(){
  62. content.setLayout(new BorderLayout());
  63. content.add(createParameterPanel(), BorderLayout.CENTER);
  64. content.add(createFlexPanel(), BorderLayout.EAST);
  65. JButton buttonRun = new JButton("Run");
  66. buttonRun.addActionListener(actionEvent -> run());
  67. content.add(buttonRun, BorderLayout.PAGE_END);
  68. //content.setPreferredSize(new Dimension(300,500));
  69. }
  70. private JPanel createFlexPanel() {
  71. JPanel flexPanel = new JPanel();
  72. flexPanel.setBorder(BorderFactory.createTitledBorder("Flexibility"));
  73. GridLayout experimentLayout = new GridLayout(0,4);
  74. flexPanel.setLayout(experimentLayout);
  75. //Label
  76. flexPanel.add(new JLabel("Priority:"));
  77. flexPanel.add(new JLabel("Target:"));
  78. flexPanel.add(new JLabel("PositiveAmount:"));
  79. flexPanel.add(new JLabel("NegativeAmount:"));
  80. flexPanel.add(lowCheckbox);
  81. flexPanel.add(initVisualizeSliderFlexibility(this.lowFlexTargetSlider, "PositivNegativ"));
  82. flexPanel.add(this.lowPositiveLabel);
  83. flexPanel.add(this.lowNegativeLabel);
  84. flexPanel.add(mediumCheckbox);
  85. flexPanel.add(initVisualizeSliderFlexibility(this.mediumFlexTargetSlider, "PositivNegativ"));
  86. flexPanel.add(this.mediumPositiveLabel);
  87. flexPanel.add(this.mediumNegativeLabel);
  88. flexPanel.add(highCheckbox);
  89. flexPanel.add(initVisualizeSliderFlexibility(this.highFlexTargetSlider, "PositivNegativ"));
  90. flexPanel.add(this.highPositiveLabel);
  91. flexPanel.add(this.highNegativeLabel);
  92. flexPanel.add(essentialCheckbox);
  93. flexPanel.add(initVisualizeSliderFlexibility(this.essentialFlexTargetSlider, "PositivNegativ"));
  94. flexPanel.add(this.essentialPositiveLabel);
  95. flexPanel.add(this.essentialNegativeLabel);
  96. return flexPanel;
  97. }
  98. private JPanel createParameterPanel() {
  99. JPanel centerPanel = new JPanel();
  100. JPanel parameterPanel = new JPanel();
  101. parameterPanel.setBorder(BorderFactory.createTitledBorder("Priority"));
  102. parameterPanel.setLayout(new BoxLayout(parameterPanel, BoxLayout.PAGE_AXIS));
  103. createParamaterSlider(parameterPanel);
  104. centerPanel.add(parameterPanel);
  105. return centerPanel;
  106. }
  107. private void createParamaterSlider(JPanel parameterPanel) {
  108. }
  109. private JSlider initVisualizeSliderFlexibility(JSlider jslider, String name) {
  110. jslider.setMajorTickSpacing(50);
  111. jslider.setMinorTickSpacing(5);
  112. jslider.setPaintTicks(true);
  113. Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
  114. labelTable.put( Integer.valueOf( 0 ), new JLabel("Positiv") );
  115. labelTable.put( Integer.valueOf( 100 ), new JLabel("Negativ") );
  116. jslider.setLabelTable( labelTable );
  117. jslider.setPaintLabels(true);
  118. return jslider;
  119. }
  120. private void run() {
  121. //control.getModel().getObjectsOnCanvas().stream().filter(aCps -> aCps instanceof HolonObject)
  122. List<HolonElement> elementList = createListOfHolonObjects(control.getModel().getObjectsOnCanvas()).stream().flatMap(hObject -> hObject.getElements().stream()).collect(Collectors.toList());
  123. for(HolonElement element : elementList) {
  124. element.setActive(Math.random() * 100.0 < activeSlider.getValue());
  125. // Generate a random number between 0 and 100
  126. }
  127. control.calculateStateAndVisualForCurrentTimeStep();
  128. control.updateCanvas();
  129. List<Flexibility> flexList = control.getSimManager().getActualFlexManager().getAllFlexWrapper().stream().filter(flexwrapper -> flexwrapper.getFlex().offered).map(flex -> flex.getFlex()).collect(Collectors.toList());
  130. long amountOfEssential = flexList.stream().filter(flex -> flex.getElement().getPriority() == Priority.Essential).count();
  131. long amountOfHigh = flexList.stream().filter(flex -> flex.getElement().getPriority() == Priority.High).count();
  132. long amountOfMedium = flexList.stream().filter(flex -> flex.getElement().getPriority() == Priority.Medium).count();
  133. long amountOfLow = flexList.stream().filter(flex -> flex.getElement().getPriority() == Priority.Low).count();
  134. long overall = amountOfEssential + amountOfHigh + amountOfMedium + amountOfLow;
  135. System.out.println(" amountOfEssential: " + amountOfEssential + " amountOfHigh: " + amountOfHigh + " amountOfMedium: " +amountOfMedium + " amountOfLow: " +amountOfLow + " of overall " + overall + "Flexes");
  136. }
  137. private List<HolonObject> createListOfHolonObjects(List<AbstractCanvasObject> objectsOnCanvas) {
  138. List<HolonObject> list = new ArrayList<HolonObject>();
  139. for(AbstractCanvasObject aCps : objectsOnCanvas) {
  140. if(aCps instanceof HolonObject) list.add((HolonObject) aCps);
  141. else if(aCps instanceof GroupNode)list.addAll(createListOfHolonObjects(((GroupNode)aCps).getNodes()));
  142. }
  143. return list;
  144. }
  145. @Override
  146. public JPanel getPanel() {
  147. return content;
  148. }
  149. @Override
  150. public void setController(Control control) {
  151. this.control = control;
  152. }
  153. }