--- /dev/null
+package tim.prune.data;
+
+import java.io.File;
+
+/**
+ * Class to hold the source of the point data,
+ * including original file and file type, and
+ * also file offsets for source copying
+ */
+public class SourceInfo
+{
+ /** File type of source file */
+ public enum FILE_TYPE {TEXT, GPX, KML, NMEA, GPSBABEL, GPSIES};
+
+ /** Source file */
+ private File _sourceFile = null;
+ /** Name of source */
+ private String _sourceName = null;
+ /** File type */
+ private FILE_TYPE _fileType = null;
+
+ /** Array of datapoints */
+ private DataPoint[] _points = 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;
+ }
+
+ /**
+ * @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 number of points from this source
+ */
+ public int getNumPoints()
+ {
+ return _points.length;
+ }
+
+ /**
+ * 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 (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 && (idx < 0); i++) {
+ if (_points[i] == inPoint) {idx = i;}
+ }
+ return idx;
+ }
+}