You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by pn...@apache.org on 2002/04/10 17:55:32 UTC

cvs commit: jakarta-slide/src/webdav/server/org/apache/slide/webdav/method OptionsMethod.java

pnever      02/04/10 08:55:32

  Modified:    src/webdav/server/org/apache/slide/webdav/method
                        OptionsMethod.java
  Log:
  Implemented additional semantics for "checkout-in-place", "version-history" and "workspace" features (4.6, 5.5, 6.4 in RFC 3253)
  
  Revision  Changes    Path
  1.16      +106 -12   jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/OptionsMethod.java
  
  Index: OptionsMethod.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/OptionsMethod.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- OptionsMethod.java	28 Mar 2002 06:12:12 -0000	1.15
  +++ OptionsMethod.java	10 Apr 2002 15:55:32 -0000	1.16
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/OptionsMethod.java,v 1.15 2002/03/28 06:12:12 jericho Exp $
  - * $Revision: 1.15 $
  - * $Date: 2002/03/28 06:12:12 $
  + * $Header: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/OptionsMethod.java,v 1.16 2002/04/10 15:55:32 pnever Exp $
  + * $Revision: 1.16 $
  + * $Date: 2002/04/10 15:55:32 $
    *
    * ====================================================================
    *
  @@ -78,15 +78,39 @@
   import org.apache.slide.search.*;
   import org.apache.slide.content.*;
   import org.apache.slide.util.Configuration;
  +import org.apache.slide.webdav.util.UriHandler;
  +import org.apache.slide.webdav.util.HistoryPathHandler;
  +import org.apache.slide.webdav.util.WorkspacePathHandler;
   import org.apache.slide.webdav.util.WebdavUtils;
  +import org.apache.slide.webdav.util.DeltavConstants;
  +import org.apache.slide.webdav.util.AclConstants;
  +
  +import org.jdom.Element;
  +import org.jdom.Document;
  +import org.jdom.Namespace;
  +import org.jdom.JDOMException;
  +import org.jdom.input.DOMBuilder;
  +import org.jdom.input.SAXBuilder;
  +import org.jdom.output.XMLOutputter;
  +
   
   /**
    * OPTIONS Method.
    *
    * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
    */
  -public class OptionsMethod extends WebdavMethod {
  +public class OptionsMethod extends WebdavMethod
  +implements DeltavConstants, AclConstants {
       
  +    // An XML outputter
  +    private XMLOutputter xmlOut = new XMLOutputter( "  ", true, "UTF-8" );
  +    private Namespace xmlNs = Namespace.getNamespace(DEFAULT_PREFIX, DEFAULT_NAMESPACE);
  +//  private Namespace xmlNs = Namespace.getNamespace(DEFAULT_NAMESPACE);
  +    
  +    // the collections which may contain VH or workspace resources are requested
  +    private boolean versionHistoryCollectionSetRequested = false;
  +    private boolean workspaceCollectionSetRequested = false;
  +    private boolean responseBodyNeeded = false;
       
       // ----------------------------------------------------------- Constructors
       
  @@ -97,24 +121,61 @@
           super(token, req, resp, config);
       }
       
  -    protected void parseRequest()
  -        throws WebdavException {
  +    protected void parseRequest() throws WebdavException {
  +        
  +        if( req.getContentLength() > 0 ) {
  +            try {
  +                retrieveRequestContent();
  +                Element oe = getRequestContent().getRootElement();
  +                if( oe == null || !oe.getName().equalsIgnoreCase(E_OPTIONS) ) {
  +                    Domain.warn( "Root element must be "+E_OPTIONS );
  +                    resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
  +                    throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
  +                }
  +                Iterator i = oe.getChildren().iterator();
  +                while( i.hasNext() ) {
  +                    Element e = (Element)i.next();
  +                    if( e.getName().equals(E_VERSION_HISTORY_COLLECTION_SET) )
  +                        versionHistoryCollectionSetRequested = true;
  +                    if( e.getName().equals(E_WORKSPACE_COLLECTION_SET) )
  +                        workspaceCollectionSetRequested = true;
  +                }
  +                if( versionHistoryCollectionSetRequested || workspaceCollectionSetRequested )
  +                    responseBodyNeeded = true;
  +            }
  +            catch( org.xml.sax.SAXException x ){
  +                resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
  +                throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
  +            }
  +            catch( IOException x ){
  +                resp.setStatus(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
  +                throw new WebdavException(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
  +            }
  +            catch( javax.xml.parsers.ParserConfigurationException x ){
  +                resp.setStatus(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
  +                throw new WebdavException(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
  +            }
  +        }
       }
       
       protected void executeRequest() throws WebdavException {
               
  -        StringBuffer davHeader = new StringBuffer( "1" );
  +        StringBuffer davHeader = new StringBuffer( F_WEBDAV );
           
           if( Configuration.useIntegratedLocking() )
  -            davHeader.append( ", 2" );
  +            davHeader.append( ", " ).append( F_LOCKING );
           
  -        davHeader.append( ", slide" );
  +        davHeader.append( ", " ).append( F_SLIDE );
           
           if( Configuration.useIntegratedSecurity() )
  -            davHeader.append( ", access-control" );
  +            davHeader.append( ", " ).append( F_ACCESS_CONTROL );
           
  -        if( Configuration.useVersionControl() )
  -            davHeader.append( ", version-control" );
  +        if( Configuration.useVersionControl() ) {
  +            davHeader.append( ", " ).append( F_VERSION_CONTROL );
  +            davHeader.append( ", " ).append( F_VERSION_HISTORY );
  +            davHeader.append( ", " ).append( F_CHECKOUT_IN_PLACE );
  +            davHeader.append( ", " ).append( F_WORKSPACE );
  +        }
           
           resp.addHeader( "DAV", davHeader.toString() );
           
  @@ -180,6 +241,39 @@
                                       languages [i].getName () + ">");
           
           resp.addHeader("MS-Author-Via", "DAV");
  +        
  +        // build response body if needed
  +        if( responseBodyNeeded ) {
  +            resp.setContentType( TEXT_XML_UTF_8 );
  +            UriHandler hpath = HistoryPathHandler.getHistoryPathHandler( token );
  +            UriHandler wspath = WorkspacePathHandler.getWorkspacePathHandler( token );
  +            Element ore =
  +                new Element( E_OPTIONS_RESPONSE, xmlNs );
  +            if( versionHistoryCollectionSetRequested ) {
  +                Element vhcse =
  +                    new Element( E_VERSION_HISTORY_COLLECTION_SET, xmlNs );
  +                Element hre =
  +                    new Element( E_HREF,xmlNs );
  +                hre.addContent( getFullPath(hpath.toString()) );
  +                vhcse.addContent( hre );
  +                ore.addContent( vhcse );
  +            }
  +            if( workspaceCollectionSetRequested ) {
  +                Element wscse =
  +                    new Element( E_WORKSPACE_COLLECTION_SET, xmlNs );
  +                Element hre =
  +                    new Element( E_HREF, xmlNs );
  +                hre.addContent( getFullPath(wspath.toString()) );
  +                wscse.addContent( hre );
  +                ore.addContent( wscse );
  +            }
  +            try {
  +                xmlOut.output(ore, resp.getWriter());
  +            }
  +            catch( IOException x ) {
  +                resp.setStatus( WebdavStatus.SC_INTERNAL_SERVER_ERROR );
  +            }
  +        }
       }
       
   }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>