EditCollectorsPopUp.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package de.tu_darmstadt.tk.SmartHomeNetworkSim.view.popups;
  2. import javax.swing.JButton;
  3. import javax.swing.JDialog;
  4. import javax.swing.JList;
  5. import javax.swing.JScrollPane;
  6. import javax.swing.ListSelectionModel;
  7. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
  8. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.PacketCaptureController;
  9. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SimulationController;
  10. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketCollector;
  11. import de.tu_darmstadt.tk.SmartHomeNetworkSim.view.util.Utility;
  12. import java.awt.Container;
  13. import java.awt.event.WindowAdapter;
  14. import java.awt.event.WindowEvent;
  15. import java.util.Iterator;
  16. import java.util.Observable;
  17. import java.util.Observer;
  18. /**
  19. * PopUp for managing the Collectors/PacketSniffers
  20. *
  21. * @author Andreas T. Meyer-Berg
  22. */
  23. public class EditCollectorsPopUp extends JDialog implements Observer {
  24. /**
  25. * serial
  26. */
  27. private static final long serialVersionUID = 1L;
  28. /**
  29. * Controller for manipulating the simulation and adding algorithms
  30. */
  31. private Controller controller;
  32. /**
  33. * Simulation controller for access to the algorithms
  34. */
  35. private SimulationController sim;
  36. /**
  37. * Packet captureController
  38. */
  39. private PacketCaptureController captureController;
  40. /**
  41. * Jlist for listing the PacketListener
  42. */
  43. private JList<String> list;
  44. /**
  45. * Scroll Pane for scrolling in the Algorithm list
  46. */
  47. private JScrollPane scrollPanelList;
  48. /**
  49. * Mutex, to disable listeners on update
  50. */
  51. private boolean mutex = true;
  52. /**
  53. * Reference to this
  54. */
  55. private EditCollectorsPopUp that = this;
  56. /**
  57. * Creates and shows a new EditAlgorithmPopUp
  58. * @param controller controller
  59. * @param parent parent container the location should be set relative to
  60. */
  61. public EditCollectorsPopUp(Controller controller, Container parent) {
  62. this.controller = controller;
  63. sim = this.controller.getSimulationController();
  64. captureController = sim.getPacketCaptureController();
  65. captureController.addObserver(this);
  66. this.setSize(400, 400);
  67. setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
  68. setTitle("Manage PacketCollectors/PacketSniffers");
  69. this.setIconImage(Utility.loadFile("images/smartHome_icon.png"));
  70. getContentPane().setLayout(null);
  71. list = null;
  72. JButton btnImportAlgorithm = new JButton("Create Collector");
  73. btnImportAlgorithm.setToolTipText("Create a new PacketCollector which will collect packets");
  74. btnImportAlgorithm.setBounds(220, 130, 160, 25);
  75. getContentPane().add(btnImportAlgorithm);
  76. btnImportAlgorithm.addActionListener(a->{
  77. if(mutex)
  78. return;
  79. EditPacketSniffer popUp = new EditPacketSniffer(controller, that, new PacketCollector(), false);
  80. popUp.setEnabled(true);
  81. popUp.setVisible(true);
  82. });
  83. JButton btnRemoveSelected = new JButton("Remove Selected");
  84. btnRemoveSelected.setToolTipText("Remove the selected PacketCollector, it will no longer collect packets");
  85. btnRemoveSelected.setBounds(220, 160, 160, 25);
  86. getContentPane().add(btnRemoveSelected);
  87. btnRemoveSelected.addActionListener(a->{
  88. if(mutex)
  89. return;
  90. /**
  91. * Selected Index
  92. */
  93. int index = list.getSelectedIndex();
  94. if(index<0||index>=captureController.getPacketCollectors().size())
  95. return;
  96. /**
  97. * PacketCollector which should be removed
  98. */
  99. PacketCollector p = null;
  100. Iterator<PacketCollector> it = captureController.getPacketCollectors().iterator();
  101. for(int i = 0; i<index&&it.hasNext();i++){
  102. it.next();
  103. }
  104. if(it.hasNext()){
  105. p=it.next();
  106. captureController.removePacketCollector(p);
  107. }
  108. });
  109. JButton btnEditSelected = new JButton("Edit Selected");
  110. btnEditSelected.setToolTipText("Edit the selected PacketCollector");
  111. btnEditSelected.setBounds(220, 190, 160, 25);
  112. btnEditSelected.addActionListener(a->{
  113. if(mutex)
  114. return;
  115. /**
  116. * Selected Index
  117. */
  118. int index = list.getSelectedIndex();
  119. if(index<0||index>=captureController.getPacketCollectors().size())
  120. return;
  121. /**
  122. * PacketCollector which should be edited
  123. */
  124. PacketCollector p = null;
  125. Iterator<PacketCollector> it = captureController.getPacketCollectors().iterator();
  126. for(int i = 0; i<index&&it.hasNext();i++){
  127. it.next();
  128. }
  129. if(it.hasNext()){
  130. p=it.next();
  131. EditPacketSniffer popUp =new EditPacketSniffer(controller, that, p,true);
  132. popUp.setEnabled(true);
  133. popUp.setVisible(true);
  134. }
  135. });
  136. getContentPane().add(btnEditSelected);
  137. scrollPanelList = new JScrollPane();
  138. scrollPanelList.setBounds(0, 0, 205, 375);
  139. getContentPane().add(scrollPanelList);
  140. this.addWindowListener(new WindowAdapter() {
  141. @Override
  142. public void windowClosing(WindowEvent e) {
  143. captureController.removeObserver(that);
  144. }
  145. });
  146. update(null,null);
  147. this.setResizable(false);
  148. this.setLocationRelativeTo(parent);
  149. this.setEnabled(true);
  150. this.setVisible(true);
  151. }
  152. @Override
  153. public void update(Observable o, Object arg) {
  154. mutex = true;
  155. /**
  156. * Update List
  157. */
  158. /**
  159. * Names of the collectors
  160. */
  161. String[] collectorNames = new String[captureController.getPacketCollectors().size()];
  162. if(captureController.getPacketCollectors().size()!=0){
  163. Iterator<PacketCollector> it = captureController.getPacketCollectors().iterator();
  164. for(int i=0;i<captureController.getPacketCollectors().size();i++){
  165. if(it.hasNext()){
  166. PacketCollector p = it.next();
  167. if(p.getPacketAlgorithm()==null){
  168. collectorNames[i] = "Null";
  169. }else{
  170. collectorNames[i] = p.getPacketAlgorithm().getClass().getSimpleName();
  171. }
  172. }else{
  173. collectorNames[i] = "Invalid Size";
  174. }
  175. }
  176. }
  177. /**
  178. * New list
  179. */
  180. JList<String> newList = new JList<String>(collectorNames);
  181. newList.setToolTipText("List of all currently active PacketCollectos/PacketSniffers.");
  182. newList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  183. int pos = scrollPanelList.getVerticalScrollBar().getValue();
  184. if(list!=null){
  185. scrollPanelList.remove(list);
  186. newList.setSelectedIndex(list.getSelectedIndex());
  187. }
  188. scrollPanelList.setViewportView(newList);
  189. scrollPanelList.getVerticalScrollBar().setValue(pos);
  190. list = newList;
  191. this.repaint();
  192. mutex = false;
  193. }
  194. }