]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/data/MediaObject.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / data / MediaObject.java
diff --git a/src/tim/prune/data/MediaObject.java b/src/tim/prune/data/MediaObject.java
new file mode 100644 (file)
index 0000000..8c53caf
--- /dev/null
@@ -0,0 +1,226 @@
+package tim.prune.data;
+
+import java.io.File;
+
+/**
+ * Class to represent a general media object for correlation.
+ * Subclasses are currently Photo and AudioClip
+ */
+public abstract class MediaObject
+{
+       /** File where media is stored (if any) */
+       protected File _file = null;
+       /** Name of file */
+       protected String _name = null;
+       /** Cached data if downloaded */
+       protected byte[] _data = null;
+       /** URL if media came from net */
+       protected String _url = null;
+       /** Timestamp, if any */
+       protected Timestamp _timestamp = null;
+       /** Associated DataPoint if correlated */
+       protected DataPoint _dataPoint = null;
+       /** Status when loaded */
+       private Status _originalStatus = Status.NOT_CONNECTED;
+       /** Current status */
+       private Status _currentStatus = Status.NOT_CONNECTED;
+
+       /** Connection status */
+       public enum Status
+       {
+               /** Media is not connected to any point */
+               NOT_CONNECTED,
+               /** Media has been connected to a point since it was loaded */
+               TAGGED,
+               /** Media is connected to a point */
+               CONNECTED
+       };
+
+
+       /**
+        * Constructor
+        * @param inFile file object
+        * @param inStamp timestamp object
+        */
+       public MediaObject(File inFile, Timestamp inStamp)
+       {
+               _file = inFile;
+               _name = inFile.getName();
+               _data = null;
+               _timestamp = inStamp;
+       }
+
+       /**
+        * Constructor for byte arrays
+        * @param inData byte array containing data
+        * @param inName name of object
+        * @param inUrl source url of object or null
+        */
+       public MediaObject(byte[] inData, String inName, String inUrl)
+       {
+               _file = null;
+               _data = inData;
+               _name = inName;
+               _url = inUrl;
+               _timestamp = null;
+       }
+
+       /**
+        * @return the file object
+        */
+       public File getFile() {
+               return _file;
+       }
+
+       /** @return media name */
+       public String getName() {
+               return _name;
+       }
+
+       /**
+        * @return the timestamp object
+        */
+       public Timestamp getTimestamp() {
+               return _timestamp;
+       }
+
+       /**
+        * @param inTimestamp Timestamp object
+        */
+       public void setTimestamp(Timestamp inTimestamp) {
+               _timestamp = inTimestamp;
+       }
+
+       /**
+        * @return byte data of media
+        */
+       public byte[] getByteData() {
+               return _data;
+       }
+
+       /**
+        * @return source Url (or null)
+        */
+       public String getUrl() {
+               return _url;
+       }
+
+       /**
+        * @return the full path to the media, either filename or url
+        */
+       public String getFullPath()
+       {
+               if (_file != null) return _file.getAbsolutePath();
+               return getUrl();
+       }
+
+       /**
+        * @return true if details are valid (might not have timestamp)
+        */
+       public boolean isValid()
+       {
+               return ((_file != null && _file.exists() && _file.canRead())
+                       || (_data != null && _data.length > 0));
+       }
+
+       /**
+        * @return true if file has timestamp
+        */
+       public boolean hasTimestamp() {
+                return _timestamp != null && _timestamp.isValid();
+       }
+
+       /**
+        * Check if this object refers to the same object as another
+        * @param inOther other MediaObject
+        * @return true if the objects are the same
+        */
+       public boolean equals(MediaObject inOther)
+       {
+               if (_file != null)
+               {
+                       // compare file objects
+                       return (inOther != null && inOther.getFile() != null && getFile() != null
+                               && inOther.getFile().equals(getFile()));
+               }
+               // compare data arrays
+               return (inOther != null && _name != null && inOther._name != null && _name.equals(inOther._name)
+                       && _data != null && inOther._data != null && _data.length == inOther._data.length);
+       }
+
+       /**
+        * Set the data point associated with the photo
+        * @param inPoint DataPoint with coordinates etc
+        */
+       public void setDataPoint(DataPoint inPoint)
+       {
+               _dataPoint = inPoint;
+               // set status according to point
+               if (inPoint == null) {
+                       setCurrentStatus(Status.NOT_CONNECTED);
+               }
+               else {
+                       setCurrentStatus(Status.CONNECTED);
+               }
+       }
+
+       /**
+        * @return the DataPoint object
+        */
+       public DataPoint getDataPoint() {
+               return _dataPoint;
+       }
+
+       /**
+        * @param inStatus status of file when loaded
+        */
+       public void setOriginalStatus(Status inStatus)
+       {
+               _originalStatus = inStatus;
+               _currentStatus = inStatus;
+       }
+
+       /**
+        * @return status of file when it was loaded
+        */
+       public Status getOriginalStatus()
+       {
+               return _originalStatus;
+       }
+
+       /**
+        * @return current status
+        */
+       public Status getCurrentStatus()
+       {
+               return _currentStatus;
+       }
+       /**
+        * @param inStatus current status
+        */
+       public void setCurrentStatus(Status inStatus)
+       {
+               _currentStatus = inStatus;
+       }
+
+       /**
+        * @return true if this object is connected to a point
+        */
+       public boolean isConnected()
+       {
+               return _currentStatus != Status.NOT_CONNECTED;
+       }
+
+       /**
+        * @return true if status has changed since load
+        */
+       public boolean isModified()
+       {
+               return _currentStatus != _originalStatus;
+       }
+
+       /**
+        * Reset any cached data (eg thumbnail)
+        */
+       public void resetCachedData() {}
+}