X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/020d2885ce5f923870ff3aed02db98d6e9eb2a48..5f61cb15552eb2fda01716078a9191b88cebf764:/src/eu/alefzero/owncloud/datamodel/OCFile.java diff --git a/src/eu/alefzero/owncloud/datamodel/OCFile.java b/src/eu/alefzero/owncloud/datamodel/OCFile.java index 04a153b9..68619337 100644 --- a/src/eu/alefzero/owncloud/datamodel/OCFile.java +++ b/src/eu/alefzero/owncloud/datamodel/OCFile.java @@ -23,299 +23,332 @@ import java.io.File; import android.os.Parcel; import android.os.Parcelable; -public class OCFile implements Parcelable { - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - @Override - public OCFile createFromParcel(Parcel source) { - return new OCFile(source); - } - - @Override - public OCFile[] newArray(int size) { - return new OCFile[size]; - } - }; - - private long id; - private long parentId; - private long length; - private long creationTimestamp; - private long modifiedTimestamp; - private String remotePath; - private String localPath; - private String mimeType; - private boolean needsUpdating; - - /** - * Create new {@link OCFile} with given path - * - * @param path - * The remote path of the file - */ - public OCFile(String path) { - resetData(); - needsUpdating = false; - remotePath = path; - } - - /** - * Reconstruct from parcel - * @param source The source parcel - */ - private OCFile(Parcel source){ - id = source.readLong(); - parentId = source.readLong(); - length = source.readLong(); - creationTimestamp = source.readLong(); - modifiedTimestamp = source.readLong(); - remotePath = source.readString(); - localPath = source.readString(); - mimeType = source.readString(); - needsUpdating = source.readInt() == 0; - } - - /** - * Gets the ID of the file - * - * @return the file ID - */ - public long getFileId() { - return id; - } - - /** - * Returns the path of the file - * - * @return The path - */ - public String getPath() { - return remotePath; - } - - /** - * Can be used to check, whether or not this file exists in the database - * already - * - * @return true, if the file exists in the database - */ - public boolean fileExists() { - return id != -1; - } - - /** - * Use this to find out if this file is a Directory - * - * @return true if it is a directory - */ - public boolean isDirectory() { - return mimeType != null && mimeType.equals("DIR"); - } - - /** - * Use this to check if this file is available locally - * - * @return true if it is - */ - public boolean isDownloaded() { - return localPath != null || localPath.equals(""); - } - - /** - * The path, where the file is stored locally - * - * @return The local path to the file - */ - public String getStoragePath() { - return localPath; - } - - /** - * Can be used to set the path where the file is stored - * - * @param storage_path - * to set - */ - public void setStoragePath(String storage_path) { - localPath = storage_path; - } - - /** - * Get a UNIX timestamp of the file creation time - * - * @return A UNIX timestamp of the time that file was created - */ - public long getCreationTimestamp() { - return creationTimestamp; - } - - /** - * Set a UNIX timestamp of the time the file was created - * - * @param creation_timestamp - * to set - */ - public void setCreationTimestamp(long creation_timestamp) { - creationTimestamp = creation_timestamp; - } - - /** - * Get a UNIX timestamp of the file modification time - * - * @return A UNIX timestamp of the modification time - */ - public long getModificationTimestamp() { - return modifiedTimestamp; - } - - /** - * Set a UNIX timestamp of the time the time the file was modified. - * - * @param modification_timestamp - * to set - */ - public void setModificationTimestamp(long modification_timestamp) { - modifiedTimestamp = modification_timestamp; - } - - /** - * Returns the filename and "/" for the root directory - * - * @return The name of the file - */ - public String getFileName() { - if (remotePath != null) { - File f = new File(remotePath); - return f.getName().equals("") ? "/" : f.getName(); - } - return null; - } - - /** - * Can be used to get the Mimetype - * - * @return the Mimetype as a String - */ - public String getMimetype() { - return mimeType; - } - - /** - * Adds a file to this directory. If this file is not a directory, an - * exception gets thrown. - * - * @param file - * to add - * @throws IllegalStateException - * if you try to add a something and this is not a directory - */ - public void addFile(OCFile file) throws IllegalStateException { - if (isDirectory()) { - file.parentId = id; - needsUpdating = true; - return; - } - throw new IllegalStateException( - "This is not a directory where you can add stuff to!"); - } - - /** - * Used internally. Reset all file properties - */ - private void resetData() { - id = -1; - remotePath = null; - parentId = 0; - localPath = null; - mimeType = null; - length = 0; - creationTimestamp = 0; - modifiedTimestamp = 0; - } - - /** - * Sets the ID of the file - * - * @param file_id - * to set - */ - public void setFileId(long file_id) { - id = file_id; - } - - /** - * Sets the Mime-Type of the - * - * @param mimetype - * to set - */ - public void setMimetype(String mimetype) { - mimeType = mimetype; - } - - /** - * Sets the ID of the parent folder - * - * @param parent_id - * to set - */ - public void setParentId(long parent_id) { - parentId = parent_id; - } - - /** - * Sets the file size in bytes - * - * @param file_len - * to set - */ - public void setFileLength(long file_len) { - length = file_len; - } - - /** - * Returns the size of the file in bytes - * - * @return The filesize in bytes - */ - public long getFileLength() { - return length; - } - - /** - * Returns the ID of the parent Folder - * - * @return The ID - */ - public long getParentId() { - return parentId; - } - - /** - * Check, if this file needs updating - * - * @return - */ - public boolean needsUpdatingWhileSaving() { - return needsUpdating; - } - - @Override - public int describeContents() { - return this.hashCode(); - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeLong(id); - dest.writeLong(parentId); - dest.writeLong(length); - dest.writeLong(creationTimestamp); - dest.writeLong(modifiedTimestamp); - dest.writeString(remotePath); - dest.writeString(localPath); - dest.writeString(mimeType); - dest.writeInt(needsUpdating ? 0 : 1 ); // No writeBoolean method exists - yay :D - } - +public class OCFile implements Parcelable, Comparable { + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public OCFile createFromParcel(Parcel source) { + return new OCFile(source); + } + + @Override + public OCFile[] newArray(int size) { + return new OCFile[size]; + } + }; + + private long mId; + private long mParentId; + private long mLength; + private long mCreationTimestamp; + private long mModifiedTimestamp; + private String mRemotePath; + private String mLocalPath; + private String mMimeType; + private boolean mNeedsUpdating; + private long mLastSyncDate; + + /** + * Create new {@link OCFile} with given path + * + * @param path The remote path of the file + */ + public OCFile(String path) { + resetData(); + mNeedsUpdating = false; + mRemotePath = path; + } + + /** + * Reconstruct from parcel + * + * @param source The source parcel + */ + private OCFile(Parcel source) { + mId = source.readLong(); + mParentId = source.readLong(); + mLength = source.readLong(); + mCreationTimestamp = source.readLong(); + mModifiedTimestamp = source.readLong(); + mRemotePath = source.readString(); + mLocalPath = source.readString(); + mMimeType = source.readString(); + mNeedsUpdating = source.readInt() == 0; + } + + /** + * Gets the ID of the file + * + * @return the file ID + */ + public long getFileId() { + return mId; + } + + /** + * Returns the remote path of the file on ownCloud + * + * @return The remote path to the file + */ + public String getRemotePath() { + return mRemotePath; + } + + /** + * Can be used to check, whether or not this file exists in the database + * already + * + * @return true, if the file exists in the database + */ + public boolean fileExists() { + return mId != -1; + } + + /** + * Use this to find out if this file is a Directory + * + * @return true if it is a directory + */ + public boolean isDirectory() { + return mMimeType != null && mMimeType.equals("DIR"); + } + + /** + * Use this to check if this file is available locally + * + * @return true if it is + */ + public boolean isDownloaded() { + return mLocalPath != null && !mLocalPath.equals(""); + } + + /** + * The path, where the file is stored locally + * + * @return The local path to the file + */ + public String getStoragePath() { + return mLocalPath; + } + + /** + * Can be used to set the path where the file is stored + * + * @param storage_path to set + */ + public void setStoragePath(String storage_path) { + mLocalPath = storage_path; + } + + /** + * Get a UNIX timestamp of the file creation time + * + * @return A UNIX timestamp of the time that file was created + */ + public long getCreationTimestamp() { + return mCreationTimestamp; + } + + /** + * Set a UNIX timestamp of the time the file was created + * + * @param creation_timestamp to set + */ + public void setCreationTimestamp(long creation_timestamp) { + mCreationTimestamp = creation_timestamp; + } + + /** + * Get a UNIX timestamp of the file modification time + * + * @return A UNIX timestamp of the modification time + */ + public long getModificationTimestamp() { + return mModifiedTimestamp; + } + + /** + * Set a UNIX timestamp of the time the time the file was modified. + * + * @param modification_timestamp to set + */ + public void setModificationTimestamp(long modification_timestamp) { + mModifiedTimestamp = modification_timestamp; + } + + /** + * Returns the filename and "/" for the root directory + * + * @return The name of the file + */ + public String getFileName() { + if (mRemotePath != null) { + File f = new File(mRemotePath); + return f.getName().equals("") ? "/" : f.getName(); + } + return null; + } + + /** + * Can be used to get the Mimetype + * + * @return the Mimetype as a String + */ + public String getMimetype() { + return mMimeType; + } + + /** + * Adds a file to this directory. If this file is not a directory, an + * exception gets thrown. + * + * @param file to add + * @throws IllegalStateException if you try to add a something and this is + * not a directory + */ + public void addFile(OCFile file) throws IllegalStateException { + if (isDirectory()) { + file.mParentId = mId; + mNeedsUpdating = true; + return; + } + throw new IllegalStateException( + "This is not a directory where you can add stuff to!"); + } + + /** + * Used internally. Reset all file properties + */ + private void resetData() { + mId = -1; + mRemotePath = null; + mParentId = 0; + mLocalPath = null; + mMimeType = null; + mLength = 0; + mCreationTimestamp = 0; + mModifiedTimestamp = 0; + mLastSyncDate = 0; + } + + /** + * Sets the ID of the file + * + * @param file_id to set + */ + public void setFileId(long file_id) { + mId = file_id; + } + + /** + * Sets the Mime-Type of the + * + * @param mimetype to set + */ + public void setMimetype(String mimetype) { + mMimeType = mimetype; + } + + /** + * Sets the ID of the parent folder + * + * @param parent_id to set + */ + public void setParentId(long parent_id) { + mParentId = parent_id; + } + + /** + * Sets the file size in bytes + * + * @param file_len to set + */ + public void setFileLength(long file_len) { + mLength = file_len; + } + + /** + * Returns the size of the file in bytes + * + * @return The filesize in bytes + */ + public long getFileLength() { + return mLength; + } + + /** + * Returns the ID of the parent Folder + * + * @return The ID + */ + public long getParentId() { + return mParentId; + } + + /** + * Check, if this file needs updating + * + * @return + */ + public boolean needsUpdatingWhileSaving() { + return mNeedsUpdating; + } + + public long getLastSyncDate() { + return mLastSyncDate; + } + + public void setLastSyncDate(long lastSyncDate) { + mLastSyncDate = lastSyncDate; + } + + @Override + public int describeContents() { + return this.hashCode(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(mId); + dest.writeLong(mParentId); + dest.writeLong(mLength); + dest.writeLong(mCreationTimestamp); + dest.writeLong(mModifiedTimestamp); + dest.writeString(mRemotePath); + dest.writeString(mLocalPath); + dest.writeString(mMimeType); + dest.writeInt(mNeedsUpdating ? 1 : 0); + dest.writeLong(mLastSyncDate); + } + + @Override + public int compareTo(OCFile another) { + if (isDirectory() && another.isDirectory()) { + return getFileName().toLowerCase().compareTo(another.getFileName().toLowerCase()); + } else if (isDirectory()) { + return -1; + } else if (another.isDirectory()) { + return 1; + } + return getFileName().toLowerCase().compareTo(another.getFileName().toLowerCase()); + } + + public boolean equals(Object o) { + if(o instanceof OCFile){ + OCFile that = (OCFile) o; + if(that != null){ + return this.mId == that.mId; + } + } + + return false; + } + + @Override + public String toString() { + String asString = "[id=%s, name=%s, mime=%s, downloaded=%s, local=%s, remote=%s]"; + asString = String.format(asString, new Long(mId), getFileName(), mMimeType, isDownloaded(), mLocalPath, mRemotePath); + return asString; + } + }