1 package tim.prune.function.gpsies;
3 import java.util.ArrayList;
5 import org.xml.sax.Attributes;
6 import org.xml.sax.SAXException;
7 import org.xml.sax.helpers.DefaultHandler;
10 * XML handler for dealing with XML returned from gpsies.com
12 public class GpsiesXmlHandler extends DefaultHandler
14 private boolean _inTracks = false;
15 private boolean _inTrack = false;
16 private boolean _inTrackName = false;
17 private boolean _inDescription = false;
18 private boolean _inFileId = false;
19 private boolean _inTrackLength = false;
20 private boolean _inLink = false;
21 private String _value = null;
22 private ArrayList<GpsiesTrack> _trackList = null;
23 private GpsiesTrack _track = null;
27 * React to the start of an XML tag
29 public void startElement(String inUri, String inLocalName, String inTagName,
30 Attributes inAttributes) throws SAXException
32 if (inTagName.equals("tracks")) {
34 _trackList = new ArrayList<GpsiesTrack>();
36 else if (_inTracks && inTagName.equals("track")) {
38 _track = new GpsiesTrack();
40 else if (_inTrack && inTagName.equals("title")) {_inTrackName = true;}
41 else if (_inTrack && inTagName.equals("description")) {_inDescription = true;}
42 else if (_inTrack && inTagName.equals("fileId")) {_inFileId = true;}
43 else if (_inTrack && inTagName.equals("trackLengthM")) {_inTrackLength = true;}
44 else if (_inTrack && inTagName.equals("downloadLink")) {_inLink = true;}
45 super.startElement(inUri, inLocalName, inTagName, inAttributes);
49 * React to the end of an XML tag
51 public void endElement(String inUri, String inLocalName, String inTagName)
54 if (inTagName.equals("tracks")) {_inTracks = false;}
55 else if (_inTrack && inTagName.equals("track")) {
56 _trackList.add(_track);
59 else if (_inTrackName && inTagName.equals("title")) {
60 _track.setTrackName(_value);
63 else if (_inDescription && inTagName.equals("description")) {
64 _track.setDescription(_value);
65 _inDescription = false;
67 else if (_inFileId && inTagName.equals("fileId")) {
68 _track.setFileId(_value);
71 else if (_inTrackLength && inTagName.equals("trackLengthM")) {
73 _track.setLength(Double.parseDouble(_value));
75 catch (NumberFormatException nfe) {}
76 _inTrackLength = false;
78 else if (_inLink && inTagName.equals("downloadLink")) {
79 _track.setDownloadLink(_value);
82 super.endElement(inUri, inLocalName, inTagName);
86 * React to characters received inside tags
88 public void characters(char[] inCh, int inStart, int inLength)
91 _value = new String(inCh, inStart, inLength);
92 // System.out.println("Value: '" + value + "'");
93 // TODO: Note, this doesn't cope well with split characters for really long descriptions etc
94 super.characters(inCh, inStart, inLength);
98 * @return the list of tracks
100 public ArrayList<GpsiesTrack> getTrackList()