view src/de/mpiwg/anteater/xml/impl/AnalysisXMLManager.java @ 4:dcc35f89dce3

include linneaus findings
author jdamerow
date Thu, 25 Oct 2012 15:25:08 -0700
parents ae96e4bc7fb2
children 50aeb96a8ee9
line wrap: on
line source

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> getSummaryCommonNamesResults() {
		return getResults("/analysis/commonNames/summaries/result");
	}
	
	public List<String> getSupplementaryInfoCommonNamesResults() {
		return getResults("/analysis/commonNames/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");
	}
	
	public void addSummaryCommonNamesResult(String result) {
		addElementToDoc(result, "/analysis/commonNames/summaries");
	}
	
	public void addSupplInfCommonNamesResult(String result) {
		addElementToDoc(result, "/analysis/commonNames/supplementary_information");
	}
	
	public void ensureCommonNamesStrucuture() {
		List<Element> nodes = executeXPath("/analysis/commonNames", null);
		List<Element> analysis = executeXPath("/analysis", null);
		
		if ((analysis != null && analysis.size() > 0) && (nodes == null || nodes.size() == 0)) {
			IXMLParser parser = new JDOMParser("\t<commonNames>\n" +
					"\t\t<summaries>\n" +
					"\t\t</summaries>\n" +
					"\t\t<supplementary_information>\n" +
					"\t\t</supplementary_information>\n" +
					"\t</commonNames>", false);
			Element root = parser.getRoot();
			
			analysis.get(0).addContent(root.clone());
			save(analysisFilepath, true);
		}
	}

	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");
	}
}