Package org.apache.slide.webdav

Source Code of org.apache.slide.webdav.WebdavServlet

/*
* $Header: /home/cvspublic/jakarta-slide/src/webdav/server/org/apache/slide/webdav/WebdavServlet.java,v 1.13 2001/05/08 22:23:25 remm Exp $
* $Revision: 1.13 $
* $Date: 2001/05/08 22:23:25 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation.  All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in
*    the documentation and/or other materials provided with the
*    distribution.
*
* 3. The end-user documentation included with the redistribution, if
*    any, must include the following acknowlegement:
*       "This product includes software developed by the
*        Apache Software Foundation (http://www.apache.org/)."
*    Alternately, this acknowlegement may appear in the software itself,
*    if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
*    Foundation" must not be used to endorse or promote products derived
*    from this software without prior written permission. For written
*    permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
*    nor may "Apache" appear in their names without prior written
*    permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation.  For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/

package org.apache.slide.webdav;

import java.io.*;
import java.util.*;
import java.security.Principal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.util.WebdavStatus;
import org.apache.slide.webdav.method.*;
import org.apache.slide.common.NamespaceAccessToken;
import org.apache.slide.common.Domain;
import org.apache.slide.structure.*;
import org.apache.slide.util.conf.*;
import org.apache.slide.authenticate.SecurityToken;

import org.apache.slide.webdav.logger.XHttpServletRequestFacade;
import org.apache.slide.webdav.logger.XHttpServletResponseFacade;
import org.apache.slide.webdav.logger.XMLTestCaseGenerator;
import org.apache.slide.util.logger.Logger;


/**
* WebDAV Servlet.
*
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
*/
public class WebdavServlet extends HttpServlet {
   
   
    // -------------------------------------------------------------- Constants
   
   
   
    /**
     * HTTP Date format pattern (RFC 2068, 822, 1123).
     */
    public static final String DATE_FORMAT = "EEE, d MMM yyyy kk:mm:ss z";
   
   
    /**
     * Date formatter.
     */
    private static final DateFormat formatter =
        new SimpleDateFormat(DATE_FORMAT);
   
   
    // ----------------------------------------------------- Instance Variables
   
   
    /**
     * Access token to the namespace.
     */
    NamespaceAccessToken token;
   
   
    // -------------------------------------------------------- Private Methods
   
   
   
   
   
   
    /**
     * Create Slide Method form the HTTP Method.
     *
     * @return WebdavMethod
     * @exception WebdavException
     */
    private WebdavMethod createWebdavMethod
        (HttpServletRequest req, HttpServletResponse resp)
        throws WebdavException {
       
        String methodName = req.getMethod();
       
        WebdavMethod resultMethod = null;
       
        if (methodName.equalsIgnoreCase("GET")) {
            resultMethod = new GetMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("PROPFIND")) {
            resultMethod = new PropFindMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("HEAD")) {
            resultMethod = new HeadMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("LOCK")) {
            resultMethod = new LockMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("UNLOCK")) {
            resultMethod = new UnlockMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("OPTIONS")) {
            resultMethod = new OptionsMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("PUT")) {
            resultMethod = new PutMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("MKCOL")) {
            resultMethod = new MkcolMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("POST")) {
            resultMethod = new PostMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("COPY")) {
            resultMethod = new CopyMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("MOVE")) {
            resultMethod = new MoveMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("DELETE")) {
            resultMethod = new DeleteMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("PROPPATCH")) {
            resultMethod = new PropPatchMethod(this, token, req, resp);
        } else if (methodName.equalsIgnoreCase("ACL")) {
            resultMethod = new AclMethod(this, token, req, resp);
        }
       
        if (resultMethod == null) {
            throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
        }
       
        return resultMethod;
       
    }
   
   
    // -------------------------------------------------------- Servlet Methods
   
   
    protected void service (HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
       
        long startTime = System.currentTimeMillis();
       
       
       
        //  if logging for the request/response is required initialise the facades
        if (Domain.isEnabled("org.apache.slide.webdav.WebdavServlet.requestResponseLogger", Logger.DEBUG)) {
            if ( req != null req  = new XHttpServletRequestFacade(req);
            if ( resp != null ) resp = new XHttpServletResponseFacade(resp);
        }
       
        resp.setStatus(WebdavStatus.SC_OK);
       
        WebdavMethod method = null;
       
        try {
            //System.out.println(System.currentTimeMillis"Parsing request");
            method = createWebdavMethod(req, resp);
            method.run();
        } catch (WebdavException e) {
            // There has been an error somewhere ...
            // TODO : Show error page.
            System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (Throwable e) {
            // If something goes really wrong ...
            e.printStackTrace();
        }
       
       
        //  if logging for the request/response is required perform the logging
        if (Domain.isEnabled
                ("org.apache.slide.webdav.WebdavServlet.requestResponseLogger",
                 Logger.DEBUG)) {
            XMLTestCaseGenerator xmlGen = new XMLTestCaseGenerator
                ((XHttpServletRequestFacade)req,
                     (XHttpServletResponseFacade)resp);
            xmlGen.setThreadName(Thread.currentThread().getName());
            Domain.log
                (xmlGen.toString(),
                 "org.apache.slide.webdav.WebdavServlet.requestResponseLogger",
                 Logger.DEBUG);
        }
       
        Domain.info
            (req.getMethod()
                 + ( (resp instanceof XHttpServletResponseFacade)
                        ? (" = " + ((XHttpServletResponseFacade)resp).getStatus()
                               + " " + (WebdavStatus.getStatusText
                                            (((XHttpServletResponseFacade)resp).getStatus())))
                        : ("") )
                 + " (time: " + (System.currentTimeMillis() - startTime) + " ms)"
                 + " URI = " + WebdavMethod.getRelativePath(req));
       
    }
   
   
    /**
     * Manages some initialization stuff on the server.
     */
    public void init()
        throws ServletException {
       
        String namespaceName = "webdav";
        String domainConfigFile = "/Domain.xml";
        String managerServletPath = "/manager/";
        int depthLimit = 3;
       
        String value = null;
        try {
            value = getServletConfig().getInitParameter("namespace");
            if (value != null)
                namespaceName = value;
        } catch (Throwable t) {
            ;
        }
        try {
            value = getServletConfig().getInitParameter("domain");
            if (value != null)
                domainConfigFile = value;
        } catch (Throwable t) {
            ;
        }
        try {
            value = getServletConfig().getInitParameter("manager");
            if (value != null)
                managerServletPath = value;
        } catch (Throwable t) {
            ;
        }
        try {
            value = getServletConfig().getInitParameter("depth-limit");
            if (value != null) {
                depthLimit = Integer.parseInt(value);
            }
        } catch (Throwable t) {
            ;
        }
       
        WebdavMethod.init(managerServletPath, depthLimit);
       
        try {
           
            Domain.init(getServletContext().getResource(domainConfigFile));
           
        } catch (Throwable t) {
            t.printStackTrace();
            throw new ServletException(t.getMessage());
        }
       
       
       
        token = Domain.accessNamespace(new SecurityToken(this), namespaceName);
       
    }
   
   
    /**
     * Destroy servlet.
     */
    public void destroy() {
        Domain.closeNamespace(token);
    }
   
}


TOP

Related Classes of org.apache.slide.webdav.WebdavServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.