MenuBarNetworkExamples.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. package de.tu_darmstadt.tk.SmartHomeNetworkSim.view.popups;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. import java.util.Map.Entry;
  6. import javax.swing.JMenu;
  7. import javax.swing.JMenuItem;
  8. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
  9. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.NetworkController;
  10. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SettingsController;
  11. import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SimulationController;
  12. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Connection;
  13. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPerformance;
  14. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPrecision;
  15. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
  16. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
  17. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketCollector;
  18. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
  19. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PrecisionLink;
  20. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Protocol;
  21. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
  22. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolCollectorDevice;
  23. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolSensorDevice;
  24. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatCollectorDevice;
  25. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatSensorDevice;
  26. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.protocols.MQTT_protocol;
  27. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.CountingMetric;
  28. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.Manipulation_RandomMove;
  29. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleLink;
  30. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleProtocol;
  31. public class MenuBarNetworkExamples extends JMenu{
  32. /**
  33. *
  34. */
  35. private static final long serialVersionUID = 1L;
  36. /**
  37. * Controller controller
  38. */
  39. private Controller controller;
  40. /**
  41. * Controller for editing the network
  42. */
  43. private NetworkController networkController;
  44. /**
  45. * Controller for configuration of the program
  46. */
  47. private SettingsController settingsController;
  48. /**
  49. * SimulationController for running the simulation
  50. */
  51. private SimulationController simulationController;
  52. /**
  53. * Creates the JMenu for network examples in the MenuBar
  54. * @param controller controller to create examples
  55. */
  56. public MenuBarNetworkExamples(Controller controller) {
  57. super("Create example Network");
  58. this.controller = controller;
  59. this.networkController = controller.getNetworkController();
  60. this.settingsController = controller.getSettingsController();
  61. this.simulationController = controller.getSimulationController();
  62. /**
  63. * MQTT example
  64. */
  65. JMenuItem mnMQTT = new JMenuItem("MQTT Example");
  66. mnMQTT.addActionListener(a->initializeMQTTTest());
  67. this.add(mnMQTT);
  68. /**
  69. * Small Network Test
  70. */
  71. JMenuItem mnTest = new JMenuItem("Network Example");
  72. mnTest.addActionListener(a->initializeTest());
  73. this.add(mnTest);
  74. /**
  75. * Performance Comparison Example
  76. */
  77. JMenuItem mnPerformance = new JMenuItem("Performane Evaluation Preset");
  78. mnPerformance.addActionListener(a->initializePerformanceTest());
  79. this.add(mnPerformance);
  80. /**
  81. * User Study Preset
  82. */
  83. JMenuItem mnUserStudy = new JMenuItem("User Study Preset");
  84. mnUserStudy.addActionListener(a->initializeUserStudy());
  85. this.add(mnUserStudy);
  86. /**
  87. * Packet Collection example
  88. */
  89. JMenuItem mnPacketCollectionExmample = new JMenuItem("Packet Collection Example");
  90. mnPacketCollectionExmample.addActionListener(a->testPackageCollection());
  91. this.add(mnPacketCollectionExmample);
  92. }
  93. private void initializePerformanceTest(){
  94. SmartDevice tic = new SmartDevice("Tic");
  95. tic.setX(100);
  96. tic.setY(100);
  97. SmartDevice toc = new SmartDevice("Toc");
  98. toc.setX(100);
  99. toc.setY(250);
  100. networkController.addSmartDevice(tic);
  101. networkController.addSmartDevice(toc);
  102. Link l = new PrecisionLink("Channel");
  103. networkController.addLink(l);
  104. networkController.addLinkToDevice(l, tic);
  105. networkController.addLinkToDevice(l, toc);
  106. Port ticP = new Port(tic, (short)2, 200, (short)0, 0, (short)0);
  107. Port tocP = new Port(toc, (short)3, 200, (short)0, -100, (short)0);
  108. tic.addPort(ticP);
  109. toc.addPort(tocP);
  110. Connection con = new ConnectionPrecision(l, new SimpleProtocol());
  111. networkController.addConnection(con);
  112. networkController.addConnectionToLink(con, l);
  113. networkController.addDeviceToConnectionAndProtocol(ticP, con, 0);
  114. networkController.addDeviceToConnectionAndProtocol(tocP, con, 1);
  115. simulationController.setStepDuration(100000000);
  116. simulationController.setEndTime(1000000000);
  117. controller.notifyObservers();
  118. }
  119. /**
  120. * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
  121. */
  122. private void initializeUserStudy(){
  123. /**
  124. * Preset one SmartDevice
  125. */
  126. SmartDevice A = new SmartDevice("Homestation");
  127. A.setX(200);
  128. A.setY(200);
  129. networkController.addSmartDevice(A);
  130. /**
  131. * Packagecollector, which is registered at the Device
  132. */
  133. PacketCollector collector = new PacketCollector(new CountingMetric());
  134. simulationController.getPacketCaptureController().addPacketCollector(collector);
  135. simulationController.getPacketCaptureController().addDeviceToCollector(collector, A);
  136. simulationController.setPrintPackets(true);
  137. controller.notifyObservers();
  138. }
  139. /**
  140. * Test package collectors
  141. */
  142. private void testPackageCollection() {
  143. simulationController.addAlgorithm(new Manipulation_RandomMove(), controller);
  144. PacketCollector collector = new PacketCollector();
  145. simulationController.getSimulationManager().getPacketCollectionManager().addPacketCollector(collector);
  146. System.out.println("Collector 0-500 - nothing collected:");
  147. simulationController.getSimulationManager().simulateTimeIntervall(0, 500);
  148. HashMap<Link, LinkedList<Packet>> map = collector.getPackets();
  149. for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
  150. System.out.println("Link: "+e.getKey().getName());
  151. for(Packet p : e.getValue())
  152. System.out.println(p.getTextualRepresentation());
  153. }
  154. System.out.println("");
  155. System.out.println("");
  156. Iterator<SmartDevice> it = networkController.getSmartDevices().iterator();
  157. it.next();
  158. SmartDevice d = it.next();
  159. collector.addDevice(d);
  160. SmartDevice f = it.next();
  161. collector.addDevice(f);
  162. System.out.println("Collector 500-1000 - "+d.getName()+" & "+f.getName()+" collected:");
  163. simulationController.getSimulationManager().simulateTimeIntervall(500, 500);
  164. map = collector.getPackets();
  165. for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
  166. System.out.println("Link: "+e.getKey().getName());
  167. for(Packet p : e.getValue())
  168. System.out.println(p.getTextualRepresentation());
  169. }
  170. System.out.println("");
  171. System.out.println("");
  172. Link l = networkController.getLinks().iterator().next();
  173. collector.addLink(l);
  174. System.out.println("Collector 2000-3000 - "+l+" collected:");
  175. simulationController.getSimulationManager().simulateTimeIntervall(1000, 500);
  176. map = collector.getPackets();
  177. for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
  178. System.out.println("Link: "+e.getKey().getName());
  179. for(Packet p : e.getValue())
  180. System.out.println(p.getTextualRepresentation());
  181. }
  182. simulationController.resetSimulation();
  183. controller.notifyObservers();
  184. }
  185. /**
  186. * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
  187. */
  188. private void initializeTest(){
  189. SmartDevice A = null, B = null, C = null;
  190. for(int i = 0; i<5; i++){
  191. A = new SmartDevice("SmartTV"+i);
  192. A.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  193. A.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  194. B = new SmartDevice("SmartDoor"+i);
  195. B.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  196. B.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  197. C = new SmartDevice("SmartLight"+i);
  198. C.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  199. C.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  200. networkController.addSmartDevice(A);
  201. networkController.addSmartDevice(B);
  202. networkController.addSmartDevice(C);
  203. }
  204. Link link = new SimpleLink("SimpleWifi");
  205. link.addDevice(A);
  206. link.addDevice(B);
  207. link.addDevice(C);
  208. A.addLink(link);
  209. B.addLink(link);
  210. C.addLink(link);
  211. Port a = new Port(A, (short) 1);
  212. a.setLastTrigger(0);
  213. a.setTriggerInterval(68);
  214. a.setStatus(Port.SENDING);
  215. A.addPort(a);
  216. Port b = new Port(B, (short) 2);
  217. b.setTriggerInterval(102);
  218. b.setStatus(Port.SENDING);
  219. B.addPort(b);
  220. Connection s = new ConnectionPerformance(link, new SimpleProtocol(a, b));
  221. s.setPacketLossProbability(0.01);//1% Packet loss probability
  222. a.setConnection(s);
  223. b.setConnection(s);
  224. s.addSmartDevice(a);
  225. s.addSmartDevice(b);
  226. link.addConnection(s);
  227. networkController.addLink(link);
  228. networkController.addConnection(s);
  229. controller.notifyObservers();
  230. }
  231. /**
  232. * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
  233. */
  234. private void initializeMQTTTest(){
  235. SimpleLink link = new SimpleLink("WIFI");
  236. link.setFixedDelay(5);
  237. SmartDevice broker = new SmartDevice("MQTT-Broker");
  238. broker.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  239. broker.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  240. networkController.addSmartDevice(broker);
  241. Port brokerPort = new Port(broker, (short) 0);
  242. brokerPort.setLastTrigger(0);
  243. brokerPort.setTriggerInterval(987);
  244. brokerPort.setStatus(Port.OPEN);
  245. broker.addPort(brokerPort);
  246. link.addDevice(broker);
  247. broker.addLink(link);
  248. Protocol protocol = new MQTT_protocol(brokerPort);
  249. Connection con = new ConnectionPrecision(link, protocol);
  250. con.setPacketLossProbability(0.01);//1% Packet loss probability
  251. con.addSmartDevice(brokerPort);
  252. brokerPort.setConnection(con);
  253. con.setStatus(Connection.ACTIVE);
  254. networkController.addLink(link);
  255. link.addConnection(con);
  256. networkController.addConnection(con);
  257. SmartDevice A = null, A1 = null, A2 = null, B = null, C = null;
  258. Port aP,a1P,a2P,bP,cP;
  259. for(int i = 0; i<3; i++){
  260. FloatSensorDevice aS = new FloatSensorDevice("SmartThermostat"+i+"(Pub)");
  261. aS.setFSinfoName("room"+i+"/temperature");
  262. A=aS;
  263. A.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  264. A.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  265. link.addDevice(A);
  266. A.addLink(link);
  267. aP = new Port(A,((short) (3*i+1)));
  268. aP.setLastTrigger(0);
  269. aP.setTriggerInterval(100+(int)(Math.random()*900));
  270. aP.setJitter((short) (Math.random()*50));
  271. aP.setStatus(Port.SENDING);
  272. aP.setConnection(con);
  273. protocol.addDeviceOfRole(aP, 2);
  274. con.addSmartDevice(aP);
  275. A.addPort(aP);
  276. networkController.addSmartDevice(A);
  277. FloatCollectorDevice aS1 = new FloatCollectorDevice("SmartAirCondition"+i+"(Sub)");
  278. aS1.setFCinfoName("room"+i+"/temperature");
  279. A1=aS1;
  280. A1.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  281. A1.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  282. link.addDevice(A1);
  283. A1.addLink(link);
  284. a1P = new Port(A1,((short) (3*i+1)));
  285. a1P.setLastTrigger(0);
  286. a1P.setTriggerInterval(100+(int)(Math.random()*900));
  287. a1P.setJitter((short) (Math.random()*50));
  288. a1P.setStatus(Port.SENDING);
  289. a1P.setConnection(con);
  290. protocol.addDeviceOfRole(a1P, 3);
  291. con.addSmartDevice(a1P);
  292. A1.addPort(a1P);
  293. networkController.addSmartDevice(A1);
  294. FloatCollectorDevice aS2 = new FloatCollectorDevice("SmartHeater"+i+"(Sub)");
  295. aS2.setFCinfoName("room"+i+"/temperature");
  296. A2=aS2;
  297. A2.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  298. A2.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  299. link.addDevice(A2);
  300. A2.addLink(link);
  301. a2P = new Port(A2,((short) (3*i+1)));
  302. a2P.setLastTrigger(0);
  303. a2P.setTriggerInterval(100+(int)(Math.random()*900));
  304. a2P.setJitter((short) (Math.random()*50));
  305. a2P.setStatus(Port.SENDING);
  306. a2P.setConnection(con);
  307. protocol.addDeviceOfRole(a2P, 3);
  308. con.addSmartDevice(a2P);
  309. A2.addPort(a2P);
  310. networkController.addSmartDevice(A2);
  311. B = new BoolSensorDevice("SmartDoor"+i+"(Pub)");
  312. ((BoolSensorDevice)B).setBSinfoName("room"+i+"/DoorOpen");
  313. B.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  314. B.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  315. link.addDevice(B);
  316. B.addLink(link);
  317. bP = new Port(B,((short) (3*i+2)));
  318. bP.setLastTrigger(0);
  319. bP.setTriggerInterval(10+(int)(Math.random()*190));
  320. bP.setJitter((short) (Math.random()*50));
  321. bP.setStatus(Port.SENDING);
  322. bP.setConnection(con);
  323. protocol.addDeviceOfRole(bP, 2);
  324. con.addSmartDevice(bP);
  325. B.addPort(bP);
  326. networkController.addSmartDevice(B);
  327. C = new BoolCollectorDevice("SmartDoorStatusLight"+i+"(Sub)");
  328. ((BoolCollectorDevice)C).setBCinfoName("room"+i+"/DoorOpen");
  329. C.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  330. C.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
  331. link.addDevice(C);
  332. C.addLink(link);
  333. cP = new Port(C,((short) (3*i+1)));
  334. cP.setLastTrigger(0);
  335. cP.setTriggerInterval(50+(int)(Math.random()*450));
  336. cP.setJitter((short) (Math.random()*50));
  337. cP.setStatus(Port.SENDING);
  338. cP.setConnection(con);
  339. protocol.addDeviceOfRole(cP, 3);
  340. con.addSmartDevice(cP);
  341. C.addPort(cP);
  342. networkController.addSmartDevice(C);
  343. controller.notifyObservers();
  344. }
  345. }
  346. }