You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@locus.apache.org on 2000/08/02 19:18:21 UTC

cvs commit: jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets WebdavServlet.java

remm        00/08/02 10:18:21

  Modified:    proposals/catalina/src/share/org/apache/tomcat/servlets
                        WebdavServlet.java
  Log:
  - Delete method support (without error reporting)
  
  Revision  Changes    Path
  1.3       +73 -5     jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/WebdavServlet.java
  
  Index: WebdavServlet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/WebdavServlet.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WebdavServlet.java	2000/08/01 07:19:39	1.2
  +++ WebdavServlet.java	2000/08/02 17:18:19	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/WebdavServlet.java,v 1.2 2000/08/01 07:19:39 remm Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/08/01 07:19:39 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/WebdavServlet.java,v 1.3 2000/08/02 17:18:19 remm Exp $
  + * $Revision: 1.3 $
  + * $Date: 2000/08/02 17:18:19 $
    *
    * ====================================================================
    *
  @@ -118,7 +118,7 @@
    * are handled by the DefaultServlet.
    *
    * @author Remy Maucherat
  - * @version $Revision: 1.2 $ $Date: 2000/08/01 07:19:39 $
  + * @version $Revision: 1.3 $ $Date: 2000/08/02 17:18:19 $
    */
   
   public class WebdavServlet
  @@ -553,7 +553,50 @@
               return;
           }
           
  +	String servletPath = req.getServletPath();
  +	if (servletPath == null)
  +	    servletPath = "/";
  +        
  +        // Retrieve the Catalina context
  +        ApplicationContext context = (ApplicationContext) getServletContext();
  +
  +	// Convert the resource path to a URL
  +	URL resourceURL = null;
  +	try {
  +	    resourceURL = context.getResource(servletPath);
  +	} catch (MalformedURLException e) {
  +	    ;
  +	}
  +	if (resourceURL == null) {
  +	    resp.sendError(WebdavStatus.SC_NOT_FOUND);
  +	    return;
  +	}
  +
  +        Resources resources = context.getResources();
  +        
  +        boolean collection = resources.isCollection(servletPath);
  +        
  +        if (!collection) {
  +            if (!resources.deleteResource(servletPath)) {
  +                resp.sendError(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
  +                return;
  +            }
  +        } else {
  +            
  +            Hashtable errorList = new Hashtable();
  +            
  +            deleteCollection(resources, servletPath, errorList);
  +            resources.deleteResource(servletPath);
  +            
  +            if (!errorList.isEmpty()) {
  +                
  +                // TODO : Display a status report if there was an error
  +                
  +            }
  +            
  +        }
           
  +        resp.setStatus(WebdavStatus.SC_NO_CONTENT);
           
       }
   
  @@ -607,7 +650,7 @@
           }
           
           
  -
  +        
       }
   
   
  @@ -897,6 +940,31 @@
           }
           
           generatedXML.writeElement("d", "response", XMLWriter.CLOSING);
  +        
  +    }
  +
  +
  +    /**
  +     * Deletes a collection.
  +     * 
  +     * @param resources Resources implementation associated with the context
  +     * @param path Path to the collection to be deleted
  +     * @param errorList Contains the list of the errors which occured
  +     */
  +    private void deleteCollection(Resources resources, String path, 
  +                                  Hashtable errorList) {
  +        
  +        String[] members = resources.getCollectionMembers(path);
  +        
  +        for (int i=0; i<members.length; i++) {
  +            
  +            // TODO : Check locking
  +            if (resources.isCollection(members[i])) {
  +                deleteCollection(resources, members[i], errorList);
  +            }
  +            boolean result = resources.deleteResource(members[i]);
  +            
  +        }
           
       }