diff options
Diffstat (limited to 'android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java')
-rw-r--r-- | android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java new file mode 100644 index 000000000000..8e6d6cf136ff --- /dev/null +++ b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java @@ -0,0 +1,113 @@ +package org.libreoffice.storage.owncloud; + +import java.io.File; +import java.io.FileFilter; +import java.net.URI; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.libreoffice.storage.IFile; + +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.resources.files.ReadRemoteFolderOperation; +import com.owncloud.android.lib.resources.files.RemoteFile; + +/** + * Implementation of IFile for ownCloud servers. + */ +public class OwnCloudFile implements IFile { + + private OwnCloudProvider provider; + private RemoteFile file; + + private String name; + private String parentPath; + + protected OwnCloudFile(OwnCloudProvider provider, RemoteFile file) { + this.provider = provider; + this.file = file; + + // get name and parent from path + File localFile = new File(file.getRemotePath()); + this.name = localFile.getName(); + this.parentPath = localFile.getParent(); + } + + @Override + public URI getUri() { + return URI.create(file.getRemotePath()); + } + + @Override + public String getName() { + return name; + } + + @Override + public boolean isDirectory() { + return file.getMimeType().equals("DIR"); + } + + @Override + public long getSize() { + return file.getLength(); + } + + @Override + public Date getLastModified() { + return new Date(file.getModifiedTimestamp()); + } + + @Override + public List<IFile> listFiles() { + List<IFile> children = new ArrayList<IFile>(); + if (isDirectory()) { + ReadRemoteFolderOperation refreshOperation = new ReadRemoteFolderOperation( + file.getRemotePath()); + RemoteOperationResult result = refreshOperation.execute(provider + .getClient()); + if (!result.isSuccess()) { + throw new RuntimeException(result.getLogMessage(), + result.getException()); + } + for (Object obj : result.getData()) { + RemoteFile child = (RemoteFile) obj; + if (!child.getRemotePath().equals(file.getRemotePath())) + children.add(new OwnCloudFile(provider, child)); + } + } + return children; + } + + @Override + public List<IFile> listFiles(FileFilter filter) { + // TODO no filtering yet + return listFiles(); + } + + @Override + public IFile getParent() { + if (parentPath == null) + // this is the root node + return null; + + return provider.createFromUri(URI.create(parentPath)); + } + + @Override + public File getDocument() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean equals(Object object) { + if (this == object) + return true; + if (!(object instanceof OwnCloudFile)) + return false; + OwnCloudFile file = (OwnCloudFile) object; + return file.getUri().equals(getUri()); + } +} |