+++ /dev/null
-package tim.prune.data;
-
-import java.io.File;
-
-/**
- * Class to hold the source of the point data, including the original file
- * and file type, and references to each of the point objects
- */
-public class SourceInfo
-{
- /** File type of source file */
- public enum FILE_TYPE {TEXT, GPX, KML, NMEA, GPSBABEL, GPSIES, JSON};
-
- /** Source file */
- private File _sourceFile = null;
- /** Name of source */
- private String _sourceName = null;
- /** File type */
- private FILE_TYPE _fileType = null;
- /** File title, if any */
- private String _fileTitle = null;
-
- /** Array of datapoints */
- private DataPoint[] _points = null;
- /** Number of points */
- private int _numPoints = 0;
- /** Array of point indices (if necessary) */
- private int[] _pointIndices = null;
-
-
- /**
- * Constructor
- * @param inFile source file
- * @param inType type of file
- */
- public SourceInfo(File inFile, FILE_TYPE inType)
- {
- _sourceFile = inFile;
- _sourceName = inFile.getName();
- _fileType = inType;
- }
-
- /**
- * Constructor
- * @param inName name of source (without file)
- * @param inType type of file
- */
- public SourceInfo(String inName, FILE_TYPE inType)
- {
- _sourceFile = null;
- _sourceName = inName;
- _fileType = inType;
- }
-
- /**
- * @param inTitle title of file, eg from <name> tag in gpx
- */
- public void setFileTitle(String inTitle)
- {
- _fileTitle = inTitle;
- }
-
- /**
- * @return source file
- */
- public File getFile()
- {
- return _sourceFile;
- }
-
- /**
- * @return source name
- */
- public String getName()
- {
- return _sourceName;
- }
-
- /**
- * @return file type of source
- */
- public FILE_TYPE getFileType()
- {
- return _fileType;
- }
-
- /**
- * @return title of file
- */
- public String getFileTitle()
- {
- return _fileTitle;
- }
-
- /**
- * @return number of points from this source
- */
- public int getNumPoints()
- {
- return _numPoints;
- }
-
- /**
- * Set the indices of the points selected out of a loaded track
- * @param inSelectedFlags array of booleans showing whether each point in the original data was loaded or not
- */
- public void setPointIndices(boolean[] inSelectedFlags)
- {
- _numPoints = inSelectedFlags.length;
- _pointIndices = new int[_numPoints];
- int p=0;
- for (int i=0; i<_numPoints; i++) {
- if (inSelectedFlags[i]) {_pointIndices[p++] = i;}
- }
- // Now the point indices array holds the index of each of the selected points
- }
-
- /**
- * Take the points from the given track and store
- * @param inTrack track object containing points
- * @param inNumPoints number of points loaded
- */
- public void populatePointObjects(Track inTrack, int inNumPoints)
- {
- if (_numPoints == 0) {_numPoints = inNumPoints;}
- if (inNumPoints > 0)
- {
- _points = new DataPoint[inNumPoints];
- int trackLen = inTrack.getNumPoints();
- System.arraycopy(inTrack.cloneContents(), trackLen-inNumPoints, _points, 0, inNumPoints);
- // Note data copied twice here but still more efficient than looping
- }
- }
-
- /**
- * Look for the given point in the array
- * @param inPoint point to look for
- * @return index, or -1 if not found
- */
- public int getIndex(DataPoint inPoint)
- {
- int idx = -1;
- for (int i=0; i<_points.length; i++)
- {
- if (_points[i] == inPoint) {
- idx = i;
- break;
- }
- }
- if (idx == -1) {return idx;} // point not found
- if (_pointIndices == null) {return idx;} // All points loaded
- return _pointIndices[idx]; // use point index mapping
- }
-}