Class WebDAVMethod

    • 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 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
    • 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,
                               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 ServiceRegistry getServiceRegistry()
        Return the service registry
        Returns:
        ServiceRegistry
      • getTransactionService

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

        protected final NodeService getNodeService()
        Convenience method to return the node service
        Returns:
        NodeService
      • getSearchService

        protected final 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 FileFolderService getFileFolderService()
        Returns:
        Returns the general file/folder manipulation service
      • getContentService

        protected final ContentService getContentService()
        Convenience method to return the content service
        Returns:
        ContentService
      • getMimetypeService

        protected final 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 ActionService getActionService()
        Convenience method to return the action service
        Returns:
        ActionService
      • getPermissionService

        protected final PermissionService getPermissionService()
        Convenience method to return the permission service
        Returns:
        PermissionService
      • getAuthenticationService

        protected final 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 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,
                                                FileInfo lockNodeInfo,
                                                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,
                                                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 LockInfo checkNode​(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 LockInfo checkNode​(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 LockInfo getNodeLockInfo​(FileInfo nodeInfo)
        Returns node Lock token in consideration of WebDav lock depth.
        Parameters:
        nodeInfo - FileInfo
        Returns:
        String Lock token
      • getNodeForPath

        protected FileInfo getNodeForPath​(NodeRef rootNodeRef,
                                          String path)
                                   throws 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:
        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 FileInfo getWorkingCopy​(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.