Package com.jalios.jcms.webdav
Class WebdavFileSystem
- java.lang.Object
-
- com.jalios.jcms.webdav.WebdavFileSystem
-
- Direct Known Subclasses:
CatWebdavFileSystem
,FileWebdavFileSystem
public abstract class WebdavFileSystem extends java.lang.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
- Author:
- Jean-Philippe Encausse
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<java.lang.String,java.util.Set<WebdavLock>>
resourceLocks
-
Constructor Summary
Constructors Modifier Constructor Description protected
WebdavFileSystem(WebdavContext ctxt)
Initialise the webdav FileSystem setting baseUri from ContextPath and ServletPath
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description 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 Otherabstract boolean
doCreate(WebdavResource resource, boolean overwrite, boolean isFolder, WebdavContext ctxt)
This method perform create from one Webdav Resourceboolean
doDelete(WebdavResource resource, boolean recursive, WebdavContext ctxt)
This method perform delete from one Webdav ResourceWebdavLock
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 Otherboolean
doPut(WebdavResource resource, boolean overwrite, WebdavContext ctxt)
This method will do a create/overwrite a File or a Folderboolean
doUnlock(WebdavResource resource, WebdavContext ctxt)
This method will unlock the given resource lock defined in the if header.java.lang.String
getAbsoluteUri(java.lang.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.extjava.util.Collection<WebdavLock>
getDescendantLocks(WebdavResource resource, WebdavContext ctxt)
This method will return locks of descendant on the given resourcejava.util.Collection<WebdavLock>
getLocks(WebdavResource resource, WebdavContext ctxt)
This method will return all locks on the given resource and on all the parent collection.java.lang.String
getRelativeUri(java.lang.String uri, WebdavContext ctxt)
This method will convert an absolute uri to a relative uri.abstract WebdavResource
getResource(java.lang.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 Webdavvoid
init()
Called after authentication for each request.boolean
isInternallyLocked(WebdavResource res, WebdavContext ctxt)
This method is called for other mecanism outside of Webdavboolean
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 implementationjava.lang.String
normalize(java.lang.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 resourceWebdavLock
putLocks(WebdavLock lock, WebdavResource resource, WebdavContext ctxt)
This method will put a lock on the given resource and its childrenWebdavLock
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.
-
-
-
Field Detail
-
resourceLocks
protected java.util.Map<java.lang.String,java.util.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 java.lang.String getRelativeUri(java.lang.String uri, WebdavContext ctxt)
This method will convert an absolute uri to a relative uri.Examples :
- https://www.example.com:8443/jcms/webapp/my/folder/resource.ext -> /my/folder/resource.ext
- http://www.example.com/jcms/webapp/my/folder/resource.ext -> /my/folder/resource.ext
- /jcms/webdav/my/folder/resource.ext -> /my/folder/resource.ext
- Parameters:
uri
- the absolute urictxt
- the Webdav Context- Returns:
- the relative uri
-
getAbsoluteUri
public java.lang.String getAbsoluteUri(java.lang.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 absolutectxt
- the Webdav Context- Returns:
- the relative uri
-
normalize
public java.lang.String normalize(java.lang.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), returnnull
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(java.lang.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 URIctxt
- 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 Resourcetarget
- a Webdav Resourceoverwrite
- a boolean indicate to overite or not the resourcerecursive
- is it a recursive copyctxt
- 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 Resourcetarget
- a Webdav Resourceoverwrite
- a boolean indicate to overite or not the resourcerecursive
- is it a recursive copyctxt
- 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 WebdavResourcetarget
- the target WebdavResourceoverwrite
- a boolean indicate to overite or not the resourcerecursive
- is it a recursive copyctxt
- 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 Resourceoverwrite
- a boolean indicate to ovewrite the resourceisFolder
- create a File or a Folderctxt
-- 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 Resourcerecursive
- is it a recursive deletectxt
-- 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 Resourcectxt
- the Webdav Context
-
doPut
public boolean doPut(WebdavResource resource, boolean overwrite, WebdavContext ctxt) throws javax.servlet.ServletException, java.io.IOException
This method will do a create/overwrite a File or a Folder- Parameters:
resource
- the WebdavResourceoverwrite
- a boolean indicate to overite the resourcectxt
- the Webdav Context- Returns:
- boolean true if put has been done
- Throws:
javax.servlet.ServletException
java.io.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 WebdavResourcectxt
- 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 lockctxt
- 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 lockctxt
- 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 WebdavResourcectxt
- 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 WebdavResourcectxt
- 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 Resourcectxt
- the Webdav Context- Returns:
- a new WebdavLock
-
getLocks
public java.util.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 Resourcectxt
- the Webdav Context- Returns:
- Collection a Collection of WebdavLock representing the given URI
-
getDescendantLocks
public java.util.Collection<WebdavLock> getDescendantLocks(WebdavResource resource, WebdavContext ctxt)
This method will return locks of descendant on the given resource- Parameters:
resource
- the Webdav Resourcectxt
- 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 WebdavLockresource
- the Webdav Resourcectxt
- 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 WebdavLockresource
- the Webdav Resourcectxt
- 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 WebdavLockresource
- the Webdav Resourcectxt
- 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 Resourcectxt
- 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 Resourcectxt
- the Webdav Context- Returns:
- the Lock which has been refresh or null if none was refreshed
-
-