More track data.
[utils] / gps / src / main / java / org / wamblee / gpx / GpxParser.java
index 9f544a9a48c8fcb0bf98fd9bfdc2b32253c4eb78..686c8d0843684aa461c69a4358bd81c19d48734c 100644 (file)
@@ -23,7 +23,10 @@ import java.util.List;
 import org.dom4j.Document;
 import org.dom4j.Element;
 import org.wamblee.gps.track.Track;
+import org.wamblee.gps.track.TrackImpl;
 import org.wamblee.gps.track.TrackPoint;
+import org.wamblee.gps.track.TrackSegment;
+import org.wamblee.gps.track.TrackSegmentImpl;
 import org.wamblee.xml.DomUtils;
 import org.wamblee.xml.XMLException;
 
@@ -40,32 +43,38 @@ public class GpxParser {
         // Empty.
     }
 
-    public Track parse(InputStream aIs) throws XMLException {
+    public Track parse(String aDescription, InputStream aIs) throws XMLException {
         Document doc = DomUtils.convert(DomUtils.read(aIs));
-        return parse(doc);
+        return parse(aDescription, doc);
     }
 
     /**
      * @param doc
      */
-    public Track parse(Document doc) {
-        Track result = new Track();
+    public Track parse(String aDescription, Document doc) {
+        TrackImpl result = new TrackImpl(aDescription);
         List<Element> tracks = doc.getRootElement().elements("trk");
         if ( tracks != null ) { 
-            for (Element track: tracks) { 
+            for (Element track: tracks) {
+                String trackName = track.elementText("name");
+                TrackSegmentImpl trackSegment = new TrackSegmentImpl(trackName);
+                result.addSegment(trackSegment);
                 List<Element> segments = track.elements("trkseg");
                 if ( segments != null ) { 
-                    for (Element segment: segments) { 
-                        parseTrackPoints(result, segment.elementIterator("trkpt"));
+                    for (Element segment: segments) {           
+                        parseTrackPoints(trackSegment, segment.elementIterator("trkpt"));
                     }
                 }
             }
         }
 
         List<Element> routes = doc.getRootElement().elements("rte");
-        if ( routes != null ) { 
-            for (Element route: routes) { 
-                parseTrackPoints(result, route.elementIterator("rtept"));
+        if ( routes != null ) {
+            for (Element route: routes) {
+                String routeName = route.elementText("desc");
+                TrackSegmentImpl trackSegment = new TrackSegmentImpl(routeName);
+                result.addSegment(trackSegment);
+                parseTrackPoints(trackSegment, route.elementIterator("rtept"));
             }
         }
         
@@ -73,7 +82,7 @@ public class GpxParser {
     }
     
     
-    private void parseTrackPoints(Track aTrack, Iterator<Element> aPoints) { 
+    private void parseTrackPoints(TrackSegmentImpl aTrack, Iterator<Element> aPoints) { 
         while (aPoints.hasNext()) { 
             Element point = aPoints.next();
             aTrack.addPoint(parseTrackPoint(point));