Class WebDAVMethod

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      protected class  WebDAVMethod.Condition
      Class used for storing conditions which comes with "If" header of the request
    • Constructor Summary

      Constructors 
      Constructor Description
      WebDAVMethod()
      Default constructor
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected org.alfresco.repo.webdav.LockInfo checkNode​(org.alfresco.service.cmr.model.FileInfo fileInfo)
      Checks if write operation can be performed on node.
      protected org.alfresco.repo.webdav.LockInfo checkNode​(org.alfresco.service.cmr.model.FileInfo fileInfo, boolean ignoreShared, boolean lockMethod)
      Checks if write operation can be performed on node.
      protected org.dom4j.io.XMLWriter createXMLWriter()
      Create an XML writer for the response
      void execute()
      Executes the method, wrapping the call to executeImpl() in an appropriate transaction and handling the error conditions.
      protected abstract void executeImpl()
      Access the content repository to satisfy the request and generates the appropriate WebDAV response.
      protected void flushXML​(org.dom4j.io.XMLWriter writer)
      Flushes all XML written so far to the response
      protected void generateLockDiscoveryXML​(org.dom4j.io.XMLWriter xml, org.alfresco.service.cmr.model.FileInfo lockNodeInfo, boolean emptyNamespace, String scope, String depth, String lToken, String owner, Date expiryDate)
      Generates the lock discovery XML response
      protected void generateLockDiscoveryXML​(org.dom4j.io.XMLWriter xml, org.alfresco.service.cmr.model.FileInfo lockNodeInfo, org.alfresco.repo.webdav.LockInfo lockInfo)
      Generates the lock discovery XML response
      protected String generateNamespaceDeclarations​(HashMap<String,​String> nameSpaces)
      Generates a list of namespace declarations for the response
      protected void generateResponseImpl()
      Does nothing unless overridden - for reasons of backwards compatibility.
      protected org.alfresco.service.cmr.action.ActionService getActionService()
      Convenience method to return the action service
      protected org.alfresco.service.cmr.security.AuthenticationService getAuthenticationService()
      Convenience method to return the authentication service
      protected org.alfresco.service.cmr.repository.ContentService getContentService()
      Convenience method to return the content service
      protected String getContextPath()  
      protected WebDAVHelper getDAVHelper()
      Return the WebDAV protocol helper
      protected WebDAVLockService getDAVLockService()
      Retrieve the (WebDAV protocol-level) locking service.
      int getDepth()
      Return the property find depth
      protected org.alfresco.service.cmr.model.FileFolderService getFileFolderService()  
      protected org.alfresco.service.cmr.repository.MimetypeService getMimetypeService()
      Convenience method to return the mimetype service
      protected org.alfresco.service.namespace.NamespaceService getNamespaceService()
      Convenience method to return the namespace service
      protected org.alfresco.service.cmr.model.FileInfo getNodeForPath​(org.alfresco.service.cmr.repository.NodeRef rootNodeRef, String path)
      Get the file info for the given paths
      protected org.alfresco.repo.webdav.LockInfo getNodeLockInfo​(org.alfresco.service.cmr.model.FileInfo nodeInfo)
      Returns node Lock token in consideration of WebDav lock depth.
      protected org.alfresco.service.cmr.repository.NodeService getNodeService()
      Convenience method to return the node service
      String getPath()
      Return the relative path
      protected org.alfresco.service.cmr.security.PermissionService getPermissionService()
      Convenience method to return the permission service
      protected Document getRequestBodyAsDocument()
      Retrieves the request body as an XML document
      protected org.alfresco.service.cmr.repository.NodeRef getRootNodeRef()
      Return the root node
      protected org.alfresco.service.cmr.search.SearchService getSearchService()
      Convenience method to return the search service
      protected org.alfresco.service.ServiceRegistry getServiceRegistry()
      Return the service registry
      protected String getServletPath()  
      protected String getSiteId()
      Get the site ID (short-name) that the current request relates to.
      protected int getStatusForAccessDeniedException()
      Determines status code for AccessDeniedException based on client's HTTP headers.
      protected String getTenantDomain()
      Get the tenant domain for the current user and request.
      protected org.alfresco.service.transaction.TransactionService getTransactionService()
      Convenience method to return the transaction service
      protected String getURLForPath​(javax.servlet.http.HttpServletRequest request, String path, boolean isFolder)
      Returns a URL that could be used to access the given path.
      protected org.alfresco.service.cmr.model.FileInfo getWorkingCopy​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Returns a working copy of node for current user.
      protected org.dom4j.io.OutputFormat getXMLOutputFormat()
      Returns the format required for an XML response.
      protected boolean isReadOnly()
      Override and return true if the method is a query method only.
      protected void parseDepthHeader()
      Parses "Depth" request header
      protected void parseIfHeader()
      Parses "If" header of the request.
      protected abstract void parseRequestBody()
      Parses the given request body represented as an XML document and sets any necessary context ready for execution.
      protected abstract void parseRequestHeaders()
      Parses the HTTP headers of the request and sets any necessary context ready for execution.
      void setDetails​(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp, WebDAVHelper davHelper, org.alfresco.service.cmr.repository.NodeRef rootNode)
      Set the request/response details
      protected boolean shouldFlushXMLWriter()
      Determines whether the XMLWriter should be flushed when XML is flushed.
      String toString()  
    • Field Detail

      • logger

        protected static org.apache.commons.logging.Log logger
      • m_request

        protected javax.servlet.http.HttpServletRequest m_request
      • m_response

        protected javax.servlet.http.HttpServletResponse m_response
      • m_rootNodeRef

        protected org.alfresco.service.cmr.repository.NodeRef m_rootNodeRef
      • m_strPath

        protected String m_strPath
      • m_userAgent

        protected String m_userAgent
      • m_resourceTag

        protected String m_resourceTag
      • m_depth

        protected int m_depth
      • m_childToParent

        protected Map<org.alfresco.service.cmr.repository.NodeRef,​org.alfresco.service.cmr.repository.NodeRef> m_childToParent
      • m_parentLockInfo

        protected Map<org.alfresco.service.cmr.repository.NodeRef,​org.alfresco.repo.webdav.LockInfo> m_parentLockInfo
    • Constructor Detail

      • WebDAVMethod

        public WebDAVMethod()
        Default constructor
    • Method Detail

      • setDetails

        public void setDetails​(javax.servlet.http.HttpServletRequest req,
                               javax.servlet.http.HttpServletResponse resp,
                               WebDAVHelper davHelper,
                               org.alfresco.service.cmr.repository.NodeRef rootNode)
        Set the request/response details
        Parameters:
        req - HttpServletRequest
        resp - HttpServletResponse
        davHelper - WebDAVHelper
        rootNode - NodeRef
      • isReadOnly

        protected boolean isReadOnly()
        Override and return true if the method is a query method only. The default implementation returns false.
        Returns:
        Returns true if the method transaction may be read-only
      • getDepth

        public final int getDepth()
        Return the property find depth
        Returns:
        int
      • generateResponseImpl

        protected void generateResponseImpl()
                                     throws Exception
        Does nothing unless overridden - for reasons of backwards compatibility. Subclasses implementing this method should separate the WebDAV method execution logic from response generation logic. Execution logic should be contained in the executeImpl() method and should NOT contain any code that writes to the response. Conversely response generation logic should NOT contain any code relating to the desired effect of the WebDAV method (e.g. setting properties on a node) and should be contained purely within this method.

        Older methods, until refactored will not override this method, relying only on executeImpl().

        Throws:
        Exception
      • parseRequestBody

        protected abstract void parseRequestBody()
                                          throws WebDAVServerException
        Parses the given request body represented as an XML document and sets any necessary context ready for execution.
        Throws:
        WebDAVServerException
      • parseRequestHeaders

        protected abstract void parseRequestHeaders()
                                             throws WebDAVServerException
        Parses the HTTP headers of the request and sets any necessary context ready for execution.
        Throws:
        WebDAVServerException
      • getRequestBodyAsDocument

        protected Document getRequestBodyAsDocument()
                                             throws WebDAVServerException
        Retrieves the request body as an XML document
        Returns:
        The body of the request as an XML document or null if there isn't a body
        Throws:
        WebDAVServerException
      • parseIfHeader

        protected void parseIfHeader()
                              throws WebDAVServerException
        Parses "If" header of the request. Stores conditions that should be checked. Parses both No-tag-list and Tagged-list formats See "10.4.2 Syntax" paragraph of the WebDAV specification for "If" header format.
        Throws:
        WebDAVServerException
      • getDAVHelper

        protected final WebDAVHelper getDAVHelper()
        Return the WebDAV protocol helper
        Returns:
        WebDAVHelper
      • getServiceRegistry

        protected final org.alfresco.service.ServiceRegistry getServiceRegistry()
        Return the service registry
        Returns:
        ServiceRegistry
      • getTransactionService

        protected final org.alfresco.service.transaction.TransactionService getTransactionService()
        Convenience method to return the transaction service
        Returns:
        TransactionService
      • getNodeService

        protected final org.alfresco.service.cmr.repository.NodeService getNodeService()
        Convenience method to return the node service
        Returns:
        NodeService
      • getSearchService

        protected final org.alfresco.service.cmr.search.SearchService getSearchService()
        Convenience method to return the search service
        Returns:
        SearchService
      • getNamespaceService

        protected final org.alfresco.service.namespace.NamespaceService getNamespaceService()
        Convenience method to return the namespace service
        Returns:
        NamespaceService
      • getFileFolderService

        protected final org.alfresco.service.cmr.model.FileFolderService getFileFolderService()
        Returns:
        Returns the general file/folder manipulation service
      • getContentService

        protected final org.alfresco.service.cmr.repository.ContentService getContentService()
        Convenience method to return the content service
        Returns:
        ContentService
      • getMimetypeService

        protected final org.alfresco.service.cmr.repository.MimetypeService getMimetypeService()
        Convenience method to return the mimetype service
        Returns:
        MimetypeService
      • getDAVLockService

        protected final WebDAVLockService getDAVLockService()
        Retrieve the (WebDAV protocol-level) locking service.
        Returns:
        WebDAVLockService
      • getActionService

        protected final org.alfresco.service.cmr.action.ActionService getActionService()
        Convenience method to return the action service
        Returns:
        ActionService
      • getPermissionService

        protected final org.alfresco.service.cmr.security.PermissionService getPermissionService()
        Convenience method to return the permission service
        Returns:
        PermissionService
      • getAuthenticationService

        protected final org.alfresco.service.cmr.security.AuthenticationService getAuthenticationService()
        Convenience method to return the authentication service
        Returns:
        AuthenticationService
      • getServletPath

        protected final String getServletPath()
        Returns:
        Returns the path of the servlet, e.g. /webdav
      • getContextPath

        protected final String getContextPath()
        Returns:
        Returns the context path of the servlet, e.g. /alfresco
      • getRootNodeRef

        protected final org.alfresco.service.cmr.repository.NodeRef getRootNodeRef()
        Return the root node
        Returns:
        NodeRef
      • getPath

        public String getPath()
        Return the relative path
        Returns:
        String
      • getXMLOutputFormat

        protected org.dom4j.io.OutputFormat getXMLOutputFormat()
        Returns the format required for an XML response. This may vary per method.
      • createXMLWriter

        protected final org.dom4j.io.XMLWriter createXMLWriter()
                                                        throws IOException
        Create an XML writer for the response
        Returns:
        XMLWriter
        Throws:
        IOException
      • generateLockDiscoveryXML

        protected void generateLockDiscoveryXML​(org.dom4j.io.XMLWriter xml,
                                                org.alfresco.service.cmr.model.FileInfo lockNodeInfo,
                                                org.alfresco.repo.webdav.LockInfo lockInfo)
                                         throws Exception
        Generates the lock discovery XML response
        Parameters:
        xml - XMLWriter
        lockNodeInfo - FileInfo
        lockInfo - LockInfo
        Throws:
        Exception
      • generateLockDiscoveryXML

        protected void generateLockDiscoveryXML​(org.dom4j.io.XMLWriter xml,
                                                org.alfresco.service.cmr.model.FileInfo lockNodeInfo,
                                                boolean emptyNamespace,
                                                String scope,
                                                String depth,
                                                String lToken,
                                                String owner,
                                                Date expiryDate)
                                         throws Exception
        Generates the lock discovery XML response
        Parameters:
        xml - XMLWriter
        lockNodeInfo - FileInfo
        emptyNamespace - boolean True if namespace should be empty. Used to avoid bugs in WebDAV clients.
        scope - String lock scope
        depth - String lock depth
        lToken - String locktoken
        owner - String lock owner
        expiryDate - the date/time the lock should expire
        Throws:
        Exception
      • generateNamespaceDeclarations

        protected String generateNamespaceDeclarations​(HashMap<String,​String> nameSpaces)
        Generates a list of namespace declarations for the response
      • checkNode

        protected org.alfresco.repo.webdav.LockInfo checkNode​(org.alfresco.service.cmr.model.FileInfo fileInfo,
                                                              boolean ignoreShared,
                                                              boolean lockMethod)
                                                       throws WebDAVServerException
        Checks if write operation can be performed on node.
        Parameters:
        fileInfo - - node's file info
        ignoreShared - - if true ignores shared locks
        lockMethod - - must be true if used from lock method
        Returns:
        node's lock info
        Throws:
        WebDAVServerException - if node has shared or exclusive lock or If header preconditions failed
      • checkNode

        protected org.alfresco.repo.webdav.LockInfo checkNode​(org.alfresco.service.cmr.model.FileInfo fileInfo)
                                                       throws WebDAVServerException
        Checks if write operation can be performed on node.
        Parameters:
        fileInfo - FileInfo
        Returns:
        LockInfo
        Throws:
        WebDAVServerException - if node has shared or exclusive lock or If header preconditions failed
      • getNodeLockInfo

        protected org.alfresco.repo.webdav.LockInfo getNodeLockInfo​(org.alfresco.service.cmr.model.FileInfo nodeInfo)
        Returns node Lock token in consideration of WebDav lock depth.
        Parameters:
        nodeInfo - FileInfo
        Returns:
        String Lock token
      • getNodeForPath

        protected org.alfresco.service.cmr.model.FileInfo getNodeForPath​(org.alfresco.service.cmr.repository.NodeRef rootNodeRef,
                                                                         String path)
                                                                  throws org.alfresco.service.cmr.model.FileNotFoundException
        Get the file info for the given paths
        Parameters:
        rootNodeRef - the acting webdav root
        path - the path to search for
        Returns:
        Return the file info for the path
        Throws:
        org.alfresco.service.cmr.model.FileNotFoundException - if the path doesn't refer to a valid node
      • getURLForPath

        protected String getURLForPath​(javax.servlet.http.HttpServletRequest request,
                                       String path,
                                       boolean isFolder)
        Returns a URL that could be used to access the given path.
        Parameters:
        request - HttpServletRequest
        path - the path to search for
        isFolder - indicates file or folder is requested
        Returns:
        URL that could be used to access the given path
      • shouldFlushXMLWriter

        protected boolean shouldFlushXMLWriter()
        Determines whether the XMLWriter should be flushed when XML is flushed. For some reason this is method specific.
        Returns:
        true if the XMLWriter should be flushed when XML is flushed
      • flushXML

        protected final void flushXML​(org.dom4j.io.XMLWriter writer)
                               throws IOException
        Flushes all XML written so far to the response
        Parameters:
        writer - XMLWriter that should be flushed
        Throws:
        IOException
      • getWorkingCopy

        protected org.alfresco.service.cmr.model.FileInfo getWorkingCopy​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
        Returns a working copy of node for current user.
        Parameters:
        nodeRef - node reference
        Returns:
        Returns the working copy's file information
      • getStatusForAccessDeniedException

        protected int getStatusForAccessDeniedException()
        Determines status code for AccessDeniedException based on client's HTTP headers.
        Returns:
        Returns status code
      • getSiteId

        protected String getSiteId()
        Get the site ID (short-name) that the current request relates to. The site ID will be DEFAULT_SITE_ID if not specifically set.
        Returns:
        The site ID
      • getTenantDomain

        protected String getTenantDomain()
        Get the tenant domain for the current user and request. The tenant domain will be TenantService.DEFAULT_DOMAIN if not specifically set.
        Returns:
        The tenant domain.