Author: vgritsenko
Date: Wed Jun 27 21:26:07 2007
New Revision: 551440

URL: http://svn.apache.org/viewvc?view=rev&rev=551440
Log:
modify dav request to support default servlet
(servlet mapped to '/', with null pathInfo)

Modified:
    
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/DAVRequest.java
    
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Propfind.java

Modified: 
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/DAVRequest.java
URL: 
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/DAVRequest.java?view=diff&rev=551440&r1=551439&r2=551440
==============================================================================
--- 
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/DAVRequest.java 
(original)
+++ 
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/DAVRequest.java 
Wed Jun 27 21:26:07 2007
@@ -17,22 +17,24 @@
 
 package org.apache.xindice.webadmin.webdav;
 
-import org.w3c.dom.Document;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+
+import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.ServletInputStream;
+
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 
 /**
- * This is a wrapper class that provides additional DAV-specific functionality
- * 
+ * This is a wrapper class that provides additional DAV-specific functionality.
+ *
  * @version $Revision$, $Date$
  */
 public class DAVRequest {
@@ -40,13 +42,13 @@
     public static final int DEPTH_1 = 1;
     public static final int DEPTH_INFINITY = -1;
 
-    protected Document requestDoc;
-    private boolean documentInit = false;
-    protected String location;
-    private HttpServletRequest httpRequest;
-
     private static final Log log = LogFactory.getLog(DAVRequest.class);
 
+    private HttpServletRequest httpRequest;
+    private String contextPath;
+    private Document requestDoc;
+    private boolean documentInit;
+
     /**
      * Creates new instance of DAVRequest based on incoming HTTP request.
      *
@@ -54,7 +56,24 @@
      */
     public DAVRequest(HttpServletRequest request) {
         httpRequest = request;
-        location = getLocationPath();
+        contextPath = makeContextPath();
+    }
+
+    /**
+     * @return the path to calling servlet (not null and no ending '/')
+     */
+    private String makeContextPath() {
+        StringBuffer path = new StringBuffer();
+        path.append(httpRequest.getContextPath());
+        // Is it default servlet? If not, servletPath is added to contextPath 
path.
+        if (httpRequest.getPathInfo() != null) {
+            path.append(httpRequest.getServletPath());
+        }
+        if (path.length() > 0 && path.charAt(path.length() - 1) == '/') {
+            path.deleteCharAt(path.length() - 1);
+        }
+
+        return path.toString();
     }
 
     /**
@@ -74,11 +93,23 @@
     }
 
     /**
-     * Wrapper method, gets servlet path info.
+     * Wrapper method, gets resource path.
+     *
+     * If servlet is mapped as default servlet (with url pattern '/'),
+     * resource path is obtained from [EMAIL PROTECTED] 
HttpServletRequest#getServletPath},
+     * and [EMAIL PROTECTED] HttpServletRequest#getPathInfo} is always null.
+     *
+     * If servlet is mapped to a path pattern (url pattern like '/foo/*'),
+     * resource path is retrieved from [EMAIL PROTECTED] 
HttpServletRequest#getPathInfo}.
+     *
      * @return Called servlet path.
      */
     public String getPath() {
-        return httpRequest.getPathInfo();
+        String path = httpRequest.getPathInfo();
+        if (path == null) {
+            path = httpRequest.getServletPath();
+        }
+        return path;
     }
 
     /**
@@ -134,7 +165,6 @@
      * @return Local part of the destination path
      */
     public String getDestinationPath() {
-
         String destinationPath = httpRequest.getHeader("Destination");
         if (destinationPath == null) {
             return null;
@@ -200,7 +230,7 @@
      * @return Called servlet context path.
      */
     public String getContextPath() {
-        return location;
+        return contextPath;
     }
 
     private Document parseRequestContent() throws IOException {
@@ -220,20 +250,6 @@
         }
 
         return null;
-    }
-
-    /**
-     * @return the path to calling servlet (not null and no ending '/')
-     */
-    private String getLocationPath() {
-        StringBuffer path = new StringBuffer();
-        path.append(httpRequest.getContextPath());
-        path.append(httpRequest.getServletPath());
-        if (path.length() > 0 && path.charAt(path.length() - 1) == '/') {
-            path.deleteCharAt(path.length() - 1);
-        }
-
-        return path.toString();
     }
 
     /**

Modified: 
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Propfind.java
URL: 
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Propfind.java?view=diff&rev=551440&r1=551439&r2=551440
==============================================================================
--- 
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Propfind.java
 (original)
+++ 
xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Propfind.java
 Wed Jun 27 21:26:07 2007
@@ -341,20 +341,18 @@
             ArrayList props = (ArrayList) statusList.get(status);
 
             if (props != null && props.size() > 0) {
-                PartialResponse.Content propstat = new 
PartialResponse.Content("propstat");
-
                 PartialResponse.Content prop = new 
PartialResponse.Content("prop");
-
                 for (Iterator j = props.iterator(); j.hasNext(); ) {
-                    PartialResponse.Content node = (PartialResponse.Content) 
j.next();
-                    prop.addChild(node);
+                    prop.addChild((PartialResponse.Content) j.next());
                 }
 
+                PartialResponse.Content stat = new 
PartialResponse.Content("status");
+                stat.setValue(res.getProtocol() + " " + status + " " + 
WebdavStatus.getStatusText(status.intValue()));
+
+                PartialResponse.Content propstat = new 
PartialResponse.Content("propstat");
                 propstat.addChild(prop);
+                propstat.addChild(stat);
 
-                PartialResponse.Content st = new 
PartialResponse.Content("status");
-                st.setValue(res.getProtocol() + " " + status + " " + 
WebdavStatus.getStatusText(status.intValue()));
-                propstat.addChild(st);
                 response.addContent(propstat);
             }
         }


Reply via email to