Initial version of FileOperation to encapsulate all events regarding
[pub/Android/ownCloud.git] / src / eu / alefzero / webdav / WebdavClient.java
index 0a231c0..a1dbd09 100644 (file)
@@ -21,6 +21,7 @@ import java.io.BufferedInputStream;
 import java.io.File;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
 import java.io.File;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
+import java.util.HashMap;\r
 \r
 import org.apache.commons.httpclient.Credentials;\r
 import org.apache.commons.httpclient.HttpClient;\r
 \r
 import org.apache.commons.httpclient.Credentials;\r
 import org.apache.commons.httpclient.HttpClient;\r
@@ -32,13 +33,20 @@ import org.apache.commons.httpclient.methods.PutMethod;
 import org.apache.commons.httpclient.params.HttpMethodParams;\r
 import org.apache.commons.httpclient.protocol.Protocol;\r
 import org.apache.http.HttpStatus;\r
 import org.apache.commons.httpclient.params.HttpMethodParams;\r
 import org.apache.commons.httpclient.protocol.Protocol;\r
 import org.apache.http.HttpStatus;\r
+import org.apache.jackrabbit.webdav.client.methods.DavMethod;\r
+import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;\r
 import org.apache.jackrabbit.webdav.client.methods.MkColMethod;\r
 \r
 import org.apache.jackrabbit.webdav.client.methods.MkColMethod;\r
 \r
-import eu.alefzero.owncloud.authenticator.EasySSLSocketFactory;\r
-import eu.alefzero.owncloud.files.interfaces.OnDatatransferProgressListener;\r
-\r
+import android.accounts.Account;\r
+import android.accounts.AccountManager;\r
+import android.content.Context;\r
 import android.net.Uri;\r
 import android.util.Log;\r
 import android.net.Uri;\r
 import android.util.Log;\r
+import eu.alefzero.owncloud.AccountUtils;\r
+import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
+import eu.alefzero.owncloud.authenticator.EasySSLSocketFactory;\r
+import eu.alefzero.owncloud.files.interfaces.OnDatatransferProgressListener;\r
+import eu.alefzero.owncloud.utils.OwnCloudVersion;\r
 \r
 public class WebdavClient extends HttpClient {\r
     private Uri mUri;\r
 \r
 public class WebdavClient extends HttpClient {\r
     private Uri mUri;\r
@@ -46,11 +54,29 @@ public class WebdavClient extends HttpClient {
     final private static String TAG = "WebdavClient";\r
     private static final String USER_AGENT = "Android-ownCloud";\r
     private OnDatatransferProgressListener mDataTransferListener;\r
     final private static String TAG = "WebdavClient";\r
     private static final String USER_AGENT = "Android-ownCloud";\r
     private OnDatatransferProgressListener mDataTransferListener;\r
-\r
-    public WebdavClient(Uri uri) {\r
-        mUri = uri;\r
+    private static HashMap<String, WebdavClient> clients = new HashMap<String, WebdavClient>();\r
+    \r
+    /**\r
+     * Creates a WebdavClient setup for the current account\r
+     * @param account The client accout\r
+     * @param context The application context\r
+     * @return\r
+     */\r
+    public WebdavClient (Account account, Context context){\r
+        OwnCloudVersion ownCloudVersion = new OwnCloudVersion(AccountManager.get(context).getUserData(account,\r
+                AccountAuthenticator.KEY_OC_VERSION));\r
+        String baseUrl = AccountManager.get(context).getUserData(account, AccountAuthenticator.KEY_OC_BASE_URL);\r
+        String webDavPath = AccountUtils.getWebdavPath(ownCloudVersion);        \r
+        String username = account.name.substring(0, account.name.indexOf('@'));\r
+        String password = AccountManager.get(context).getPassword(account);\r
+        \r
+        mUri = Uri.parse(baseUrl + webDavPath);\r
         getParams().setParameter(HttpMethodParams.USER_AGENT, USER_AGENT);\r
         getParams().setParameter(HttpMethodParams.USER_AGENT, USER_AGENT);\r
+        setCredentials(username, password);\r
+        allowSelfsignedCertificates();\r
     }\r
     }\r
+    \r
+    public WebdavClient(){}\r
 \r
     public void setCredentials(String username, String password) {\r
         getParams().setAuthenticationPreemptive(true);\r
 \r
     public void setCredentials(String username, String password) {\r
         getParams().setAuthenticationPreemptive(true);\r
@@ -114,6 +140,22 @@ public class WebdavClient extends HttpClient {
         }\r
         return true;\r
     }\r
         }\r
         return true;\r
     }\r
+    \r
+    /**\r
+     * Deletes a remote file via webdav\r
+     * @param remoteFilePath\r
+     * @return\r
+     */\r
+    public boolean deleteFile(String remoteFilePath){\r
+        DavMethod delete = new DeleteMethod(mUri.toString() + remoteFilePath);\r
+        try {\r
+            executeMethod(delete);\r
+        }  catch (Throwable e) {\r
+            Log.e(TAG, "Deleting failed with error: " + e.getMessage(), e);\r
+            return false;\r
+        }\r
+        return true;\r
+    }\r
 \r
     public void setDataTransferProgressListener(OnDatatransferProgressListener listener) {\r
         mDataTransferListener = listener;\r
 \r
     public void setDataTransferProgressListener(OnDatatransferProgressListener listener) {\r
         mDataTransferListener = listener;\r
@@ -144,15 +186,24 @@ public class WebdavClient extends HttpClient {
         return result;\r
     }\r
 \r
         return result;\r
     }\r
 \r
-    public int tryToLogin() {\r
-        int r = 0;\r
-        HeadMethod head = new HeadMethod(mUri.toString());\r
+    /**\r
+     * Tries to log in to the given WedDavURI, with the given credentials\r
+     * @param uri To test\r
+     * @param username Username to check\r
+     * @param password Password to verify\r
+     * @return A {@link HttpStatus}-Code of the result. SC_OK is good.\r
+     */\r
+    public static int tryToLogin(Uri uri, String username, String password) {\r
+        int returnCode = 0;\r
+        WebdavClient client = new WebdavClient();\r
+        client.setCredentials(username, password);\r
+        HeadMethod head = new HeadMethod(uri.toString());\r
         try {\r
         try {\r
-            r = executeMethod(head);\r
+            returnCode = client.executeMethod(head);\r
         } catch (Exception e) {\r
             Log.e(TAG, "Error: " + e.getMessage());\r
         }\r
         } catch (Exception e) {\r
             Log.e(TAG, "Error: " + e.getMessage());\r
         }\r
-        return r;\r
+        return returnCode;\r
     }\r
 \r
     public boolean createDirectory(String path) {\r
     }\r
 \r
     public boolean createDirectory(String path) {\r