X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/9b79ed71c376b23cc401b0b224e693c099104126..e901b609baa4dd5f681e2a5257c9e504997e3377:/src/com/owncloud/android/operations/RenameFileOperation.java diff --git a/src/com/owncloud/android/operations/RenameFileOperation.java b/src/com/owncloud/android/operations/RenameFileOperation.java index 1eecfc28..95a5a9ba 100644 --- a/src/com/owncloud/android/operations/RenameFileOperation.java +++ b/src/com/owncloud/android/operations/RenameFileOperation.java @@ -1,5 +1,5 @@ /* ownCloud Android client application - * Copyright (C) 2012-2013 ownCloud Inc. + * Copyright (C) 2012-2014 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -20,16 +20,14 @@ package com.owncloud.android.operations; import java.io.File; import java.io.IOException; -import org.apache.commons.httpclient.HttpException; -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.operations.RemoteOperationResult.ResultCode; -import com.owncloud.android.oc_framework.operations.remote.RenameRemoteFileOperation; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.files.RenameRemoteFileOperation; +import com.owncloud.android.operations.common.SyncOperation; import com.owncloud.android.utils.FileStorageUtils; -import com.owncloud.android.utils.Log_OC; import android.accounts.Account; @@ -38,33 +36,32 @@ import android.accounts.Account; * Remote operation performing the rename of a remote file (or folder?) in the ownCloud server. * * @author David A. Velasco + * @author masensio */ -public class RenameFileOperation extends RemoteOperation { +public class RenameFileOperation extends SyncOperation { private static final String TAG = RenameFileOperation.class.getSimpleName(); - private OCFile mFile; + private String mRemotePath; private Account mAccount; private String mNewName; private String mNewRemotePath; - private FileDataStorageManager mStorageManager; + /** * Constructor * - * @param file OCFile instance describing the remote file or folder to rename + * @param remotePath RemotePath of the OCFile instance describing the remote file or folder to rename * @param account OwnCloud account containing the remote file * @param newName New name to set as the name of file. - * @param storageManager Reference to the local database corresponding to the account where the file is contained. */ - public RenameFileOperation(OCFile file, Account account, String newName, FileDataStorageManager storageManager) { - mFile = file; + public RenameFileOperation(String remotePath, Account account, String newName) { + mRemotePath = remotePath; mAccount = account; mNewName = newName; mNewRemotePath = null; - mStorageManager = storageManager; } public OCFile getFile() { @@ -78,9 +75,11 @@ public class RenameFileOperation extends RemoteOperation { * @param client Client object to communicate with the remote ownCloud server. */ @Override - protected RemoteOperationResult run(WebdavClient client) { + protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; + mFile = getStorageManager().getFileByPath(mRemotePath); + // check if the new name is valid in the local file system try { if (!isValidNewName()) { @@ -93,32 +92,27 @@ public class RenameFileOperation extends RemoteOperation { mNewRemotePath += OCFile.PATH_SEPARATOR; } - // check if a file with the new name already exists - if (client.existsFile(mNewRemotePath) || // remote check could fail by network failure. by indeterminate behavior of HEAD for folders ... - mStorageManager.getFileByPath(mNewRemotePath) != null) { // ... so local check is convenient + // check local overwrite + if (getStorageManager().getFileByPath(mNewRemotePath) != null) { return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE); } - - RenameRemoteFileOperation operation = new RenameRemoteFileOperation(mFile.getFileName(), mFile.getRemotePath(), mNewName, - mNewRemotePath, mFile.isFolder()); - result = operation.execute(client); + + RenameRemoteFileOperation operation = new RenameRemoteFileOperation(mFile.getFileName(), mFile.getRemotePath(), + mNewName, mFile.isFolder()); + result = operation.execute(client); - if (result.isSuccess()) { - if (mFile.isFolder()) { - saveLocalDirectory(); + if (result.isSuccess()) { + if (mFile.isFolder()) { + saveLocalDirectory(); - } else { - saveLocalFile(); + } else { + saveLocalFile(); + } } - } - } catch (HttpException e) { - Log_OC.e(TAG, "Rename " + mFile.getRemotePath() + " to " + ((mNewRemotePath==null) ? mNewName : mNewRemotePath) + ": " + - ((result!= null) ? result.getLogMessage() : ""), e); - e.printStackTrace(); + } catch (IOException e) { Log_OC.e(TAG, "Rename " + mFile.getRemotePath() + " to " + ((mNewRemotePath==null) ? mNewName : mNewRemotePath) + ": " + ((result!= null) ? result.getLogMessage() : ""), e); - e.printStackTrace(); } return result; @@ -126,7 +120,7 @@ public class RenameFileOperation extends RemoteOperation { private void saveLocalDirectory() { - mStorageManager.moveFolder(mFile, mNewRemotePath); + getStorageManager().moveFolder(mFile, mNewRemotePath); String localPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, mFile); File localDir = new File(localPath); if (localDir.exists()) { @@ -151,7 +145,7 @@ public class RenameFileOperation extends RemoteOperation { // TODO - study conditions when this could be a problem } - mStorageManager.saveFile(mFile); + getStorageManager().saveFile(mFile); } /**