]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/TrackNameList.java
2f2b7dcf6a3d31cc3ef4e7415a125ad769e143a1
[GpsPrune.git] / tim / prune / load / TrackNameList.java
1 package tim.prune.load;
2
3 import java.util.ArrayList;
4
5 /**
6  * Class to hold and manage a list of track names
7  * from a gpx file, and report back which points
8  * belong to which track
9  */
10 public class TrackNameList
11 {
12         /** Current point number */
13         private int _pointNum = -1;
14         /** Current track number */
15         private int _trackNum = -1;
16         /** List of unique track names */
17         private ArrayList<String> _trackNames = new ArrayList<String>();
18         /** List of point numbers at the start of each track */
19         private ArrayList<Integer> _startIndices = new ArrayList<Integer>();
20
21
22         /**
23          * Inform list of a new point
24          * @param inTrackNum number of track, starting at zero
25          * @param inTrackName name of track, if any
26          * @param inIsTrackpoint true if point is a trackpoint
27          */
28         public void addPoint(int inTrackNum, String inTrackName, boolean inIsTrackpoint)
29         {
30                 _pointNum++;
31                 if (inIsTrackpoint)
32                 {
33                         if (inTrackNum != _trackNum) {
34                                 _trackNames.add(inTrackName);
35                                 _startIndices.add(Integer.valueOf(_pointNum));
36                         }
37                 }
38                 _trackNum = inTrackNum;
39         }
40
41         /**
42          * @return number of tracks found in file
43          */
44         public int getNumTracks()
45         {
46                 return _trackNames.size();
47         }
48
49         /**
50          * @param inTrackNum index of track, starting from zero
51          * @return name of specified track (or null if none given)
52          */
53         public String getTrackName(int inTrackNum)
54         {
55                 if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return "";}
56                 String name = _trackNames.get(inTrackNum);
57                 return name;
58         }
59
60         /**
61          * @param inTrackNum index of track, starting from zero
62          * @return number of points in the specified track
63          */
64         public int getNumPointsInTrack(int inTrackNum)
65         {
66                 if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;}
67                 if (inTrackNum == (getNumTracks()-1)) {
68                         // last track, use total points
69                         return _pointNum - _startIndices.get(inTrackNum) + 1;
70                 }
71                 return _startIndices.get(inTrackNum+1) - _startIndices.get(inTrackNum);
72         }
73
74         /**
75          * @param inTrackNum index of track, starting from zero
76          * @return start index of the specified track
77          */
78         public int getStartIndex(int inTrackNum)
79         {
80                 if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;}
81                 return _startIndices.get(inTrackNum);
82         }
83 }