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