initial move to jackrabbit (syncing)
authorBartek Przybylski <bart.p.pl@gmail.com>
Sat, 28 Apr 2012 22:14:01 +0000 (00:14 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Sat, 28 Apr 2012 22:14:01 +0000 (00:14 +0200)
16 files changed:
libs/commons-codec-1.4.jar [deleted file]
libs/commons-httpclient-3.0.1.jar [deleted file]
libs/commons-io-2.0.1.jar [deleted file]
libs/commons-logging-1.1.1.jar [deleted file]
libs/httpclient-4.1.2.jar [deleted file]
libs/httpclient-cache-4.1.2.jar [deleted file]
libs/httpcore-4.1.2.jar [deleted file]
libs/httpmime-4.1.2.jar [deleted file]
libs/not-yet-commons-ssl-0.3.11.jar [deleted file]
src/eu/alefzero/owncloud/datamodel/FileDataStorageManager.java
src/eu/alefzero/owncloud/syncadapter/AbstractOwnCloudSyncAdapter.java
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java
src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java
src/eu/alefzero/webdav/WebdavClient.java
src/eu/alefzero/webdav/WebdavEntry.java [new file with mode: 0644]
src/eu/alefzero/webdav/WebdavUtils.java

diff --git a/libs/commons-codec-1.4.jar b/libs/commons-codec-1.4.jar
deleted file mode 100644 (file)
index 458d432..0000000
Binary files a/libs/commons-codec-1.4.jar and /dev/null differ
diff --git a/libs/commons-httpclient-3.0.1.jar b/libs/commons-httpclient-3.0.1.jar
deleted file mode 100644 (file)
index cfc777c..0000000
Binary files a/libs/commons-httpclient-3.0.1.jar and /dev/null differ
diff --git a/libs/commons-io-2.0.1.jar b/libs/commons-io-2.0.1.jar
deleted file mode 100644 (file)
index 5b64b7d..0000000
Binary files a/libs/commons-io-2.0.1.jar and /dev/null differ
diff --git a/libs/commons-logging-1.1.1.jar b/libs/commons-logging-1.1.1.jar
deleted file mode 100644 (file)
index 1deef14..0000000
Binary files a/libs/commons-logging-1.1.1.jar and /dev/null differ
diff --git a/libs/httpclient-4.1.2.jar b/libs/httpclient-4.1.2.jar
deleted file mode 100644 (file)
index b3cdb4c..0000000
Binary files a/libs/httpclient-4.1.2.jar and /dev/null differ
diff --git a/libs/httpclient-cache-4.1.2.jar b/libs/httpclient-cache-4.1.2.jar
deleted file mode 100644 (file)
index 6b7bcce..0000000
Binary files a/libs/httpclient-cache-4.1.2.jar and /dev/null differ
diff --git a/libs/httpcore-4.1.2.jar b/libs/httpcore-4.1.2.jar
deleted file mode 100644 (file)
index 66ae90b..0000000
Binary files a/libs/httpcore-4.1.2.jar and /dev/null differ
diff --git a/libs/httpmime-4.1.2.jar b/libs/httpmime-4.1.2.jar
deleted file mode 100644 (file)
index eea3b3f..0000000
Binary files a/libs/httpmime-4.1.2.jar and /dev/null differ
diff --git a/libs/not-yet-commons-ssl-0.3.11.jar b/libs/not-yet-commons-ssl-0.3.11.jar
deleted file mode 100644 (file)
index 7b56427..0000000
Binary files a/libs/not-yet-commons-ssl-0.3.11.jar and /dev/null differ
index 3821278..e862a5a 100644 (file)
@@ -124,7 +124,7 @@ public class FileDataStorageManager implements DataStorageManager {
         file.setFileId(new_id);
       }
     }
         file.setFileId(new_id);
       }
     }
-    
+
     if (file.isDirectory() && file.needsUpdatingWhileSaving())
       for (OCFile f : getDirectoryContent(file))
         saveFile(f);
     if (file.isDirectory() && file.needsUpdatingWhileSaving())
       for (OCFile f : getDirectoryContent(file))
         saveFile(f);
index 698fda8..5314e63 100644 (file)
@@ -153,12 +153,12 @@ public abstract class AbstractOwnCloudSyncAdapter extends
        protected HttpResponse fireRawRequest(HttpRequest query)\r
                        throws ClientProtocolException, OperationCanceledException,\r
                        AuthenticatorException, IOException {\r
        protected HttpResponse fireRawRequest(HttpRequest query)\r
                        throws ClientProtocolException, OperationCanceledException,\r
                        AuthenticatorException, IOException {\r
-               BasicHttpContext httpContext = new BasicHttpContext();\r
+               /*BasicHttpContext httpContext = new BasicHttpContext();\r
                BasicScheme basicAuth = new BasicScheme();\r
                httpContext.setAttribute("preemptive-auth", basicAuth);\r
 \r
                BasicScheme basicAuth = new BasicScheme();\r
                httpContext.setAttribute("preemptive-auth", basicAuth);\r
 \r
-               HttpResponse response = getClient().execute(mHost, query, httpContext);\r
-               return response;\r
+               HttpResponse response = getClient().execute(mHost, query, httpContext);*/\r
+               return null;\r
        }\r
 \r
        protected TreeNode fireRequest(HttpRequest query)\r
        }\r
 \r
        protected TreeNode fireRequest(HttpRequest query)\r
@@ -168,8 +168,8 @@ public abstract class AbstractOwnCloudSyncAdapter extends
 \r
                TreeNode root = new TreeNode();\r
                root.setProperty(TreeNode.NodeProperty.NAME, "");\r
 \r
                TreeNode root = new TreeNode();\r
                root.setProperty(TreeNode.NodeProperty.NAME, "");\r
-               this.parseResponse(response, getUri(), getClient(), mHost,\r
-                               root.getChildList(), false, 0);\r
+               //this.parseResponse(response, getUri(), getClient(), mHost,\r
+               //              root.getChildList(), false, 0);\r
                return root;\r
        }\r
 \r
                return root;\r
        }\r
 \r
@@ -178,7 +178,7 @@ public abstract class AbstractOwnCloudSyncAdapter extends
                                AccountAuthenticator.KEY_OC_URL));\r
        }\r
 \r
                                AccountAuthenticator.KEY_OC_URL));\r
        }\r
 \r
-       private DefaultHttpClient getClient() throws OperationCanceledException,\r
+       protected WebdavClient getClient() throws OperationCanceledException,\r
                        AuthenticatorException, IOException {\r
                if (mClient == null) {\r
                        String username = getAccount().name.split("@")[0];\r
                        AuthenticatorException, IOException {\r
                if (mClient == null) {\r
                        String username = getAccount().name.split("@")[0];\r
@@ -196,7 +196,7 @@ public abstract class AbstractOwnCloudSyncAdapter extends
                        mHost = mClient.getTargetHost();\r
                }\r
 \r
                        mHost = mClient.getTargetHost();\r
                }\r
 \r
-               return mClient.getHttpClient();\r
+               return mClient;\r
        }\r
 \r
        private void parseResponse(HttpResponse resp, Uri uri,\r
        }\r
 \r
        private void parseResponse(HttpResponse resp, Uri uri,\r
index 02920a1..bf48012 100644 (file)
@@ -21,6 +21,11 @@ package eu.alefzero.owncloud.syncadapter;
 import java.io.IOException;\r
 \r
 import org.apache.http.entity.StringEntity;\r
 import java.io.IOException;\r
 \r
 import org.apache.http.entity.StringEntity;\r
+import org.apache.jackrabbit.webdav.DavException;\r
+import org.apache.jackrabbit.webdav.MultiStatus;\r
+import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;\r
+import org.apache.jackrabbit.webdav.property.DavProperty;\r
+import org.apache.jackrabbit.webdav.property.DavPropertyName;\r
 \r
 import android.accounts.Account;\r
 import android.accounts.AuthenticatorException;\r
 \r
 import android.accounts.Account;\r
 import android.accounts.AuthenticatorException;\r
@@ -35,10 +40,12 @@ import android.os.Bundle;
 import android.os.RemoteException;\r
 import android.util.Log;\r
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
 import android.os.RemoteException;\r
 import android.util.Log;\r
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
+import eu.alefzero.owncloud.datamodel.OCFile;\r
 import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
 import eu.alefzero.webdav.HttpPropFind;\r
 import eu.alefzero.webdav.TreeNode;\r
 import eu.alefzero.webdav.TreeNode.NodeProperty;\r
 import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
 import eu.alefzero.webdav.HttpPropFind;\r
 import eu.alefzero.webdav.TreeNode;\r
 import eu.alefzero.webdav.TreeNode.NodeProperty;\r
+import eu.alefzero.webdav.WebdavEntry;\r
 import eu.alefzero.webdav.WebdavUtils;\r
 \r
 /**\r
 import eu.alefzero.webdav.WebdavUtils;\r
 \r
 /**\r
@@ -53,7 +60,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
        public FileSyncAdapter(Context context, boolean autoInitialize) {\r
                super(context, autoInitialize);\r
        }\r
        public FileSyncAdapter(Context context, boolean autoInitialize) {\r
                super(context, autoInitialize);\r
        }\r
-\r
+       \r
        @Override\r
        public synchronized void onPerformSync(\r
                        Account account, \r
        @Override\r
        public synchronized void onPerformSync(\r
                        Account account, \r
@@ -62,83 +69,43 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                        ContentProviderClient provider, \r
                        SyncResult syncResult) {\r
 \r
                        ContentProviderClient provider, \r
                        SyncResult syncResult) {\r
 \r
-               try {\r
                        this.setAccount(account);\r
                        this.setContentProvider(provider);\r
                        this.setStorageManager(new FileDataStorageManager(account, getContentProvider()));\r
 \r
                        this.setAccount(account);\r
                        this.setContentProvider(provider);\r
                        this.setStorageManager(new FileDataStorageManager(account, getContentProvider()));\r
 \r
-                       HttpPropFind query = this.getPropFindQuery();\r
-                       query.setEntity(new StringEntity(WebdavUtils.prepareXmlForPropFind()));\r
-                       TreeNode root = this.fireRequest(query);\r
-\r
-               //      commitToDatabase(root, null);\r
-               } catch (OperationCanceledException e) {\r
-                       e.printStackTrace();\r
-               } catch (AuthenticatorException e) {\r
-                       syncResult.stats.numAuthExceptions++;\r
-                       e.printStackTrace();\r
-               } catch (IOException e) {\r
-                       syncResult.stats.numIoExceptions++;\r
-                       e.printStackTrace();\r
-               }// catch (RemoteException e) {\r
-               //      e.printStackTrace();\r
-               // q}\r
+                       fetchData(getUri().toString(), syncResult, 0);\r
        }\r
 \r
        }\r
 \r
-       private void commitToDatabase(TreeNode root, String parentId) throws RemoteException {\r
-               for (TreeNode n : root.getChildList()) {\r
-                       Log.d(TAG, n.toString());\r
-                       ContentValues cv = new ContentValues();\r
-                       cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, n.getProperty(NodeProperty.CONTENT_LENGTH));\r
-                       cv.put(ProviderTableMeta.FILE_MODIFIED, n.getProperty(NodeProperty.LAST_MODIFIED_DATE));\r
-                       cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, n.getProperty(NodeProperty.RESOURCE_TYPE));\r
-                       cv.put(ProviderTableMeta.FILE_PARENT, parentId);\r
+  private void fetchData(String uri, SyncResult syncResult, long parentId) {\r
+    try {\r
+      PropFindMethod query = new PropFindMethod(uri);\r
+      getClient().executeMethod(query);\r
+      MultiStatus resp = null;\r
+      resp = query.getResponseBodyAsMultiStatus();\r
+      for (int i = (parentId==0?0:1); i < resp.getResponses().length; ++i) {\r
+        WebdavEntry we = new WebdavEntry(resp.getResponses()[i]);\r
+        OCFile file = new OCFile(we.path());\r
+        file.setCreationTimestamp(we.createTimestamp());\r
+        file.setFileLength(we.contentLength());\r
+        file.setMimetype(we.contentType());\r
+        file.setModificationTimestamp(we.modifiedTimesamp());\r
+        file.setParentId(parentId);\r
+        if (we.contentType().equals("DIR"))\r
+          fetchData(getUri().toString() + we.path(), syncResult, file.getFileId());\r
+      }\r
 \r
 \r
-                       String name = n.getProperty(NodeProperty.NAME),\r
-                                       path = n.getProperty(NodeProperty.PATH);\r
-                       Cursor c = this.getContentProvider().query(ProviderTableMeta.CONTENT_URI_FILE,\r
-                                       null,\r
-                                       ProviderTableMeta.FILE_NAME+"=? AND " + ProviderTableMeta.FILE_PATH + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",\r
-                                       new String[]{name, path, this.getAccount().name},\r
-                                       null);\r
-                       if (c.moveToFirst()) {\r
-                               this.getContentProvider().update(ProviderTableMeta.CONTENT_URI,\r
-                                               cv,\r
-                                               ProviderTableMeta._ID+"=?",\r
-                                                               new String[]{c.getString(c.getColumnIndex(ProviderTableMeta._ID))});\r
-                               Log.d(TAG, "ID of: "+name+":"+c.getString(c.getColumnIndex(ProviderTableMeta._ID)));\r
-                       } else {\r
-                               cv.put(ProviderTableMeta.FILE_NAME, n.getProperty(NodeProperty.NAME));\r
-                               cv.put(ProviderTableMeta.FILE_PATH, n.getProperty(NodeProperty.PATH));\r
-                               cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, this.getAccount().name);\r
-                               Uri entry = this.getContentProvider().insert(ProviderTableMeta.CONTENT_URI_FILE, cv);\r
-                               Log.d(TAG, "Inserting new entry " + path);\r
-                               c = this.getContentProvider().query(entry, null, null, null, null);\r
-                               c.moveToFirst();\r
-                       }\r
-                       if (n.getProperty(NodeProperty.RESOURCE_TYPE).equals("DIR")) {\r
-                               commitToDatabase(n, c.getString(c.getColumnIndex(ProviderTableMeta._ID)));\r
-                       }\r
-               }\r
-               // clean removed files\r
-               String[] selection = new String[root.getChildList().size()+2];\r
-               selection[0] = this.getAccount().name;\r
-               selection[1] = parentId;\r
-               String qm = "";\r
-               for (int i = 2; i < selection.length-1; ++i) {\r
-                       qm += "?,";\r
-                       selection[i] = root.getChildList().get(i-2).getProperty(NodeProperty.NAME);\r
-               }\r
-               if (selection.length >= 3) {\r
-                       selection[selection.length-1] = root.getChildrenNames()[selection.length-3];\r
-                       qm += "?";\r
-               }\r
-               for (int i = 0; i < selection.length; ++i) {\r
-                       Log.d(TAG,selection[i]+"");\r
-               }\r
-               Log.d(TAG,"Removing files "+ parentId);\r
-               this.getContentProvider().delete(ProviderTableMeta.CONTENT_URI,\r
-                               ProviderTableMeta.FILE_ACCOUNT_OWNER+"=? AND " + ProviderTableMeta.FILE_PARENT + (parentId==null?" IS ":"=")+"? AND " + ProviderTableMeta.FILE_NAME + " NOT IN ("+qm+")",\r
-                               selection);\r
-       }\r
+    } catch (OperationCanceledException e) {\r
+      e.printStackTrace();\r
+    } catch (AuthenticatorException e) {\r
+      syncResult.stats.numAuthExceptions++;\r
+      e.printStackTrace();\r
+    } catch (IOException e) {\r
+      syncResult.stats.numIoExceptions++;\r
+      e.printStackTrace();\r
+    } catch (DavException e) {\r
+      syncResult.stats.numIoExceptions++;\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+       \r
 }\r
 }\r
index fa3e904..452eca0 100644 (file)
@@ -104,6 +104,7 @@ public class FileListFragment extends FragmentListView {
     String s = "/";\r
     for (String a : mDirNames)\r
       s+= a + "/";\r
     String s = "/";\r
     for (String a : mDirNames)\r
       s+= a + "/";\r
+    Log.e("ASD", s);\r
 \r
     mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
     OCFile file = mStorageManager.getFileByPath(s);\r
 \r
     mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
     OCFile file = mStorageManager.getFileByPath(s);\r
index 0a5295b..f03b7a9 100644 (file)
@@ -22,12 +22,14 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 
 import java.io.FileOutputStream;
 import java.io.IOException;
 
+import org.apache.commons.httpclient.Credentials;\r
+import org.apache.commons.httpclient.HttpClient;\r
+import org.apache.commons.httpclient.UsernamePasswordCredentials;\r
+import org.apache.commons.httpclient.auth.AuthScope;\r
 import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.conn.ClientConnectionManager;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.conn.ClientConnectionManager;
@@ -38,7 +40,6 @@ import org.apache.http.conn.scheme.Scheme;
 import org.apache.http.conn.scheme.SchemeRegistry;
 import org.apache.http.conn.ssl.SSLSocketFactory;
 import org.apache.http.entity.FileEntity;
 import org.apache.http.conn.scheme.SchemeRegistry;
 import org.apache.http.conn.ssl.SSLSocketFactory;
 import org.apache.http.entity.FileEntity;
-import org.apache.http.entity.mime.content.FileBody;
 import org.apache.http.impl.auth.BasicScheme;
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
 import org.apache.http.impl.auth.BasicScheme;
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
@@ -53,12 +54,13 @@ import eu.alefzero.webdav.HttpMkCol;
 import android.net.Uri;
 import android.util.Log;
 
 import android.net.Uri;
 import android.util.Log;
 
-public class WebdavClient {
+public class WebdavClient extends HttpClient {
   private DefaultHttpClient mHttpClient;
   private BasicHttpContext mHttpContext;
   private HttpHost mTargetHost;
   private SchemeRegistry mSchemeRegistry;
   private DefaultHttpClient mHttpClient;
   private BasicHttpContext mHttpContext;
   private HttpHost mTargetHost;
   private SchemeRegistry mSchemeRegistry;
-  private Uri mUri;
+  private Uri mUri;\r
+  private Credentials mCredentials;
   final private static String TAG = "WebdavClient";
   
   public DefaultHttpClient getHttpClient() {
   final private static String TAG = "WebdavClient";
   
   public DefaultHttpClient getHttpClient() {
@@ -78,15 +80,17 @@ public class WebdavClient {
     // determine default port for http or https
     int targetPort = mTargetHost.getPort() == -1 ? 
                         ( mUri.getScheme().equals("https") ? 443 : 80)
     // determine default port for http or https
     int targetPort = mTargetHost.getPort() == -1 ? 
                         ( mUri.getScheme().equals("https") ? 443 : 80)
-                        : mUri.getPort();
-
-    mHttpClient.getCredentialsProvider().setCredentials(
-        new AuthScope(mUri.getHost(), targetPort), 
-        new UsernamePasswordCredentials(username, password));
-    BasicScheme basicAuth = new BasicScheme();
-    mHttpContext.setAttribute("preemptive-auth", basicAuth);
+                        : mUri.getPort();\r
+\r
+    getParams().setAuthenticationPreemptive(true);
+    getState().setCredentials(AuthScope.ANY, getCredentials(username, password));
   }
   
   }
   
+  private Credentials getCredentials(String username, String password) {\r
+    if (mCredentials == null)\r
+      mCredentials = new UsernamePasswordCredentials(username, password); \r
+    return mCredentials;\r
+  }\r
   public void allowUnsignedCertificates() {
     // https
     mSchemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));
   public void allowUnsignedCertificates() {
     // https
     mSchemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));
diff --git a/src/eu/alefzero/webdav/WebdavEntry.java b/src/eu/alefzero/webdav/WebdavEntry.java
new file mode 100644 (file)
index 0000000..2c7f378
--- /dev/null
@@ -0,0 +1,101 @@
+package eu.alefzero.webdav;
+
+import java.util.Date;
+
+import org.apache.jackrabbit.webdav.MultiStatusResponse;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.property.DavPropertySet;
+
+import android.util.Log;
+
+public class WebdavEntry {
+  private String mName, mPath, mUri, mContentType;
+  private long mContentLength, mCreateTimestamp, mModifiedTimestamp;
+
+  public WebdavEntry(MultiStatusResponse ms) {
+    resetData();
+    if (ms.getStatus().length != 0) {
+      mUri = ms.getHref();
+      
+      mPath = mUri.split("webdav.php", 2)[1];
+
+      int status = ms.getStatus()[0].getStatusCode();
+      DavPropertySet propSet = ms.getProperties(status);
+      @SuppressWarnings("rawtypes")
+      DavProperty prop = propSet.get(DavPropertyName.DISPLAYNAME);
+      if (prop != null) mName = (String) prop.getName().toString();
+      else {
+        String[] tmp = mPath.split("/");
+        if (tmp.length > 0)
+          mName = tmp[tmp.length-1];
+      }
+
+      prop = propSet.get(DavPropertyName.GETCONTENTTYPE);
+      if (prop != null) {
+        mContentType = (String) prop.getValue();
+      } else {
+        mContentType = "DIR";
+        /*prop = propSet.get(DavPropertyName.ISCOLLECTION);
+        if (prop != null && Boolean.parseBoolean((String) prop.getValue()))
+            mContentType = "DIR";*/
+      }
+
+      prop = propSet.get(DavPropertyName.GETCONTENTLENGTH);
+      if (prop != null)
+        mContentLength = Long.parseLong((String) prop.getValue());
+      
+      prop = propSet.get(DavPropertyName.GETLASTMODIFIED);
+      if (prop != null) {
+        Date d = WebdavUtils.parseResponseDate((String)prop.getValue());
+        mModifiedTimestamp = (d != null) ? d.getTime() : 0;
+      }
+
+      prop = propSet.get(DavPropertyName.CREATIONDATE);
+      if (prop != null) {
+        Date d = WebdavUtils.parseResponseDate((String)prop.getValue());
+        mCreateTimestamp = (d != null) ? d.getTime() : 0;
+      }  
+
+    } else {
+      Log.e("WebdavEntry", "General fuckup, no status for webdav response");
+    }
+  }
+
+  public String path() {
+    return mPath;
+  }
+  
+  public String name() {
+    return mName;
+  }
+  
+  public boolean isDirectory() {
+    return mContentType.equals("DIR");
+  }
+
+  public String contentType() {
+    return mContentType;
+  }
+
+  public String uri() {
+    return mUri;
+  }
+  
+  public long contentLength() {
+    return mContentLength;
+  }
+  
+  public long createTimestamp() {
+    return mCreateTimestamp;
+  }
+  
+  public long modifiedTimesamp() {
+    return mModifiedTimestamp;
+  }
+  
+  private void resetData() {
+    mName = mUri = mContentType = null;
+    mContentLength = mCreateTimestamp = mModifiedTimestamp = 0;
+  }
+}
index 5c75e66..9c8bed3 100644 (file)
@@ -78,7 +78,7 @@ public class WebdavUtils {
     return "<?xml version=\"1.0\" ?><D:propertyupdate xmlns:D=\"DAV:\"></D:propertyupdate>";
   }
   
     return "<?xml version=\"1.0\" ?><D:propertyupdate xmlns:D=\"DAV:\"></D:propertyupdate>";
   }
   
-  private static Date parseResponseDate(String date) {
+  public static Date parseResponseDate(String date) {
     Date returnDate = null;
     for (int i = 0; i < DATETIME_FORMATS.length; ++i) {
       try {
     Date returnDate = null;
     for (int i = 0; i < DATETIME_FORMATS.length; ++i) {
       try {