]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/TrackNameList.java
Version 11, August 2010
[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                         // System.out.println("Point " + _pointNum + " is in track '" + inTrackName + "' (" + inTrackNum + ")");
34                         if (inTrackNum != _trackNum) {
35                                 _trackNames.add(inTrackName);
36                                 _startIndices.add(new Integer(_pointNum));
37                         }
38                 }
39                 _trackNum = inTrackNum;
40         }
41
42         /**
43          * @return number of tracks found in file
44          */
45         public int getNumTracks()
46         {
47                 return _trackNames.size();
48         }
49
50         /**
51          * @param inTrackNum index of track, starting from zero
52          * @return name of specified track (or null if none given)
53          */
54         public String getTrackName(int inTrackNum)
55         {
56                 if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return "";}
57                 String name = _trackNames.get(inTrackNum);
58                 return name;
59         }
60
61         /**
62          * @param inTrackNum index of track, starting from zero
63          * @return number of points in the specified track
64          */
65         public int getNumPointsInTrack(int inTrackNum)
66         {
67                 if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;}
68                 if (inTrackNum == (getNumTracks()-1)) {
69                         // last track, use total points
70                         return _pointNum - _startIndices.get(inTrackNum) + 1;
71                 }
72                 return _startIndices.get(inTrackNum+1) - _startIndices.get(inTrackNum);
73         }
74
75         /**
76          * @param inTrackNum index of track, starting from zero
77          * @return start index of the specified track
78          */
79         public int getStartIndex(int inTrackNum)
80         {
81                 if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;}
82                 return _startIndices.get(inTrackNum);
83         }
84
85         /**
86          * Print summary for debug
87          * @deprecated
88          */
89         public void summarize()
90         {
91                 System.out.println("File has " + getNumTracks() + " tracks:");
92                 for (int i=0; i<getNumTracks(); i++) {
93                         System.out.println("  Track " + i + " is called '" + _trackNames.get(i) + "' and has " + getNumPointsInTrack(i) + " points");
94                 }
95         }
96 }