Browse Source

Adds Observer functionalities to PopUp and PacketCaptureController

Andreas T. Meyer-Berg 5 years ago
parent
commit
13b17386dc

+ 42 - 5
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/control/PacketCaptureController.java

@@ -1,6 +1,7 @@
 package de.tu_darmstadt.tk.SmartHomeNetworkSim.control;
 
 import java.util.LinkedList;
+import java.util.Observer;
 
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Model;
@@ -49,6 +50,7 @@ public class PacketCaptureController {
 	public PacketCollector addPacketCapturer(PacketSniffer packetSniffer){
 		PacketCollector collector = new PacketCollector(packetSniffer);
 		packetCollectionManager.addPacketCollector(collector);
+		notifyObservers();
 		return collector;
 	}
 	
@@ -82,8 +84,10 @@ public class PacketCaptureController {
 				break;	
 			}
 		}
-		if(packetCollector!=null)
+		if(packetCollector!=null){
 			removePacketCollector(packetCollector);
+			notifyObservers();
+		}
 	}
 	
 	/**
@@ -100,6 +104,7 @@ public class PacketCaptureController {
 	 */
 	public void addPacketCollector(PacketCollector collector){
 		packetCollectionManager.addPacketCollector(collector);
+		notifyObservers();
 	}
 	
 	/**
@@ -108,6 +113,7 @@ public class PacketCaptureController {
 	 */
 	public void removePacketCollector(PacketCollector collector){
 		packetCollectionManager.removePacketCollector(collector);
+		notifyObservers();
 	}
 	
 	/**
@@ -116,8 +122,10 @@ public class PacketCaptureController {
 	 * @param link Link which should be captured
 	 */
 	public void addLinkToCollector(PacketCollector collector, Link link){
-		if(collector!=null && link != null)
+		if(collector!=null && link != null){
 			collector.addLink(link);
+			notifyObservers();
+		}
 	}
 	
 	/**
@@ -126,8 +134,10 @@ public class PacketCaptureController {
 	 * @param link Link which should no longer be captured
 	 */
 	public void removeLinkFromCollector(PacketCollector collector, Link link){
-		if(collector!=null && link != null)
+		if(collector!=null && link != null){
 			collector.removeLink(link);
+			notifyObservers();
+		}
 	}
 	
 	/**
@@ -136,8 +146,10 @@ public class PacketCaptureController {
 	 * @param device Device which packets should be captured
 	 */
 	public void addDeviceToCollector(PacketCollector collector, SmartDevice device){
-		if(collector!=null && device != null)
+		if(collector!=null && device != null){
 			collector.addDevice(device);
+			notifyObservers();
+		}
 	}
 	
 	/**
@@ -146,7 +158,32 @@ public class PacketCaptureController {
 	 * @param device SmartDevice which should no longer be captured
 	 */
 	public void removeDeviceFromCollector(PacketCollector collector, SmartDevice device){
-		if(collector!=null && device != null)
+		if(collector!=null && device != null){
 			collector.removeDevice(device);
+			notifyObservers();
+		}
+	}
+	
+	/**
+	 * Notify all observers of the packet collection managers
+	 */
+	public void notifyObservers(){
+		packetCollectionManager.notifyObservers();
+	}
+	
+	/**
+	 * Add Observer, will be notified on updates
+	 * @param o Observer which should be notified
+	 */
+	public void addObserver(Observer o){
+		packetCollectionManager.addObserver(o);
+	}
+	
+	/**
+	 * Remove Observer, which will no longer be notified
+	 * @param o Observer to be removed
+	 */
+	public void removeObserver(Observer o){
+		packetCollectionManager.deleteObserver(o);
 	}
 }

+ 10 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/PacketCollectionManager.java

@@ -2,6 +2,7 @@ package de.tu_darmstadt.tk.SmartHomeNetworkSim.core;
 
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.Observable;
 import java.util.stream.Collectors;
 
 /**
@@ -10,7 +11,7 @@ import java.util.stream.Collectors;
  *
  * @author Andreas T. Meyer-Berg
  */
-public class PacketCollectionManager {
+public class PacketCollectionManager extends Observable {
 	/**
 	 * All collectors registered in the framework
 	 */
@@ -92,4 +93,12 @@ public class PacketCollectionManager {
 	public void removePacketCollector(PacketCollector collector){
 		collectors.remove(collector);
 	}
+
+	/**
+	 * Notify all observers
+	 */
+	public void notifyObservers(){
+		this.setChanged();
+		this.notifyObservers();
+	}
 }

+ 22 - 14
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/popups/EditPacketSniffer.java

@@ -24,7 +24,11 @@ import javax.swing.JButton;
 import javax.swing.JLabel;
 
 import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
 import java.util.Iterator;
+import java.util.Observable;
+import java.util.Observer;
 import java.awt.event.ActionEvent;
 
 
@@ -33,7 +37,7 @@ import java.awt.event.ActionEvent;
  *
  * @author Andreas T. Meyer-Berg
  */
-public class EditPacketSniffer extends JDialog {
+public class EditPacketSniffer extends JDialog implements Observer {
 	/**
 	 * serial
 	 */
@@ -97,6 +101,7 @@ public class EditPacketSniffer extends JDialog {
 		this.controller = controller;
 		sim = this.controller.getSimulationController();
 		captureController = sim.getPacketCaptureController();
+		captureController.addObserver(this);
 		this.collector = collector;
 		this.setSize(400, 400);
 		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
@@ -135,7 +140,7 @@ public class EditPacketSniffer extends JDialog {
 						 * Set as new PacketAlgorithm
 						 */
 						that.collector.setPacketAlgorithm(p);
-						updateThis(null);
+						update(null);
 					} catch (InstantiationException | IllegalAccessException e1) {
 						JOptionPane.showMessageDialog(that, "Instance creation failed: " + e1.getMessage());
 					}
@@ -173,7 +178,7 @@ public class EditPacketSniffer extends JDialog {
 				if(it.hasNext()){
 					Link linkToBeRemoved = it.next();
 					captureController.removeLinkFromCollector(collector, linkToBeRemoved);
-					updateThis(null);
+					update(null);
 				}
 			}
 		});
@@ -197,7 +202,7 @@ public class EditPacketSniffer extends JDialog {
 				if(it.hasNext()){
 					SmartDevice deviceToBeRemoved = it.next();
 					captureController.removeDeviceFromCollector(collector, deviceToBeRemoved);
-					updateThis(null);
+					update(null);
 				}
 			}
 		});
@@ -209,6 +214,7 @@ public class EditPacketSniffer extends JDialog {
 				if(!captureController.getPacketCollectors().contains(collector)){
 					captureController.addPacketCollector(collector);
 				}
+				captureController.removeObserver(that);
 				that.setVisible(false);
 				that.setEnabled(false);
 				that.dispose();
@@ -217,21 +223,23 @@ public class EditPacketSniffer extends JDialog {
 		
 		btnCreatePacketCollector.setBounds(189, 315, 181, 25);
 		getContentPane().add(btnCreatePacketCollector);
-		/**
-		 * Either Modal - or refresh other instances of this PopUp on refresh
-		 */
-		this.setModal(true);
-		updateThis(null);
+
+		this.addWindowListener(new WindowAdapter() {
+			//Remove Observer, if window is closing
+			@Override
+			public void windowClosing(WindowEvent e) {
+				captureController.removeObserver(that);
+				super.windowClosing(e);
+			}
+		});
+		update(null, null);
 		this.setLocationRelativeTo(parent);
 		
 		
 	}
 	
-	/**
-	 * Update this panel
-	 * @param o object (unused)
-	 */
-	public void updateThis(Object o){
+	@Override
+	public void update(Observable o, Object arg) {
 		mutex = true;
 		/**
 		 * Update algorithm name