t puswqMerge branch 'refactor_remote_operation_to_create_folder' into refactor_remote...
authormasensio <masensio@solidgear.es>
Mon, 18 Nov 2013 13:42:07 +0000 (14:42 +0100)
committermasensio <masensio@solidgear.es>
Mon, 18 Nov 2013 13:42:07 +0000 (14:42 +0100)
Conflicts:
oc_framework-test-project/src/com/owncloud/android/oc_framework_test_project/TestActivity.java
oc_framework/src/com/owncloud/android/oc_framework/utils/FileUtils.java

1  2 
oc_framework-test-project/oc_framework-test-test/src/com/owncloud/android/oc_framework_test_project/test/CreateFolderTest.java
oc_framework-test-project/src/com/owncloud/android/oc_framework_test_project/TestActivity.java
oc_framework/src/com/owncloud/android/oc_framework/operations/remote/RenameRemoteFileOperation.java
src/com/owncloud/android/files/services/FileUploader.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@@ -7,8 -7,8 +7,9 @@@ import com.owncloud.android.oc_framewor
  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;
@@@ -89,35 -68,50 +69,69 @@@ public class TestActivity extends Activ
  
        /**
         * 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;
+               }
+               
+       }
  }
index c05c4ca,0000000..2ead67b
mode 100644,000000..100644
--- /dev/null
@@@ -1,120 -1,0 +1,120 @@@
-         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;
 +        }
 +            
 +    }
 +
 +}
@@@ -1375,9 -1375,6 +1375,9 @@@ OCFileListFragment.ContainerActivity, F
                  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();
@@@ -816,9 -816,6 +816,9 @@@ public class FileDetailFragment extend
                  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();