瀏覽代碼

Various ManageCollector BugFixes

* PopUps of deleted Collectors closing now
* Link/Device change not updating collectors
Andreas T. Meyer-Berg 5 年之前
父節點
當前提交
15b7de19a7

+ 62 - 13
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/control/NetworkController.java

@@ -7,6 +7,7 @@ import java.util.LinkedList;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Connection;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Model;
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.PacketCollector;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Protocol;
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
@@ -103,7 +104,14 @@ public class NetworkController {
 	public void deleteSmartDevice(SmartDevice toDelete) {
 		if (toDelete == null)
 			return;
-	
+		// Remove from Collectors
+		PacketCaptureController captureController = controller.getSimulationController().getPacketCaptureController();
+		for(PacketCollector collector:captureController.getPacketCollectors()){
+			if(collector.getDevices().contains(toDelete)){
+				captureController.removeDeviceFromCollector(collector, toDelete);
+			}
+		}
+		
 		// Delete Connections
 		for (Port p : toDelete.getPorts()) {
 			//Skip ports that are not connected
@@ -554,29 +562,38 @@ public class NetworkController {
 	}
 
 	/**
-	 * Deletes Link l and all references
-	 * @param l Link to be deleted
+	 * Deletes Link 'toDelete' and all references
+	 * @param toDelete Link to be deleted
 	 */
-	public void deleteLink(Link l) {
-		if(l==null)return;
-		LinkedList<SmartDevice> devices = new LinkedList<SmartDevice>(l.getDevices());
+	public void deleteLink(Link toDelete) {
+		if(toDelete==null)return;
+		LinkedList<SmartDevice> devices = new LinkedList<SmartDevice>(toDelete.getDevices());
 		for(SmartDevice d : devices)
-			removeLinkFromDevice(l, d);
+			removeLinkFromDevice(toDelete, d);
 		devices.clear();
-		LinkedList<Connection> connections = new LinkedList<Connection>(l.getConnections());
+		LinkedList<Connection> connections = new LinkedList<Connection>(toDelete.getConnections());
 		for(Connection c:connections)
-			removeConnectionFromLink(c,l);
+			removeConnectionFromLink(c,toDelete);
 		connections.clear();
-		l.getPackets().clear();
+		toDelete.getPackets().clear();
 		/**
 		 * Remove Link Color
 		 */
-		controller.getSettingsController().getLinkColors().removeLink(l);
-		networkTreeSettings.removeStatusOfObject(l);
+		controller.getSettingsController().getLinkColors().removeLink(toDelete);
+		networkTreeSettings.removeStatusOfObject(toDelete);
+		/**
+		 * Remove from Collectors
+		 */
+		PacketCaptureController captureController = controller.getSimulationController().getPacketCaptureController();
+		for(PacketCollector collector:captureController.getPacketCollectors()){
+			if(collector.getLinks().contains(toDelete)){
+				captureController.removeLinkFromCollector(collector, toDelete);
+			}
+		}
 		/**
 		 * Remove Link from model
 		 */
-		removeLink(l);
+		removeLink(toDelete);
 	}
 
 	/**
@@ -614,9 +631,18 @@ public class NetworkController {
 		if (newLink == null || !(newLink instanceof Link)) {
 			return null;
 		}else {
+			//Update Link Color
 			LinkColorController linkColor = controller.getSettingsController().getLinkColors();
 			linkColor.setColorOfLink(newLink, linkColor.getColorOfLink(oldLink).getRight());
 			copyNetworkTreeStatus(oldLink, newLink);
+			//Update Collectors
+			PacketCaptureController captureController = controller.getSimulationController().getPacketCaptureController();
+			for(PacketCollector collector:captureController.getPacketCollectors()){
+				if(collector.getLinks().contains(oldLink)){
+					captureController.removeLinkFromCollector(collector, oldLink);
+					captureController.addLinkToCollector(collector, newLink);
+				}
+			}
 			// Set old Name
 			newLink.setName(oldLink.getName());
 			
@@ -652,4 +678,27 @@ public class NetworkController {
 		newStatus.setVisible(oldStatus.isVisible());
 		networkTreeSettings.addStatusOfObject(newObject, newStatus);
 	}
+	
+	/**
+	 * Changes the Type of the SmartDevice
+	 * @param old old Device which should be 
+	 * @param newClass new Class of the SmartDevice
+	 * @return new SmartDevice, null on failure
+	 */
+	public SmartDevice changeDeviceType(SmartDevice old, Class<? extends SmartDevice> newClass){
+		//Compile new SmartDevice
+		SmartDevice newDevice = old;
+		//Update Packet Collectors
+		PacketCaptureController captureController = controller.getSimulationController().getPacketCaptureController();
+		for(PacketCollector collector:captureController.getPacketCollectors()){
+			if(collector.getDevices().contains(old)){
+				captureController.removeDeviceFromCollector(collector, newDevice);
+				captureController.addDeviceToCollector(collector, newDevice);
+			}
+		}
+		//Update all references
+		
+		//Update Colors tree status ?
+		return newDevice;
+	}
 }

+ 10 - 9
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/VisualisationInteractor.java

@@ -851,16 +851,17 @@ public class VisualisationInteractor implements MouseInputListener,
 							currentAlgorithm.setText(algoName);
 							currentLink.add(currentAlgorithm);
 						}
+						JMenuItem newCapture = new JMenuItem("Create new PacketCapturer");
+						newCapture.addActionListener(a->{
+							PacketCollector c = new PacketCollector();
+							c.addLink(l);
+							EditPacketSniffer popUp = new EditPacketSniffer(controller, panel, c, false);
+							popUp.setVisible(true);
+						});
+						currentLink.add(newCapture);
 						itemCapture.add(currentLink);
 					}
-					JMenuItem newCapture = new JMenuItem("Create new PacketCapturer");
-					newCapture.addActionListener(a->{
-						PacketCollector c = new PacketCollector();
-						c.addLink(clickedLink);
-						EditPacketSniffer popUp = new EditPacketSniffer(controller, panel, c);
-						popUp.setVisible(true);
-					});
-					itemCapture.add(newCapture);
+					
 					itemCapture.setEnabled(true);
 				}
 			} else {
@@ -908,7 +909,7 @@ public class VisualisationInteractor implements MouseInputListener,
 				newCapture.addActionListener(a->{
 					PacketCollector c = new PacketCollector();
 					c.addDevice(clickedOn);
-					EditPacketSniffer popUp = new EditPacketSniffer(controller, panel, c);
+					EditPacketSniffer popUp = new EditPacketSniffer(controller, panel, c, false);
 					popUp.setVisible(true);
 				});
 				itemCapture.add(newCapture);

+ 1 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/popups/EditCollectorsPopUp.java

@@ -182,7 +182,7 @@ public class EditCollectorsPopUp extends JDialog implements Observer {
 			}
 			if(it.hasNext()){
 				p=it.next();
-				EditPacketSniffer popUp =new EditPacketSniffer(controller, that, p);
+				EditPacketSniffer popUp =new EditPacketSniffer(controller, that, p,true);
 				popUp.setEnabled(true);
 				popUp.setVisible(true);
 			}

+ 17 - 3
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/popups/EditPacketSniffer.java

@@ -91,13 +91,19 @@ public class EditPacketSniffer extends JDialog implements Observer {
 	 * List for the links
 	 */
 	private JList<String> listDevices;
+	/**
+	 * True if the collector is being edited
+	 */
+	private boolean edit;
 	/**
 	 * Creates and shows a new EditAlgorithmPopUp
 	 * @param controller controller
 	 * @param parent parent container the location should be set relative to
+	 * @param edit true, if an sniffer is being edited
 	 */
-	public EditPacketSniffer(Controller controller, Container parent, PacketCollector collector) {
+	public EditPacketSniffer(Controller controller, Container parent, PacketCollector collector, boolean edit) {
 		mutex = true;
+		this.edit = edit;
 		this.controller = controller;
 		sim = this.controller.getSimulationController();
 		captureController = sim.getPacketCaptureController();
@@ -105,7 +111,7 @@ public class EditPacketSniffer extends JDialog implements Observer {
 		this.collector = collector;
 		this.setSize(400, 400);
 		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
-		setTitle("Create PacketCollector");
+		setTitle((this.edit?"Edit":"Create")+" PacketCollector");
 		this.setIconImage(Utility.loadFile("images/smartHome_icon.png"));
 		getContentPane().setLayout(null);
 		
@@ -325,7 +331,15 @@ public class EditPacketSniffer extends JDialog implements Observer {
 		scrollPaneDevices.getVerticalScrollBar().setValue(pos);
 		listDevices = newList;
 		
-		
+		if(this.edit&&!captureController.getPacketCollectors().contains(collector)){
+			/**
+			 * If Collector was removed -> Close PopUp
+			 */
+			this.setEnabled(false);
+			this.setVisible(false);
+			this.dispose();
+			return;
+		}
 		this.repaint();
 		mutex = false;
 	}