X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/0174908b88cbe11d937dfdfb3ace6de0efd1aa7d..6e43d84b17a15b934989d0b71c1ac795186f26b4:/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 f377a047..9c40b947 100644 --- a/src/eu/alefzero/owncloud/datamodel/OCFile.java +++ b/src/eu/alefzero/owncloud/datamodel/OCFile.java @@ -18,126 +18,239 @@ package eu.alefzero.owncloud.datamodel; -import java.util.Vector; - -import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta; -import android.accounts.Account; -import android.content.ContentProvider; -import android.content.ContentValues; -import android.database.Cursor; -import android.net.Uri; -import android.util.Log; +import java.io.File; public class OCFile { - private static String TAG = "OCFile"; - - private long id_; - private long length_; - private long creation_timestamp_; - private long modified_timestamp_; - private String path_; - private String storage_path_; - private String mimetype_; - - private ContentProvider cp_; - private Account account_; - - public OCFile(ContentProvider cp, Account account, long id) { - cp_ = cp; - account_ = account; - Cursor c = cp_.query(ProviderTableMeta.CONTENT_URI_FILE, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + - ProviderTableMeta._ID + "=?", - new String[]{account_.name, String.valueOf(id)}, - null); - setFileData(c); - } - - public OCFile(ContentProvider cp, Account account, String path) { - cp_ = cp; - account_ = account; - Cursor c = cp_.query(ProviderTableMeta.CONTENT_URI_FILE, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + - ProviderTableMeta.FILE_PATH + "=?", - new String[]{account_.name, path}, - null); - setFileData(c); - if (path_ != null) path_ = path; - } - - public long getFileId() { return id_; } - - public String getPath() { return path_; } - - public boolean fileExtist() { return id_ != -1; } - - public boolean isDirectory() { return mimetype_ != null && mimetype_.equals("dir"); } - - public boolean isDownloaded() { return storage_path_ != null; } - - public String getStoragePath() { return storage_path_; } - public void setStoragePath(String storage_path) { storage_path_ = storage_path; } - - public long getCreationTimestamp() { return creation_timestamp_; } - public void setCreationTimestamp(long creation_timestamp) { creation_timestamp_ = creation_timestamp; } - - public long getModificationTimestamp() { return modified_timestamp_; } - public void setModificationTimestamp(long modification_timestamp) { modified_timestamp_ = modification_timestamp; } - - public void save() { - ContentValues cv = new ContentValues(); - cv.put(ProviderTableMeta.FILE_MODIFIED, modified_timestamp_); - cv.put(ProviderTableMeta.FILE_CREATION, creation_timestamp_); - cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, length_); - cv.put(ProviderTableMeta.CONTENT_TYPE, mimetype_); - - Uri new_entry = cp_.insert(ProviderTableMeta.CONTENT_URI, cv); - try { - id_ = Integer.parseInt(new_entry.getEncodedPath()); - } catch (NumberFormatException e) { - Log.e(TAG, "Can't retrieve file id from uri: " + new_entry.toString() + - ", reason: " + e.getMessage()); - id_ = -1; - } + + 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; + } + + /** + * 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; + } + + /** + * 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; } - public Vector getDirectoryContent() { - if (isDirectory() && id_ != -1) { - Vector ret = new Vector(); - - Uri req_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, String.valueOf(id_)); - Cursor c = cp_.query(req_uri, null, null, null, null); - - if (c.moveToFirst()) - do { - long id = c.getLong(c.getColumnIndex(ProviderTableMeta._ID)); - OCFile child = new OCFile(cp_, account_, id); - ret.add(child); - } while (c.moveToNext()); - - return ret; - } - return null; + /** + * Returns the ID of the parent Folder + * @return The ID + */ + public long getParentId() { + return parentId; } - private void setFileData(Cursor c) { - id_ = -1; - path_ = null; - storage_path_ = null; - mimetype_ = null; - length_ = 0; - creation_timestamp_ = 0; - modified_timestamp_ = 0; - if (c != null && c.moveToFirst()) { - id_ = c.getLong(c.getColumnIndex(ProviderTableMeta._ID)); - path_ = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PATH)); - storage_path_ = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH)); - mimetype_ = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)); - length_ = c.getLong(c.getColumnIndex(ProviderTableMeta.FILE_CONTENT_LENGTH)); - creation_timestamp_ = c.getLong(c.getColumnIndex(ProviderTableMeta.FILE_CREATION)); - modified_timestamp_ = c.getLong(c.getColumnIndex(ProviderTableMeta.FILE_MODIFIED)); - } + /** + * Check, if this file needs updating + * @return + */ + public boolean needsUpdatingWhileSaving() { + return needsUpdating; } }