Browse Source

Adds separated export files if splitLinks=true, Fixes one bug

* Weird infinite loop on step duration = endTime and startTime = 0 fix
Andreas T. Meyer-Berg 5 years ago
parent
commit
612c6cb0c5

+ 71 - 24
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/SimulationManager.java

@@ -4,6 +4,7 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Observable;
 
@@ -91,11 +92,12 @@ public class SimulationManager extends Observable {
 		if (currentTime + duration <= endTime) {
 			simulateTimeIntervall(currentTime, duration);
 			currentTime += duration;
+			notifyPanels();
 		} else {
 			simulateTimeIntervall(currentTime, endTime - currentTime);
 			currentTime = endTime;
+			stopSimulation();
 		}
-		notifyPanels();
 	}
 
 	/**
@@ -140,32 +142,77 @@ public class SimulationManager extends Observable {
 	public void exportPacketsOfLastTimeStep() {
 		if (printPackets) {
 			if (!splitLinkExportFiles) {
+				/**
+				 * Packets of all links, merged together
+				 */
+				LinkedList<Packet> packets = new LinkedList<Packet>();
+				model.getConnectionNetworks().forEach(a->packets.addAll(a.getPackets()));
+				packets.sort(new PacketComparator());
+				
+				writePacketsToFile(packets, exportFile);
+			}else{
+				for(Link link:model.getConnectionNetworks()){
+					/**
+					 * File name:
+					 * test.log
+					 * to
+					 * test_linkName.log
+					 */
+					String fileName = exportFile.getName();
+					//Add linkName
+					if(fileName.contains(".")){
+						String baseName = fileName.substring(0, fileName.lastIndexOf('.'));
+						String ending = fileName.substring(fileName.lastIndexOf('.')+1, fileName.length());
+						fileName = baseName +"_"+link.getName()+"."+ending;
+					}else{
+						fileName = fileName +"_"+link.getName();
+					}
+					/**
+					 * Path to parent directory
+					 */
+					String parent = exportFile.getParent();
+					/**
+					 * File with the fileName
+					 */
+					File linkExportFile = new File((parent == null?"":parent)+fileName);
+					/**
+					 * Write Packets
+					 */
+					writePacketsToFile(link.getPackets(), linkExportFile);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Writes all packets of the given Collection to the specified file
+	 * @param packets packets which should be written
+	 * @param file file the packets should be written to
+	 */
+	private void writePacketsToFile(Collection<Packet> packets, File file){
+		if(file == null || packets == null)
+			return;
+		try {
+			//Check if file exists, if not create
+			file.createNewFile();
+			//Start Writing
+			writer = new BufferedWriter(new FileWriter(file.getAbsolutePath(), true));
+			//Write all packets
+			packets.forEach(p -> {
 				try {
-					exportFile.createNewFile();
-					writer = new BufferedWriter(new FileWriter(exportFile.getAbsolutePath(), true));
-					
-					LinkedList<Packet> packets = new LinkedList<Packet>();
-					packets.sort(new PacketComparator());
-					model.getConnectionNetworks().forEach(a->packets.addAll(a.getPackets()));
-					packets.forEach(p -> {
-						try {
-							if (p == null)
-								writer.append("Packet: Null\n");
-							else
-								writer.append(p.getTextualRepresentation() + "\n");
-						} catch (Exception e) {}
-					});
+					writer.append(p.getTextualRepresentation() + "\n");
 				} catch (Exception e) {
-					
-				} finally {
-					if (writer != null)
-						try {
-							writer.close();
-						} catch (IOException e) {}
+					System.err.println("Warning: Error on exporting packets: "+e.toString());
 				}
-			}else{
-				//TODO: Different Link Files
-			}
+			});
+		} catch (Exception e) {
+			System.err.println("Warning: Writing failed on file "+file.getPath()+"\n"+e.toString());
+		} finally {
+			//Close open writer
+			if (writer != null)
+				try {
+					writer.close();
+				} catch (IOException e) {}
 		}
 	}
 

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

@@ -226,7 +226,7 @@ public class SimulationConfigurator extends JFrame implements Observer{
 		getContentPane().add(btnReset);
 
 		progressBar = new JProgressBar();
-		progressBar.setBounds(0, 270, this.getWidth(), 20);
+		progressBar.setBounds(0, 260, this.getWidth(), 30);
 		getContentPane().add(progressBar);
 		progressBar.setMinimum(0);
 		progressBar.setMaximum(10000);