Worldwind public release 0.2
[worldwind-tracker.git] / gov / nasa / worldwind / formats / gpx / GpxReader.java
blob0a34e74b3d48abbdb66d48dac36616269da22356
1 /*
2 Copyright (C) 2001, 2006 United States Government
3 as represented by the Administrator of the
4 National Aeronautics and Space Administration.
5 All Rights Reserved.
6 */
7 package gov.nasa.worldwind.formats.gpx;
9 import gov.nasa.worldwind.*;
11 /**
12 * @author tag
13 * @version $Id: GpxReader.java 513 2007-01-18 00:33:16Z ericdalgliesh $
15 public class GpxReader // TODO: I18N, proper exception handling, remove stack-trace prints
17 private javax.xml.parsers.SAXParser parser;
18 private java.util.List<Track> tracks = new java.util.ArrayList<Track>();
20 public GpxReader() throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException
22 javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
23 factory.setNamespaceAware(true);
25 this.parser = factory.newSAXParser();
28 /**
29 * @param path
30 * @throws IllegalArgumentException if <code>path</code> is null
31 * @throws java.io.IOException if no file exists at the location specified by <code>path</code>
32 * @throws org.xml.sax.SAXException
34 public void readFile(String path) throws java.io.IOException, org.xml.sax.SAXException
36 if (path == null)
38 String msg = WorldWind.retrieveErrMsg("nullValue.PathIsNull");
39 WorldWind.logger().log(java.util.logging.Level.FINE, msg);
40 throw new IllegalArgumentException(msg);
43 java.io.File file = new java.io.File(path);
44 if (!file.exists())
46 String msg = WorldWind.retrieveErrMsg("generic.fileNotFound");
47 WorldWind.logger().log(java.util.logging.Level.FINE, msg);
48 throw new java.io.FileNotFoundException(path);
51 java.io.FileInputStream fis = new java.io.FileInputStream(file);
52 this.doRead(fis);
55 /**
56 * @param stream
57 * @throws IllegalArgumentException if <code>stream</code> is null
58 * @throws java.io.IOException
59 * @throws org.xml.sax.SAXException
61 public void readStream(java.io.InputStream stream) throws java.io.IOException, org.xml.sax.SAXException
63 if (stream == null)
65 String msg = WorldWind.retrieveErrMsg("nullValue.InputStreamIsNull");
66 WorldWind.logger().log(java.util.logging.Level.FINE, msg);
67 throw new IllegalArgumentException(msg);
70 this.doRead(stream);
73 public java.util.List<Track> getTracks()
75 return this.tracks;
78 private void doRead(java.io.InputStream fis) throws java.io.IOException, org.xml.sax.SAXException
80 this.parser.parse(fis, new Handler());
83 private class Handler extends org.xml.sax.helpers.DefaultHandler
85 // this is a private class used solely by the containing class, so no validation occurs in it.
87 private gov.nasa.worldwind.formats.gpx.ElementParser currentElement = null;
89 @Override
90 public void startDocument() throws org.xml.sax.SAXException
92 super.startDocument();
95 @Override
96 public void endDocument() throws org.xml.sax.SAXException
98 super.endDocument();
101 @Override
102 public void warning(org.xml.sax.SAXParseException saxParseException) throws org.xml.sax.SAXException
104 saxParseException.printStackTrace();
105 super.warning(saxParseException);
108 @Override
109 public void error(org.xml.sax.SAXParseException saxParseException) throws org.xml.sax.SAXException
111 saxParseException.printStackTrace();
112 super.error(saxParseException);
115 @Override
116 public void fatalError(org.xml.sax.SAXParseException saxParseException) throws org.xml.sax.SAXException
118 saxParseException.printStackTrace();
119 super.fatalError(saxParseException);
122 @Override
123 public void startElement(String uri, String lname, String qname, org.xml.sax.Attributes attributes)
124 throws org.xml.sax.SAXException
126 if (this.currentElement != null)
128 this.currentElement.startElement(uri, lname, qname, attributes);
130 else if (lname.equalsIgnoreCase("trk"))
132 GpxTrack track = new GpxTrack(uri, lname, qname, attributes);
133 this.currentElement = track;
134 GpxReader.this.tracks.add(track);
138 @Override
139 public void endElement(String uri, String lname, String qname) throws org.xml.sax.SAXException
141 if (this.currentElement != null)
143 this.currentElement.endElement(uri, lname, qname);
145 if (lname.equalsIgnoreCase(this.currentElement.getElementName()))
146 this.currentElement = null;
150 @Override
151 public void characters(char[] data, int start, int length) throws org.xml.sax.SAXException
153 if (this.currentElement != null)
154 this.currentElement.characters(data, start, length);
158 public static void main(String[] args)
162 gov.nasa.worldwind.formats.gpx.GpxReader reader = new gov.nasa.worldwind.formats.gpx.GpxReader();
163 reader.readFile("src/worldwinddemo/track data/20061126.gpx");
165 System.out.printf("%d tracks\n", reader.getTracks().size());
166 for (Track track : reader.getTracks())
168 System.out.printf("GpxTrack %d segments\n", track.getSegments().size());
169 int i = 0;
170 for (gov.nasa.worldwind.TrackSegment segment : track.getSegments())
172 System.out.printf("\tSegment %d, %d points\n", i++, segment.getPoints().size());
173 int j = 0;
174 for (gov.nasa.worldwind.TrackPoint point : segment.getPoints())
176 System.out.printf("\t\t%4d: %s\n", j++, point);
181 catch (javax.xml.parsers.ParserConfigurationException e)
183 e.printStackTrace();
185 catch (org.xml.sax.SAXException e)
187 e.printStackTrace();
189 catch (java.io.IOException e)
191 e.printStackTrace();