diff options
Diffstat (limited to 'android/source/src/java/org/libreoffice/storage/owncloud')
-rw-r--r-- | android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudFile.java | 113 | ||||
-rw-r--r-- | android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java | 76 |
2 files changed, 189 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()); + } +} diff --git a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java new file mode 100644 index 000000000000..7bd78e3550e5 --- /dev/null +++ b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java @@ -0,0 +1,76 @@ +package org.libreoffice.storage.owncloud; + +import java.net.URI; + +import org.libreoffice.R; +import org.libreoffice.storage.IDocumentProvider; +import org.libreoffice.storage.IFile; + +import android.content.Context; +import android.net.Uri; + +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.common.OwnCloudCredentialsFactory; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.resources.files.FileUtils; +import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation; +import com.owncloud.android.lib.resources.files.RemoteFile; + +/** + * Implementation of IDocumentProvider for ownCloud servers. + */ +public class OwnCloudProvider implements IDocumentProvider { + + private OwnCloudClient client; + + // TODO: these must be configurable + final private String serverUrl = "http://10.0.2.2/owncloud"; //emulator host machine + final private String userName = "admin"; + final private String password = "admin"; + + public OwnCloudProvider(Context context) { + Uri serverUri = Uri.parse(serverUrl); + client = OwnCloudClientFactory.createOwnCloudClient(serverUri, + context, true); + client.setCredentials(OwnCloudCredentialsFactory.newBasicCredentials( + userName, password)); + + } + + @Override + public IFile getRootDirectory() { + return createFromUri(URI.create(FileUtils.PATH_SEPARATOR)); + } + + @Override + public IFile createFromUri(URI uri) { + ReadRemoteFileOperation refreshOperation = new ReadRemoteFileOperation( + uri.getPath()); + RemoteOperationResult result = refreshOperation.execute(client); + if (!result.isSuccess()) { + throw new RuntimeException(result.getLogMessage(), + result.getException()); + } + if (result.getData().size() > 0) { + return new OwnCloudFile(this, (RemoteFile) result.getData().get(0)); + } + return null; + } + + @Override + public int getNameResource() { + return R.string.owncloud; + } + + /** + * Used by OwnCloudFiles to get a configured client to run their own + * operations. + * + * @return configured OwnCloudClient. + */ + protected OwnCloudClient getClient() { + return client; + } + +} |