2 Copyright (C) 2001, 2006 United States Government
3 as represented by the Administrator of the
4 National Aeronautics and Space Administration.
7 package gov
.nasa
.worldwind
.formats
.gpx
;
9 import gov
.nasa
.worldwind
.*;
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();
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
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
);
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
);
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
65 String msg
= WorldWind
.retrieveErrMsg("nullValue.InputStreamIsNull");
66 WorldWind
.logger().log(java
.util
.logging
.Level
.FINE
, msg
);
67 throw new IllegalArgumentException(msg
);
73 public java
.util
.List
<Track
> getTracks()
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;
90 public void startDocument() throws org
.xml
.sax
.SAXException
92 super.startDocument();
96 public void endDocument() throws org
.xml
.sax
.SAXException
102 public void warning(org
.xml
.sax
.SAXParseException saxParseException
) throws org
.xml
.sax
.SAXException
104 saxParseException
.printStackTrace();
105 super.warning(saxParseException
);
109 public void error(org
.xml
.sax
.SAXParseException saxParseException
) throws org
.xml
.sax
.SAXException
111 saxParseException
.printStackTrace();
112 super.error(saxParseException
);
116 public void fatalError(org
.xml
.sax
.SAXParseException saxParseException
) throws org
.xml
.sax
.SAXException
118 saxParseException
.printStackTrace();
119 super.fatalError(saxParseException
);
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
);
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;
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());
170 for (gov
.nasa
.worldwind
.TrackSegment segment
: track
.getSegments())
172 System
.out
.printf("\tSegment %d, %d points\n", i
++, segment
.getPoints().size());
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
)
185 catch (org
.xml
.sax
.SAXException e
)
189 catch (java
.io
.IOException e
)