Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/JFCLogParser.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/JFCLogParser.java	(revision 352)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/JFCLogParser.java	(revision 353)
@@ -110,10 +110,13 @@
 	public void startElement(String uri, String localName, String qName,
 			Attributes atts) throws SAXException {
+		if( qName.equals("sessions") ) {
+			currentSequence = new LinkedList<JFCEvent>();
+		}
 		if (qName.equals("newsession")) {
 			Console.traceln("start of session");
 			if (currentSequence != null && !currentSequence.isEmpty()) {
 				sequences.add(currentSequence);
-				currentSequence = new LinkedList<JFCEvent>();
-			}
+			}
+			currentSequence = new LinkedList<JFCEvent>();
 		} else if (qName.equals("event")) {
 			currentEvent = new JFCEvent(atts.getValue("id"));
@@ -156,4 +159,5 @@
 				sequences.add(currentSequence);
 			}
+			currentSequence = null;
 		}
 	}
Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/commands/CMDparseDirJFC.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/commands/CMDparseDirJFC.java	(revision 353)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/commands/CMDparseDirJFC.java	(revision 353)
@@ -0,0 +1,79 @@
+package de.ugoe.cs.eventbench.jfc.commands;
+
+import java.io.File;
+import java.security.InvalidParameterException;
+import java.util.Collection;
+import java.util.List;
+
+import de.ugoe.cs.eventbench.CommandHelpers;
+import de.ugoe.cs.eventbench.data.GlobalDataContainer;
+import de.ugoe.cs.eventbench.jfc.JFCLogParser;
+import de.ugoe.cs.eventbench.jfc.data.JFCEvent;
+import de.ugoe.cs.util.console.Command;
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * Command that tries to parse all files in a folder as if they were log files
+ * generated by the JFCMonitor. The result is one set of sequences for all files
+ * (not one set of sequences for each file!).
+ * </p>
+ * 
+ * @author Steffen Herbold
+ * @version 1.0
+ */
+public class CMDparseDirJFC implements Command {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see de.ugoe.cs.util.console.Command#run(java.util.List)
+	 */
+	@Override
+	public void run(List<Object> parameters) {
+		String path;
+		String sequencesName = "sequences";
+
+		try {
+			path = (String) parameters.get(0);
+			if (parameters.size() >= 2) {
+				sequencesName = (String) parameters.get(1);
+			}
+		} catch (Exception e) {
+			throw new InvalidParameterException();
+		}
+
+		File folder = new File(path);
+		if (!folder.isDirectory()) {
+			Console.printerrln(path + " is not a directory");
+		}
+
+		JFCLogParser parser = new JFCLogParser();
+
+		String absolutPath = folder.getAbsolutePath();
+		for (String filename : folder.list()) {
+			String source = absolutPath + "/" + filename;
+			Console.traceln("Processing file: " + source);
+
+			parser.parseFile(source);
+		}
+
+		Collection<List<JFCEvent>> sequences = parser.getSequences();
+
+		if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) {
+			CommandHelpers.dataOverwritten(sequencesName);
+		}
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see de.ugoe.cs.util.console.Command#help()
+	 */
+	@Override
+	public void help() {
+		Console.println("Usage: parseDirJFC <path> {<sequencesName>}");
+	}
+
+}
Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/commands/CMDpreprocessDirJFC.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/commands/CMDpreprocessDirJFC.java	(revision 353)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/jfc/commands/CMDpreprocessDirJFC.java	(revision 353)
@@ -0,0 +1,115 @@
+package de.ugoe.cs.eventbench.jfc.commands;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidParameterException;
+import java.util.List;
+
+import de.ugoe.cs.util.console.Command;
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * Command to pre-process files written by EventBench's JFCMonitor located in a directory. The only task
+ * of the pre-processing is checking if the session was closed properly, i.e.,
+ * if the XML file ends with a {@code </sessions>} tag. If this is not the case,
+ * the tag will be appended to the file.
+ * </p>
+ * 
+ * @author Steffen Herbold
+ * @version 1.0
+ */
+public class CMDpreprocessDirJFC implements Command {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see de.ugoe.cs.util.console.Command#run(java.util.List)
+	 */
+	@Override
+	public void run(List<Object> parameters) {
+		String sourcePath;
+		String targetPath;
+		try {
+			sourcePath = (String) parameters.get(0);
+			targetPath = (String) parameters.get(1);
+		} catch (Exception e) {
+			throw new InvalidParameterException();
+		}
+
+		File sourceFolder = new File(sourcePath);
+		if (!sourceFolder.isDirectory()) {
+			Console.printerrln(sourcePath + " is not a directory");
+		}
+		String absolutPathSource = sourceFolder.getAbsolutePath();
+		File targetFolder = new File(targetPath);
+		if( !targetFolder.isDirectory()) {
+			Console.printerrln(targetPath + " is not a directory");
+		}
+		String absolutPathTarget = targetFolder.getAbsolutePath();
+		
+		for(String filename : sourceFolder.list()) {
+			String source = absolutPathSource + "/" + filename;
+			File file = new File(source);
+			InputStreamReader reader;
+			try {
+				FileInputStream fis = new FileInputStream(file);
+				reader = new InputStreamReader(fis, "UTF-16");
+			} catch (FileNotFoundException e) {
+				Console.printerrln(e.getMessage());
+				return;
+			} catch (UnsupportedEncodingException e) {
+				Console.printerrln(e.getMessage());
+				return;
+			}
+			char[] buffer = new char[(int) file.length()];
+			try {
+				reader.read(buffer);
+				reader.close();
+			} catch (IOException e) {
+				Console.printerrln(e.getMessage());
+				return;
+			}
+	
+			String content = new String(buffer).trim();
+	
+			int index = filename.lastIndexOf('.');
+			String target = absolutPathTarget + "/" + filename.substring(0, index) + "xml"; 
+			
+			OutputStreamWriter writer;
+			try {
+				FileOutputStream fos = new FileOutputStream(target);
+				writer = new OutputStreamWriter(fos, "UTF-16");
+			} catch (IOException e) {
+				Console.printerrln(e.getMessage());
+				return;
+			}
+			try {
+				writer.write(content);
+				if (!content.endsWith("</sessions>")) {
+					writer.write("</sessions>");
+				}
+				writer.close();
+			} catch (IOException e) {
+				Console.printerrln(e.getMessage());
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see de.ugoe.cs.util.console.Command#help()
+	 */
+	@Override
+	public void help() {
+		Console.println("Usage: preprocessDirJFC <sourcePath> <targetPath>");
+	}
+
+}
