WebdavClient singleton - make client management less complicated
authorLennart Rosam <lennart@familie-rosam.de>
Tue, 3 Jul 2012 22:29:03 +0000 (00:29 +0200)
committerLennart Rosam <lennart@familie-rosam.de>
Tue, 3 Jul 2012 22:29:03 +0000 (00:29 +0200)
src/eu/alefzero/webdav/WebdavClient.java

index 0a231c0..d8a0ccc 100644 (file)
@@ -21,9 +21,11 @@ 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
+import org.apache.commons.httpclient.HttpException;\r
 import org.apache.commons.httpclient.UsernamePasswordCredentials;\r
 import org.apache.commons.httpclient.auth.AuthScope;\r
 import org.apache.commons.httpclient.methods.GetMethod;\r
 import org.apache.commons.httpclient.UsernamePasswordCredentials;\r
 import org.apache.commons.httpclient.auth.AuthScope;\r
 import org.apache.commons.httpclient.methods.GetMethod;\r
@@ -32,11 +34,19 @@ 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.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.authenticator.EasySSLSocketFactory;\r
 import eu.alefzero.owncloud.files.interfaces.OnDatatransferProgressListener;\r
+import eu.alefzero.owncloud.utils.OwnCloudVersion;\r
 \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
 \r
 import android.net.Uri;\r
 import android.util.Log;\r
 \r
@@ -46,10 +56,32 @@ 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
-        getParams().setParameter(HttpMethodParams.USER_AGENT, USER_AGENT);\r
+    private static HashMap<String, WebdavClient> clients = new HashMap<String, WebdavClient>();\r
+    \r
+    /**\r
+     * Gets a WebdavClient setup for the current account\r
+     * @param account The client accout\r
+     * @param context The application context\r
+     * @return\r
+     */\r
+    public static synchronized WebdavClient getInstance(Account account, Context context){\r
+        WebdavClient instance = clients.get(account.name);\r
+        if(instance == null ){\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
+            WebdavClient client = new WebdavClient();\r
+            \r
+            String username = account.name.substring(0, account.name.indexOf('@'));\r
+            String password = AccountManager.get(context).getPassword(account);\r
+            \r
+            client.mUri = Uri.parse(baseUrl + webDavPath);\r
+            client.getParams().setParameter(HttpMethodParams.USER_AGENT, USER_AGENT);\r
+            client.setCredentials(username, password);\r
+            clients.put(account.name, client);\r
+        }\r
+        return instance;\r
     }\r
 \r
     public void setCredentials(String username, String password) {\r
     }\r
 \r
     public void setCredentials(String username, String password) {\r
@@ -114,6 +146,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 (IOException e) {\r
+            Log.e(TAG, "Logging 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