X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fdata%2FMediaObject.java;fp=src%2Ftim%2Fprune%2Fdata%2FMediaObject.java;h=8c53cafac220580338375300a6edbc583cacbd63;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/data/MediaObject.java b/src/tim/prune/data/MediaObject.java new file mode 100644 index 0000000..8c53caf --- /dev/null +++ b/src/tim/prune/data/MediaObject.java @@ -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() {} +}