com.jalios.jcms.webdav
Class WebdavFileSystem

java.lang.Object
  extended by com.jalios.jcms.webdav.WebdavFileSystem
Direct Known Subclasses:
CatWebdavFileSystem, FileWebdavFileSystem

public abstract class WebdavFileSystem
extends Object

This class is an Abstract representation of a WebdavFileSystem. It's purpose is to handle all specific webdav concept and control before delegating to a a sub repository implementation doing more control and real commande.

Since:
jcms-5.5.0
Version:
$Revision: 28806 $
Author:
Jean-Philippe Encausse

Field Summary
protected  Map<String,Set<WebdavLock>> resourceLocks
           
static String REVISION
           
 
Constructor Summary
protected WebdavFileSystem(WebdavContext ctxt)
          Initialise the webdav FileSystem setting baseUri from ContextPath and ServletPath
 
Method Summary
 void afterDoDelete(WebdavResource resource, WebdavContext ctxt)
          Must be called by Sub Implementation to resolve properties and locks problem.
 void afterDoMove(WebdavResource source, WebdavResource target, boolean overwrite, boolean recursive, WebdavContext ctxt)
          Must be called by Sub Implementation to resolve properties and locks problem.
 boolean doCopy(WebdavResource source, WebdavResource target, boolean overwrite, boolean recursive, WebdavContext ctxt)
          This method perform copy from one Webdav Resource to an Other
abstract  boolean doCreate(WebdavResource resource, boolean overwrite, boolean isFolder, WebdavContext ctxt)
          This method perform create from one Webdav Resource
 boolean doDelete(WebdavResource resource, boolean recursive, WebdavContext ctxt)
          This method perform delete from one Webdav Resource
 WebdavLock doLock(WebdavResource resource, WebdavContext ctxt)
          This method will parse header to identify and create lock or locks on the given resource If Errors append or Lock only need a refresh then return false otherwise return true.
 boolean doMove(WebdavResource source, WebdavResource target, boolean overwrite, boolean recursive, WebdavContext ctxt)
          This method perform move from one Webdav Resource to an Other
 boolean doPut(WebdavResource resource, boolean overwrite, WebdavContext ctxt)
          This method will do a create/overwrite a File or a Folder
 boolean doUnlock(WebdavResource resource, WebdavContext ctxt)
          This method will unlock the given resource lock defined in the if header.
 String getAbsoluteUri(String path, WebdavContext ctxt)
          This method will convert a relative path to an absolute uri ie /my/folder/resource.ext -> http://www.example.com/jcms/webapp/webdav/my/folder/resource.ext
 Collection<WebdavLock> getDescendantLocks(WebdavResource resource, WebdavContext ctxt)
          This method will return locks of descendant on the given resource
 Collection<WebdavLock> getLocks(WebdavResource resource, WebdavContext ctxt)
          This method will return all locks on the given resource and on all the parent collection.
 String getRelativeUri(String uri, WebdavContext ctxt)
          This method will convert an absolute uri to a relative uri.
abstract  WebdavResource getResource(String uri, WebdavContext ctxt)
          Lookup the resource represented by the given URI.
 boolean hasInternalLock(WebdavResource res, WebdavContext ctxt)
          This method is called for other mecanism outside of Webdav
 void init()
          Called after authentication for each request.
 boolean isInternallyLocked(WebdavResource res, WebdavContext ctxt)
          This method is called for other mecanism outside of Webdav
 boolean isListing(WebdavContext ctxt)
          This method check if the FileSystem allow listing.
 boolean isReadOnly(WebdavContext ctxt)
          Check if the FileSystem is ReadOnly.
 boolean matchesIfHeaderCondition(WebdavContext ctxt)
          Check that the current resource matches the if header condition if any.
abstract  WebdavLock newLock(WebdavResource resource, WebdavContext ctxt)
          This method will return a new WebdavLock implementation
 String normalize(String path)
          Return a context-relative path, beginning with a "/", that represents the canonical version of the specified path after ".." and "." elements are resolved out.
 WebdavLock putLock(WebdavLock lock, WebdavResource resource, WebdavContext ctxt)
          This method will put a lock on single given resource
 WebdavLock putLocks(WebdavLock lock, WebdavResource resource, WebdavContext ctxt)
          This method will put a lock on the given resource and its children
 WebdavLock refreshLock(WebdavResource resource, WebdavContext ctxt)
          This method will refresh a lock on the given resource and returned the refreshed lock if any or null otherwise.
 boolean removeLock(WebdavLock lock, WebdavResource resource, WebdavContext ctxt)
          This method will remove tokens on the given resource and its children If there is no more tokens then remove the lock.
 boolean removeLocks(WebdavResource resource, WebdavContext ctxt)
          This method will remove all lock for a given resource and its children (shared lock will also be removed)
protected  boolean silentFilterResource(WebdavResource resource, WebdavContext ctxt)
          Return true if the resource should be silently ignored.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

REVISION

public static final String REVISION
See Also:
Constant Field Values

resourceLocks

protected Map<String,Set<WebdavLock>> resourceLocks
Constructor Detail

WebdavFileSystem

protected WebdavFileSystem(WebdavContext ctxt)
Initialise the webdav FileSystem setting baseUri from ContextPath and ServletPath

Parameters:
ctxt - the Webdav Context
Method Detail

init

public void init()
Called after authentication for each request. Used to initialized cached data.


isReadOnly

public boolean isReadOnly(WebdavContext ctxt)
Check if the FileSystem is ReadOnly. Default implementation always return false

Parameters:
ctxt - the Webdav Context
Returns:
true if the FileSystem is Read Only

isListing

public boolean isListing(WebdavContext ctxt)
This method check if the FileSystem allow listing. Listing is used by PROPFIND Webdav Method. Default implementation return true.

Parameters:
ctxt - the Webdav Context
Returns:
true if the FileSystem folders can be listed

getRelativeUri

public String getRelativeUri(String uri,
                             WebdavContext ctxt)
This method will convert an absolute uri to a relative uri.

Examples :

Parameters:
uri - the absolute uri
ctxt - the Webdav Context
Returns:
the relative uri

getAbsoluteUri

public String getAbsoluteUri(String path,
                             WebdavContext ctxt)
This method will convert a relative path to an absolute uri ie /my/folder/resource.ext -> http://www.example.com/jcms/webapp/webdav/my/folder/resource.ext

Parameters:
path - the path to convert to absolute
ctxt - the Webdav Context
Returns:
the relative uri

normalize

public String normalize(String path)
Return a context-relative path, beginning with a "/", that represents the canonical version of the specified path after ".." and "." elements are resolved out. If the specified path attempts to go outside the boundaries of the current context (i.e. too many ".." path elements are present), return null instead. If path starts with http:// then clean behaviour to let http://

Parameters:
path - Path to be normalized
Returns:
String the normalized path

getResource

public abstract WebdavResource getResource(String uri,
                                           WebdavContext ctxt)
Lookup the resource represented by the given URI. The resource must be a relative URI to the path folders starting and ending by '/'. ie /my/path/resource.ext -> /my/path/resource.ext
ie /my/path/ -> /my/path/

Parameters:
uri - the resource URI
ctxt - the Webdav Context
Returns:
WebdavResource the resource representing the given URI

doCopy

public boolean doCopy(WebdavResource source,
                      WebdavResource target,
                      boolean overwrite,
                      boolean recursive,
                      WebdavContext ctxt)
This method perform copy from one Webdav Resource to an Other

Parameters:
source - a Webdav Resource
target - a Webdav Resource
overwrite - a boolean indicate to overite or not the resource
recursive - is it a recursive copy
ctxt - the Webdav Context
Returns:
boolean true if the copy has been done otherwise false

doMove

public boolean doMove(WebdavResource source,
                      WebdavResource target,
                      boolean overwrite,
                      boolean recursive,
                      WebdavContext ctxt)
This method perform move from one Webdav Resource to an Other

Parameters:
source - a Webdav Resource
target - a Webdav Resource
overwrite - a boolean indicate to overite or not the resource
recursive - is it a recursive copy
ctxt - the Webdav Context
Returns:
boolean true if the move has been done otherwise false

afterDoMove

public void afterDoMove(WebdavResource source,
                        WebdavResource target,
                        boolean overwrite,
                        boolean recursive,
                        WebdavContext ctxt)
Must be called by Sub Implementation to resolve properties and locks problem. Parameters are same than doMove().

Parameters:
source - the source WebdavResource
target - the target WebdavResource
overwrite - a boolean indicate to overite or not the resource
recursive - is it a recursive copy
ctxt - the Webdav Context

doCreate

public abstract boolean doCreate(WebdavResource resource,
                                 boolean overwrite,
                                 boolean isFolder,
                                 WebdavContext ctxt)
This method perform create from one Webdav Resource

Parameters:
resource - the Webdav Resource
overwrite - a boolean indicate to ovewrite the resource
isFolder - create a File or a Folder
ctxt -
Returns:
boolean true if the create has been done otherwise false

doDelete

public boolean doDelete(WebdavResource resource,
                        boolean recursive,
                        WebdavContext ctxt)
This method perform delete from one Webdav Resource

Parameters:
resource - the Webdav Resource
recursive - is it a recursive delete
ctxt -
Returns:
boolean true if the delete has been done otherwise false

afterDoDelete

public void afterDoDelete(WebdavResource resource,
                          WebdavContext ctxt)
Must be called by Sub Implementation to resolve properties and locks problem. Parameters are same than doDelete().

Parameters:
resource - the Webdav Resource
ctxt - the Webdav Context

doPut

public boolean doPut(WebdavResource resource,
                     boolean overwrite,
                     WebdavContext ctxt)
              throws javax.servlet.ServletException,
                     IOException
This method will do a create/overwrite a File or a Folder

Parameters:
resource - the WebdavResource
overwrite - a boolean indicate to overite the resource
ctxt - the Webdav Context
Returns:
boolean true if put has been done
Throws:
javax.servlet.ServletException
IOException

matchesIfHeaderCondition

public boolean matchesIfHeaderCondition(WebdavContext ctxt)
Check that the current resource matches the if header condition if any.

Parameters:
ctxt - the current WebdavContext
Returns:
true if resource matches condition, false otherwise

silentFilterResource

protected boolean silentFilterResource(WebdavResource resource,
                                       WebdavContext ctxt)
Return true if the resource should be silently ignored.

Parameters:
resource - the WebdavResource
ctxt - the WebdavContext
Returns:
boolean true to ignore resource

doLock

public WebdavLock doLock(WebdavResource resource,
                         WebdavContext ctxt)
This method will parse header to identify and create lock or locks on the given resource If Errors append or Lock only need a refresh then return false otherwise return true.

Parameters:
resource - the WebdavResource to lock
ctxt - the WebdavContext
Returns:
WebdavLock if lock has been created

doUnlock

public boolean doUnlock(WebdavResource resource,
                        WebdavContext ctxt)
This method will unlock the given resource lock defined in the if header.

Parameters:
resource - the WebdavResource to lock
ctxt - the WebdavContext
Returns:
boolean if lock has been deleted

hasInternalLock

public boolean hasInternalLock(WebdavResource res,
                               WebdavContext ctxt)
This method is called for other mecanism outside of Webdav

Parameters:
res - the WebdavResource
ctxt - the Webdav Context
Returns:
false

isInternallyLocked

public boolean isInternallyLocked(WebdavResource res,
                                  WebdavContext ctxt)
This method is called for other mecanism outside of Webdav

Parameters:
res - the WebdavResource
ctxt - the Webdav Context
Returns:
false

newLock

public abstract WebdavLock newLock(WebdavResource resource,
                                   WebdavContext ctxt)
This method will return a new WebdavLock implementation

Parameters:
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
a new WebdavLock

getLocks

public Collection<WebdavLock> getLocks(WebdavResource resource,
                                       WebdavContext ctxt)
This method will return all locks on the given resource and on all the parent collection.

Parameters:
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
Collection a Collection of WebdavLock representing the given URI

getDescendantLocks

public Collection<WebdavLock> getDescendantLocks(WebdavResource resource,
                                                 WebdavContext ctxt)
This method will return locks of descendant on the given resource

Parameters:
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
Collection a Collection of WebdavLock representing the given URI

putLock

public WebdavLock putLock(WebdavLock lock,
                          WebdavResource resource,
                          WebdavContext ctxt)
This method will put a lock on single given resource

Parameters:
lock - the WebdavLock
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
true if Lock has been put

putLocks

public WebdavLock putLocks(WebdavLock lock,
                           WebdavResource resource,
                           WebdavContext ctxt)
This method will put a lock on the given resource and its children

Parameters:
lock - the WebdavLock
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
WebdavLock the working lock

removeLock

public boolean removeLock(WebdavLock lock,
                          WebdavResource resource,
                          WebdavContext ctxt)
This method will remove tokens on the given resource and its children If there is no more tokens then remove the lock.

Parameters:
lock - the WebdavLock
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
WebdavLock the working lock

removeLocks

public boolean removeLocks(WebdavResource resource,
                           WebdavContext ctxt)
This method will remove all lock for a given resource and its children (shared lock will also be removed)

Parameters:
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
true if remove has been done

refreshLock

public WebdavLock refreshLock(WebdavResource resource,
                              WebdavContext ctxt)
This method will refresh a lock on the given resource and returned the refreshed lock if any or null otherwise.

Parameters:
resource - the Webdav Resource
ctxt - the Webdav Context
Returns:
the Lock which has been refresh or null if none was refreshed


Copyright © 2001-2010 Jalios SA. All Rights Reserved.