Browse Source

Adds basic Scenario to MenuBar

Andreas T. Meyer-Berg 3 years ago
parent
commit
cd6f7377a2

+ 1025 - 767
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/menuBar/MenuBarNetworkExamples.java

@@ -1,767 +1,1025 @@
-package de.tu_darmstadt.tk.SmartHomeNetworkSim.view.menuBar;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map.Entry;
-
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.ExampleAnomalyController;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.ImportController;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.NetworkController;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.PacketCaptureController;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SettingsController;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SimulationController;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Connection;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPerformance;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPrecision;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketCollector;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketSniffer;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PrecisionLink;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Protocol;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolCollectorDevice;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolSensorDevice;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatCollectorDevice;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatSensorDevice;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.distributionHandler.NormalDistributionHandler;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.protocols.MQTT_protocol;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.CountingMetric;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.Manipulation_RandomMove;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleLink;
-import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleProtocol;
-
-public class MenuBarNetworkExamples extends JMenu{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Controller controller
-	 */
-	private Controller controller;
-	
-	/**
-	 * Controller for editing the network
-	 */
-	private NetworkController networkController;
-	
-	/**
-	 * Controller to insert anomalies
-	 */
-	private ExampleAnomalyController anomalyController;
-	
-	/**
-	 * Controller for configuration of the program
-	 */
-	private SettingsController settingsController;
-	
-	/**
-	 * SimulationController for running the simulation
-	 */
-	private SimulationController simulationController;
-
-	/**
-	 * Creates the JMenu for network examples in the MenuBar
-	 * @param controller controller to create examples
-	 */
-	public MenuBarNetworkExamples(Controller controller) {
-		super("Create example Network");
-		
-		this.controller = controller;
-		this.networkController = controller.getNetworkController();
-		this.anomalyController = networkController.getAnomalyController();
-		this.settingsController = controller.getSettingsController();
-		this.simulationController = controller.getSimulationController();
-		
-		/**
-		 * MQTT example
-		 */
-		JMenuItem mnMQTT = new JMenuItem("MQTT Example");
-		mnMQTT.addActionListener(a->initializeMQTTTest());
-		this.add(mnMQTT);
-		
-		/**
-		 * Small Network Test
-		 */
-		JMenuItem mnTest = new JMenuItem("Network Example");
-		mnTest.addActionListener(a->initializeTest());
-		this.add(mnTest);
-		
-		/**
-		 * Performance Comparison Example
-		 */
-		JMenuItem mnPerformance = new JMenuItem("Performane Evaluation Preset");
-		mnPerformance.addActionListener(a->initializePerformanceTest());
-		this.add(mnPerformance);
-		
-		/**
-		 * User Study Preset
-		 */
-		JMenuItem mnUserStudy = new JMenuItem("User Study Preset");
-		mnUserStudy.addActionListener(a->initializeUserStudy());
-		this.add(mnUserStudy);
-		
-		/**
-		 * Packet Collection example
-		 */
-		JMenuItem mnPacketCollectionExmample = new JMenuItem("Packet Collection Example");
-		mnPacketCollectionExmample.addActionListener(a->testPackageCollection());
-		this.add(mnPacketCollectionExmample);
-		
-		/**
-		 * Paper example
-		 */
-		JMenuItem mnPaperExample = new JMenuItem("Paper Example");
-		mnPaperExample.addActionListener(a->createPaperExample(false));
-		this.add(mnPaperExample);
-		
-		/**
-		 * Paper example + run
-		 */
-		JMenuItem mnRunPaperExample = new JMenuItem("Run Paper Example");
-		mnRunPaperExample.addActionListener(a->createPaperExample(true));
-		this.add(mnRunPaperExample);
-	}
-
-	private void initializePerformanceTest(){
-		SmartDevice tic = new SmartDevice("Tic");
-		tic.setX(100);
-		tic.setY(100);
-		SmartDevice toc = new SmartDevice("Toc");
-		toc.setX(100);
-		toc.setY(250);
-		networkController.addSmartDevice(tic);
-		networkController.addSmartDevice(toc);
-		
-		Link l = new PrecisionLink("Channel");
-		networkController.addLink(l);
-		networkController.addLinkToDevice(l, tic);
-		networkController.addLinkToDevice(l, toc);
-
-		Port ticP = new Port(tic, (short)2, 200, (short)0, 0, (short)0);
-		Port tocP = new Port(toc, (short)3, 200, (short)0, -100, (short)0);
-		tic.addPort(ticP);
-		toc.addPort(tocP);
-		
-		Connection con = new ConnectionPrecision(l, new SimpleProtocol());
-		networkController.addConnection(con);
-		networkController.addConnectionToLink(con, l);
-		networkController.addDeviceToConnectionAndProtocol(ticP, con, 0);
-		networkController.addDeviceToConnectionAndProtocol(tocP, con, 1);
-		
-		simulationController.setStepDuration(100000000);
-		simulationController.setEndTime(1000000000);
-		controller.notifyObservers();
-	}
-	
-	/**
-	 * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
-	 */
-	private void initializeUserStudy(){
-		/**
-		 * Preset one SmartDevice
-		 */
-		SmartDevice A = new SmartDevice("Homestation");
-		A.setX(200);
-		A.setY(200);
-		networkController.addSmartDevice(A);
-		/**
-		 * Packagecollector, which is registered at the Device
-		 */
-		PacketCollector collector = new PacketCollector(new CountingMetric());
-		simulationController.getPacketCaptureController().addPacketCollector(collector);
-		simulationController.getPacketCaptureController().addDeviceToCollector(collector, A);
-		simulationController.setPrintPackets(true);
-		controller.notifyObservers();
-	}
-	
-	/**
-	 * Test package collectors
-	 */
-	private void testPackageCollection() {
-		if(networkController.getSmartDevices().size()<3)
-			return;
-		simulationController.addAlgorithm(new Manipulation_RandomMove(), controller);
-	    PacketCollector collector = new PacketCollector();
-	    simulationController.getSimulationManager().getPacketCollectionManager().addPacketCollector(collector);
-	    
-	    System.out.println("Collector 0-500 - nothing collected:");
-	    simulationController.getSimulationManager().simulateTimeIntervall(0, 500);
-	    HashMap<Link, LinkedList<Packet>> map = collector.getPackets();
-	    for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
-	    	System.out.println("Link: "+e.getKey().getName());
-	    	for(Packet p : e.getValue())
-	    		System.out.println(p.getTextualRepresentation());
-	    }
-	    
-	    System.out.println("");
-	    System.out.println("");
-	    Iterator<SmartDevice> it = networkController.getSmartDevices().iterator();
-	    it.next();
-	    
-	    SmartDevice d = it.next();
-	    collector.addDevice(d);
-	    SmartDevice f = it.next();
-	    collector.addDevice(f);
-	    System.out.println("Collector 500-1000 - "+d.getName()+" & "+f.getName()+" collected:");
-	    simulationController.getSimulationManager().simulateTimeIntervall(500, 500);
-	    map = collector.getPackets();
-	    for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
-	    	System.out.println("Link: "+e.getKey().getName());
-	    	for(Packet p : e.getValue())
-	    		System.out.println(p.getTextualRepresentation());
-	    }
-
-	    System.out.println("");
-	    System.out.println("");
-	    
-	    Link l = networkController.getLinks().iterator().next();
-	    collector.addLink(l);
-	    System.out.println("Collector 2000-3000 - "+l+" collected:");
-	    simulationController.getSimulationManager().simulateTimeIntervall(1000, 500);
-	    map = collector.getPackets();
-	    for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
-	    	System.out.println("Link: "+e.getKey().getName());
-	    	for(Packet p : e.getValue())
-	    		System.out.println(p.getTextualRepresentation());
-	    }
-	    simulationController.resetSimulation();
-		controller.notifyObservers();
-	}
-	
-	/**
-	 * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
-	 */
-	private void initializeTest(){
-		SmartDevice A = null, B = null, C = null;
-		for(int i = 0; i<5; i++){
-			A = new SmartDevice("SmartTV"+i);		
-			A.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			A.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			B = new SmartDevice("SmartDoor"+i);
-			B.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			B.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			C = new SmartDevice("SmartLight"+i);
-			C.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			C.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-		
-			networkController.addSmartDevice(A);
-			networkController.addSmartDevice(B);
-			networkController.addSmartDevice(C);
-		}
-		
-		Link link = new SimpleLink("SimpleWifi");
-		link.addDevice(A);
-		link.addDevice(B);
-		link.addDevice(C);
-		A.addLink(link);
-		B.addLink(link);
-		C.addLink(link);
-		
-		Port a = new Port(A, (short) 1, 68);
-		a.setLastTrigger(0);
-		a.setStatus(Port.SENDING);
-		A.addPort(a);
-		Port b = new Port(B, (short) 2, 102);
-		b.setStatus(Port.SENDING);
-		B.addPort(b);
-		
-		Connection s = new ConnectionPerformance(link, new SimpleProtocol(a, b));
-		s.setPacketLossProbability(0.01);//1% Packet loss probability
-		a.setConnection(s);
-		b.setConnection(s);
-		s.addSmartDevice(a);
-		s.addSmartDevice(b);
-
-		link.addConnection(s);
-		
-		networkController.addLink(link);
-		networkController.addConnection(s);
-		controller.notifyObservers();
-	}
-	
-	/**
-	 * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
-	 */
-	private void initializeMQTTTest(){
-		SimpleLink link = new SimpleLink("WIFI");
-		link.setFixedDelay(5);
-		
-		SmartDevice broker = new SmartDevice("MQTT-Broker");
-		broker.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-		broker.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-		networkController.addSmartDevice(broker);
-		
-		Port brokerPort = new Port(broker, (short) 0, 987);
-		brokerPort.setLastTrigger(0);
-		brokerPort.setStatus(Port.OPEN);		
-		broker.addPort(brokerPort);
-		
-		link.addDevice(broker);
-		broker.addLink(link);
-		
-		Protocol protocol = new MQTT_protocol(brokerPort);
-		
-		Connection con = new ConnectionPrecision(link, protocol);
-		con.setPacketLossProbability(0.01);//1% Packet loss probability
-		con.addSmartDevice(brokerPort);
-		brokerPort.setConnection(con);
-		con.setStatus(Connection.ACTIVE);
-		networkController.addLink(link);
-		link.addConnection(con);
-		networkController.addConnection(con);
-		
-		SmartDevice A = null, A1 = null, A2 = null, B = null, C = null;
-		Port aP,a1P,a2P,bP,cP;
-		for(int i = 0; i<3; i++){
-			FloatSensorDevice aS = new FloatSensorDevice("SmartThermostat"+i+"(Pub)");	
-			aS.setFSinfoName("room"+i+"/temperature");
-			A=aS;
-			A.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			A.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			link.addDevice(A);
-			A.addLink(link);
-			
-			aP = new Port(A,((short) (3*i+1)),100+(int)(Math.random()*900));
-			aP.setLastTrigger(0);
-			aP.setJitter((short) (Math.random()*50));
-			aP.setStatus(Port.SENDING);
-			aP.setConnection(con);
-			protocol.addDeviceOfRole(aP, 2);
-			con.addSmartDevice(aP);
-			A.addPort(aP);
-			
-			networkController.addSmartDevice(A);
-			
-			
-			FloatCollectorDevice aS1 = new FloatCollectorDevice("SmartAirCondition"+i+"(Sub)");	
-			aS1.setFCinfoName("room"+i+"/temperature");
-			A1=aS1;
-			A1.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			A1.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			link.addDevice(A1);
-			A1.addLink(link);
-			
-			a1P = new Port(A1,((short) (3*i+1)),100+(int)(Math.random()*900));
-			a1P.setLastTrigger(0);
-			a1P.setJitter((short) (Math.random()*50));
-			a1P.setStatus(Port.SENDING);
-			a1P.setConnection(con);
-			protocol.addDeviceOfRole(a1P, 3);
-			con.addSmartDevice(a1P);
-			A1.addPort(a1P);
-			
-			networkController.addSmartDevice(A1);
-			
-			
-			FloatCollectorDevice aS2 = new FloatCollectorDevice("SmartHeater"+i+"(Sub)");	
-			aS2.setFCinfoName("room"+i+"/temperature");
-			A2=aS2;
-			A2.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			A2.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			link.addDevice(A2);
-			A2.addLink(link);
-			
-			a2P = new Port(A2,((short) (3*i+1)),100+(int)(Math.random()*900));
-			a2P.setLastTrigger(0);
-			a2P.setJitter((short) (Math.random()*50));
-			a2P.setStatus(Port.SENDING);
-			a2P.setConnection(con);
-			protocol.addDeviceOfRole(a2P, 3);
-			con.addSmartDevice(a2P);
-			A2.addPort(a2P);
-			
-			networkController.addSmartDevice(A2);
-			
-			
-			
-			
-			B = new BoolSensorDevice("SmartDoor"+i+"(Pub)");
-			((BoolSensorDevice)B).setBSinfoName("room"+i+"/DoorOpen");
-			B.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			B.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			link.addDevice(B);
-			B.addLink(link);
-			
-			bP = new Port(B,((short) (3*i+2)),10+(int)(Math.random()*190));
-			bP.setLastTrigger(0);
-			bP.setJitter((short) (Math.random()*50));
-			bP.setStatus(Port.SENDING);
-			bP.setConnection(con);
-			protocol.addDeviceOfRole(bP, 2);
-			con.addSmartDevice(bP);
-			B.addPort(bP);
-			
-			networkController.addSmartDevice(B);
-			
-			C = new BoolCollectorDevice("SmartDoorStatusLight"+i+"(Sub)");
-			((BoolCollectorDevice)C).setBCinfoName("room"+i+"/DoorOpen");
-			C.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			C.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
-			link.addDevice(C);
-			C.addLink(link);
-			
-			cP = new Port(C,((short) (3*i+1)), 50+(int)(Math.random()*450));
-			cP.setLastTrigger(0);
-			cP.setJitter((short) (Math.random()*50));
-			cP.setStatus(Port.SENDING);
-			cP.setConnection(con);
-			protocol.addDeviceOfRole(cP, 3);
-			con.addSmartDevice(cP);
-			C.addPort(cP);
-			
-			networkController.addSmartDevice(C);
-			controller.notifyObservers();
-		}
-	}
-	
-	/**
-	 * Creates the paper toy example, also simulates it, if run = true
-	 * @param run
-	 */
-	@SuppressWarnings("unchecked")
-	public void createPaperExample(boolean run){
-		/**
-		 * Reset network, etc.
-		 */
-		if(run) {
-			controller.getSimulationController().resetSimulation();
-			controller.getNetworkController().deleteNetworkModel();
-		}
-		/*
-		 * Main networking devices 
-		 */
-		SmartDevice router = networkController.createSmartDevice("Wifi-Router", 500, 100, 50);
-		SmartDevice zigBeeRouter = networkController.createSmartDevice("ZigBee-Router", 500, 300, 50);
-		SmartDevice broker = networkController.createSmartDevice("SmartHub", 500, 500, 50);
-		
-		/*
-		 * Links/Networks
-		 */
-		Link wifi = new PrecisionLink("Wifi");
-		networkController.addLink(wifi);
-		Link zigbee = new PrecisionLink("ZigBee");
-		networkController.addLink(zigbee);
-		
-		/*
-		 * Connect Devices to Links
-		 */
-		networkController.addLinkToDevice(wifi, router);
-		networkController.addLinkToDevice(wifi, zigBeeRouter);
-		networkController.addLinkToDevice(zigbee, zigBeeRouter);
-		networkController.addLinkToDevice(zigbee, broker);
-		
-		/*
-		 * Internet Access Connection 
-		 */
-		Connection inetAcces = new ConnectionPrecision();
-		inetAcces.setName("Cloud  Access");
-		networkController.addConnectionToLink(inetAcces, wifi);
-		inetAcces.setProtocol(new SimpleProtocol());
-		Port pRouter = new Port(router, (short)80, 500L);
-		pRouter.setTriggerHandler(new NormalDistributionHandler(500, 100));
-		networkController.addDeviceToConnectionAndProtocol(pRouter, inetAcces, 0);
-		Port pZigBee = new Port(zigBeeRouter, (short)80, 1000L);
-		pZigBee.setTriggerHandler(new NormalDistributionHandler(1000, 300));
-		networkController.addDeviceToConnectionAndProtocol(pRouter, inetAcces, 0);
-		networkController.addDeviceToConnectionAndProtocol(pZigBee, inetAcces, 1);
-		networkController.addConnection(inetAcces);
-		
-		/*
-		 * ZigbeeRouter -> Broker ? 
-		 */
-		Connection homeAutomationInternetAccess = new ConnectionPrecision();
-		homeAutomationInternetAccess.setName("Home Automation Webinterface");
-		networkController.addConnectionToLink(homeAutomationInternetAccess, zigbee);
-		homeAutomationInternetAccess.setProtocol(new SimpleProtocol());
-		Port pBrokerWebInterface = new Port(broker, (short)80);
-		pBrokerWebInterface.setTriggerHandler(new NormalDistributionHandler(2000, 500));
-		pBrokerWebInterface.setStatus(Port.SENDING);
-		pBrokerWebInterface.setResponseTime((short)2);
-		pBrokerWebInterface.setLastTrigger(-284L);
-		networkController.addDeviceToConnectionAndProtocol(pBrokerWebInterface, homeAutomationInternetAccess, 0);
-		networkController.addConnection(homeAutomationInternetAccess);
-		Port pRouterWebInterface = new Port(zigBeeRouter, (short)80);
-		pRouterWebInterface.setTriggerHandler(new NormalDistributionHandler(5000, 3000));
-		pRouterWebInterface.setStatus(Port.SENDING);
-		pRouterWebInterface.setResponseTime((short)2);
-		pRouterWebInterface.setLastTrigger(-142L);
-		networkController.addDeviceToConnectionAndProtocol(pRouterWebInterface, homeAutomationInternetAccess, 1);
-		networkController.addConnection(homeAutomationInternetAccess);
-		
-		
-		/*
-		 * Create MQTT Connection
-		 */
-		Connection mqtt = new ConnectionPrecision();
-		mqtt.setName("Automation (MQTT)");
-		networkController.addConnectionToLink(mqtt, zigbee);
-		mqtt.setProtocol(new MQTT_protocol());
-		Port pBroker = new Port(broker, (short)1883);
-		pBroker.setStatus(Port.OPEN);
-		pBroker.setResponseTime((short)2);
-		networkController.addDeviceToConnectionAndProtocol(pBroker, mqtt, 0);
-		networkController.addConnection(mqtt);
-		
-		/*
-		 * Add some MQTT Devices
-		 */
-		
-		/**
-		 * Kitchen Thermostat
-		 */
-		FloatSensorDevice floatSensor = new FloatSensorDevice("Kitchen Thermostat");
-		floatSensor.setFSinfoName("home/kitchen/temperature");
-		networkController.addLinkToDevice(zigbee, floatSensor);
-		networkController.moveSmartDevice(floatSensor, 300, 500, 50);
-		floatSensor.setFSmin(15.0f);
-		floatSensor.setFSmax(32.0f);
-		networkController.addSmartDevice(floatSensor);
-		Port pFloatSensor = new Port(floatSensor, (short)1883, 15000);
-		pFloatSensor.setTriggerHandler(new NormalDistributionHandler(15000, 500));
-		pFloatSensor.setStatus(Port.SENDING);
-		pFloatSensor.setLastTrigger(-357L);
-		networkController.addDeviceToConnectionAndProtocol(pFloatSensor, mqtt,1);
-		
-		/*
-		 * Add Fridge
-		 */
-		FloatSensorDevice kitchenFridge = new FloatSensorDevice("Smart Fridge");
-		kitchenFridge.setFSinfoName("home/kitchen/fridgeTemp");
-		networkController.addLinkToDevice(zigbee, kitchenFridge);
-		networkController.moveSmartDevice(kitchenFridge, 100, 600, 50);
-		kitchenFridge.setFSmin(-6.0f);
-		kitchenFridge.setFSmax(-4.0f);
-		networkController.addSmartDevice(kitchenFridge);
-		Port pKitchenFridge = new Port(kitchenFridge, (short)1883, 15000);
-		pKitchenFridge.setStatus(Port.SENDING);
-		pKitchenFridge.setTriggerHandler(new NormalDistributionHandler(15000, 500));
-		pKitchenFridge.setLastTrigger(-1231L);
-		networkController.addDeviceToConnectionAndProtocol(pKitchenFridge, mqtt,1);
-		
-		
-		/*
-		 * Add some kitchen lights
-		 */
-		BoolSensorDevice kitchenLight = new BoolSensorDevice("Kitchen Light");
-		kitchenLight.setBSinfoName("home/kitchen/light");
-		networkController.addLinkToDevice(zigbee, kitchenLight);
-		networkController.moveSmartDevice(kitchenLight, 250, 400, 50);
-		networkController.addSmartDevice(kitchenLight);
-		Port pKitchenLight = new Port(kitchenLight, (short)1883, 15000);
-		pKitchenLight.setTriggerHandler(new NormalDistributionHandler(15000, 500));
-		pKitchenLight.setStatus(Port.SENDING);
-		pKitchenLight.setLastTrigger(-1207L);
-		networkController.addDeviceToConnectionAndProtocol(pKitchenLight, mqtt,1);
-		
-		//TODO Further devices & Connections
-		
-		/*
-		 * Bedroom
-		 */
-		BoolSensorDevice sleepingRoomLight = new BoolSensorDevice("Bedroom Light");
-		sleepingRoomLight.setBSinfoName("home/bedroom/light");
-		networkController.addLinkToDevice(zigbee, sleepingRoomLight);
-		networkController.moveSmartDevice(sleepingRoomLight, 750, 400, 50);
-		networkController.addSmartDevice(sleepingRoomLight);
-		Port pBedroomLight = new Port(sleepingRoomLight, (short)1883, 15000);
-		pBedroomLight.setTriggerHandler(new NormalDistributionHandler(15000, 500));
-		pBedroomLight.setStatus(Port.SENDING);
-		pBedroomLight.setLastTrigger(-1337L);
-		networkController.addDeviceToConnectionAndProtocol(pBedroomLight, mqtt,1);
-		
-		/*
-		 * Bedroom Thermostat
-		 */
-		FloatSensorDevice bedroomThermostat = new FloatSensorDevice("Bedroom Thermostat");
-		bedroomThermostat.setFSinfoName("home/bedroom/temperature");
-		networkController.addLinkToDevice(zigbee, bedroomThermostat);
-		networkController.moveSmartDevice(bedroomThermostat, 700, 500, 50);
-		bedroomThermostat.setFSmin(15.0f);
-		bedroomThermostat.setFSmax(32.0f);
-		networkController.addSmartDevice(bedroomThermostat);
-		Port pBedroomThermostat = new Port(bedroomThermostat, (short)1883, 15000);
-		pBedroomThermostat.setTriggerHandler(new NormalDistributionHandler(15000, 500));
-		pBedroomThermostat.setStatus(Port.SENDING);
-		pBedroomThermostat.setLastTrigger(-820L);
-		networkController.addDeviceToConnectionAndProtocol(pBedroomThermostat, mqtt,1);
-		
-		
-		/*
-		 * Bedroom Info Screen
-		 */
-		FloatCollectorDevice bedroomInfoScreen = new FloatCollectorDevice("Information Panel");
-		bedroomInfoScreen.setFCinfoName("home/kitchen/fridgeTemp");
-		networkController.addLinkToDevice(zigbee, bedroomInfoScreen);
-		networkController.moveSmartDevice(bedroomInfoScreen, 900, 600, 50);
-		networkController.addSmartDevice(bedroomInfoScreen);
-		Port pBedroomInfo = new Port(bedroomInfoScreen, (short)1883, 15000);
-		pBedroomInfo.setStatus(Port.SENDING);
-		pBedroomInfo.setTriggerHandler(new NormalDistributionHandler(15000, 500));
-		pBedroomInfo.setLastTrigger(-666L);
-		networkController.addDeviceToConnectionAndProtocol(pBedroomInfo, mqtt,1);
-		/* 
-		 * Update visualization 
-		 */
-		controller.notifyObservers();
-		
-		/**
-		 * Run only if run == true
-		 */
-		if(!run)return;
-		try {
-			System.out.println("Check 1");//TODO
-			/**
-			 * Instances of the packet Sniffers
-			 */
-			PacketSniffer snifferEM = null, snifferKNN = null, snifferHC = null;
-			/*
-			 * Import Example PacketSniffer algorithms
-			 */
-			Class<? extends PacketSniffer> em = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/EMClustering.java"));
-			snifferEM = em.newInstance();
-			Class<? extends PacketSniffer> knn = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/KMeansClustering.java"));
-			snifferKNN = knn.newInstance();
-			Class<? extends PacketSniffer> hc = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/HierarchicalClustering.java"));
-			snifferHC = hc.newInstance();
-
-			System.out.println("Check 2: Imported");//TODO
-			/*
-			 * Create collectors
-			 */
-			PacketCollector collectorKNN = new PacketCollector(snifferKNN);
-			//PacketCollector collectorEM = new PacketCollector(snifferEM);
-			//PacketCollector collectorHC = new PacketCollector(snifferHC);
-			
-			/*
-			 * Capture both links on all collectors
-			 */
-			PacketCaptureController captureController = controller.getSimulationController().getPacketCaptureController();
-			//captureController.addLinkToCollector(collectorEM, zigbee);
-			//captureController.addLinkToCollector(collectorEM, wifi);
-			captureController.addLinkToCollector(collectorKNN, zigbee);
-			captureController.addLinkToCollector(collectorKNN, wifi);
-			//captureController.addLinkToCollector(collectorHC, zigbee);
-			//captureController.addLinkToCollector(collectorHC, wifi);
-			captureController.addPacketCollector(collectorKNN);
-			//captureController.addPacketCollector(collectorEM);
-			//captureController.addPacketCollector(collectorHC);
-
-			System.out.println("Check 3: created Controller");//TODO
-			
-			long currentTime = System.currentTimeMillis();
-			
-			long hour = 60 * 60 * 1000;
-			/*
-			 * Simulate 24 hours
-			 */
-			SimulationController sim = controller.getSimulationController();
-			sim.setStartTime(0);
-			sim.resetSimulation();
-			sim.setStepDuration(hour);
-			sim.setPrintPackets(false);
-			sim.setEndTime(24*hour);
-
-			kitchenFridge.setFSmin(-6f);
-			kitchenFridge.setFSmax(-4f);
-			kitchenFridge.setFSval(-5f);
-			System.out.println("Training:");//TODO
-			for(int i=0; i<24; i++)
-				sim.getSimulationManager().simulateTimeIntervall(i*hour, hour);
-			
-			long new_time = System.currentTimeMillis();
-			long elapsed_time = new_time-currentTime;
-			System.out.println("Training data generation: "+elapsed_time+"ms");
-			currentTime = new_time;
-			
-			collectorKNN.setMode(true);
-			//collectorEM.setMode(true);
-			//collectorHC.setMode(true);
-			new_time = System.currentTimeMillis();
-			elapsed_time = new_time-currentTime;
-			System.out.println("Training of algorithm: "+elapsed_time+"ms");
-			currentTime = new_time;
-			
-			
-			
-			/*
-			 * Simulate/Test 1 hour without anomalies
-			 */
-
-			System.out.println("Test w/0 anomalies:");//TODO
-			for(int i=24; i<25; i++)
-				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
-			
-			new_time = System.currentTimeMillis();
-			elapsed_time = new_time-currentTime;
-			System.out.println("Training data generation: "+elapsed_time+"ms");
-			currentTime = new_time;
-			
-			System.out.println("DDoS:");
-			/**
-			 * 1 hour DDoS
-			 */
-			Connection ddos = anomalyController.openDDosCreationMenu(broker, new LinkedList<SmartDevice>(zigbee.getDevices()));	
-			for(int i=25; i<26; i++)
-				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
-			networkController.deleteConnection(ddos);
-			
-			new_time = System.currentTimeMillis();
-			elapsed_time = new_time-currentTime;
-			System.out.println("DDoS generation & classification: "+elapsed_time+"ms");
-			currentTime = new_time;
-			
-			System.out.println("DoS:");
-			/**
-			 * 1 hour DoS
-			 */
-			Connection dos = anomalyController.runDosAttack(kitchenLight, kitchenFridge);
-			for(int i=26; i<27; i++)
-				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
-			networkController.deleteConnection(dos);
-			
-			new_time = System.currentTimeMillis();
-			elapsed_time = new_time-currentTime;
-			System.out.println("DoS generation & classification: "+elapsed_time+"ms");
-			currentTime = new_time;
-			
-			/**
-			 * Value Anomaly 1h
-			 */
-			System.out.println("Value Anomalies:");
-			float min = kitchenFridge.getFSmin();
-			float max = kitchenFridge.getFSmax();
-			float val = kitchenFridge.getFSval();
-			kitchenFridge.setFSmin(18);
-			kitchenFridge.setFSval(18.5f);
-			kitchenFridge.setFSmax(24);
-			kitchenFridge.setLabel((short)-1);//-1 Value anomaly
-			for(int i=27; i<28; i++)
-				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
-			kitchenFridge.setFSmin(min);
-			kitchenFridge.setFSmax(max);
-			kitchenFridge.setFSval(val);
-			kitchenFridge.setLabel((short)0);
-			
-			new_time = System.currentTimeMillis();
-			elapsed_time = new_time-currentTime;
-			System.out.println("Anomaly generation & classification: "+elapsed_time+"ms");
-			currentTime = new_time;
-			
-			System.out.println("Testing completed");
-		} catch(Exception e) {
-			System.out.println("WARNING: Testing failed: ");
-			e.printStackTrace();
-		}
-	}
-}
+package de.tu_darmstadt.tk.SmartHomeNetworkSim.view.menuBar;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map.Entry;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.ExampleAnomalyController;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.ImportController;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.NetworkController;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.PacketCaptureController;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SettingsController;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.SimulationController;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Connection;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPerformance;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.ConnectionPrecision;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketCollector;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketSniffer;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PrecisionLink;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Protocol;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolCollectorDevice;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.BoolSensorDevice;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatCollectorDevice;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices.FloatSensorDevice;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.distributionHandler.NormalDistributionHandler;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.protocols.MQTT_protocol;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.CountingMetric;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.Manipulation_RandomMove;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleLink;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.simpleImplementation.SimpleProtocol;
+
+public class MenuBarNetworkExamples extends JMenu{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Controller controller
+	 */
+	private Controller controller;
+	
+	/**
+	 * Controller for editing the network
+	 */
+	private NetworkController networkController;
+	
+	/**
+	 * Controller to insert anomalies
+	 */
+	private ExampleAnomalyController anomalyController;
+	
+	/**
+	 * Controller for configuration of the program
+	 */
+	private SettingsController settingsController;
+	
+	/**
+	 * SimulationController for running the simulation
+	 */
+	private SimulationController simulationController;
+
+	/**
+	 * Creates the JMenu for network examples in the MenuBar
+	 * @param controller controller to create examples
+	 */
+	public MenuBarNetworkExamples(Controller controller) {
+		super("Create example Network");
+		
+		this.controller = controller;
+		this.networkController = controller.getNetworkController();
+		this.anomalyController = networkController.getAnomalyController();
+		this.settingsController = controller.getSettingsController();
+		this.simulationController = controller.getSimulationController();
+		
+		/**
+		 * MQTT example
+		 */
+		JMenuItem mnMQTT = new JMenuItem("MQTT Example");
+		mnMQTT.addActionListener(a->initializeMQTTTest());
+		this.add(mnMQTT);
+		
+		/**
+		 * Small Network Test
+		 */
+		JMenuItem mnTest = new JMenuItem("Network Example");
+		mnTest.addActionListener(a->initializeTest());
+		this.add(mnTest);
+		
+		/**
+		 * Performance Comparison Example
+		 */
+		JMenuItem mnPerformance = new JMenuItem("Performane Evaluation Preset");
+		mnPerformance.addActionListener(a->initializePerformanceTest());
+		this.add(mnPerformance);
+		
+		/**
+		 * User Study Preset
+		 */
+		JMenuItem mnUserStudy = new JMenuItem("User Study Preset");
+		mnUserStudy.addActionListener(a->initializeUserStudy());
+		this.add(mnUserStudy);
+		
+		/**
+		 * Packet Collection example
+		 */
+		JMenuItem mnPacketCollectionExmample = new JMenuItem("Packet Collection Example");
+		mnPacketCollectionExmample.addActionListener(a->testPackageCollection());
+		this.add(mnPacketCollectionExmample);
+		
+		/**
+		 * Paper example
+		 */
+		JMenuItem mnPaperExample = new JMenuItem("Paper Example");
+		mnPaperExample.addActionListener(a->createPaperExample(false));
+		this.add(mnPaperExample);
+		
+		/**
+		 * Paper example + run
+		 */
+		JMenuItem mnRunPaperExample = new JMenuItem("Run Paper Example");
+		mnRunPaperExample.addActionListener(a->createPaperExample(true));
+		this.add(mnRunPaperExample);
+		
+		/**
+		 * SWC example
+		 */
+		JMenuItem mnSWCExample = new JMenuItem("SWC Example");
+		mnSWCExample.addActionListener(a->createSWCExample(false));
+		this.add(mnSWCExample);
+		
+		/**
+		 * SWC example + run
+		 */
+		JMenuItem mnRunSWCExample = new JMenuItem("Run SWC Example");
+		mnRunSWCExample.addActionListener(a->createSWCExample(true));
+		this.add(mnRunSWCExample);
+	}
+
+	private void initializePerformanceTest(){
+		SmartDevice tic = new SmartDevice("Tic");
+		tic.setX(100);
+		tic.setY(100);
+		SmartDevice toc = new SmartDevice("Toc");
+		toc.setX(100);
+		toc.setY(250);
+		networkController.addSmartDevice(tic);
+		networkController.addSmartDevice(toc);
+		
+		Link l = new PrecisionLink("Channel");
+		networkController.addLink(l);
+		networkController.addLinkToDevice(l, tic);
+		networkController.addLinkToDevice(l, toc);
+
+		Port ticP = new Port(tic, (short)2, 200, (short)0, 0, (short)0);
+		Port tocP = new Port(toc, (short)3, 200, (short)0, -100, (short)0);
+		tic.addPort(ticP);
+		toc.addPort(tocP);
+		
+		Connection con = new ConnectionPrecision(l, new SimpleProtocol());
+		networkController.addConnection(con);
+		networkController.addConnectionToLink(con, l);
+		networkController.addDeviceToConnectionAndProtocol(ticP, con, 0);
+		networkController.addDeviceToConnectionAndProtocol(tocP, con, 1);
+		
+		simulationController.setStepDuration(100000000);
+		simulationController.setEndTime(1000000000);
+		controller.notifyObservers();
+	}
+	
+	/**
+	 * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
+	 */
+	private void initializeUserStudy(){
+		/**
+		 * Preset one SmartDevice
+		 */
+		SmartDevice A = new SmartDevice("Homestation");
+		A.setX(200);
+		A.setY(200);
+		networkController.addSmartDevice(A);
+		/**
+		 * Packagecollector, which is registered at the Device
+		 */
+		PacketCollector collector = new PacketCollector(new CountingMetric());
+		simulationController.getPacketCaptureController().addPacketCollector(collector);
+		simulationController.getPacketCaptureController().addDeviceToCollector(collector, A);
+		simulationController.setPrintPackets(true);
+		controller.notifyObservers();
+	}
+	
+	/**
+	 * Test package collectors
+	 */
+	private void testPackageCollection() {
+		if(networkController.getSmartDevices().size()<3)
+			return;
+		simulationController.addAlgorithm(new Manipulation_RandomMove(), controller);
+	    PacketCollector collector = new PacketCollector();
+	    simulationController.getSimulationManager().getPacketCollectionManager().addPacketCollector(collector);
+	    
+	    System.out.println("Collector 0-500 - nothing collected:");
+	    simulationController.getSimulationManager().simulateTimeIntervall(0, 500);
+	    HashMap<Link, LinkedList<Packet>> map = collector.getPackets();
+	    for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
+	    	System.out.println("Link: "+e.getKey().getName());
+	    	for(Packet p : e.getValue())
+	    		System.out.println(p.getTextualRepresentation());
+	    }
+	    
+	    System.out.println("");
+	    System.out.println("");
+	    Iterator<SmartDevice> it = networkController.getSmartDevices().iterator();
+	    it.next();
+	    
+	    SmartDevice d = it.next();
+	    collector.addDevice(d);
+	    SmartDevice f = it.next();
+	    collector.addDevice(f);
+	    System.out.println("Collector 500-1000 - "+d.getName()+" & "+f.getName()+" collected:");
+	    simulationController.getSimulationManager().simulateTimeIntervall(500, 500);
+	    map = collector.getPackets();
+	    for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
+	    	System.out.println("Link: "+e.getKey().getName());
+	    	for(Packet p : e.getValue())
+	    		System.out.println(p.getTextualRepresentation());
+	    }
+
+	    System.out.println("");
+	    System.out.println("");
+	    
+	    Link l = networkController.getLinks().iterator().next();
+	    collector.addLink(l);
+	    System.out.println("Collector 2000-3000 - "+l+" collected:");
+	    simulationController.getSimulationManager().simulateTimeIntervall(1000, 500);
+	    map = collector.getPackets();
+	    for(Entry<Link, LinkedList<Packet>> e:map.entrySet()){
+	    	System.out.println("Link: "+e.getKey().getName());
+	    	for(Packet p : e.getValue())
+	    		System.out.println(p.getTextualRepresentation());
+	    }
+	    simulationController.resetSimulation();
+		controller.notifyObservers();
+	}
+	
+	/**
+	 * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
+	 */
+	private void initializeTest(){
+		SmartDevice A = null, B = null, C = null;
+		for(int i = 0; i<5; i++){
+			A = new SmartDevice("SmartTV"+i);		
+			A.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			A.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			B = new SmartDevice("SmartDoor"+i);
+			B.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			B.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			C = new SmartDevice("SmartLight"+i);
+			C.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			C.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+		
+			networkController.addSmartDevice(A);
+			networkController.addSmartDevice(B);
+			networkController.addSmartDevice(C);
+		}
+		
+		Link link = new SimpleLink("SimpleWifi");
+		link.addDevice(A);
+		link.addDevice(B);
+		link.addDevice(C);
+		A.addLink(link);
+		B.addLink(link);
+		C.addLink(link);
+		
+		Port a = new Port(A, (short) 1, 68);
+		a.setLastTrigger(0);
+		a.setStatus(Port.SENDING);
+		A.addPort(a);
+		Port b = new Port(B, (short) 2, 102);
+		b.setStatus(Port.SENDING);
+		B.addPort(b);
+		
+		Connection s = new ConnectionPerformance(link, new SimpleProtocol(a, b));
+		s.setPacketLossProbability(0.01);//1% Packet loss probability
+		a.setConnection(s);
+		b.setConnection(s);
+		s.addSmartDevice(a);
+		s.addSmartDevice(b);
+
+		link.addConnection(s);
+		
+		networkController.addLink(link);
+		networkController.addConnection(s);
+		controller.notifyObservers();
+	}
+	
+	/**
+	 * Initializes a basic test Network, which contains a few SmartDevices, one Link and one Connection
+	 */
+	private void initializeMQTTTest(){
+		SimpleLink link = new SimpleLink("WIFI");
+		link.setFixedDelay(5);
+		
+		SmartDevice broker = new SmartDevice("MQTT-Broker");
+		broker.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+		broker.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+		networkController.addSmartDevice(broker);
+		
+		Port brokerPort = new Port(broker, (short) 0, 987);
+		brokerPort.setLastTrigger(0);
+		brokerPort.setStatus(Port.OPEN);		
+		broker.addPort(brokerPort);
+		
+		link.addDevice(broker);
+		broker.addLink(link);
+		
+		Protocol protocol = new MQTT_protocol(brokerPort);
+		
+		Connection con = new ConnectionPrecision(link, protocol);
+		con.setPacketLossProbability(0.01);//1% Packet loss probability
+		con.addSmartDevice(brokerPort);
+		brokerPort.setConnection(con);
+		con.setStatus(Connection.ACTIVE);
+		networkController.addLink(link);
+		link.addConnection(con);
+		networkController.addConnection(con);
+		
+		SmartDevice A = null, A1 = null, A2 = null, B = null, C = null;
+		Port aP,a1P,a2P,bP,cP;
+		for(int i = 0; i<3; i++){
+			FloatSensorDevice aS = new FloatSensorDevice("SmartThermostat"+i+"(Pub)");	
+			aS.setFSinfoName("room"+i+"/temperature");
+			A=aS;
+			A.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			A.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			link.addDevice(A);
+			A.addLink(link);
+			
+			aP = new Port(A,((short) (3*i+1)),100+(int)(Math.random()*900));
+			aP.setLastTrigger(0);
+			aP.setJitter((short) (Math.random()*50));
+			aP.setStatus(Port.SENDING);
+			aP.setConnection(con);
+			protocol.addDeviceOfRole(aP, 2);
+			con.addSmartDevice(aP);
+			A.addPort(aP);
+			
+			networkController.addSmartDevice(A);
+			
+			
+			FloatCollectorDevice aS1 = new FloatCollectorDevice("SmartAirCondition"+i+"(Sub)");	
+			aS1.setFCinfoName("room"+i+"/temperature");
+			A1=aS1;
+			A1.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			A1.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			link.addDevice(A1);
+			A1.addLink(link);
+			
+			a1P = new Port(A1,((short) (3*i+1)),100+(int)(Math.random()*900));
+			a1P.setLastTrigger(0);
+			a1P.setJitter((short) (Math.random()*50));
+			a1P.setStatus(Port.SENDING);
+			a1P.setConnection(con);
+			protocol.addDeviceOfRole(a1P, 3);
+			con.addSmartDevice(a1P);
+			A1.addPort(a1P);
+			
+			networkController.addSmartDevice(A1);
+			
+			
+			FloatCollectorDevice aS2 = new FloatCollectorDevice("SmartHeater"+i+"(Sub)");	
+			aS2.setFCinfoName("room"+i+"/temperature");
+			A2=aS2;
+			A2.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			A2.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			link.addDevice(A2);
+			A2.addLink(link);
+			
+			a2P = new Port(A2,((short) (3*i+1)),100+(int)(Math.random()*900));
+			a2P.setLastTrigger(0);
+			a2P.setJitter((short) (Math.random()*50));
+			a2P.setStatus(Port.SENDING);
+			a2P.setConnection(con);
+			protocol.addDeviceOfRole(a2P, 3);
+			con.addSmartDevice(a2P);
+			A2.addPort(a2P);
+			
+			networkController.addSmartDevice(A2);
+			
+			
+			
+			
+			B = new BoolSensorDevice("SmartDoor"+i+"(Pub)");
+			((BoolSensorDevice)B).setBSinfoName("room"+i+"/DoorOpen");
+			B.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			B.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			link.addDevice(B);
+			B.addLink(link);
+			
+			bP = new Port(B,((short) (3*i+2)),10+(int)(Math.random()*190));
+			bP.setLastTrigger(0);
+			bP.setJitter((short) (Math.random()*50));
+			bP.setStatus(Port.SENDING);
+			bP.setConnection(con);
+			protocol.addDeviceOfRole(bP, 2);
+			con.addSmartDevice(bP);
+			B.addPort(bP);
+			
+			networkController.addSmartDevice(B);
+			
+			C = new BoolCollectorDevice("SmartDoorStatusLight"+i+"(Sub)");
+			((BoolCollectorDevice)C).setBCinfoName("room"+i+"/DoorOpen");
+			C.setX((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			C.setY((int)(Math.random()*settingsController.getWidth()-2*settingsController.getDeviceVisualizationRadius())+settingsController.getDeviceVisualizationRadius());
+			link.addDevice(C);
+			C.addLink(link);
+			
+			cP = new Port(C,((short) (3*i+1)), 50+(int)(Math.random()*450));
+			cP.setLastTrigger(0);
+			cP.setJitter((short) (Math.random()*50));
+			cP.setStatus(Port.SENDING);
+			cP.setConnection(con);
+			protocol.addDeviceOfRole(cP, 3);
+			con.addSmartDevice(cP);
+			C.addPort(cP);
+			
+			networkController.addSmartDevice(C);
+			controller.notifyObservers();
+		}
+	}
+	
+	/**
+	 * Creates the paper toy example, also simulates it, if run = true
+	 * @param run
+	 */
+	@SuppressWarnings("unchecked")
+	public void createPaperExample(boolean run){
+		/**
+		 * Reset network, etc.
+		 */
+		if(run) {
+			controller.getSimulationController().resetSimulation();
+			controller.getNetworkController().deleteNetworkModel();
+		}
+		/*
+		 * Main networking devices 
+		 */
+		SmartDevice router = networkController.createSmartDevice("Wifi-Router", 500, 100, 50);
+		SmartDevice zigBeeRouter = networkController.createSmartDevice("ZigBee-Router", 500, 300, 50);
+		SmartDevice broker = networkController.createSmartDevice("SmartHub", 500, 500, 50);
+		
+		/*
+		 * Links/Networks
+		 */
+		Link wifi = new PrecisionLink("Wifi");
+		networkController.addLink(wifi);
+		Link zigbee = new PrecisionLink("ZigBee");
+		networkController.addLink(zigbee);
+		
+		/*
+		 * Connect Devices to Links
+		 */
+		networkController.addLinkToDevice(wifi, router);
+		networkController.addLinkToDevice(wifi, zigBeeRouter);
+		networkController.addLinkToDevice(zigbee, zigBeeRouter);
+		networkController.addLinkToDevice(zigbee, broker);
+		
+		/*
+		 * Internet Access Connection 
+		 */
+		Connection inetAcces = new ConnectionPrecision();
+		inetAcces.setName("Cloud  Access");
+		networkController.addConnectionToLink(inetAcces, wifi);
+		inetAcces.setProtocol(new SimpleProtocol());
+		Port pRouter = new Port(router, (short)80, 500L);
+		pRouter.setTriggerHandler(new NormalDistributionHandler(500, 100));
+		networkController.addDeviceToConnectionAndProtocol(pRouter, inetAcces, 0);
+		Port pZigBee = new Port(zigBeeRouter, (short)80, 1000L);
+		pZigBee.setTriggerHandler(new NormalDistributionHandler(1000, 300));
+		networkController.addDeviceToConnectionAndProtocol(pRouter, inetAcces, 0);
+		networkController.addDeviceToConnectionAndProtocol(pZigBee, inetAcces, 1);
+		networkController.addConnection(inetAcces);
+		
+		/*
+		 * ZigbeeRouter -> Broker ? 
+		 */
+		Connection homeAutomationInternetAccess = new ConnectionPrecision();
+		homeAutomationInternetAccess.setName("Home Automation Webinterface");
+		networkController.addConnectionToLink(homeAutomationInternetAccess, zigbee);
+		homeAutomationInternetAccess.setProtocol(new SimpleProtocol());
+		Port pBrokerWebInterface = new Port(broker, (short)80);
+		pBrokerWebInterface.setTriggerHandler(new NormalDistributionHandler(2000, 500));
+		pBrokerWebInterface.setStatus(Port.SENDING);
+		pBrokerWebInterface.setResponseTime((short)2);
+		pBrokerWebInterface.setLastTrigger(-284L);
+		networkController.addDeviceToConnectionAndProtocol(pBrokerWebInterface, homeAutomationInternetAccess, 0);
+		networkController.addConnection(homeAutomationInternetAccess);
+		Port pRouterWebInterface = new Port(zigBeeRouter, (short)80);
+		pRouterWebInterface.setTriggerHandler(new NormalDistributionHandler(5000, 3000));
+		pRouterWebInterface.setStatus(Port.SENDING);
+		pRouterWebInterface.setResponseTime((short)2);
+		pRouterWebInterface.setLastTrigger(-142L);
+		networkController.addDeviceToConnectionAndProtocol(pRouterWebInterface, homeAutomationInternetAccess, 1);
+		networkController.addConnection(homeAutomationInternetAccess);
+		
+		
+		/*
+		 * Create MQTT Connection
+		 */
+		Connection mqtt = new ConnectionPrecision();
+		mqtt.setName("Automation (MQTT)");
+		networkController.addConnectionToLink(mqtt, zigbee);
+		mqtt.setProtocol(new MQTT_protocol());
+		Port pBroker = new Port(broker, (short)1883);
+		pBroker.setStatus(Port.OPEN);
+		pBroker.setResponseTime((short)2);
+		networkController.addDeviceToConnectionAndProtocol(pBroker, mqtt, 0);
+		networkController.addConnection(mqtt);
+		
+		/*
+		 * Add some MQTT Devices
+		 */
+		
+		/**
+		 * Kitchen Thermostat
+		 */
+		FloatSensorDevice floatSensor = new FloatSensorDevice("Kitchen Thermostat");
+		floatSensor.setFSinfoName("home/kitchen/temperature");
+		networkController.addLinkToDevice(zigbee, floatSensor);
+		networkController.moveSmartDevice(floatSensor, 300, 500, 50);
+		floatSensor.setFSmin(15.0f);
+		floatSensor.setFSmax(32.0f);
+		networkController.addSmartDevice(floatSensor);
+		Port pFloatSensor = new Port(floatSensor, (short)1883, 15000);
+		pFloatSensor.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pFloatSensor.setStatus(Port.SENDING);
+		pFloatSensor.setLastTrigger(-357L);
+		networkController.addDeviceToConnectionAndProtocol(pFloatSensor, mqtt,1);
+		
+		/*
+		 * Add Fridge
+		 */
+		FloatSensorDevice kitchenFridge = new FloatSensorDevice("Smart Fridge");
+		kitchenFridge.setFSinfoName("home/kitchen/fridgeTemp");
+		networkController.addLinkToDevice(zigbee, kitchenFridge);
+		networkController.moveSmartDevice(kitchenFridge, 100, 600, 50);
+		kitchenFridge.setFSmin(-6.0f);
+		kitchenFridge.setFSmax(-4.0f);
+		networkController.addSmartDevice(kitchenFridge);
+		Port pKitchenFridge = new Port(kitchenFridge, (short)1883, 15000);
+		pKitchenFridge.setStatus(Port.SENDING);
+		pKitchenFridge.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pKitchenFridge.setLastTrigger(-1231L);
+		networkController.addDeviceToConnectionAndProtocol(pKitchenFridge, mqtt,1);
+		
+		
+		/*
+		 * Add some kitchen lights
+		 */
+		BoolSensorDevice kitchenLight = new BoolSensorDevice("Kitchen Light");
+		kitchenLight.setBSinfoName("home/kitchen/light");
+		networkController.addLinkToDevice(zigbee, kitchenLight);
+		networkController.moveSmartDevice(kitchenLight, 250, 400, 50);
+		networkController.addSmartDevice(kitchenLight);
+		Port pKitchenLight = new Port(kitchenLight, (short)1883, 15000);
+		pKitchenLight.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pKitchenLight.setStatus(Port.SENDING);
+		pKitchenLight.setLastTrigger(-1207L);
+		networkController.addDeviceToConnectionAndProtocol(pKitchenLight, mqtt,1);
+		
+		//TODO Further devices & Connections
+		
+		/*
+		 * Bedroom
+		 */
+		BoolSensorDevice sleepingRoomLight = new BoolSensorDevice("Bedroom Light");
+		sleepingRoomLight.setBSinfoName("home/bedroom/light");
+		networkController.addLinkToDevice(zigbee, sleepingRoomLight);
+		networkController.moveSmartDevice(sleepingRoomLight, 750, 400, 50);
+		networkController.addSmartDevice(sleepingRoomLight);
+		Port pBedroomLight = new Port(sleepingRoomLight, (short)1883, 15000);
+		pBedroomLight.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pBedroomLight.setStatus(Port.SENDING);
+		pBedroomLight.setLastTrigger(-1337L);
+		networkController.addDeviceToConnectionAndProtocol(pBedroomLight, mqtt,1);
+		
+		/*
+		 * Bedroom Thermostat
+		 */
+		FloatSensorDevice bedroomThermostat = new FloatSensorDevice("Bedroom Thermostat");
+		bedroomThermostat.setFSinfoName("home/bedroom/temperature");
+		networkController.addLinkToDevice(zigbee, bedroomThermostat);
+		networkController.moveSmartDevice(bedroomThermostat, 700, 500, 50);
+		bedroomThermostat.setFSmin(15.0f);
+		bedroomThermostat.setFSmax(32.0f);
+		networkController.addSmartDevice(bedroomThermostat);
+		Port pBedroomThermostat = new Port(bedroomThermostat, (short)1883, 15000);
+		pBedroomThermostat.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pBedroomThermostat.setStatus(Port.SENDING);
+		pBedroomThermostat.setLastTrigger(-820L);
+		networkController.addDeviceToConnectionAndProtocol(pBedroomThermostat, mqtt,1);
+		
+		
+		/*
+		 * Bedroom Info Screen
+		 */
+		FloatCollectorDevice bedroomInfoScreen = new FloatCollectorDevice("Information Panel");
+		bedroomInfoScreen.setFCinfoName("home/kitchen/fridgeTemp");
+		networkController.addLinkToDevice(zigbee, bedroomInfoScreen);
+		networkController.moveSmartDevice(bedroomInfoScreen, 900, 600, 50);
+		networkController.addSmartDevice(bedroomInfoScreen);
+		Port pBedroomInfo = new Port(bedroomInfoScreen, (short)1883, 15000);
+		pBedroomInfo.setStatus(Port.SENDING);
+		pBedroomInfo.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pBedroomInfo.setLastTrigger(-666L);
+		networkController.addDeviceToConnectionAndProtocol(pBedroomInfo, mqtt,1);
+		/* 
+		 * Update visualization 
+		 */
+		controller.notifyObservers();
+		
+		/**
+		 * Run only if run == true
+		 */
+		if(!run)return;
+		try {
+			System.out.println("Check 1");//TODO
+			/**
+			 * Instances of the packet Sniffers
+			 */
+			PacketSniffer snifferEM = null, snifferKNN = null, snifferHC = null;
+			/*
+			 * Import Example PacketSniffer algorithms
+			 */
+			Class<? extends PacketSniffer> em = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/EMClustering.java"));
+			snifferEM = em.newInstance();
+			Class<? extends PacketSniffer> knn = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/KMeansClustering.java"));
+			snifferKNN = knn.newInstance();
+			Class<? extends PacketSniffer> hc = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/HierarchicalClustering.java"));
+			snifferHC = hc.newInstance();
+
+			System.out.println("Check 2: Imported");//TODO
+			/*
+			 * Create collectors
+			 */
+			PacketCollector collectorKNN = new PacketCollector(snifferKNN);
+			//PacketCollector collectorEM = new PacketCollector(snifferEM);
+			//PacketCollector collectorHC = new PacketCollector(snifferHC);
+			
+			/*
+			 * Capture both links on all collectors
+			 */
+			PacketCaptureController captureController = controller.getSimulationController().getPacketCaptureController();
+			//captureController.addLinkToCollector(collectorEM, zigbee);
+			//captureController.addLinkToCollector(collectorEM, wifi);
+			captureController.addLinkToCollector(collectorKNN, zigbee);
+			captureController.addLinkToCollector(collectorKNN, wifi);
+			//captureController.addLinkToCollector(collectorHC, zigbee);
+			//captureController.addLinkToCollector(collectorHC, wifi);
+			captureController.addPacketCollector(collectorKNN);
+			//captureController.addPacketCollector(collectorEM);
+			//captureController.addPacketCollector(collectorHC);
+
+			System.out.println("Check 3: created Controller");//TODO
+			
+			long currentTime = System.currentTimeMillis();
+			
+			long hour = 60 * 60 * 1000;
+			/*
+			 * Simulate 24 hours
+			 */
+			SimulationController sim = controller.getSimulationController();
+			sim.setStartTime(0);
+			sim.resetSimulation();
+			sim.setStepDuration(hour);
+			sim.setPrintPackets(false);
+			sim.setEndTime(24*hour);
+
+			kitchenFridge.setFSmin(-6f);
+			kitchenFridge.setFSmax(-4f);
+			kitchenFridge.setFSval(-5f);
+			System.out.println("Training:");//TODO
+			for(int i=0; i<24; i++)
+				sim.getSimulationManager().simulateTimeIntervall(i*hour, hour);
+			
+			long new_time = System.currentTimeMillis();
+			long elapsed_time = new_time-currentTime;
+			System.out.println("Training data generation: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			collectorKNN.setMode(true);
+			//collectorEM.setMode(true);
+			//collectorHC.setMode(true);
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("Training of algorithm: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			
+			
+			/*
+			 * Simulate/Test 1 hour without anomalies
+			 */
+
+			System.out.println("Test w/0 anomalies:");//TODO
+			for(int i=24; i<25; i++)
+				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
+			
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("Training data generation: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			System.out.println("DDoS:");
+			/**
+			 * 1 hour DDoS
+			 */
+			Connection ddos = anomalyController.openDDosCreationMenu(broker, new LinkedList<SmartDevice>(zigbee.getDevices()));	
+			for(int i=25; i<26; i++)
+				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
+			networkController.deleteConnection(ddos);
+			
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("DDoS generation & classification: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			System.out.println("DoS:");
+			/**
+			 * 1 hour DoS
+			 */
+			Connection dos = anomalyController.runDosAttack(kitchenLight, kitchenFridge);
+			for(int i=26; i<27; i++)
+				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
+			networkController.deleteConnection(dos);
+			
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("DoS generation & classification: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			/**
+			 * Value Anomaly 1h
+			 */
+			System.out.println("Value Anomalies:");
+			float min = kitchenFridge.getFSmin();
+			float max = kitchenFridge.getFSmax();
+			float val = kitchenFridge.getFSval();
+			kitchenFridge.setFSmin(18);
+			kitchenFridge.setFSval(18.5f);
+			kitchenFridge.setFSmax(24);
+			kitchenFridge.setLabel((short)-1);//-1 Value anomaly
+			for(int i=27; i<28; i++)
+				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
+			kitchenFridge.setFSmin(min);
+			kitchenFridge.setFSmax(max);
+			kitchenFridge.setFSval(val);
+			kitchenFridge.setLabel((short)0);
+			
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("Anomaly generation & classification: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			System.out.println("Testing completed");
+		} catch(Exception e) {
+			System.out.println("WARNING: Testing failed: ");
+			e.printStackTrace();
+		}
+	}
+	
+	
+	/**
+	 * Creates the paper toy example, also simulates it, if run = true
+	 * @param run
+	 */
+	@SuppressWarnings("unchecked")
+	public void createSWCExample(boolean run){
+		/**
+		 * Reset network, etc.
+		 */
+		if(run) {
+			controller.getSimulationController().resetSimulation();
+			controller.getNetworkController().deleteNetworkModel();
+		}
+		/*
+		 * Main networking devices 
+		 */
+		SmartDevice smartHub = networkController.createSmartDevice("SmartHub", 500, 500, 50);
+		
+		/*
+		 * Links/Networks
+		 */
+		Link zigbee = new PrecisionLink("ZigBee");
+		networkController.addLink(zigbee);
+		
+		/*
+		 * Connect Devices to Links
+		 */
+		networkController.addLinkToDevice(zigbee, smartHub);
+		
+		
+		/*
+		 * Create MQTT Connection
+		 */
+		Connection mqtt = new ConnectionPrecision();
+		mqtt.setName("HomeAutomation (MQTT)");
+		networkController.addConnectionToLink(mqtt, zigbee);
+		mqtt.setProtocol(new MQTT_protocol());
+		Port pBroker = new Port(smartHub, (short)1883);
+		pBroker.setStatus(Port.OPEN);
+		pBroker.setResponseTime((short)2);
+		networkController.addDeviceToConnectionAndProtocol(pBroker, mqtt, 0);
+		networkController.addConnection(mqtt);
+		
+		/*
+		 * Add some MQTT Devices
+		 */
+		
+		String roomName = "Bedroom";
+		/**
+		 * Room Thermostat
+		 */
+		FloatSensorDevice floatSensor = new FloatSensorDevice(roomName + " Thermostat");
+		floatSensor.setFSinfoName("home/" + roomName + "/sensorTemp");
+		networkController.addLinkToDevice(zigbee, floatSensor);
+		networkController.moveSmartDevice(floatSensor, 300, 500, 50);
+		floatSensor.setFSmin(15.0f);
+		floatSensor.setFSmax(32.0f);
+		networkController.addSmartDevice(floatSensor);
+		Port pFloatSensor = new Port(floatSensor, (short)1883, 15000);
+		pFloatSensor.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pFloatSensor.setStatus(Port.SENDING);
+		pFloatSensor.setLastTrigger(-357L);
+		networkController.addDeviceToConnectionAndProtocol(pFloatSensor, mqtt,1);
+		
+		/*
+		 * Add Heater
+		 */
+		FloatSensorDevice heaterDevice = new FloatSensorDevice(roomName + "Heater");
+		heaterDevice.setFSinfoName("home/" + roomName + "/heaterTemp");
+		networkController.addLinkToDevice(zigbee, heaterDevice);
+		networkController.moveSmartDevice(heaterDevice, 100, 600, 50);
+		heaterDevice.setFSmin(-6.0f);
+		heaterDevice.setFSmax(-4.0f);
+		networkController.addSmartDevice(heaterDevice);
+		Port pHeaterDevice = new Port(heaterDevice, (short)1883, 15000);
+		pHeaterDevice.setStatus(Port.SENDING);
+		pHeaterDevice.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pHeaterDevice.setLastTrigger(-1231L);
+		networkController.addDeviceToConnectionAndProtocol(pHeaterDevice, mqtt,1);
+		
+		
+		/*
+		 * Add some kitchen lights
+		 */
+		BoolSensorDevice smartLight = new BoolSensorDevice(roomName + "Light");
+		smartLight.setBSinfoName("home/" + roomName + "/light");
+		networkController.addLinkToDevice(zigbee, smartLight);
+		networkController.moveSmartDevice(smartLight, 250, 400, 50);
+		networkController.addSmartDevice(smartLight);
+		Port pSmartLight = new Port(smartLight, (short)1883, 15000);
+		pSmartLight.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pSmartLight.setStatus(Port.SENDING);
+		pSmartLight.setLastTrigger(-1207L);
+		networkController.addDeviceToConnectionAndProtocol(pSmartLight, mqtt,1);
+		
+		/*
+		 * Add light Sensor
+		 */
+		BoolSensorDevice lightSensor = new BoolSensorDevice(roomName + "Light");
+		lightSensor.setBSinfoName("home/" + roomName + "/light");
+		networkController.addLinkToDevice(zigbee, lightSensor);
+		networkController.moveSmartDevice(lightSensor, 750, 400, 50);
+		networkController.addSmartDevice(lightSensor);
+		Port pLightSensor = new Port(lightSensor, (short)1883, 15000);
+		pLightSensor.setTriggerHandler(new NormalDistributionHandler(15000, 500));
+		pLightSensor.setStatus(Port.SENDING);
+		pLightSensor.setLastTrigger(-1337L);
+		networkController.addDeviceToConnectionAndProtocol(pLightSensor, mqtt,1);
+		
+		
+		/* 
+		 * Update visualization 
+		 */
+		controller.notifyObservers();
+		
+		/**
+		 * Run only if run == true
+		 */
+		if(!run)return;
+		try {
+			System.out.println("Check 1");//TODO
+			/**
+			 * Instances of the packet Sniffers
+			 */
+			PacketSniffer snifferEM = null, snifferKNN = null, snifferHC = null;
+			/*
+			 * Import Example PacketSniffer algorithms
+			 */
+			/*
+			Class<? extends PacketSniffer> em = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/EMClustering.java"));
+			snifferEM = em.newInstance();
+
+			Class<? extends PacketSniffer> hc = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/HierarchicalClustering.java"));
+			snifferHC = hc.newInstance();*/
+			
+			Class<? extends PacketSniffer> knn = (Class<? extends PacketSniffer>) ImportController.importJavaClass(new File("examples/classifier/KMeansClustering.java"));
+			snifferKNN = knn.newInstance();
+			
+			System.out.println("Check 2: Imported");//TODO
+			/*
+			 * Create collectors
+			 */
+			PacketCollector collectorKNN = new PacketCollector(snifferKNN);
+			//PacketCollector collectorEM = new PacketCollector(snifferEM);
+			//PacketCollector collectorHC = new PacketCollector(snifferHC);
+			
+			/*
+			 * Capture both links on all collectors
+			 */
+			PacketCaptureController captureController = controller.getSimulationController().getPacketCaptureController();
+			//captureController.addLinkToCollector(collectorEM, zigbee);
+			captureController.addLinkToCollector(collectorKNN, zigbee);
+			//captureController.addLinkToCollector(collectorHC, zigbee);
+			captureController.addPacketCollector(collectorKNN);
+			//captureController.addPacketCollector(collectorEM);
+			//captureController.addPacketCollector(collectorHC);
+
+			System.out.println("Check 3: created Controller");//TODO
+			
+			long currentTime = System.currentTimeMillis();
+			
+			long hour = 60 * 60 * 1000;
+			/*
+			 * Simulate 24 hours
+			 */
+			SimulationController sim = controller.getSimulationController();
+			sim.setStartTime(0);
+			sim.resetSimulation();
+			sim.setStepDuration(hour);
+			sim.setPrintPackets(false);
+			sim.setEndTime(24*hour);
+
+			heaterDevice.setFSmin(19f);
+			heaterDevice.setFSmax(23f);
+			heaterDevice.setFSval(20f);
+			System.out.println("Training:");//TODO
+			for(int i=0; i<24; i++)
+				sim.getSimulationManager().simulateTimeIntervall(i*hour, hour);
+			
+			long new_time = System.currentTimeMillis();
+			long elapsed_time = new_time-currentTime;
+			System.out.println("Training data generation: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			/*
+			 * Start Classifying 
+			 */
+			collectorKNN.setMode(true);
+			//collectorEM.setMode(true);
+			//collectorHC.setMode(true);
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("Training of algorithm: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			
+			
+			/*
+			 * Simulate/Test 1 hour without anomalies
+			 */
+
+			System.out.println("Test w/0 anomalies:");//TODO
+			for(int i=24; i<25; i++)
+				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
+			
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("Test witout anomalies took: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			System.out.println("DDoS:");
+			
+			/**
+			 * Value Anomaly 1h
+			 * TODO: Do more complex Anomaly Scenario
+			 */
+			System.out.println("Value Anomalies:");
+			float min = heaterDevice.getFSmin();
+			float max = heaterDevice.getFSmax();
+			float val = heaterDevice.getFSval();
+			heaterDevice.setFSmin(18);
+			heaterDevice.setFSval(18.5f);
+			heaterDevice.setFSmax(24);
+			heaterDevice.setLabel((short)-1);//-1 Value anomaly
+			for(int i=27; i<28; i++)
+				sim.getSimulationManager().simulateTimeIntervall(hour*i, hour);
+			heaterDevice.setFSmin(min);
+			heaterDevice.setFSmax(max);
+			heaterDevice.setFSval(val);
+			heaterDevice.setLabel((short)0);
+			
+			new_time = System.currentTimeMillis();
+			elapsed_time = new_time-currentTime;
+			System.out.println("Anomaly generation & classification: "+elapsed_time+"ms");
+			currentTime = new_time;
+			
+			System.out.println("Testing completed");
+		} catch(Exception e) {
+			System.out.println("WARNING: Testing failed: ");
+			e.printStackTrace();
+		}
+	}
+}