浏览代码

OC-2171: Isolate code for ReadRemoteFileOperation - PROPFIND DEPTH 1

masensio 11 年之前
父节点
当前提交
ce9084b6b3

+ 65 - 4
oc_framework/src/com/owncloud/android/oc_framework/operations/remote/ReadRemoteFileOperation.java

@@ -1,19 +1,80 @@
 package com.owncloud.android.oc_framework.operations.remote;
 
+import org.apache.http.HttpStatus;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.MultiStatus;
+import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
+
+import android.util.Log;
+
 import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
+import com.owncloud.android.oc_framework.network.webdav.WebdavEntry;
+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;
 
 public class ReadRemoteFileOperation extends RemoteOperation {
 
-	public ReadRemoteFileOperation() {
-		// TODO Auto-generated constructor stub
+	private static final String TAG = ReadRemoteFileOperation.class.getSimpleName();
+
+	private String mRemotePath;
+	private WebdavEntry mWe;
+
+	public WebdavEntry getWEntry() {
+		return mWe;
+	}
+	
+	public ReadRemoteFileOperation(String remotePath) {
+		mRemotePath = remotePath;
 	}
 
 	@Override
 	protected RemoteOperationResult run(WebdavClient client) {
-		// TODO Auto-generated method stub
-		return null;
+		RemoteOperationResult result = null;
+        PropFindMethod query = null;
+        
+        try {
+            // remote request 
+            query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath),
+                    DavConstants.PROPFIND_ALL_PROP,
+                    DavConstants.DEPTH_1);
+            int status = client.executeMethod(query);
+
+            // check and process response
+            if (isMultiStatus(status)) {
+            	MultiStatus dataInServer = query.getResponseBodyAsMultiStatus();
+            	// parse data from remote folder 
+            	mWe = new WebdavEntry(dataInServer.getResponses()[0], client.getBaseUri().getPath());
+            	result = new RemoteOperationResult(true, status, query.getResponseHeaders());
+            } else {
+                // synchronization failed
+                client.exhaustResponse(query.getResponseBodyAsStream());
+                result = new RemoteOperationResult(false, status, query.getResponseHeaders());
+            }
+
+        } catch (Exception e) {
+            result = new RemoteOperationResult(e);
+            
+
+        } finally {
+            if (query != null)
+                query.releaseConnection();  // let the connection available for other methods
+            if (result.isSuccess()) {
+                Log.i(TAG, "Synchronized "  + mRemotePath + ": " + result.getLogMessage());
+            } else {
+                if (result.isException()) {
+                    Log.e(TAG, "Synchronized " + mRemotePath  + ": " + result.getLogMessage(), result.getException());
+                } else {
+                    Log.e(TAG, "Synchronized " + mRemotePath + ": " + result.getLogMessage());
+                }
+            }
+            
+        }
+        return result;
 	}
 
+    public boolean isMultiStatus(int status) {
+        return (status == HttpStatus.SC_MULTI_STATUS); 
+    }
+	
 }