svn commit: r551440 - in /xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav: DAVRequest.java components/Propfind.java

[email protected]
Newsgroups gmane.text.xml.xindice.devel
Message-ID <[email protected]>
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 {@link HttpServletRequest#getServletPath},
+     * and {@link HttpServletRequest#getPathInfo} is always null.
+     *
+     * If servlet is mapped to a path pattern (url pattern like '/foo/*'),
+     * resource path is retrieved from {@link 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);
             }
         }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.