package tim.prune.load; import java.util.ArrayList; /** * Class to hold and manage a list of track names * from a gpx file, and report back which points * belong to which track */ public class TrackNameList { /** Current point number */ private int _pointNum = -1; /** Current track number */ private int _trackNum = -1; /** List of unique track names */ private ArrayList _trackNames = new ArrayList(); /** List of point numbers at the start of each track */ private ArrayList _startIndices = new ArrayList(); /** * Inform list of a new point * @param inTrackNum number of track, starting at zero * @param inTrackName name of track, if any * @param inIsTrackpoint true if point is a trackpoint */ public void addPoint(int inTrackNum, String inTrackName, boolean inIsTrackpoint) { _pointNum++; if (inIsTrackpoint) { if (inTrackNum != _trackNum) { _trackNames.add(inTrackName); _startIndices.add(Integer.valueOf(_pointNum)); } } _trackNum = inTrackNum; } /** * @return number of tracks found in file */ public int getNumTracks() { return _trackNames.size(); } /** * @param inTrackNum index of track, starting from zero * @return name of specified track (or null if none given) */ public String getTrackName(int inTrackNum) { if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return "";} String name = _trackNames.get(inTrackNum); return name; } /** * @param inTrackNum index of track, starting from zero * @return number of points in the specified track */ public int getNumPointsInTrack(int inTrackNum) { if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;} if (inTrackNum == (getNumTracks()-1)) { // last track, use total points return _pointNum - _startIndices.get(inTrackNum) + 1; } return _startIndices.get(inTrackNum+1) - _startIndices.get(inTrackNum); } /** * @param inTrackNum index of track, starting from zero * @return start index of the specified track */ public int getStartIndex(int inTrackNum) { if (inTrackNum < 0 || inTrackNum >= getNumTracks()) {return 0;} return _startIndices.get(inTrackNum); } }