*/
public void testCreateFolder() {
- String folderName = "testCreateFolder" + mCurrentDate;
String remotePath = "/testCreateFolder" + mCurrentDate;
boolean createFullPath = true;
- RemoteOperationResult result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ RemoteOperationResult result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.isSuccess() || result.getCode() == ResultCode.TIMEOUT);
// Create Subfolder
- folderName = "testCreateFolder" + mCurrentDate;
remotePath = "/testCreateFolder" + mCurrentDate + "/" + "testCreateFolder" + mCurrentDate;
createFullPath = true;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.isSuccess() || result.getCode() == ResultCode.TIMEOUT);
}
/**
- * Test to Create Folder with special characters
+ * Test to Create Folder with special characters: / \ < > : " | ? *
*/
public void testCreateFolderSpecialCharacters() {
boolean createFullPath = true;
- String folderName = "testSpecialCharacters_//" + mCurrentDate;
- String remotePath = "/testSpecialCharacters_//" + mCurrentDate;
- RemoteOperationResult result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ String remotePath = "/testSpecialCharacters_\\" + mCurrentDate;
+ RemoteOperationResult result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
- folderName = "testSpecialCharacters_\\" + mCurrentDate;
- remotePath = "/testSpecialCharacters_\\" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
- assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
-
- folderName = "testSpecialCharacters_<" + mCurrentDate;
remotePath = "/testSpecialCharacters_<" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
- folderName = "testSpecialCharacters_>" + mCurrentDate;
remotePath = "/testSpecialCharacters_>" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
- folderName = "testSpecialCharacters_:" + mCurrentDate;
remotePath = "/testSpecialCharacters_:" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
- folderName = "testSpecialCharacters_\"" + mCurrentDate;
remotePath = "/testSpecialCharacters_\"" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
- folderName = "testSpecialCharacters_|" + mCurrentDate;
remotePath = "/testSpecialCharacters_|" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
- folderName = "testSpecialCharacters_?" + mCurrentDate;
remotePath = "/testSpecialCharacters_?" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
- folderName = "testSpecialCharacters_*" + mCurrentDate;
remotePath = "/testSpecialCharacters_*" + mCurrentDate;
- result = mActivity.createFolder(folderName, remotePath, createFullPath);
+ result = mActivity.createFolder(remotePath, createFullPath);
assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME);
}
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.RenameRemoteFileOperation;
+ import android.os.AsyncTask;
import android.os.Bundle;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.app.Activity;
+ import android.content.Context;
import android.util.Log;
import android.view.Menu;
private static final String TAG = "TestActivity";
+ // This account must exists on the simulator / device
+ private static final String mAccountHost = "beta.owncloud.com";
+ private static final String mAccountUser = "testandroid";
+ private static final String mAccountName = mAccountUser + "@"+ mAccountHost;
+ private static final String mAccountPass = "testandroid";
+ private static final String mAccountType = "owncloud";
+
private Account mAccount = null;
private WebdavClient mClient;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
-
- // This account must exists on the simulator / device
- String accountHost = "beta.owncloud.com";
- String accountUser = "testandroid";
- String accountName = accountUser + "@"+ accountHost;
- String accountPass = "testandroid";
- String accountType = "owncloud";
AccountManager am = AccountManager.get(this);
- Account[] ocAccounts = am.getAccountsByType(accountType);
+ Account[] ocAccounts = am.getAccountsByType(mAccountType);
for (Account ac : ocAccounts) {
- if (ac.name.equals(accountName)) {
+ if (ac.name.equals(mAccountName)) {
mAccount = ac;
break;
}
}
- // if (mAccount == null) {
- // mAccount = new Account(accountName, mAccountType);
- // am.addAccountExplicitly(mAccount, mAccountPass, null);
- // am.setUserData(mAccount, "oc_version", "5.0.14");
- // am.setUserData(mAccount, "oc_base_url", "http://beta.owncloud.com/owncloud");
- // } else {
- // Log.d(TAG, "oc_version --->"+ am.getUserData(mAccount, "oc_version") );
- // Log.d(TAG, "oc_base_url --->"+ am.getUserData(mAccount, "oc_base_url") );
- // }
-
+ // Get the WebDavClient
+ AuthTask task = new AuthTask();
+ task.execute(this.getApplicationContext());
- try {
- mClient = OwnCloudClientFactory.createOwnCloudClient(mAccount, this.getApplicationContext());
- } catch (OperationCanceledException e) {
- Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
- e.printStackTrace();
- } catch (AuthenticatorException e) {
- Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
- e.printStackTrace();
- } catch (AccountNotFoundException e) {
- Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
- e.printStackTrace();
- } catch (IOException e) {
- Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
- e.printStackTrace();
- }
}
@Override
/**
* Access to the library method to Create a Folder
- * @param folderName
* @param remotePath
* @param createFullPath
+ *
* @return
*/
- public RemoteOperationResult createFolder(String folderName, String remotePath, boolean createFullPath) {
+ public RemoteOperationResult createFolder(String remotePath, boolean createFullPath) {
- CreateRemoteFolderOperation createOperation = new CreateRemoteFolderOperation(folderName, remotePath, createFullPath);
+ CreateRemoteFolderOperation createOperation = new CreateRemoteFolderOperation(remotePath, createFullPath);
RemoteOperationResult result = createOperation.execute(mClient);
return result;
}
+ /**
+ * Access to the library method to Rename a File or Folder
+ * @param oldName Old name of the file.
+ * @param oldRemotePath Old remote path of the file. For folders it starts and ends by "/"
+ * @param newName New name to set as the name of file.
+ * @param newRemotePath New remote path to move the file, for folders it starts and ends by "/"
+ *
+ * @return
+ */
+
+ public RemoteOperationResult renameFile(String oldName, String oldRemotePath, String newName, String newRemotePath) {
+
+ RenameRemoteFileOperation renameOperation = new RenameRemoteFileOperation(oldName, oldRemotePath, newName, newRemotePath);
+ RemoteOperationResult result = renameOperation.execute(mClient);
+
+ return result;
+ }
++
+ private class AuthTask extends AsyncTask<Context, Void, WebdavClient> {
+
+ @Override
+ protected WebdavClient doInBackground(Context... params) {
+ WebdavClient client = null;
+ try {
+ client = OwnCloudClientFactory.createOwnCloudClient(mAccount, (Context) params[0] );
+ } catch (OperationCanceledException e) {
+ Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
+ e.printStackTrace();
+ } catch (AuthenticatorException e) {
+ Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
+ e.printStackTrace();
+ } catch (AccountNotFoundException e) {
+ Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
+ e.printStackTrace();
+ } catch (IOException e) {
+ Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
+ e.printStackTrace();
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Error while trying to access to " + mAccount.name, e);
+ e.printStackTrace();
+ }
+ return client;
+ }
+
+ @Override
+ protected void onPostExecute(WebdavClient result) {
+ // TODO Auto-generated method stub
+ super.onPostExecute(result);
+ mClient = result;
+ }
+
+ }
}
--- /dev/null
- boolean noInvalidChars = FileUtils.validateName(mNewName);
+package com.owncloud.android.oc_framework.operations.remote;
+
+import org.apache.jackrabbit.webdav.client.methods.DavMethodBase;
+
+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;
+import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.oc_framework.utils.FileUtils;
+
+
+/**
+ * Remote operation performing the rename of a remote file or folder in the ownCloud server.
+ *
+ * @author David A. Velasco
+ * @author masensio
+ */
+public class RenameRemoteFileOperation extends RemoteOperation {
+
+ private static final String TAG = RenameRemoteFileOperation.class.getSimpleName();
+
+ private static final int RENAME_READ_TIMEOUT = 10000;
+ private static final int RENAME_CONNECTION_TIMEOUT = 5000;
+
+ private String mOldName;
+ private String mOldRemotePath;
+ private String mNewName;
+ private String mNewRemotePath;
+
+
+ /**
+ * Constructor
+ *
+ * @param oldName Old name of the file.
+ * @param oldRemotePath Old remote path of the file. For folders it starts and ends by "/"
+ * @param newName New name to set as the name of file.
+ * @param newRemotePath New remote path to move the file, for folders it starts and ends by "/"
+ */
+ public RenameRemoteFileOperation(String oldName, String oldRemotePath, String newName, String newRemotePath) {
+ mOldName = oldName;
+ mOldRemotePath = oldRemotePath;
+ mNewName = newName;
+ mNewRemotePath = newRemotePath;
+ }
+
+ /**
+ * Performs the rename operation.
+ *
+ * @param client Client object to communicate with the remote ownCloud server.
+ */
+ @Override
+ protected RemoteOperationResult run(WebdavClient client) {
+ RemoteOperationResult result = null;
+
+ LocalMoveMethod move = null;
+
++ boolean noInvalidChars = FileUtils.isValidPath(mNewRemotePath);
+
+ if (noInvalidChars) {
+ try {
+
+ if (mNewName.equals(mOldName)) {
+ return new RemoteOperationResult(ResultCode.OK);
+ }
+
+ // check if a file with the new name already exists
+ if (client.existsFile(mNewRemotePath)) {
+ return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE);
+ }
+
+ move = new LocalMoveMethod( client.getBaseUri() + WebdavUtils.encodePath(mOldRemotePath),
+ client.getBaseUri() + WebdavUtils.encodePath(mNewRemotePath));
+ int status = client.executeMethod(move, RENAME_READ_TIMEOUT, RENAME_CONNECTION_TIMEOUT);
+
+ move.getResponseBodyAsString(); // exhaust response, although not interesting
+ result = new RemoteOperationResult(move.succeeded(), status, move.getResponseHeaders());
+ Log.i(TAG, "Rename " + mOldRemotePath + " to " + mNewRemotePath + ": " + result.getLogMessage());
+
+ } catch (Exception e) {
+ result = new RemoteOperationResult(e);
+ Log.e(TAG, "Rename " + mOldRemotePath + " to " + ((mNewRemotePath==null) ? mNewName : mNewRemotePath) + ": " + result.getLogMessage(), e);
+
+ } finally {
+ if (move != null)
+ move.releaseConnection();
+ }
+ } else {
+ result = new RemoteOperationResult(ResultCode.INVALID_CHARACTER_IN_NAME);
+ }
+
+ return result;
+ }
+
+ /**
+ * Move operation
+ *
+ */
+ private class LocalMoveMethod extends DavMethodBase {
+
+ public LocalMoveMethod(String uri, String dest) {
+ super(uri);
+ addRequestHeader(new org.apache.commons.httpclient.Header("Destination", dest));
+ }
+
+ @Override
+ public String getName() {
+ return "MOVE";
+ }
+
+ @Override
+ protected boolean isSuccess(int status) {
+ return status == 201 || status == 204;
+ }
+
+ }
+
+}
import org.apache.jackrabbit.webdav.MultiStatus;
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
-import com.owncloud.android.MainApp;
import com.owncloud.android.R;
-import com.owncloud.android.authentication.AccountAuthenticator;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
RemoteOperation operation = new ExistenceCheckOperation(pathToGrant, this, false);
RemoteOperationResult result = operation.execute(mUploadClient);
if (!result.isSuccess() && result.getCode() == ResultCode.FILE_NOT_FOUND && mCurrentUpload.isRemoteFolderToBeCreated()) {
- operation = new CreateFolderOperation( mCurrentUpload.getFileName(),
- pathToGrant,
+ operation = new CreateFolderOperation( pathToGrant,
true,
mStorageManager );
result = operation.execute(mUploadClient);
} else {
dismissLoadingDialog();
if (result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME) {
- Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg_invalid_characters, Toast.LENGTH_LONG).show();
+ Toast.makeText(FileDisplayActivity.this, R.string.filename_forbidden_characters, Toast.LENGTH_LONG).show();
} else {
try {
Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG);
Toast msg = Toast.makeText(this, R.string.rename_local_fail_msg, Toast.LENGTH_LONG);
msg.show();
// TODO throw again the new rename dialog
- Toast msg = Toast.makeText(this, R.string.create_dir_fail_msg_invalid_characters, Toast.LENGTH_LONG);
+ } if (result.getCode().equals(ResultCode.INVALID_CHARACTER_IN_NAME)) {
++ Toast msg = Toast.makeText(this, R.string.filename_forbidden_characters, Toast.LENGTH_LONG);
+ msg.show();
} else {
Toast msg = Toast.makeText(this, R.string.rename_server_fail_msg, Toast.LENGTH_LONG);
msg.show();
// Create directory
path += newDirectoryName + OCFile.PATH_SEPARATOR;
- RemoteOperation operation = new CreateFolderOperation(newDirectoryName, path, false, mStorageManager);
+ RemoteOperation operation = new CreateFolderOperation(path, false, mStorageManager);
operation.execute( getAccount(),
FileDisplayActivity.this,
FileDisplayActivity.this,
Toast msg = Toast.makeText(getActivity(), R.string.rename_local_fail_msg, Toast.LENGTH_LONG);
msg.show();
// TODO throw again the new rename dialog
- Toast msg = Toast.makeText(getActivity(), R.string.create_dir_fail_msg_invalid_characters, Toast.LENGTH_LONG);
+ } if (result.getCode().equals(ResultCode.INVALID_CHARACTER_IN_NAME)) {
++ Toast msg = Toast.makeText(getActivity(), R.string.filename_forbidden_characters, Toast.LENGTH_LONG);
+ msg.show();
} else {
Toast msg = Toast.makeText(getActivity(), R.string.rename_server_fail_msg, Toast.LENGTH_LONG);
msg.show();