diff src/de/mpiwg/anteater/xml/impl/AnalysisXMLManager.java @ 0:036535fcd179

anteater
author jdamerow
date Fri, 14 Sep 2012 10:30:43 +0200
parents
children 1c2b4f5e2c05
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/mpiwg/anteater/xml/impl/AnalysisXMLManager.java	Fri Sep 14 10:30:43 2012 +0200
@@ -0,0 +1,156 @@
+package de.mpiwg.anteater.xml.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jdom2.Element;
+import org.jdom2.output.XMLOutputter;
+
+import de.mpiwg.anteater.xml.IXMLParser;
+
+
+public class AnalysisXMLManager extends JDOMParser {
+	
+	private String analysisFilepath;
+
+	public AnalysisXMLManager(String analysisFilepath) {
+		super();
+		this.analysisFilepath = analysisFilepath;
+		
+		File analysisFile = new File(analysisFilepath);
+		if (analysisFile.exists())
+			init(analysisFilepath);
+		else {
+			InputStream stream = getClass().getResourceAsStream("templates/analysisFile.xml");
+			init(stream);
+		}
+	}
+	
+	public List<String> getSummaryTexts() {
+		return getResults("/analysis/texts/summaries/summary");
+	}
+	
+	public List<String> getSupplementaryInfoTexts() {
+		return getResults("/analysis/texts/supplementary_information/supplInfo");
+	}
+	
+	public List<String> getSummaryNamesResults() {
+		return getResults("/analysis/scientificNames/summaries/result");
+	}
+	
+	public List<String> getSupplementaryInfoNamesResults() {
+		return getResults("/analysis/scientificNames/supplementary_information/result");
+	}
+	
+	public List<String> getSummaryPlacesResults() {
+		return getResultsViaParent("/analysis/places/summaries");
+	}
+	
+	public List<String> getSupplementaryInfoPlacesResults() {
+		return getResultsViaParent("/analysis/places/supplementary_information");
+	}
+	
+	public List<String> getSummaryPersonsResult() {
+		return getResults("/analysis/persons/summaries/stanford_ner");
+	}
+	
+	public List<String> getSupplementaryInfoPersonsResult() {
+		return getResults("/analysis/persons/supplementary_information/stanford_ner");
+	}
+	
+	public List<String> getResults(String xpath) {
+		List<Element> results = executeXPath(xpath, null);
+		if (results != null && !results.isEmpty())
+			return getResultsString(results);
+		return new ArrayList<String>();
+	}
+	
+	public List<String> getResultsContents(String xpath) {
+		List<Element> results = executeXPath(xpath, null);
+		if (results != null && !results.isEmpty()) {
+			List<String> resultStrings = new ArrayList<String>();
+			for (Element elem : results) {
+				resultStrings.add(elem.getText());
+			}
+			return resultStrings;
+		}
+		return new ArrayList<String>();
+	}
+	
+	public List<String> getResultsViaParent(String xpath) {
+		List<Element> results = executeXPath(xpath, null);
+		if (results != null && !results.isEmpty()) {
+			Element parent = results.get(0);
+			List<Element> children = parent.getChildren();
+			return getResultsString(children);
+		}
+		return new ArrayList<String>();
+	}
+	
+	protected List<String> getResultsString(List<Element> roots) {
+		List<String> results = new ArrayList<String>();
+		
+		for (Element rootNode : roots) {
+			XMLOutputter output = new XMLOutputter();
+			StringWriter writer = new StringWriter();
+			try {
+				output.output(rootNode, writer);
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			results.add(writer.toString());
+		}
+		
+		return results;
+	}
+	
+	public void addSummaryNamesResult(String result) {
+		addElementToDoc(result, "/analysis/scientificNames/summaries");
+	}
+	
+	public void addSupplInfNamesResult(String result) {
+		addElementToDoc(result, "/analysis/scientificNames/supplementary_information");
+	}
+
+	private void addElementToDoc(String result, String xpath) {
+		IXMLParser parser = new JDOMParser(result, false);
+		Element root = parser.getRoot();
+		
+		List<Element> nodes = executeXPath(xpath, null);
+		
+		if (nodes != null && nodes.size() > 0) {
+			nodes.get(0).addContent(root.clone());
+		}
+		
+		save(analysisFilepath, true);
+	}
+	
+	public void addSummaryPlacesResult(String result) {
+		addElementToDoc(result, "/analysis/places/summaries");
+	}
+	
+	public void addSupplInfPlacesResult(String result) {
+		addElementToDoc(result, "/analysis/places/supplementary_information");
+	}
+	
+	public void addSummaryPersonsResult(String result) {
+		addElementToDoc(result, "/analysis/persons/summaries");
+	}
+	
+	public void addSupplInfPersonsResult(String result) {
+		addElementToDoc(result, "/analysis/persons/supplementary_information");
+	}
+
+	public void addSummaryText(String text) {
+		addElementToDoc(text, "/analysis/texts/summaries");
+	}
+	
+	public void addSupplInfText(String text) {
+		addElementToDoc(text, "/analysis/texts/supplementary_information");
+	}
+}