Filter only '/' character in user input when version of server is 8.1 or later
[pub/Android/ownCloud.git] / src / com / owncloud / android / utils / ErrorMessageAdapter.java
index 411ade5..12a1a5a 100644 (file)
@@ -1,4 +1,7 @@
-/* ownCloud Android client application
+/**
+ *   ownCloud Android client application
+ *
+ *   @author masensio
  *   Copyright (C) 2014 ownCloud Inc.
  *
  *   This program is free software: you can redistribute it and/or modify
  *   Copyright (C) 2014 ownCloud Inc.
  *
  *   This program is free software: you can redistribute it and/or modify
@@ -20,21 +23,29 @@ package com.owncloud.android.utils;
 
 import java.io.File;
 import java.net.SocketTimeoutException;
 
 import java.io.File;
 import java.net.SocketTimeoutException;
+
 import org.apache.commons.httpclient.ConnectTimeoutException;
 import org.apache.commons.httpclient.ConnectTimeoutException;
+
 import android.content.res.Resources;
 
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
 import android.content.res.Resources;
 
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.operations.CreateFolderOperation;
+import com.owncloud.android.operations.CreateShareOperation;
 import com.owncloud.android.operations.DownloadFileOperation;
 import com.owncloud.android.operations.DownloadFileOperation;
+import com.owncloud.android.operations.MoveFileOperation;
+import com.owncloud.android.operations.RemoveFileOperation;
+import com.owncloud.android.operations.RenameFileOperation;
+import com.owncloud.android.operations.SynchronizeFileOperation;
+import com.owncloud.android.operations.SynchronizeFolderOperation;
+import com.owncloud.android.operations.UnshareLinkOperation;
 import com.owncloud.android.operations.UploadFileOperation;
 
 /**
 import com.owncloud.android.operations.UploadFileOperation;
 
 /**
- * Class to choose proper error messages to show to the user depending on the results of operations, always following the same policy
- * 
- * @author masensio
- *
+ * Class to choose proper error messages to show to the user depending on the results of operations,
+ * always following the same policy
  */
 
 public class ErrorMessageAdapter {
  */
 
 public class ErrorMessageAdapter {
@@ -56,9 +67,17 @@ public class ErrorMessageAdapter {
                 if (result.getCode() == ResultCode.LOCAL_STORAGE_FULL
                         || result.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
                     message = String.format(res.getString(R.string.error__upload__local_file_not_copied), 
                 if (result.getCode() == ResultCode.LOCAL_STORAGE_FULL
                         || result.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
                     message = String.format(res.getString(R.string.error__upload__local_file_not_copied), 
-                            ((UploadFileOperation) operation).getFileName());
+                            ((UploadFileOperation) operation).getFileName(), 
+                            res.getString(R.string.app_name));
+                /*
                 } else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) {
                     message = res.getString(R.string.failed_upload_quota_exceeded_text);
                 } else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) {
                     message = res.getString(R.string.failed_upload_quota_exceeded_text);
+                    */
+                    
+                } else if (result.getCode() == ResultCode.FORBIDDEN) {
+                    message = String.format(res.getString(R.string.forbidden_permissions),
+                            res.getString(R.string.uploader_upload_forbidden_permissions));
+
                 } else {
                     message = String.format(res.getString(R.string.uploader_upload_failed_content_single), 
                             ((UploadFileOperation) operation).getFileName());
                 } else {
                     message = String.format(res.getString(R.string.uploader_upload_failed_content_single), 
                             ((UploadFileOperation) operation).getFileName());
@@ -70,41 +89,178 @@ public class ErrorMessageAdapter {
             if (result.isSuccess()) {
                 message = String.format(res.getString(R.string.downloader_download_succeeded_content), 
                         new File(((DownloadFileOperation) operation).getSavePath()).getName());
             if (result.isSuccess()) {
                 message = String.format(res.getString(R.string.downloader_download_succeeded_content), 
                         new File(((DownloadFileOperation) operation).getSavePath()).getName());
+                
             } else {
             } else {
-                message = String.format(res.getString(R.string.downloader_download_failed_content), 
-                        new File(((DownloadFileOperation) operation).getSavePath()).getName());
+                if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
+                    message = res.getString(R.string.downloader_download_file_not_found);
+
+                } else {
+                    message = String.format(res.getString(R.string.downloader_download_failed_content), new File(
+                            ((DownloadFileOperation) operation).getSavePath()).getName());
+                }
             }
             }
-        }
+            
+        } else if (operation instanceof RemoveFileOperation) {
+            if (result.isSuccess()) {
+                message = res.getString(R.string.remove_success_msg);
+                
+            } else {
+                if (result.getCode().equals(ResultCode.FORBIDDEN)) {
+                    // Error --> No permissions
+                    message = String.format(res.getString(R.string.forbidden_permissions),
+                            res.getString(R.string.forbidden_permissions_delete));
+                } else if (isNetworkError(result.getCode())) {
+                    message = getErrorMessage(result, res);
+                    
+                } else {
+                    message = res.getString(R.string.remove_fail_msg);
+                }
+            }
+
+        } else if (operation instanceof RenameFileOperation) {
+            if (result.getCode().equals(ResultCode.INVALID_LOCAL_FILE_NAME)) {
+                message = res.getString(R.string.rename_local_fail_msg);
+
+            } else if (result.getCode().equals(ResultCode.FORBIDDEN)) {
+                // Error --> No permissions
+                message = String.format(res.getString(R.string.forbidden_permissions),
+                        res.getString(R.string.forbidden_permissions_rename));
+
+            } else if (result.getCode().equals(ResultCode.INVALID_CHARACTER_IN_NAME)) {
+                message = res.getString(R.string.filename_forbidden_characters);
+
+            } else if (isNetworkError(result.getCode())) {
+                message = getErrorMessage(result, res);
+                
+            } else {
+                message = res.getString(R.string.rename_server_fail_msg); 
+            }
+            
+        } else if (operation instanceof SynchronizeFileOperation) {
+            if (!((SynchronizeFileOperation) operation).transferWasRequested()) {
+                message = res.getString(R.string.sync_file_nothing_to_do_msg);
+            }
+            
+        } else if (operation instanceof CreateFolderOperation) {
+            if (result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME) {
+                message = res.getString(R.string.filename_forbidden_characters);
+
+            } else if (result.getCode().equals(ResultCode.FORBIDDEN)) {
+                message = String.format(res.getString(R.string.forbidden_permissions),
+                        res.getString(R.string.forbidden_permissions_create));
+
+            } else if (isNetworkError(result.getCode())) {
+                message = getErrorMessage(result, res);
+                
+            } else {
+                message = res.getString(R.string.create_dir_fail_msg);
+            }
+        } else if (operation instanceof CreateShareOperation) {        
+            if (result.getCode() == ResultCode.SHARE_NOT_FOUND)  {        // Error --> SHARE_NOT_FOUND
+                message = res.getString(R.string.share_link_file_no_exist);
+                
+            } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
+                // Error --> No permissions
+                message = String.format(res.getString(R.string.forbidden_permissions),
+                        res.getString(R.string.share_link_forbidden_permissions));
+
+            } else if (isNetworkError(result.getCode())) {
+                message = getErrorMessage(result, res);
+                
+            } else {    // Generic error
+                // Show a Message, operation finished without success
+                message = res.getString(R.string.share_link_file_error);
+            }
+            
+        } else if (operation instanceof UnshareLinkOperation) {
         
         
+            if (result.getCode() == ResultCode.SHARE_NOT_FOUND)  {        // Error --> SHARE_NOT_FOUND
+                message = res.getString(R.string.unshare_link_file_no_exist);
+                
+            } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
+                // Error --> No permissions
+                message = String.format(res.getString(R.string.forbidden_permissions),
+                        res.getString(R.string.unshare_link_forbidden_permissions));
+
+            } else if (isNetworkError(result.getCode())) {
+                message = getErrorMessage(result, res);
+                
+            } else {    // Generic error
+                // Show a Message, operation finished without success
+                message = res.getString(R.string.unshare_link_file_error);
+            }
+        } else if (operation instanceof MoveFileOperation) {
+
+            if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
+                message = res.getString(R.string.move_file_not_found);
+                
+            } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT)  {
+                message = res.getString(R.string.move_file_invalid_into_descendent);
+
+            } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) {
+                message = res.getString(R.string.move_file_invalid_overwrite);
+
+            } else if (result.getCode() == ResultCode.FORBIDDEN) {
+                message = String.format(res.getString(R.string.forbidden_permissions),
+                        res.getString(R.string.forbidden_permissions_move));
+
+            }else {    // Generic error
+                // Show a Message, operation finished without success
+                message = res.getString(R.string.move_file_error);
+            }
+        } else if (operation instanceof SynchronizeFolderOperation) {
+
+            if (!result.isSuccess()) {
+                String folderPathName = new File(
+                        ((SynchronizeFolderOperation) operation).getFolderPath()).getName();
+                if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
+                    message = String.format(res.getString(R.string.sync_current_folder_was_removed),
+                            folderPathName);
+
+                } else {    // Generic error
+                    // Show a Message, operation finished without success
+                    message = String.format(res.getString(R.string.download_folder_failed_content),
+                            folderPathName);
+                }
+            }
+        }
         
         return message;
     }
     
         
         return message;
     }
     
-    public static String getErrorMessage(RemoteOperationResult result , Resources res) {
+    private static String getErrorMessage(RemoteOperationResult result , Resources res) {
         
         String message = null;
         
         if (!result.isSuccess()) {
             
         
         String message = null;
         
         if (!result.isSuccess()) {
             
-            switch (result.getCode()) {
-            case WRONG_CONNECTION:
+            if (result.getCode() == ResultCode.WRONG_CONNECTION) {
+                message = res.getString(R.string.network_error_socket_exception);
+                
+            } else if (result.getCode() == ResultCode.TIMEOUT) {
                 message = res.getString(R.string.network_error_socket_exception);
                 message = res.getString(R.string.network_error_socket_exception);
-                break;
                 
                 
-            case TIMEOUT:
                 if (result.getException() instanceof SocketTimeoutException) {
                     message = res.getString(R.string.network_error_socket_timeout_exception);
                 } else if(result.getException() instanceof ConnectTimeoutException) {
                     message = res.getString(R.string.network_error_connect_timeout_exception);
                 } 
                 if (result.getException() instanceof SocketTimeoutException) {
                     message = res.getString(R.string.network_error_socket_timeout_exception);
                 } else if(result.getException() instanceof ConnectTimeoutException) {
                     message = res.getString(R.string.network_error_connect_timeout_exception);
                 } 
-                break;
                 
                 
-            default:
-                message = res.getString(R.string.unexpected_exception);
-                break;
+            } else if (result.getCode() == ResultCode.HOST_NOT_AVAILABLE) {
+                message = res.getString(R.string.network_host_not_available);
             }
         }
         
         return message;
     }
             }
         }
         
         return message;
     }
+    
+    private static boolean isNetworkError(RemoteOperationResult.ResultCode code) {
+        if (code == ResultCode.WRONG_CONNECTION || 
+                code == ResultCode.TIMEOUT || 
+                code == ResultCode.HOST_NOT_AVAILABLE) {
+            return true;
+        }
+        else
+            return false;
+    }
 }
 }