diff src/de/mpiwg/anteater/xml/impl/PlacemakerXMLParser.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/PlacemakerXMLParser.java	Fri Sep 14 10:30:43 2012 +0200
@@ -0,0 +1,98 @@
+package de.mpiwg.anteater.xml.impl;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jdom2.Element;
+import org.jdom2.Namespace;
+
+import de.mpiwg.anteater.places.Place;
+import de.mpiwg.anteater.places.PlaceInformation;
+import de.mpiwg.anteater.xml.IPlaceFinderParser;
+
+public class PlacemakerXMLParser extends JDOMParser implements IPlaceFinderParser {
+
+	public PlacemakerXMLParser(String content) {
+		super(content, false);
+	}	
+	
+	public PlacemakerXMLParser(InputStream stream) {
+		super(stream);
+	}
+	
+	@Override
+	public List<PlaceInformation> parsePlaces() {
+		List<PlaceInformation> placeInfos = new ArrayList<PlaceInformation>();
+		List<Element> references = executeXPath("/default:contentlocation/default:document/default:referenceList/default:reference", "default");
+		if (references == null || references.isEmpty())
+			return placeInfos;
+		
+		List<Element> placeNodes = executeXPath("/default:contentlocation/default:document/default:placeDetails", "default");
+
+		// get all places
+		Map<String, Place> places = new HashMap<String, Place>();
+		Namespace ns = Namespace.getNamespace("http://wherein.yahooapis.com/v1/schema");
+		for (Element placeDetailNode : placeNodes) {
+			Element placeNode = placeDetailNode.getChild("place",ns);
+			
+			if (placeNode != null) {
+				Place place = new Place();
+				
+				
+				place.setWoeId(placeNode.getChildText("woeId", ns));
+				place.setType(placeNode.getChildText("type", ns));
+				place.setName(placeNode.getChildText("name", ns));
+				
+				Element centroid = placeNode.getChild("centroid", ns);
+				if (centroid != null) {
+					String latitute = centroid.getChildText("latitude", ns);
+					if (latitute != null)
+						place.setLatitude(new Float(latitute));
+					
+					String longitude = centroid.getChildText("longitude", ns);
+					if (longitude != null)
+						place.setLongitude(new Float(longitude));
+				}
+				
+				String id = placeDetailNode.getChildText("placeId", ns);
+				if (id != null) {
+					places.put(id, place);
+				}
+			}	
+		}
+		
+		// get all references
+		for (Element reference : references) {
+			PlaceInformation pInf = new PlaceInformation();
+			
+			String start = reference.getChildText("start", ns);
+			if (start != null)
+				pInf.setStart(new Integer(start));
+			
+			String end = reference.getChildText("end", ns);
+			if (end != null) {
+				pInf.setLength((new Integer(end)) - pInf.getStart());
+			}
+			
+			pInf.setReferenceInText(reference.getChildText("text", ns));
+			
+			String placeIdString = reference.getChildText("placeIds", ns);
+			String[] placeIds = placeIdString.split(" ");
+			pInf.setPlaces(new ArrayList<Place>());
+			
+			for (String placeId : placeIds) {
+				Place p = places.get(placeId);
+				if (p != null)
+					pInf.getPlaces().add(p);
+			}
+			
+			placeInfos.add(pInf);
+		}
+		
+		return placeInfos;
+	}
+
+}