Class WebDAVMethod

java.lang.Object
org.alfresco.repo.webdav.WebDAVMethod
Direct Known Subclasses:
DeleteMethod, GetMethod, HierarchicalMethod, LockMethod, MkcolMethod, OptionsMethod, PropFindMethod, PutMethod, UnlockMethod

public abstract class WebDAVMethod extends Object
Abstract base class for all the WebDAV method handling classes
Author:
gavinc
  • Field Details

    • 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_davHelper

      protected WebDAVHelper m_davHelper
    • m_rootNodeRef

      protected NodeRef m_rootNodeRef
    • m_strPath

      protected String m_strPath
    • m_userAgent

      protected String m_userAgent
    • m_conditions

      protected LinkedList<WebDAVMethod.Condition> m_conditions
    • m_resourceTag

      protected String m_resourceTag
    • m_depth

      protected int m_depth
    • m_childToParent

      protected Map<NodeRef,NodeRef> m_childToParent
    • m_parentLockInfo

      protected Map<NodeRef,LockInfo> m_parentLockInfo
  • Constructor Details

    • WebDAVMethod

      public WebDAVMethod()
      Default constructor
  • Method Details

    • 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
    • execute

      public void execute() throws WebDAVServerException
      Executes the method, wrapping the call to executeImpl() in an appropriate transaction and handling the error conditions.
      Throws:
      WebDAVServerException
    • executeImpl

      protected abstract void executeImpl() throws WebDAVServerException, Exception
      Access the content repository to satisfy the request and generates the appropriate WebDAV response.
      Throws:
      WebDAVServerException - a general server exception
      Exception - any unhandled exception
    • 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
    • parseDepthHeader

      protected void parseDepthHeader() throws WebDAVServerException
      Parses "Depth" request header
      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
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • 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.