From: masensio Date: Wed, 27 Nov 2013 13:50:16 +0000 (+0100) Subject: Merge branch 'develop' into refactor_remote_operation_to_read_folder X-Git-Tag: oc-android-1.5.5~116^2~6 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/5aaa4e10e8bad5d12d3f7cfa319ab59428c2fe7f?hp=910c8a7b36b98bb48d2aff44424cdb3c66693e53 Merge branch 'develop' into refactor_remote_operation_to_read_folder Conflicts: oc_framework-test-project/src/com/owncloud/android/oc_framework_test_project/TestActivity.java --- diff --git a/oc_framework-test-project/oc_framework-test-test/src/com/owncloud/android/oc_framework_test_project/test/ReadFileTest.java b/oc_framework-test-project/oc_framework-test-test/src/com/owncloud/android/oc_framework_test_project/test/ReadFileTest.java new file mode 100644 index 00000000..465e82c6 --- /dev/null +++ b/oc_framework-test-project/oc_framework-test-test/src/com/owncloud/android/oc_framework_test_project/test/ReadFileTest.java @@ -0,0 +1,48 @@ +package com.owncloud.android.oc_framework_test_project.test; + + +import com.owncloud.android.oc_framework.operations.RemoteOperationResult; +import com.owncloud.android.oc_framework_test_project.TestActivity; + +import android.test.ActivityInstrumentationTestCase2; + +public class ReadFileTest extends ActivityInstrumentationTestCase2 { + + + /* Folder data to read. This folder must exist on the account */ + private final String mRemoteFolderPath = "/folderToRead"; + + /* File data to rename. This file must exist on the account */ + private final String mRemoteFilePath = "/fileToRead.txt"; + + private TestActivity mActivity; + + public ReadFileTest() { + super(TestActivity.class); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + setActivityInitialTouchMode(false); + mActivity = getActivity(); + } + + /** + * Test Read Folder + */ + public void testReadFolder() { + + RemoteOperationResult result = mActivity.readFile(mRemoteFolderPath); + assertTrue(result.isSuccess()); + } + + /** + * Test Read File + */ + public void testReadFile() { + + RemoteOperationResult result = mActivity.readFile(mRemoteFilePath); + assertTrue(result.isSuccess()); + } +} diff --git a/oc_framework-test-project/src/com/owncloud/android/oc_framework_test_project/TestActivity.java b/oc_framework-test-project/src/com/owncloud/android/oc_framework_test_project/TestActivity.java index 12330a9a..1d7b485e 100644 --- a/oc_framework-test-project/src/com/owncloud/android/oc_framework_test_project/TestActivity.java +++ b/oc_framework-test-project/src/com/owncloud/android/oc_framework_test_project/TestActivity.java @@ -4,6 +4,7 @@ import com.owncloud.android.oc_framework.network.webdav.OwnCloudClientFactory; import com.owncloud.android.oc_framework.network.webdav.WebdavClient; import com.owncloud.android.oc_framework.operations.RemoteOperationResult; import com.owncloud.android.oc_framework.operations.remote.CreateRemoteFolderOperation; +import com.owncloud.android.oc_framework.operations.remote.ReadRemoteFileOperation; import com.owncloud.android.oc_framework.operations.remote.RemoveRemoteFileOperation; import com.owncloud.android.oc_framework.operations.remote.RenameRemoteFileOperation; @@ -90,5 +91,18 @@ public class TestActivity extends Activity { return result; } + /** + * Access to the library method to Read a File or Folder (PROPFIND DEPTH 1) + * @param remotePath + * + * @return + */ + public RemoteOperationResult readFile(String remotePath) { + + ReadRemoteFileOperation readOperation= new ReadRemoteFileOperation(remotePath); + RemoteOperationResult result = readOperation.execute(mClient); + + return result; + } } diff --git a/oc_framework/.classpath b/oc_framework/.classpath index 51769745..72e286b9 100644 --- a/oc_framework/.classpath +++ b/oc_framework/.classpath @@ -5,5 +5,6 @@ + diff --git a/oc_framework/src/com/owncloud/android/oc_framework/operations/remote/ReadRemoteFileOperation.java b/oc_framework/src/com/owncloud/android/oc_framework/operations/remote/ReadRemoteFileOperation.java new file mode 100644 index 00000000..a73bad0c --- /dev/null +++ b/oc_framework/src/com/owncloud/android/oc_framework/operations/remote/ReadRemoteFileOperation.java @@ -0,0 +1,97 @@ +package com.owncloud.android.oc_framework.operations.remote; + +import org.apache.http.HttpStatus; +import org.apache.jackrabbit.webdav.DavConstants; +import org.apache.jackrabbit.webdav.MultiStatus; +import org.apache.jackrabbit.webdav.client.methods.PropFindMethod; + +import android.util.Log; + +import com.owncloud.android.oc_framework.network.webdav.WebdavClient; +import com.owncloud.android.oc_framework.network.webdav.WebdavUtils; +import com.owncloud.android.oc_framework.operations.RemoteOperation; +import com.owncloud.android.oc_framework.operations.RemoteOperationResult; + +/** + * Remote operation performing the read of remote file or folder in the ownCloud server. + * + * @author David A. Velasco + * @author masensio + */ + +public class ReadRemoteFileOperation extends RemoteOperation { + + private static final String TAG = ReadRemoteFileOperation.class.getSimpleName(); + + private String mRemotePath; + private MultiStatus mDataInServer; + + public MultiStatus getDataInServer() { + return mDataInServer; + } + + + /** + * Constructor + * + * @param remotePath Remote path of the file. + */ + public ReadRemoteFileOperation(String remotePath) { + mRemotePath = remotePath; + mDataInServer = null; + } + + /** + * Performs the read operation. + * + * @param client Client object to communicate with the remote ownCloud server. + */ + @Override + protected RemoteOperationResult run(WebdavClient client) { + RemoteOperationResult result = null; + PropFindMethod query = null; + + try { + // remote request + query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath), + DavConstants.PROPFIND_ALL_PROP, + DavConstants.DEPTH_1); + int status = client.executeMethod(query); + + // check and process response + if (isMultiStatus(status)) { + // get data from remote folder + mDataInServer = query.getResponseBodyAsMultiStatus(); + result = new RemoteOperationResult(true, status, query.getResponseHeaders()); + } else { + // synchronization failed + client.exhaustResponse(query.getResponseBodyAsStream()); + result = new RemoteOperationResult(false, status, query.getResponseHeaders()); + } + + } catch (Exception e) { + result = new RemoteOperationResult(e); + + + } finally { + if (query != null) + query.releaseConnection(); // let the connection available for other methods + if (result.isSuccess()) { + Log.i(TAG, "Synchronized " + mRemotePath + ": " + result.getLogMessage()); + } else { + if (result.isException()) { + Log.e(TAG, "Synchronized " + mRemotePath + ": " + result.getLogMessage(), result.getException()); + } else { + Log.e(TAG, "Synchronized " + mRemotePath + ": " + result.getLogMessage()); + } + } + + } + return result; + } + + public boolean isMultiStatus(int status) { + return (status == HttpStatus.SC_MULTI_STATUS); + } + +} diff --git a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java index 780fd42c..450cc3ed 100644 --- a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java +++ b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java @@ -45,6 +45,7 @@ import com.owncloud.android.oc_framework.network.webdav.WebdavUtils; import com.owncloud.android.oc_framework.operations.RemoteOperation; import com.owncloud.android.oc_framework.operations.RemoteOperationResult; import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.oc_framework.operations.remote.ReadRemoteFileOperation; import com.owncloud.android.syncadapter.FileSyncService; import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.Log_OC; @@ -241,59 +242,89 @@ public class SynchronizeFolderOperation extends RemoteOperation { private RemoteOperationResult fetchAndSyncRemoteFolder(WebdavClient client) { - RemoteOperationResult result = null; - String remotePath = null; - PropFindMethod query = null; - try { - remotePath = mLocalFolder.getRemotePath(); - Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath); - - // remote request - query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(remotePath), - DavConstants.PROPFIND_ALL_PROP, - DavConstants.DEPTH_1); - int status = client.executeMethod(query); - - // check and process response - if (isMultiStatus(status)) { - synchronizeData(query.getResponseBodyAsMultiStatus(), client); - if (mConflictsFound > 0 || mFailsInFavouritesFound > 0) { - result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT); // should be different result, but will do the job - } else { - result = new RemoteOperationResult(true, status, query.getResponseHeaders()); - } - - } else { - // synchronization failed - client.exhaustResponse(query.getResponseBodyAsStream()); - if (status == HttpStatus.SC_NOT_FOUND) { - removeLocalFolder(); - } - result = new RemoteOperationResult(false, status, query.getResponseHeaders()); - } - - } catch (Exception e) { - result = new RemoteOperationResult(e); - - - } finally { - if (query != null) - query.releaseConnection(); // let the connection available for other methods - if (result.isSuccess()) { - Log_OC.i(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage()); - } else { - if (result.isException()) { - Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage(), result.getException()); - } else { - Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage()); - } + String remotePath = mLocalFolder.getRemotePath(); + ReadRemoteFileOperation operation = new ReadRemoteFileOperation(remotePath); + RemoteOperationResult result = operation.execute(client); + Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath); + + if (result.isSuccess()) { + MultiStatus dataInServer = ((ReadRemoteFileOperation) operation).getDataInServer(); + synchronizeData(dataInServer, client); + if (mConflictsFound > 0 || mFailsInFavouritesFound > 0) { + result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT); // should be different result, but will do the job } - + } else { + if (result.getCode() == ResultCode.FILE_NOT_FOUND) + removeLocalFolder(); } + +// RemoteOperationResult result = null; +// String remotePath = null; +// PropFindMethod query = null; +// try { +// remotePath = mLocalFolder.getRemotePath(); +// Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath); +// +// // remote request +// query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(remotePath), +// DavConstants.PROPFIND_ALL_PROP, +// DavConstants.DEPTH_1); +// int status = client.executeMethod(query); +// +// // check and process response +// if (isMultiStatus(status)) { +// synchronizeData(query.getResponseBodyAsMultiStatus(), client); +// if (mConflictsFound > 0 || mFailsInFavouritesFound > 0) { +// result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT); // should be different result, but will do the job +// } else { +// result = new RemoteOperationResult(true, status, query.getResponseHeaders()); +// } +// +// } else { +// // synchronization failed +// client.exhaustResponse(query.getResponseBodyAsStream()); +// if (status == HttpStatus.SC_NOT_FOUND) { +// removeLocalFolder(); +// } +// result = new RemoteOperationResult(false, status, query.getResponseHeaders()); +// } +// +// } catch (Exception e) { +// result = new RemoteOperationResult(e); +// +// +// } finally { +// if (query != null) +// query.releaseConnection(); // let the connection available for other methods +// if (result.isSuccess()) { +// Log_OC.i(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage()); +// } else { +// if (result.isException()) { +// Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage(), result.getException()); +// } else { +// Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage()); +// } +// } +// +// } return result; } +// @Override +// public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) { +// if (operation instanceof ReadRemoteFileOperation) { +// if (result.isSuccess()) { +// MultiStatus dataInServer = ((ReadRemoteFileOperation) operation).getDataInServer(); +// synchronizeData(dataInServer, client) +// } else { +// +// } +// +// } +// +// } + private void removeLocalFolder() { if (mStorageManager.fileExists(mLocalFolder.getFileId())) { String currentSavePath = FileStorageUtils.getSavePath(mAccount.name);