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=40798f69ee075f3c627fc215a3c3de36c570e03e 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/DeleteFileTest.java b/oc_framework-test-project/oc_framework-test-test/src/com/owncloud/android/oc_framework_test_project/test/DeleteFileTest.java new file mode 100644 index 00000000..b8ab2b0c --- /dev/null +++ b/oc_framework-test-project/oc_framework-test-test/src/com/owncloud/android/oc_framework_test_project/test/DeleteFileTest.java @@ -0,0 +1,57 @@ +package com.owncloud.android.oc_framework_test_project.test; + +import com.owncloud.android.oc_framework.operations.RemoteOperationResult; +import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.oc_framework_test_project.TestActivity; + +import android.test.ActivityInstrumentationTestCase2; + +public class DeleteFileTest extends ActivityInstrumentationTestCase2 { + + /* Folder data to delete. */ + private final String mFolderPath = "/folderToDelete"; + + /* File to delete. */ + private final String mFilePath = "fileToDelete.png"; + + private TestActivity mActivity; + + public DeleteFileTest() { + super(TestActivity.class); + + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + setActivityInitialTouchMode(false); + mActivity = getActivity(); + } + + /** + * Test Remove Folder + */ + public void testRemoveFolder() { + + RemoteOperationResult result = mActivity.removeFile(mFolderPath); + assertTrue(result.isSuccess() || result.getCode() == ResultCode.FILE_NOT_FOUND); + } + + /** + * Test Remove File + */ + public void testRemoveFile() { + + RemoteOperationResult result = mActivity.removeFile(mFilePath); + assertTrue(result.isSuccess() || result.getCode() == ResultCode.FILE_NOT_FOUND); + } + + /** + * Restore initial conditions + */ + public void testRestoreInitialConditions() { + RemoteOperationResult result = mActivity.createFolder(mFolderPath, true); + 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 44baf73c..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 @@ -5,6 +5,7 @@ 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; import android.net.Uri; @@ -45,8 +46,8 @@ public class TestActivity extends Activity { /** * Access to the library method to Create a Folder - * @param remotePath - * @param createFullPath + * @param remotePath Full path to the new directory to create in the remote server. + * @param createFullPath 'True' means that all the ancestor folders should be created if don't exist yet. * * @return */ @@ -76,6 +77,20 @@ public class TestActivity extends Activity { return result; } + /** + * Access to the library method to Remove a File or Folder + * + * @param remotePath Remote path of the file or folder in the server. + * @return + */ + public RemoteOperationResult removeFile(String remotePath) { + + RemoveRemoteFileOperation removeOperation = new RemoveRemoteFileOperation(remotePath); + RemoteOperationResult result = removeOperation.execute(mClient); + + return result; + } + /** * Access to the library method to Read a File or Folder (PROPFIND DEPTH 1) * @param remotePath @@ -86,7 +101,7 @@ public class TestActivity extends Activity { ReadRemoteFileOperation readOperation= new ReadRemoteFileOperation(remotePath); RemoteOperationResult result = readOperation.execute(mClient); - + return result; } diff --git a/oc_framework/src/com/owncloud/android/oc_framework/operations/remote/RemoveRemoteFileOperation.java b/oc_framework/src/com/owncloud/android/oc_framework/operations/remote/RemoveRemoteFileOperation.java new file mode 100644 index 00000000..baf24234 --- /dev/null +++ b/oc_framework/src/com/owncloud/android/oc_framework/operations/remote/RemoveRemoteFileOperation.java @@ -0,0 +1,66 @@ +package com.owncloud.android.oc_framework.operations.remote; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.jackrabbit.webdav.client.methods.DeleteMethod; + +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 removal of a remote file or folder in the ownCloud server. + * + * @author David A. Velasco + * @author masensio + */ +public class RemoveRemoteFileOperation extends RemoteOperation { + private static final String TAG = RemoveRemoteFileOperation.class.getSimpleName(); + + private static final int REMOVE_READ_TIMEOUT = 10000; + private static final int REMOVE_CONNECTION_TIMEOUT = 5000; + + private String mRemotePath; + + /** + * Constructor + * + * @param remotePath RemotePath of the remote file or folder to remove from the server + */ + public RemoveRemoteFileOperation(String remotePath) { + mRemotePath = remotePath; + } + + /** + * Performs the rename operation. + * + * @param client Client object to communicate with the remote ownCloud server. + */ + @Override + protected RemoteOperationResult run(WebdavClient client) { + RemoteOperationResult result = null; + DeleteMethod delete = null; + + try { + delete = new DeleteMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath)); + int status = client.executeMethod(delete, REMOVE_READ_TIMEOUT, REMOVE_CONNECTION_TIMEOUT); + + delete.getResponseBodyAsString(); // exhaust the response, although not interesting + result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), status, delete.getResponseHeaders()); + Log.i(TAG, "Remove " + mRemotePath + ": " + result.getLogMessage()); + + } catch (Exception e) { + result = new RemoteOperationResult(e); + Log.e(TAG, "Remove " + mRemotePath + ": " + result.getLogMessage(), e); + + } finally { + if (delete != null) + delete.releaseConnection(); + } + + return result; + } + +} diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index fb55e933..042709a1 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -434,7 +434,7 @@ public class FileDataStorageManager { } updateFolderSize(file.getParentId()); } - if (removeLocalCopy && file.isDown()) { + if (removeLocalCopy && file.isDown() && file.getStoragePath() != null) { boolean success = new File(file.getStoragePath()).delete(); if (!removeDBData && success) { // maybe unnecessary, but should be checked TODO remove if unnecessary diff --git a/src/com/owncloud/android/operations/RemoveFileOperation.java b/src/com/owncloud/android/operations/RemoveFileOperation.java index 34926afb..0ab8ac3c 100644 --- a/src/com/owncloud/android/operations/RemoveFileOperation.java +++ b/src/com/owncloud/android/operations/RemoveFileOperation.java @@ -17,16 +17,13 @@ package com.owncloud.android.operations; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.jackrabbit.webdav.client.methods.DeleteMethod; - import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.oc_framework.network.webdav.WebdavClient; import com.owncloud.android.oc_framework.operations.RemoteOperation; import com.owncloud.android.oc_framework.operations.RemoteOperationResult; -import com.owncloud.android.oc_framework.network.webdav.WebdavUtils; -import com.owncloud.android.utils.Log_OC; +import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.oc_framework.operations.remote.RemoveRemoteFileOperation; /** @@ -36,10 +33,7 @@ import com.owncloud.android.utils.Log_OC; */ public class RemoveFileOperation extends RemoteOperation { - private static final String TAG = RemoveFileOperation.class.getSimpleName(); - - private static final int REMOVE_READ_TIMEOUT = 10000; - private static final int REMOVE_CONNECTION_TIMEOUT = 5000; + // private static final String TAG = RemoveFileOperation.class.getSimpleName(); OCFile mFileToRemove; boolean mDeleteLocalCopy; @@ -69,7 +63,6 @@ public class RemoveFileOperation extends RemoteOperation { return mFileToRemove; } - /** * Performs the remove operation * @@ -78,25 +71,14 @@ public class RemoveFileOperation extends RemoteOperation { @Override protected RemoteOperationResult run(WebdavClient client) { RemoteOperationResult result = null; - DeleteMethod delete = null; - try { - delete = new DeleteMethod(client.getBaseUri() + WebdavUtils.encodePath(mFileToRemove.getRemotePath())); - int status = client.executeMethod(delete, REMOVE_READ_TIMEOUT, REMOVE_CONNECTION_TIMEOUT); - if (delete.succeeded() || status == HttpStatus.SC_NOT_FOUND) { - mDataStorageManager.removeFile(mFileToRemove, true, mDeleteLocalCopy); - } - delete.getResponseBodyAsString(); // exhaust the response, although not interesting - result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), status, delete.getResponseHeaders()); - Log_OC.i(TAG, "Remove " + mFileToRemove.getRemotePath() + ": " + result.getLogMessage()); - - } catch (Exception e) { - result = new RemoteOperationResult(e); - Log_OC.e(TAG, "Remove " + mFileToRemove.getRemotePath() + ": " + result.getLogMessage(), e); - - } finally { - if (delete != null) - delete.releaseConnection(); + + RemoveRemoteFileOperation operation = new RemoveRemoteFileOperation(mFileToRemove.getRemotePath()); + result = operation.execute(client); + + if (result.isSuccess() || result.getCode() == ResultCode.FILE_NOT_FOUND) { + mDataStorageManager.removeFile(mFileToRemove, true, mDeleteLocalCopy); } + return result; } diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index ea0f814c..e024bc67 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -473,12 +473,10 @@ public class FileDetailFragment extends FileFragment implements @Override public void onNeutral(String callerTag) { - File f = null; OCFile file = getFile(); - if (file.isDown() && (f = new File(file.getStoragePath())).exists()) { - f.delete(); + mStorageManager.removeFile(file, false, true); // TODO perform in background task / new thread + if (file.getStoragePath() != null) { file.setStoragePath(null); - mStorageManager.saveFile(file); updateFileDetails(file, mAccount); } } diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index ebc17c61..0ae6868b 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -16,7 +16,6 @@ */ package com.owncloud.android.ui.preview; -import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -388,15 +387,9 @@ public class PreviewImageFragment extends FileFragment implements OnRemoteOper */ @Override public void onNeutral(String callerTag) { - // TODO this code should be made in a secondary thread, OCFile file = getFile(); - if (file.isDown()) { // checks it is still there - File f = new File(file.getStoragePath()); - f.delete(); - file.setStoragePath(null); - mStorageManager.saveFile(file); - finish(); - } + mStorageManager.removeFile(file, false, true); // TODO perform in background task / new thread + finish(); } /** diff --git a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java index 0cce76ae..b21f333a 100644 --- a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java @@ -16,7 +16,6 @@ */ package com.owncloud.android.ui.preview; -import java.io.File; import java.util.ArrayList; import java.util.List; @@ -672,16 +671,10 @@ public class PreviewMediaFragment extends FileFragment implements */ @Override public void onNeutral(String callerTag) { - // TODO this code should be made in a secondary thread, OCFile file = getFile(); - if (file.isDown()) { // checks it is still there - stopPreview(true); - File f = new File(file.getStoragePath()); - f.delete(); - file.setStoragePath(null); - mStorageManager.saveFile(file); - finish(); - } + stopPreview(true); + mStorageManager.removeFile(file, false, true); // TODO perform in background task / new thread + finish(); } /** diff --git a/tests/src/com/owncloud/android/test/AccountUtilsTest.java b/tests/src/com/owncloud/android/test/AccountUtilsTest.java index 1524d3b2..03667ff7 100644 --- a/tests/src/com/owncloud/android/test/AccountUtilsTest.java +++ b/tests/src/com/owncloud/android/test/AccountUtilsTest.java @@ -18,11 +18,12 @@ package com.owncloud.android.test; -import android.test.AndroidTestCase; - import com.owncloud.android.oc_framework.accounts.AccountUtils; import com.owncloud.android.oc_framework.utils.OwnCloudVersion; +import android.test.AndroidTestCase; + + public class AccountUtilsTest extends AndroidTestCase { public void testGetWebdavPathAndOCVersion() {