]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/data/SourceInfo.java
Version 9, February 2010
[GpsPrune.git] / tim / prune / data / SourceInfo.java
diff --git a/tim/prune/data/SourceInfo.java b/tim/prune/data/SourceInfo.java
new file mode 100644 (file)
index 0000000..bbe8baa
--- /dev/null
@@ -0,0 +1,111 @@
+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;
+       }
+}