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>