Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/Runner.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/Runner.java	(revision 298)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/Runner.java	(revision 299)
@@ -50,4 +50,6 @@
 		CommandExecuter.getInstance().addCommandPackage(
 				"de.ugoe.cs.eventbench.efg.commands");
+		CommandExecuter.getInstance().addCommandPackage(
+				"de.ugoe.cs.eventbench.jfc.commands");
 		new Log4JLogger();
 
Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/JFCLogParser.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/JFCLogParser.java	(revision 299)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/JFCLogParser.java	(revision 299)
@@ -0,0 +1,147 @@
+package de.ugoe.cs.eventbensch.jfc;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidParameterException;
+import java.util.Collection;
+import java.util.List;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import de.ugoe.cs.eventbensch.jfc.data.JFCEvent;
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * This class provides functionality to parse XML log files generated by the
+ * JFCMonitor of EventBench. The result of parsing a file is a collection of
+ * event sequences.
+ * </p>
+ * 
+ * @author Steffen Herbold
+ * @version 1.0
+ */
+public class JFCLogParser extends DefaultHandler {
+
+	/**
+	 * <p>
+	 * Collection of event sequences that is contained in the log file, which is
+	 * parsed.
+	 * </p>
+	 */
+	Collection<List<JFCEvent>> sequences;
+
+	/**
+	 * <p>
+	 * Returns the collection of event sequences that is obtained from parsing
+	 * log files.
+	 * </p>
+	 * 
+	 * @return collection of event sequences
+	 */
+	public Collection<List<JFCEvent>> getSequences() {
+		return sequences;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
+	 * java.lang.String, java.lang.String, org.xml.sax.Attributes)
+	 */
+	public void startElement(String uri, String localName, String qName,
+			Attributes atts) throws SAXException {
+		if (qName.equals("newsession")) {
+			Console.traceln("start of session");
+			// TODO implement handling: newsession node
+		} else if (qName.equals("event")) {
+			// TODO implement handling: start of event node
+		} else if (qName.equals("param")) {
+			// TODO implement handling: param node
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
+	 * java.lang.String, java.lang.String)
+	 */
+	@Override
+	public void endElement(String uri, String localName, String qName)
+			throws SAXException {
+		if (qName.equals("event")) {
+			// TODO implement handling: end of event node
+		} else if (qName.equals("source")) {
+			// TODO implement handling: end of source node
+		} else if (qName.equals("parent")) {
+			// TODO implement handling: end of parent node
+		}
+	}
+
+	/**
+	 * <p>
+	 * Parses a log file written by the JFCMonitor and creates a collection of
+	 * event sequences.
+	 * </p>
+	 * 
+	 * @param filename
+	 *            name and path of the log file
+	 */
+	public void parseFile(String filename) {
+		if (filename == null) {
+			throw new InvalidParameterException("filename must not be null");
+		}
+
+		SAXParserFactory spf = SAXParserFactory.newInstance();
+		spf.setValidating(true);
+
+		SAXParser saxParser = null;
+		InputSource inputSource = null;
+		try {
+			saxParser = spf.newSAXParser();
+			inputSource = new InputSource(new InputStreamReader(
+					new FileInputStream(filename), "UTF-16"));
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		} catch (ParserConfigurationException e) {
+			e.printStackTrace();
+		} catch (SAXException e) {
+			e.printStackTrace();
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		}
+		if (inputSource != null) {
+			inputSource.setSystemId("file://"
+					+ new File(filename).getAbsolutePath());
+			try {
+				if (saxParser == null) {
+					throw new RuntimeException("SAXParser creation failed");
+				}
+				saxParser.parse(inputSource, this);
+			} catch (SAXParseException e) {
+				Console.printerrln("Failure parsing file in line "
+						+ e.getLineNumber() + ", column " + e.getColumnNumber()
+						+ ".");
+				e.printStackTrace();
+			} catch (SAXException e) {
+				e.printStackTrace();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+}
Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/commands/CMDparseJFC.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/commands/CMDparseJFC.java	(revision 299)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/commands/CMDparseJFC.java	(revision 299)
@@ -0,0 +1,65 @@
+package de.ugoe.cs.eventbensch.jfc.commands;
+
+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.eventbensch.jfc.JFCLogParser;
+import de.ugoe.cs.eventbensch.jfc.data.JFCEvent;
+import de.ugoe.cs.util.console.Command;
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * Command to parse an XML file with sessions monitored by EventBench's
+ * JFCMonitor.
+ * </p>
+ * 
+ * @author Steffen Herbold
+ * @version 1.0
+ */
+public class CMDparseJFC implements Command {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see de.ugoe.cs.util.console.Command#run(java.util.List)
+	 */
+	@Override
+	public void run(List<Object> parameters) {
+		String filename;
+		String sequencesName = "sequences";
+
+		try {
+			filename = (String) parameters.get(0);
+			if (parameters.size() >= 2) {
+				sequencesName = (String) parameters.get(1);
+			}
+		} catch (Exception e) {
+			throw new InvalidParameterException();
+		}
+
+		JFCLogParser parser = new JFCLogParser();
+
+		parser.parseFile(filename);
+
+		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: parseJFC <filename> {<sequencesName>}");
+	}
+
+}
Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/data/JFCEvent.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/data/JFCEvent.java	(revision 299)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbensch/jfc/data/JFCEvent.java	(revision 299)
@@ -0,0 +1,35 @@
+package de.ugoe.cs.eventbensch.jfc.data;
+
+import de.ugoe.cs.eventbench.data.IReplayable;
+import de.ugoe.cs.eventbench.data.ReplayableEvent;
+
+/**
+ * <p>
+ * This class defines JFC events.
+ * </p>
+ * 
+ * @author Steffen Herbold
+ * @version 1.0
+ */
+public class JFCEvent extends ReplayableEvent<IReplayable> {
+
+	/**
+	 * <p>
+	 * Id for object serialization.
+	 * </p>
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * <p>
+	 * Constructor. Creates a new JFCEvent.
+	 * </p>
+	 * 
+	 * @param type
+	 *            type of the event
+	 */
+	public JFCEvent(String type) {
+		super(type);
+	}
+
+}
