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

anteater
author jdamerow
date Fri, 14 Sep 2012 10:30:43 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
036535fcd179 anteater
jdamerow
parents:
diff changeset
1 package de.mpiwg.anteater.xml.impl;
036535fcd179 anteater
jdamerow
parents:
diff changeset
2
036535fcd179 anteater
jdamerow
parents:
diff changeset
3 import java.io.File;
036535fcd179 anteater
jdamerow
parents:
diff changeset
4 import java.io.InputStream;
036535fcd179 anteater
jdamerow
parents:
diff changeset
5 import java.util.List;
036535fcd179 anteater
jdamerow
parents:
diff changeset
6
036535fcd179 anteater
jdamerow
parents:
diff changeset
7 import org.jdom2.Attribute;
036535fcd179 anteater
jdamerow
parents:
diff changeset
8 import org.jdom2.Element;
036535fcd179 anteater
jdamerow
parents:
diff changeset
9
036535fcd179 anteater
jdamerow
parents:
diff changeset
10 import de.mpiwg.anteater.events.Applicant;
036535fcd179 anteater
jdamerow
parents:
diff changeset
11 import de.mpiwg.anteater.events.Location;
036535fcd179 anteater
jdamerow
parents:
diff changeset
12 import de.mpiwg.anteater.events.ResearchEvent;
036535fcd179 anteater
jdamerow
parents:
diff changeset
13 import de.mpiwg.anteater.events.Species;
036535fcd179 anteater
jdamerow
parents:
diff changeset
14 import de.mpiwg.anteater.places.Place;
036535fcd179 anteater
jdamerow
parents:
diff changeset
15
036535fcd179 anteater
jdamerow
parents:
diff changeset
16 public class EventXMLManager extends JDOMParser {
036535fcd179 anteater
jdamerow
parents:
diff changeset
17
036535fcd179 anteater
jdamerow
parents:
diff changeset
18 private String filepath;
036535fcd179 anteater
jdamerow
parents:
diff changeset
19
036535fcd179 anteater
jdamerow
parents:
diff changeset
20 public EventXMLManager(String filepath) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
21 super();
036535fcd179 anteater
jdamerow
parents:
diff changeset
22 this.filepath = filepath;
036535fcd179 anteater
jdamerow
parents:
diff changeset
23
036535fcd179 anteater
jdamerow
parents:
diff changeset
24 File resultFile = new File(filepath);
036535fcd179 anteater
jdamerow
parents:
diff changeset
25 if (resultFile.exists())
036535fcd179 anteater
jdamerow
parents:
diff changeset
26 init(filepath);
036535fcd179 anteater
jdamerow
parents:
diff changeset
27 else {
036535fcd179 anteater
jdamerow
parents:
diff changeset
28 InputStream stream = getClass().getResourceAsStream(
036535fcd179 anteater
jdamerow
parents:
diff changeset
29 "templates/eventsFile.xml");
036535fcd179 anteater
jdamerow
parents:
diff changeset
30 init(stream);
036535fcd179 anteater
jdamerow
parents:
diff changeset
31 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
32 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
33
036535fcd179 anteater
jdamerow
parents:
diff changeset
34 public void addEvent(ResearchEvent event) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
35
036535fcd179 anteater
jdamerow
parents:
diff changeset
36 Element eventNode = new Element("event");
036535fcd179 anteater
jdamerow
parents:
diff changeset
37 File file = new File(event.getTextInformation().getFilepath());
036535fcd179 anteater
jdamerow
parents:
diff changeset
38 eventNode.setAttribute(new Attribute("text", file.getName()));
036535fcd179 anteater
jdamerow
parents:
diff changeset
39 eventNode.setAttribute(new Attribute("date_filed", event.getDate()));
036535fcd179 anteater
jdamerow
parents:
diff changeset
40
036535fcd179 anteater
jdamerow
parents:
diff changeset
41 Element applicantsNode = new Element("applicants");
036535fcd179 anteater
jdamerow
parents:
diff changeset
42 eventNode.addContent(applicantsNode);
036535fcd179 anteater
jdamerow
parents:
diff changeset
43
036535fcd179 anteater
jdamerow
parents:
diff changeset
44 // add applicants
036535fcd179 anteater
jdamerow
parents:
diff changeset
45 for (Applicant applicant : event.getApplicants()) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
46 Element applicantNode = new Element("applicant");
036535fcd179 anteater
jdamerow
parents:
diff changeset
47 applicantsNode.addContent(applicantNode);
036535fcd179 anteater
jdamerow
parents:
diff changeset
48
036535fcd179 anteater
jdamerow
parents:
diff changeset
49 // name
036535fcd179 anteater
jdamerow
parents:
diff changeset
50 Element name = new Element("name");
036535fcd179 anteater
jdamerow
parents:
diff changeset
51 applicantNode.addContent(name);
036535fcd179 anteater
jdamerow
parents:
diff changeset
52 name.setText(applicant.getApplicant().getReferenceInText());
036535fcd179 anteater
jdamerow
parents:
diff changeset
53
036535fcd179 anteater
jdamerow
parents:
diff changeset
54 // appliant institution
036535fcd179 anteater
jdamerow
parents:
diff changeset
55 Element appInstNode = new Element("applicant_institutions");
036535fcd179 anteater
jdamerow
parents:
diff changeset
56 applicantNode.addContent(appInstNode);
036535fcd179 anteater
jdamerow
parents:
diff changeset
57
036535fcd179 anteater
jdamerow
parents:
diff changeset
58 for (Location location : applicant.getApplicantInstitution()) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
59 Element appInst = new Element("applicant_institution");
036535fcd179 anteater
jdamerow
parents:
diff changeset
60 appInstNode.addContent(appInst);
036535fcd179 anteater
jdamerow
parents:
diff changeset
61
036535fcd179 anteater
jdamerow
parents:
diff changeset
62 createPlace(location, appInst);
036535fcd179 anteater
jdamerow
parents:
diff changeset
63 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
64
036535fcd179 anteater
jdamerow
parents:
diff changeset
65 Element appLocs = new Element("applicant_locations");
036535fcd179 anteater
jdamerow
parents:
diff changeset
66 applicantNode.addContent(appLocs);
036535fcd179 anteater
jdamerow
parents:
diff changeset
67
036535fcd179 anteater
jdamerow
parents:
diff changeset
68 for (Location location : applicant.getLocation()) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
69 Element appLoc = new Element("applicant_locations");
036535fcd179 anteater
jdamerow
parents:
diff changeset
70 appLocs.addContent(appLoc);
036535fcd179 anteater
jdamerow
parents:
diff changeset
71
036535fcd179 anteater
jdamerow
parents:
diff changeset
72 createPlace(location, appLoc);
036535fcd179 anteater
jdamerow
parents:
diff changeset
73 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
74 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
75
036535fcd179 anteater
jdamerow
parents:
diff changeset
76 Element researchLocsNode = new Element("research_locations");
036535fcd179 anteater
jdamerow
parents:
diff changeset
77 eventNode.addContent(researchLocsNode);
036535fcd179 anteater
jdamerow
parents:
diff changeset
78
036535fcd179 anteater
jdamerow
parents:
diff changeset
79 // add research location
036535fcd179 anteater
jdamerow
parents:
diff changeset
80 for (Location location : event.getResearchLocations()) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
81 Element researchLoc = new Element("research_location");
036535fcd179 anteater
jdamerow
parents:
diff changeset
82 researchLocsNode.addContent(researchLoc);
036535fcd179 anteater
jdamerow
parents:
diff changeset
83
036535fcd179 anteater
jdamerow
parents:
diff changeset
84 createPlace(location, researchLoc);
036535fcd179 anteater
jdamerow
parents:
diff changeset
85 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
86
036535fcd179 anteater
jdamerow
parents:
diff changeset
87 Element speciesNode = new Element("researched_species");
036535fcd179 anteater
jdamerow
parents:
diff changeset
88 eventNode.addContent(speciesNode);
036535fcd179 anteater
jdamerow
parents:
diff changeset
89 // add species
036535fcd179 anteater
jdamerow
parents:
diff changeset
90 for (Species species : event.getResearchedSpecies()) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
91 Element spNode = new Element("species");
036535fcd179 anteater
jdamerow
parents:
diff changeset
92 speciesNode.addContent(spNode);
036535fcd179 anteater
jdamerow
parents:
diff changeset
93
036535fcd179 anteater
jdamerow
parents:
diff changeset
94 spNode.setText(species.getSpeciesName().getReferenceInText());
036535fcd179 anteater
jdamerow
parents:
diff changeset
95 spNode.setAttribute(new Attribute("identified_name", species.getSpeciesName().getIdentifiedName()));
036535fcd179 anteater
jdamerow
parents:
diff changeset
96 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
97
036535fcd179 anteater
jdamerow
parents:
diff changeset
98 this.addElementToDoc(eventNode, "/events");
036535fcd179 anteater
jdamerow
parents:
diff changeset
99 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
100
036535fcd179 anteater
jdamerow
parents:
diff changeset
101 public void createPlace(Location location, Element parent) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
102 Element instname = new Element("name");
036535fcd179 anteater
jdamerow
parents:
diff changeset
103 instname.setText(location.getLocation().getReferenceInText());
036535fcd179 anteater
jdamerow
parents:
diff changeset
104 parent.addContent(instname);
036535fcd179 anteater
jdamerow
parents:
diff changeset
105
036535fcd179 anteater
jdamerow
parents:
diff changeset
106 for (Place place : location.getLocation().getPlaces()) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
107 Element placeInfo = new Element("place_information");
036535fcd179 anteater
jdamerow
parents:
diff changeset
108 parent.addContent(placeInfo);
036535fcd179 anteater
jdamerow
parents:
diff changeset
109
036535fcd179 anteater
jdamerow
parents:
diff changeset
110 placeInfo.setAttribute(new Attribute("type", place.getType()));
036535fcd179 anteater
jdamerow
parents:
diff changeset
111 placeInfo.setText(place.getName());
036535fcd179 anteater
jdamerow
parents:
diff changeset
112 placeInfo.setAttribute(new Attribute("woeId", place.getWoeId()));
036535fcd179 anteater
jdamerow
parents:
diff changeset
113 placeInfo.setAttribute(new Attribute("latitude", place.getLatitude() + ""));
036535fcd179 anteater
jdamerow
parents:
diff changeset
114 placeInfo.setAttribute(new Attribute("longitude", place.getLongitude() + ""));
036535fcd179 anteater
jdamerow
parents:
diff changeset
115
036535fcd179 anteater
jdamerow
parents:
diff changeset
116 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
117 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
118
036535fcd179 anteater
jdamerow
parents:
diff changeset
119 private void addElementToDoc(Element element, String xpath) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
120
036535fcd179 anteater
jdamerow
parents:
diff changeset
121 List<Element> nodes = executeXPath(xpath, null);
036535fcd179 anteater
jdamerow
parents:
diff changeset
122
036535fcd179 anteater
jdamerow
parents:
diff changeset
123 if (nodes != null && nodes.size() > 0) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
124 nodes.get(0).addContent(element);
036535fcd179 anteater
jdamerow
parents:
diff changeset
125 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
126
036535fcd179 anteater
jdamerow
parents:
diff changeset
127 save(filepath, false);
036535fcd179 anteater
jdamerow
parents:
diff changeset
128 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
129 }