1 /* ownCloud Android client application 
   2  *   Copyright (C) 2012  ownCloud 
   4  *   This program is free software: you can redistribute it and/or modify 
   5  *   it under the terms of the GNU General Public License as published by 
   6  *   the Free Software Foundation, either version 3 of the License, or 
   7  *   (at your option) any later version. 
   9  *   This program is distributed in the hope that it will be useful, 
  10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of 
  11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  12  *   GNU General Public License for more details. 
  14  *   You should have received a copy of the GNU General Public License 
  15  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. 
  18 package eu
.alefzero
.webdav
; 
  20 import java
.util
.Date
; 
  22 import org
.apache
.jackrabbit
.webdav
.MultiStatusResponse
; 
  23 import org
.apache
.jackrabbit
.webdav
.property.DavProperty
; 
  24 import org
.apache
.jackrabbit
.webdav
.property.DavPropertyName
; 
  25 import org
.apache
.jackrabbit
.webdav
.property.DavPropertySet
; 
  27 import android
.net
.Uri
; 
  28 import android
.util
.Log
; 
  30 public class WebdavEntry 
{ 
  31     private String mName
, mPath
, mUri
, mContentType
; 
  32     private long mContentLength
, mCreateTimestamp
, mModifiedTimestamp
; 
  34     public WebdavEntry(MultiStatusResponse ms
, String splitElement
) { 
  36         if (ms
.getStatus().length 
!= 0) { 
  39             mPath 
= mUri
.split(splitElement
, 2)[1]; 
  41             int status 
= ms
.getStatus()[0].getStatusCode(); 
  42             DavPropertySet propSet 
= ms
.getProperties(status
); 
  43             @SuppressWarnings("rawtypes") 
  44             DavProperty prop 
= propSet
.get(DavPropertyName
.DISPLAYNAME
); 
  46                 mName 
= (String
) prop
.getName().toString(); 
  48                 String
[] tmp 
= mPath
.split("/"); 
  50                     mName 
= tmp
[tmp
.length 
- 1]; 
  53             // use unknown mimetype as default behavior 
  54             mContentType 
= "application/octet-stream"; 
  55             prop 
= propSet
.get(DavPropertyName
.GETCONTENTTYPE
); 
  57                 mContentType 
= (String
) prop
.getValue(); 
  58                 // dvelasco: some builds of ownCloud server 4.0.x added a trailing ';' to the MIME type ; if looks fixed, but let's be cautious 
  59                 if (mContentType
.indexOf(";") >= 0) { 
  60                     mContentType 
= mContentType
.substring(0, mContentType
.indexOf(";")); 
  64             // check if it's a folder in the standard way: see RFC2518 12.2 , or RFC4918 14.3  
  65             prop 
= propSet
.get(DavPropertyName
.RESOURCETYPE
); 
  67                 Object value 
= prop
.getValue(); 
  69                     mContentType 
= "DIR";   // a specific attribute would be better, but this is enough; unless while we have no reason to distinguish MIME types for folders 
  73             prop 
= propSet
.get(DavPropertyName
.GETCONTENTLENGTH
); 
  75                 mContentLength 
= Long
.parseLong((String
) prop
.getValue()); 
  77             prop 
= propSet
.get(DavPropertyName
.GETLASTMODIFIED
); 
  80                         .parseResponseDate((String
) prop
.getValue()); 
  81                 mModifiedTimestamp 
= (d 
!= null
) ? d
.getTime() : 0; 
  84             prop 
= propSet
.get(DavPropertyName
.CREATIONDATE
); 
  87                         .parseResponseDate((String
) prop
.getValue()); 
  88                 mCreateTimestamp 
= (d 
!= null
) ? d
.getTime() : 0; 
  93                     "General fuckup, no status for webdav response"); 
  97     public String 
path() { 
 101     public String 
decodedPath() { 
 102         return Uri
.decode(mPath
); 
 105     public String 
name() { 
 109     public boolean isDirectory() { 
 110         return mContentType
.equals("DIR"); 
 113     public String 
contentType() { 
 117     public String 
uri() { 
 121     public long contentLength() { 
 122         return mContentLength
; 
 125     public long createTimestamp() { 
 126         return mCreateTimestamp
; 
 129     public long modifiedTimestamp() { 
 130         return mModifiedTimestamp
; 
 133     private void resetData() { 
 134         mName 
= mUri 
= mContentType 
= null
; 
 135         mContentLength 
= mCreateTimestamp 
= mModifiedTimestamp 
= 0;