private AnalysisData processWorkflowReport(final File workflowReportFile) {
		final WorkflowData workflowData = new WorkflowData();
		try {
			final InputStream in = new FileInputStream(workflowReportFile);
			final XMLInputFactory factory = XMLInputFactory.newInstance();
			final XMLStreamReader parser = factory.createXMLStreamReader(in);

			CallData currentCallData = null;
			while (parser.hasNext()) {

				int eventType = parser.next();
				switch (eventType) {

				case XMLStreamConstants.START_ELEMENT:
					if ("testsuite".equals(parser.getName().toString())) {
						workflowData.setName(parser.getAttributeValue(null, "name"));
						float duration = Float.parseFloat(parser.getAttributeValue(null, "time"));
						workflowData.setDuration((long)(duration * 1000)); // convert to milliseconds
					}
					else if ("testcase".equals(parser.getName().toString())) {
						currentCallData = workflowData.addCallData(
							parser.getAttributeValue(null, "callName"),
							Integer.parseInt(parser.getAttributeValue(null, "callStartTime")),
							Integer.parseInt(parser.getAttributeValue(null, "callEndTime"))
						);
					}
					else if ("property".equals(parser.getName().toString())) {
						workflowData.getProperties().put(
							parser.getAttributeValue(null, "name"),
							parser.getAttributeValue(null, "value")
						);
					}
					else if ("failure".equals(parser.getName().toString())) {
						if(currentCallData != null) {
							currentCallData.setStatus(Status.FAILURE);
						}
					}
					else if ("error".equals(parser.getName().toString())) {
						if(currentCallData != null) {
							currentCallData.setStatus(Status.ERROR);
						}
					}
					break;
				}
			}
			
			in.close();
		} catch (final Exception e) {
			e.printStackTrace();
		}

		// Output generation (XML and HTML)
		final File analyzeOuputDirectory = workflowReportFile.getParentFile();
		final AnalysisData analysisData = workflowData.createAnalysisData();
		generateXML(analysisData, analyzeOuputDirectory);
		generateHTML(analysisData, analyzeOuputDirectory);
		
		return analysisData;
	}