SimulationMenu.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package ui.view;
  2. import javax.swing.JButton;
  3. import javax.swing.JComboBox;
  4. import javax.swing.JFileChooser;
  5. import javax.swing.JFrame;
  6. import javax.swing.JLabel;
  7. import javax.swing.JMenuBar;
  8. import javax.swing.JPanel;
  9. import javax.swing.JRadioButton;
  10. import javax.swing.JTextField;
  11. import javax.swing.event.CaretEvent;
  12. import javax.swing.event.CaretListener;
  13. import javax.swing.event.ChangeEvent;
  14. import javax.swing.event.ChangeListener;
  15. import javax.tools.Diagnostic;
  16. import javax.tools.DiagnosticCollector;
  17. import javax.tools.JavaCompiler;
  18. import javax.tools.JavaFileObject;
  19. import javax.tools.StandardJavaFileManager;
  20. import javax.tools.StandardLocation;
  21. import javax.tools.ToolProvider;
  22. import com.sun.crypto.provider.JceKeyStore;
  23. import classes.AbstractCpsObject;
  24. import classes.HolonObject;
  25. import classes.HolonSwitch;
  26. import classes.HolonTransformer;
  27. import jdk.nashorn.api.scripting.URLReader;
  28. import ui.controller.Control;
  29. import ui.model.Model;
  30. import java.util.ArrayList;
  31. import java.util.Arrays;
  32. import java.util.HashMap;
  33. import java.util.List;
  34. import java.awt.GridBagLayout;
  35. import java.awt.Color;
  36. import java.awt.Cursor;
  37. import java.awt.Dimension;
  38. import java.awt.GridBagConstraints;
  39. import java.awt.Insets;
  40. import java.awt.event.ActionListener;
  41. import java.awt.event.ItemEvent;
  42. import java.awt.event.ItemListener;
  43. import java.awt.event.MouseAdapter;
  44. import java.awt.event.MouseEvent;
  45. import java.beans.PropertyChangeEvent;
  46. import java.beans.PropertyChangeListener;
  47. import java.io.File;
  48. import java.io.IOException;
  49. import java.io.InputStream;
  50. import java.net.MalformedURLException;
  51. import java.net.URL;
  52. import java.net.URLClassLoader;
  53. import java.nio.file.Files;
  54. import java.awt.FlowLayout;
  55. import com.scarekroow.exampleapi.*;
  56. /**
  57. * This Class represents the Menu, where you can edit stuff about the
  58. * Simulation.
  59. *
  60. * @author Gruppe14
  61. */
  62. public class SimulationMenu extends JMenuBar {
  63. private static final long serialVersionUID = 1L;
  64. private JPanel menuPanel = new JPanel();
  65. private JRadioButton simButton = new JRadioButton(Languages.getLanguage()[83]);
  66. private JLabel simSpeedLabel = new JLabel(Languages.getLanguage()[84]);
  67. private JTextField simSpeedText = new JTextField("1000");
  68. private JComboBox algoCombo = new JComboBox<>();
  69. private JButton algoFolderButton = new JButton(Languages.getLanguage()[85]);
  70. private HashMap<String, File> algosHash = new HashMap<>();
  71. // root Directory
  72. File root = null;
  73. Model model;
  74. Control controller;
  75. /**
  76. * Constructor.
  77. *
  78. * @param mod
  79. * the Model
  80. * @param cont
  81. * the Controller
  82. */
  83. public SimulationMenu(Model mod, Control cont) {
  84. super();
  85. // Init Stuff
  86. this.model = mod;
  87. this.controller = cont;
  88. // Algorithm ComboBox Action
  89. algoCombo.addItemListener(new ItemListener() {
  90. @Override
  91. public void itemStateChanged(ItemEvent e) {
  92. setAlgorithm(algosHash.get(e.getItem()));
  93. controller.addTextToConsole("" + e.getItem());
  94. }
  95. });
  96. // algoFolderButton Action
  97. algoFolderButton.addActionListener(new ActionListener() {
  98. @Override
  99. public void actionPerformed(java.awt.event.ActionEvent evt) {
  100. menuSetFolderActionPerformed(evt);
  101. }
  102. private void menuSetFolderActionPerformed(java.awt.event.ActionEvent evt) {
  103. JFileChooser fileChooser = new JFileChooser();
  104. JFrame test = new JFrame();
  105. fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  106. fileChooser.setAcceptAllFileFilterUsed(false);
  107. if (fileChooser.showOpenDialog(test) == JFileChooser.APPROVE_OPTION) {
  108. algoCombo.removeAllItems();
  109. File[] files = fileChooser.getSelectedFile().listFiles();
  110. //Set Root Folder Path
  111. root = new File(fileChooser.getCurrentDirectory().getPath());
  112. controller.addTextToConsole("roor Path" + root.getPath());
  113. for (int i = 0; i < files.length; i++) {
  114. if (files[i].toString()
  115. .endsWith(".java") /*
  116. * || files[i].toString().
  117. * endsWith(".class")
  118. */) {
  119. String name = files[i].getName();
  120. int tmpB = name.lastIndexOf('.');
  121. name = name.substring(0, tmpB);
  122. algosHash.put(name, files[i]);
  123. algoCombo.addItem(name);
  124. }
  125. }
  126. }
  127. }
  128. });
  129. // Add to Panel
  130. GridBagLayout gblmenuPanel = new GridBagLayout();
  131. gblmenuPanel.columnWidths = new int[] { 79, 105, 34, 60, 31, 151, 0 };
  132. gblmenuPanel.rowHeights = new int[] { 25, 0 };
  133. gblmenuPanel.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE };
  134. gblmenuPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
  135. menuPanel.setLayout(gblmenuPanel);
  136. // isSimulation
  137. simButton.addPropertyChangeListener(new PropertyChangeListener() {
  138. @Override
  139. public void propertyChange(PropertyChangeEvent evt) {
  140. controller.setIsSimulation(simButton.isSelected());
  141. controller.calculateStateForCurrentTimeStep();
  142. }
  143. });
  144. GridBagConstraints gbcsimButton = new GridBagConstraints();
  145. gbcsimButton.anchor = GridBagConstraints.NORTHWEST;
  146. gbcsimButton.insets = new Insets(0, 0, 0, 5);
  147. gbcsimButton.gridx = 0;
  148. gbcsimButton.gridy = 0;
  149. menuPanel.add(simButton, gbcsimButton);
  150. GridBagConstraints gbcsimSpeedLabel = new GridBagConstraints();
  151. gbcsimSpeedLabel.anchor = GridBagConstraints.WEST;
  152. gbcsimSpeedLabel.insets = new Insets(0, 0, 0, 5);
  153. gbcsimSpeedLabel.gridx = 1;
  154. gbcsimSpeedLabel.gridy = 0;
  155. menuPanel.add(simSpeedLabel, gbcsimSpeedLabel);
  156. // timerSpeed
  157. simSpeedText.setMaximumSize(new Dimension(300, 300));
  158. simSpeedText.addCaretListener(new CaretListener() {
  159. @Override
  160. public void caretUpdate(CaretEvent e) {
  161. try {
  162. controller.setTimerSpeed(Integer.parseInt(simSpeedText.getText()));
  163. } catch (Exception ex) {
  164. // TODO: handle exception
  165. }
  166. }
  167. });
  168. GridBagConstraints gbcSimSpeedText = new GridBagConstraints();
  169. gbcSimSpeedText.anchor = GridBagConstraints.WEST;
  170. gbcSimSpeedText.insets = new Insets(0, 0, 0, 5);
  171. gbcSimSpeedText.gridx = 2;
  172. gbcSimSpeedText.gridy = 0;
  173. menuPanel.add(simSpeedText, gbcSimSpeedText);
  174. GridBagConstraints gbcAlgoFolderButton = new GridBagConstraints();
  175. gbcAlgoFolderButton.anchor = GridBagConstraints.WEST;
  176. gbcAlgoFolderButton.insets = new Insets(0, 0, 0, 5);
  177. gbcAlgoFolderButton.gridx = 3;
  178. gbcAlgoFolderButton.gridy = 0;
  179. menuPanel.add(algoFolderButton, gbcAlgoFolderButton);
  180. GridBagConstraints gbcAlgoCombo = new GridBagConstraints();
  181. gbcAlgoCombo.anchor = GridBagConstraints.WEST;
  182. gbcAlgoCombo.insets = new Insets(0, 0, 0, 5);
  183. gbcAlgoCombo.gridx = 4;
  184. gbcAlgoCombo.gridy = 0;
  185. menuPanel.add(algoCombo, gbcAlgoCombo);
  186. algoCombo.addItem(Languages.getLanguage()[86]);
  187. // Add Panel to SimulationMenu
  188. this.add(menuPanel);
  189. }
  190. public void setAlgorithm(File file) {
  191. try {
  192. // Compile source file.
  193. JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
  194. compiler.run(null, null, null, file.getPath());
  195. // Load and instantiate compiled class.
  196. controller.addTextToConsole(root.toString());
  197. URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
  198. Class<?> cls = Class.forName("projectPackage.APITest", true, classLoader);
  199. Object t = cls.newInstance();
  200. controller.addTextToConsole(Languages.getLanguage()[87]);
  201. controller.setAlgorithm(t);
  202. } catch (Exception e) {
  203. // TODO Auto-generated catch block
  204. e.printStackTrace();
  205. }
  206. }
  207. }