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

anteater
author jdamerow
date Fri, 14 Sep 2012 10:30:43 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/mpiwg/anteater/xml/impl/EventXMLManager.java	Fri Sep 14 10:30:43 2012 +0200
@@ -0,0 +1,129 @@
+package de.mpiwg.anteater.xml.impl;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.List;
+
+import org.jdom2.Attribute;
+import org.jdom2.Element;
+
+import de.mpiwg.anteater.events.Applicant;
+import de.mpiwg.anteater.events.Location;
+import de.mpiwg.anteater.events.ResearchEvent;
+import de.mpiwg.anteater.events.Species;
+import de.mpiwg.anteater.places.Place;
+
+public class EventXMLManager extends JDOMParser {
+
+	private String filepath;
+
+	public EventXMLManager(String filepath) {
+		super();
+		this.filepath = filepath;
+
+		File resultFile = new File(filepath);
+		if (resultFile.exists())
+			init(filepath);
+		else {
+			InputStream stream = getClass().getResourceAsStream(
+					"templates/eventsFile.xml");
+			init(stream);
+		}
+	}
+
+	public void addEvent(ResearchEvent event) {
+
+		Element eventNode = new Element("event");
+		File file = new File(event.getTextInformation().getFilepath());
+		eventNode.setAttribute(new Attribute("text", file.getName()));
+		eventNode.setAttribute(new Attribute("date_filed", event.getDate()));
+	
+		Element applicantsNode = new Element("applicants");
+		eventNode.addContent(applicantsNode);
+		
+		// add applicants
+		for (Applicant applicant : event.getApplicants()) {
+			Element applicantNode = new Element("applicant");
+			applicantsNode.addContent(applicantNode);
+			
+			// name
+			Element name = new Element("name");
+			applicantNode.addContent(name);
+			name.setText(applicant.getApplicant().getReferenceInText());
+			
+			// appliant institution
+			Element appInstNode = new Element("applicant_institutions");
+			applicantNode.addContent(appInstNode);
+			
+			for (Location location : applicant.getApplicantInstitution()) {
+				Element appInst = new Element("applicant_institution");
+				appInstNode.addContent(appInst);
+				
+				createPlace(location, appInst);	
+			}
+			
+			Element appLocs = new Element("applicant_locations");
+			applicantNode.addContent(appLocs);
+			
+			for (Location location : applicant.getLocation()) {
+				Element appLoc = new Element("applicant_locations");
+				appLocs.addContent(appLoc);
+				
+				createPlace(location, appLoc);
+			}
+		}
+		
+		Element researchLocsNode = new Element("research_locations");
+		eventNode.addContent(researchLocsNode);
+		
+		// add research location
+		for (Location location : event.getResearchLocations()) {
+			Element researchLoc = new Element("research_location");
+			researchLocsNode.addContent(researchLoc);
+			
+			createPlace(location, researchLoc);
+		}
+		
+		Element speciesNode = new Element("researched_species");
+		eventNode.addContent(speciesNode);
+		// add species
+		for (Species species : event.getResearchedSpecies()) {
+			Element spNode = new Element("species");
+			speciesNode.addContent(spNode);
+			
+			spNode.setText(species.getSpeciesName().getReferenceInText());
+			spNode.setAttribute(new Attribute("identified_name", species.getSpeciesName().getIdentifiedName()));
+		}
+		
+		this.addElementToDoc(eventNode, "/events");
+	}
+	
+	public void createPlace(Location location, Element parent) {
+		Element instname = new Element("name");
+		instname.setText(location.getLocation().getReferenceInText());
+		parent.addContent(instname);
+		
+		for (Place place : location.getLocation().getPlaces()) {
+			Element placeInfo = new Element("place_information");
+			parent.addContent(placeInfo);
+			
+			placeInfo.setAttribute(new Attribute("type", place.getType()));
+			placeInfo.setText(place.getName());
+			placeInfo.setAttribute(new Attribute("woeId", place.getWoeId()));
+			placeInfo.setAttribute(new Attribute("latitude", place.getLatitude() + ""));
+			placeInfo.setAttribute(new Attribute("longitude", place.getLongitude() + ""));
+			
+		}
+	}
+	
+	private void addElementToDoc(Element element, String xpath) {
+		
+		List<Element> nodes = executeXPath(xpath, null);
+		
+		if (nodes != null && nodes.size() > 0) {
+			nodes.get(0).addContent(element);
+		}
+		
+		save(filepath, false);
+	}
+}