Example usage for java.util Vector elements

List of usage examples for java.util Vector elements

Introduction

In this page you can find the example usage for java.util Vector elements.

Prototype

public Enumeration<E> elements() 

Source Link

Document

Returns an enumeration of the components of this vector.

Usage

From source file:org.apache.webdav.lib.WebdavResource.java

/**
 * Execute OPTIONS method for the given http URL.
 *
 * @param httpURL the http URL./*from  ww w  .j av  a  2s  .c  o m*/
 * @return the allowed methods and capabilities.
 * @exception HttpException
 * @exception IOException
 */
public Enumeration optionsMethod(HttpURL httpURL) throws HttpException, IOException {

    HttpClient client = getSessionInstance(httpURL, true);

    OptionsMethod method = new OptionsMethod(httpURL.getEscapedPath());
    method.setDebug(debug);
    method.setFollowRedirects(this.followRedirects);

    generateTransactionHeader(method);
    generateAdditionalHeaders(method);
    client.executeMethod(method);

    Vector options = new Vector();
    int statusCode = method.getStatusLine().getStatusCode();
    if (statusCode >= 200 && statusCode < 300) {
        // check if the specific method is possbile
        Enumeration allowedMethods = method.getAllowedMethods();
        while (allowedMethods.hasMoreElements()) {
            options.addElement(allowedMethods.nextElement());
        }
        // check WebDAV capabilities.
        Enumeration davCapabilities = method.getDavCapabilities();
        while (davCapabilities.hasMoreElements()) {
            options.addElement(davCapabilities.nextElement());
        }
        Enumeration responses = method.getResponses();
        if (responses.hasMoreElements()) {
            ResponseEntity response = (ResponseEntity) responses.nextElement();
            Enumeration workspaces = response.getWorkspaces();
            String sResult = "";
            while (workspaces.hasMoreElements()) {
                sResult += workspaces.nextElement().toString();
            }
            Enumeration histories = response.getHistories();
            while (histories.hasMoreElements()) {
                sResult += histories.nextElement().toString();
            }
            // Set status code for this resource.
            if ((thisResource == true) && (response.getStatusCode() > 0))
                setStatusCode(response.getStatusCode());
            thisResource = false;
            options.addElement(sResult);
        }
    }

    return options.elements();
}

From source file:org.sakaiproject.dav.DavServlet.java

/**
 * LOCK Method.//ww  w . j av a  2s.c  om
 */
protected void doLock(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    if (readOnly) {
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    }

    if (isLocked(req)) {
        resp.sendError(SakaidavStatus.SC_LOCKED);
        return;
    }

    LockInfo lock = new LockInfo();

    // Parsing lock request

    // Parsing depth header

    String depthStr = req.getHeader("Depth");

    if (depthStr == null) {
        lock.depth = INFINITY;
    } else {
        if (depthStr.equals("0")) {
            lock.depth = 0;
        } else {
            lock.depth = INFINITY;
        }
    }

    // Parsing timeout header

    int lockDuration = DEFAULT_TIMEOUT;
    String lockDurationStr = req.getHeader("Timeout");
    if (lockDurationStr == null) {
        lockDuration = DEFAULT_TIMEOUT;
    } else {
        if (lockDurationStr.startsWith("Second-")) {
            lockDuration = (new Integer(lockDurationStr.substring(7))).intValue();
        } else {
            if (lockDurationStr.equalsIgnoreCase("infinity")) {
                lockDuration = MAX_TIMEOUT;
            } else {
                try {
                    lockDuration = (new Integer(lockDurationStr)).intValue();
                } catch (NumberFormatException e) {
                    lockDuration = MAX_TIMEOUT;
                }
            }
        }
        if (lockDuration == 0) {
            lockDuration = DEFAULT_TIMEOUT;
        }
        if (lockDuration > MAX_TIMEOUT) {
            lockDuration = MAX_TIMEOUT;
        }
    }
    lock.expiresAt = System.currentTimeMillis() + (lockDuration * 1000);

    int lockRequestType = LOCK_CREATION;

    Node lockInfoNode = null;

    DocumentBuilder documentBuilder = getDocumentBuilder();

    try {
        Document document = documentBuilder.parse(new InputSource(req.getInputStream()));

        // Get the root element of the document
        Element rootElement = document.getDocumentElement();
        lockInfoNode = rootElement;
    } catch (Exception e) {
        lockRequestType = LOCK_REFRESH;
    }

    if (lockInfoNode != null) {

        // Reading lock information

        NodeList childList = lockInfoNode.getChildNodes();
        StringWriter strWriter = null;
        DOMWriter domWriter = null;

        Node lockScopeNode = null;
        Node lockTypeNode = null;
        Node lockOwnerNode = null;

        for (int i = 0; i < childList.getLength(); i++) {
            Node currentNode = childList.item(i);
            switch (currentNode.getNodeType()) {
            case Node.TEXT_NODE:
                break;
            case Node.ELEMENT_NODE:
                String nodeName = currentNode.getNodeName();
                if (nodeName.endsWith("lockscope")) {
                    lockScopeNode = currentNode;
                }
                if (nodeName.endsWith("locktype")) {
                    lockTypeNode = currentNode;
                }
                if (nodeName.endsWith("owner")) {
                    lockOwnerNode = currentNode;
                }
                break;
            }
        }

        if (lockScopeNode != null) {

            childList = lockScopeNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    break;
                case Node.ELEMENT_NODE:
                    String tempScope = currentNode.getNodeName();
                    if (tempScope.indexOf(':') != -1) {
                        lock.scope = tempScope.substring(tempScope.indexOf(':') + 1);
                    } else {
                        lock.scope = tempScope;
                    }
                    break;
                }
            }

            if (lock.scope == null) {
                // Bad request
                resp.setStatus(SakaidavStatus.SC_BAD_REQUEST);
            }

        } else {
            // Bad request
            resp.setStatus(SakaidavStatus.SC_BAD_REQUEST);
        }

        if (lockTypeNode != null) {

            childList = lockTypeNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    break;
                case Node.ELEMENT_NODE:
                    String tempType = currentNode.getNodeName();
                    if (tempType.indexOf(':') != -1) {
                        lock.type = tempType.substring(tempType.indexOf(':') + 1);
                    } else {
                        lock.type = tempType;
                    }
                    break;
                }
            }

            if (lock.type == null) {
                // Bad request
                resp.setStatus(SakaidavStatus.SC_BAD_REQUEST);
            }

        } else {
            // Bad request
            resp.setStatus(SakaidavStatus.SC_BAD_REQUEST);
        }

        if (lockOwnerNode != null) {

            childList = lockOwnerNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    lock.owner += currentNode.getNodeValue();
                    break;
                case Node.ELEMENT_NODE:
                    strWriter = new StringWriter();
                    domWriter = new DOMWriter(strWriter, true);
                    domWriter.print(currentNode);
                    lock.owner += strWriter.toString();
                    break;
                }
            }

            if (lock.owner == null) {
                // Bad request
                resp.setStatus(SakaidavStatus.SC_BAD_REQUEST);
            }

            // contribute feeds us an owner that looks
            // like <A:href>...</A:href>. Since we'll put it
            // back with a different namespace prefix, we
            // don't want to save it that way.

            lock.owner = lock.owner.replaceAll("<(/?)[^>]+:([hH][rR][eE][fF])>", "<$1$2>");
            // System.out.println("lock.owner: " + lock.owner);

        } else {
            lock.owner = new String();
        }

    }

    String path = getRelativePath(req);
    String lockToken = null;

    lock.path = path;

    // Retrieve the resources
    // DirContext resources = getResources();
    DirContextSAKAI resources = getResourcesSAKAI();

    if (resources == null) {
        resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return;
    }

    boolean exists = true;
    Object object = null;
    try {
        object = resources.lookup(path);
    } catch (NamingException e) {
        exists = false;
    }

    // We don't want to allow just anyone to lock a resource.
    // It seems reasonable to allow it only for someone who
    // is allowed to modify it.
    if (prohibited(path) || !(exists ? contentHostingService.allowUpdateResource(adjustId(path))
            : contentHostingService.allowAddResource(adjustId(path)))) {
        resp.sendError(SakaidavStatus.SC_FORBIDDEN, path);
        return;
    }

    Enumeration<LockInfo> locksList = null;

    if (lockRequestType == LOCK_CREATION) {

        // Generating lock id
        String lockTokenStr = req.getServletPath() + "-" + lock.type + "-" + lock.scope + "-"
                + req.getUserPrincipal() + "-" + lock.depth + "-" + lock.owner + "-" + lock.tokens + "-"
                + lock.expiresAt + "-" + System.currentTimeMillis() + "-" + secret;
        lockToken = MD5Encoder.encode(md5Helper.digest(lockTokenStr.getBytes()));

        if ((exists) && (object instanceof DirContext) && (lock.depth == INFINITY)) {

            // Locking a collection (and all its member resources)

            // Checking if a child resource of this collection is
            // already locked
            Vector<String> lockPaths = new Vector<String>();
            locksList = collectionLocks.elements();
            while (locksList.hasMoreElements()) {
                LockInfo currentLock = (LockInfo) locksList.nextElement();
                if (currentLock.hasExpired()) {
                    resourceLocks.remove(currentLock.path);
                    continue;
                }
                if ((currentLock.path.startsWith(lock.path))
                        && ((currentLock.isExclusive()) || (lock.isExclusive()))) {
                    // A child collection of this collection is locked
                    lockPaths.addElement(currentLock.path);
                }
            }
            locksList = resourceLocks.elements();
            while (locksList.hasMoreElements()) {
                LockInfo currentLock = (LockInfo) locksList.nextElement();
                if (currentLock.hasExpired()) {
                    resourceLocks.remove(currentLock.path);
                    continue;
                }
                if ((currentLock.path.startsWith(lock.path))
                        && ((currentLock.isExclusive()) || (lock.isExclusive()))) {
                    // A child resource of this collection is locked
                    lockPaths.addElement(currentLock.path);
                }
            }

            if (!lockPaths.isEmpty()) {

                // One of the child paths was locked
                // We generate a multistatus error report

                Enumeration<String> lockPathsList = lockPaths.elements();

                resp.setStatus(SakaidavStatus.SC_CONFLICT);

                XMLWriter generatedXML = new XMLWriter();
                generatedXML.writeXMLHeader();

                generatedXML.writeElement("D", "multistatus" + generateNamespaceDeclarations(),
                        XMLWriter.OPENING);

                while (lockPathsList.hasMoreElements()) {
                    generatedXML.writeElement("D", "response", XMLWriter.OPENING);
                    generatedXML.writeElement("D", "href", XMLWriter.OPENING);
                    generatedXML.writeText((String) lockPathsList.nextElement());
                    generatedXML.writeElement("D", "href", XMLWriter.CLOSING);
                    generatedXML.writeElement("D", "status", XMLWriter.OPENING);
                    generatedXML.writeText("HTTP/1.1 " + SakaidavStatus.SC_LOCKED + " "
                            + SakaidavStatus.getStatusText(SakaidavStatus.SC_LOCKED));
                    generatedXML.writeElement("D", "status", XMLWriter.CLOSING);

                    generatedXML.writeElement("D", "response", XMLWriter.CLOSING);
                }

                generatedXML.writeElement("D", "multistatus", XMLWriter.CLOSING);

                Writer writer = resp.getWriter();
                writer.write(generatedXML.toString());
                writer.close();

                return;

            }

            boolean addLock = true;

            // Checking if there is already a shared lock on this path
            locksList = collectionLocks.elements();
            while (locksList.hasMoreElements()) {

                LockInfo currentLock = (LockInfo) locksList.nextElement();
                if (currentLock.path.equals(lock.path)) {

                    if (currentLock.isExclusive()) {
                        resp.sendError(SakaidavStatus.SC_LOCKED);
                        return;
                    } else {
                        if (lock.isExclusive()) {
                            resp.sendError(SakaidavStatus.SC_LOCKED);
                            return;
                        }
                    }

                    currentLock.tokens.addElement(lockToken);
                    lock = currentLock;
                    addLock = false;

                }

            }

            if (addLock) {
                lock.tokens.addElement(lockToken);
                collectionLocks.addElement(lock);
            }

        } else {

            // Locking a single resource

            // Retrieving an already existing lock on that resource
            LockInfo presentLock = (LockInfo) resourceLocks.get(lock.path);
            if (presentLock != null) {

                if ((presentLock.isExclusive()) || (lock.isExclusive())) {
                    // If either lock is exclusive, the lock can't be
                    // granted
                    resp.sendError(SakaidavStatus.SC_PRECONDITION_FAILED);
                    return;
                } else {
                    presentLock.tokens.addElement(lockToken);
                    lock = presentLock;
                }

            } else {

                lock.tokens.addElement(lockToken);
                resourceLocks.put(lock.path, lock);

                // Checking if a resource exists at this path
                exists = true;
                try {
                    object = resources.lookup(path);
                } catch (NamingException e) {
                    exists = false;
                }
                if (!exists) {

                    // "Creating" a lock-null resource
                    int slash = lock.path.lastIndexOf('/');
                    String parentPath = lock.path.substring(0, slash);

                    Vector<String> lockNulls = lockNullResources.get(parentPath);
                    if (lockNulls == null) {
                        lockNulls = new Vector<String>();
                        lockNullResources.put(parentPath, lockNulls);
                    }

                    lockNulls.addElement(lock.path);

                }

            }

        }

    }

    if (lockRequestType == LOCK_REFRESH) {

        String ifHeader = req.getHeader("If");
        if (ifHeader == null)
            ifHeader = "";

        // Checking resource locks

        LockInfo toRenew = (LockInfo) resourceLocks.get(path);
        Enumeration<String> tokenList = null;
        if ((lock != null) && (toRenew != null) && (toRenew.tokens != null)) {
            // At least one of the tokens of the locks must have been given

            tokenList = toRenew.tokens.elements();
            while (tokenList.hasMoreElements()) {
                String token = (String) tokenList.nextElement();
                if (ifHeader.indexOf(token) != -1) {
                    toRenew.expiresAt = lock.expiresAt;
                    lock = toRenew;
                }
            }
        }

        // Checking inheritable collection locks

        Enumeration<LockInfo> collectionLocksList = collectionLocks.elements();
        while (collectionLocksList.hasMoreElements()) {
            toRenew = collectionLocksList.nextElement();
            if (path.equals(toRenew.path)) {

                tokenList = toRenew.tokens.elements();
                while (tokenList.hasMoreElements()) {
                    String token = (String) tokenList.nextElement();
                    if (ifHeader.indexOf(token) != -1) {
                        toRenew.expiresAt = lock.expiresAt;
                        lock = toRenew;
                    }
                }

            }
        }

    }

    // Set the status, then generate the XML response containing
    // the lock information
    XMLWriter generatedXML = new XMLWriter();
    generatedXML.writeXMLHeader();
    generatedXML.writeElement("D", "prop" + generateNamespaceDeclarations(), XMLWriter.OPENING);

    generatedXML.writeElement("D", "lockdiscovery", XMLWriter.OPENING);

    lock.toXML(generatedXML, true);

    generatedXML.writeElement("D", "lockdiscovery", XMLWriter.CLOSING);

    generatedXML.writeElement("D", "prop", XMLWriter.CLOSING);

    /* the RFC requires this header in response to lock creation */

    if (lockRequestType == LOCK_CREATION)
        resp.addHeader("Lock-Token", "opaquelocktoken:" + lockToken);

    resp.setStatus(exists ? SakaidavStatus.SC_OK : SakaidavStatus.SC_CREATED);
    resp.setContentType("text/xml; charset=UTF-8");
    Writer writer = resp.getWriter();
    writer.write(generatedXML.toString());
    writer.close();

}

From source file:com.netscape.admin.certsrv.Console.java

public Console(String adminURL, String localAdminURL, String language, String host, String uid, String passwd) {
    Vector<String> recentURLs = new Vector<>();
    String lastUsedURL;/*from w  w  w.jav  a  2 s.  c  o m*/
    common_init(language);
    String userid = uid;
    String password = passwd;

    if (userid == null) {
        userid = _preferences.getString(PREFERENCE_UID);
    }

    lastUsedURL = _preferences.getString(PREFERENCE_URL);
    if (lastUsedURL != null) {
        recentURLs.addElement(lastUsedURL);
        if (adminURL == null) {
            adminURL = lastUsedURL;
        }
    }

    if (adminURL == null) {
        adminURL = localAdminURL;
    }

    for (int count = 1; count < MAX_RECENT_URLS; count++) {
        String temp;
        temp = _preferences.getString(PREFERENCE_URL + Integer.toString(count));
        if (temp != null && temp.length() > 0)
            recentURLs.addElement(temp);
    }

    _frame = new JFrame();
    // Set the icon image so that login dialog will inherit it
    _frame.setIconImage(new RemoteImage("com/netscape/management/client/images/logo16.gif").getImage());

    ModalDialogUtil.setWindowLocation(_frame);

    //enable server auth
    UtilConsoleGlobals.setServerAuthEnabled(true);

    _splashScreen = new com.netscape.management.client.console.SplashScreen(_frame);
    _splashScreen.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    if (_showSplashScreen)
        _splashScreen.showWindow();

    boolean fSecondTry = false;

    while (true) {
        LoginDialog dialog = null;

        _splashScreen.setStatusText(_resource.getString("splash", "PleaseLogin"));
        _splashScreen.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        if ((adminURL == null) || (userid == null) || (password == null) || (fSecondTry)) {
            dialog = new LoginDialog(_frame, userid, adminURL, recentURLs);
            Dimension paneSize = dialog.getSize();
            Dimension screenSize = dialog.getToolkit().getScreenSize();
            int centerX = (screenSize.width - paneSize.width) / 2;
            int centerY = (screenSize.height - paneSize.height) / 2;
            int x = _preferences.getInt(PREFERENCE_X, centerX);
            int y = _preferences.getInt(PREFERENCE_Y, centerY);
            UtilConsoleGlobals.setAdminURL(adminURL);
            UtilConsoleGlobals.setAdminHelpURL(adminURL);
            dialog.setInitialLocation(x, y);
            _splashScreen.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            dialog.showModal();
            if (dialog.isCancel())
                System.exit(0);
            _splashScreen.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            userid = dialog.getUsername();
            adminURL = dialog.getURL();
            if (!adminURL.startsWith("http://") && !adminURL.startsWith("https://"))
                adminURL = "http://" + adminURL;
            password = dialog.getPassword();
        }
        fSecondTry = true;
        UtilConsoleGlobals.setAdminURL(adminURL);
        UtilConsoleGlobals.setAdminHelpURL(adminURL);
        _consoleAdminURL = adminURL;

        _splashScreen.setStatusText(
                MessageFormat.format(_resource.getString("splash", "authenticate"), new Object[] { userid }));

        if (authenticate_user(adminURL, _info, userid, password)) {
            _splashScreen.setStatusText(_resource.getString("splash", "initializing"));

            /**
             * Initialize ldap. In the case config DS is down, the user can restart
             * the DS from the Console. The Console will need to re-authenticate
             * the user if that's the case.
             */
            int ldapInitResult = LDAPinitialization(_info);
            if (ldapInitResult == LDAP_INIT_FAILED) {
                Debug.println("Console: LDAPinitialization() failed.");
                System.exit(1);
            } else if (ldapInitResult == LDAP_INIT_DS_RESTART) {
                Debug.println("Console: LDAPinitialization() DS restarted.");

                // Need to re-authenticate the user
                _splashScreen.setStatusText(MessageFormat.format(_resource.getString("splash", "authenticate"),
                        new Object[] { userid }));
                if (authenticate_user(adminURL, _info, userid, password)) {
                    _splashScreen.setStatusText(_resource.getString("splash", "initializing"));
                    if (LDAPinitialization(_info) == LDAP_INIT_FAILED) {
                        Debug.println("Console: LDAPinitialization() failed.");
                        System.exit(1);
                    }
                } else {
                    continue; // Autentication faled, try again
                }
            } else if (ldapInitResult == LDAP_INIT_BIND_FAIL) {
                continue;
            }

            boolean rememberUserid = _preferences.getBoolean(PREFERENCE_REMEMBER_UID, true);
            if (rememberUserid) {
                _preferences.set(PREFERENCE_UID, userid);
                _preferences.set(PREFERENCE_URL, adminURL);

                String recentlyUsedURL;
                int count = 1;
                Enumeration<String> urlEnum = recentURLs.elements();
                while (urlEnum.hasMoreElements()) {
                    recentlyUsedURL = urlEnum.nextElement();
                    if (!recentlyUsedURL.equals(adminURL))
                        _preferences.set(PREFERENCE_URL + Integer.toString(count++), recentlyUsedURL);
                }

                for (; count < MAX_RECENT_URLS; count++) {
                    _preferences.remove(PREFERENCE_URL + Integer.toString(count));
                }

                if (dialog != null) {
                    Point p = dialog.getLocation();
                    _preferences.set(PREFERENCE_X, p.x);
                    _preferences.set(PREFERENCE_Y, p.y);
                    dialog.dispose();
                    dialog = null;
                }
                _preferences.save();
            }

            initialize(_info);
            if (host == null) {
                Framework framework = createTopologyFrame();
                UtilConsoleGlobals.setRootFrame(framework.getJFrame());
            } else {
                // popup the per server configuration UI
                // first get the java class name
                createPerInstanceUI(host);
            }

            _frame.dispose();
            _splashScreen.dispose();
            com.netscape.management.client.console.SplashScreen.removeInstance();
            _splashScreen = null;

            break;
        }
    }
}

From source file:org.apache.catalina.servlets.DefaultServlet.java

/**
 * Serve the specified resource, optionally including the data content.
 *
 * @param context  The servlet request we are processing
 * @param content  Should the content be included?
 * @param method  Description of the Parameter
 * @throws IOException      if an input/output error occurs
 * @throws ServletException if a servlet-specified error occurs
 *//* www . j  a v a  2s  .  c o m*/
protected void serveResource(ActionContext context, boolean content, String method)
        throws IOException, ServletException {

    //TODO: remove this hardcoding
    debug = 2;
    // Identify the requested resource path
    String path = getRelativePath(context.getRequest());

    if (path.indexOf("/.") > -1) {
        //MAC OSX Fix
        return;
    }

    if (debug > 0) {
        if (content) {
            log("DefaultServlet.serveResource:  Serving resource '" + path + "' headers and data");
        } else {
            log("DefaultServlet.serveResource:  Serving resource '" + path + "' headers only");
        }
    }

    // Retrieve the Catalina context and Resources implementation

    Connection db = null;
    ModuleContext resources = null;
    ResourceInfo resourceInfo = null;
    SystemStatus thisSystem = null;
    boolean status = true;
    try {
        //System.out.println("DefaultServlet-> Serving Resource " + (content ? "WITH CONTENT" : "WITHOUT CONTENT"));
        db = this.getConnection(context);
        resources = getCFSResources(db, context);
        if (resources == null) {
            context.getResponse().sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            return;
        }
        thisSystem = this.getSystemStatus(context);
        if (method.equals(METHOD_GET)) {
            Object current = resources.lookup(thisSystem, db, path);
        }
        resourceInfo = new ResourceInfo(thisSystem, path, resources);
    } catch (SQLException e) {
        e.printStackTrace(System.out);
        context.getResponse().sendError(CFS_SQLERROR, e.getMessage());
        status = false;
    } catch (Exception e) {
    } finally {
        this.freeConnection(db, context);
    }
    if (!status) {
        return;
    }

    if (!resourceInfo.exists) {
        context.getResponse().sendError(HttpServletResponse.SC_NOT_FOUND, context.getRequest().getRequestURI());
        return;
    }

    // If the resource is not a collection, and the resource path
    // ends with "/" or "\", return NOT FOUND
    if (!resourceInfo.collection) {
        if (path.endsWith("/") || (path.endsWith("\\"))) {
            context.getResponse().sendError(HttpServletResponse.SC_NOT_FOUND,
                    context.getRequest().getRequestURI());
            return;
        }
    }

    // Check if the conditions specified in the optional If headers are
    // satisfied.
    if (!resourceInfo.collection) {

        // Checking If headers
        boolean included = (context.getRequest().getAttribute(Globals.INCLUDE_CONTEXT_PATH_ATTR) != null);
        if (!included && !checkIfHeaders(context.getRequest(), context.getResponse(), resourceInfo)) {
            return;
        }
    }

    // Find content type
    String contentType = getServletContext().getMimeType(resourceInfo.clientFilename);

    Vector ranges = null;

    if (resourceInfo.collection) {

        // Skip directory listings if we have been configured to
        // suppress them
        if (!listings) {
            context.getResponse().sendError(HttpServletResponse.SC_NOT_FOUND,
                    context.getRequest().getRequestURI());
            return;
        }
        contentType = "text/html;charset=UTF-8";

    } else {
        // Parse range specifier
        ranges = parseRange(context.getRequest(), context.getResponse(), resourceInfo);
        // ETag header
        context.getResponse().setHeader("ETag", getETag(resourceInfo));
        // Last-Modified header
        if (debug > 0) {
            log("DefaultServlet.serveFile:  lastModified='" + (new Timestamp(resourceInfo.date)).toString()
                    + "'");
        }
        context.getResponse().setHeader("Last-Modified", resourceInfo.httpDate);
    }

    ServletOutputStream ostream = null;
    PrintWriter writer = null;

    if (content) {
        // Trying to retrieve the servlet output stream
        try {
            ostream = context.getResponse().getOutputStream();
        } catch (IllegalStateException e) {
            // If it fails, we try to get a Writer instead if we're
            // trying to serve a text file
            if ((contentType == null) || (contentType.startsWith("text"))) {
                writer = context.getResponse().getWriter();
            } else {
                throw e;
            }
        }
    }

    if ((resourceInfo.collection) || (((ranges == null) || (ranges.isEmpty()))
            && (context.getRequest().getHeader("Range") == null))) {

        // Set the appropriate output headers
        if (contentType != null) {
            if (debug > 0) {
                log("DefaultServlet.serveFile:  contentType='" + contentType + "'");
            }
            context.getResponse().setContentType(contentType);
        }
        long contentLength = resourceInfo.length;
        if ((!resourceInfo.collection) && (contentLength >= 0)) {
            if (debug > 0) {
                log("DefaultServlet.serveFile:  contentLength=" + contentLength);
            }
            context.getResponse().setContentLength((int) contentLength);
        }
        if (resourceInfo.collection) {
            if (content) {
                // Serve the directory browser
                resourceInfo.setStream(render(context.getRequest().getContextPath(), resourceInfo));
            }
        }
        // Copy the input stream to our output stream (if requested)
        if (content) {
            try {
                context.getResponse().setBufferSize(output);
            } catch (IllegalStateException e) {
                // Silent catch
            }
            if (ostream != null) {
                copy(resourceInfo, ostream);
            } else {
                copy(resourceInfo, writer);
            }
        }
    } else {
        if ((ranges == null) || (ranges.isEmpty())) {
            return;
        }
        // Partial content response.
        context.getResponse().setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
        if (ranges.size() == 1) {
            Range range = (Range) ranges.elementAt(0);
            context.getResponse().addHeader("Content-Range",
                    "bytes " + range.start + "-" + range.end + "/" + range.length);
            context.getResponse().setContentLength((int) (range.end - range.start + 1));

            if (contentType != null) {
                if (debug > 0) {
                    log("DefaultServlet.serveFile:  contentType='" + contentType + "'");
                }
                context.getResponse().setContentType(contentType);
            }

            if (content) {
                try {
                    context.getResponse().setBufferSize(output);
                } catch (IllegalStateException e) {
                    // Silent catch
                }
                if (ostream != null) {
                    copy(resourceInfo, ostream, range);
                } else {
                    copy(resourceInfo, writer, range);
                }
            }
        } else {

            context.getResponse().setContentType("multipart/byteranges; boundary=" + mimeSeparation);

            if (content) {
                try {
                    context.getResponse().setBufferSize(output);
                } catch (IllegalStateException e) {
                    // Silent catch
                }
                if (ostream != null) {
                    copy(resourceInfo, ostream, ranges.elements(), contentType);
                } else {
                    copy(resourceInfo, writer, ranges.elements(), contentType);
                }
            }
        }
    }
}

From source file:org.webdavaccess.servlet.WebdavServlet.java

/**
 * Propfind helper method./*from  w w  w .  j  a v  a2  s  .  c o  m*/
 * 
 * @param req
 *            The servlet request
 * @param generatedXML
 *            XML response to the Propfind request
 * @param path
 *            Path of the current resource
 * @param type
 *            Propfind type
 * @param propertiesVector
 *            If the propfind type is find properties by name, then this
 *            Vector contains those properties
 */
private void parseProperties(HttpServletRequest req, XMLWriter generatedXML, String path, int type,
        Vector propertiesVector) throws WebdavException {

    String creationdate = getISOCreationDate(fStore.getCreationDate(path).getTime());
    boolean isFolder = fStore.isFolder(path);
    SimpleDateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
    formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
    String lastModified = formatter.format(fStore.getLastModified(path));
    String resourceLength = String.valueOf(fStore.getResourceLength(path));

    // ResourceInfo resourceInfo = new ResourceInfo(path, resources);

    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
    String status = new String(
            "HTTP/1.1 " + WebdavStatus.SC_OK + " " + WebdavStatus.getStatusText(WebdavStatus.SC_OK));

    // Generating href element
    generatedXML.writeElement(null, "href", XMLWriter.OPENING);

    String href = req.getContextPath();
    if ((href.endsWith("/")) && (path.startsWith("/")))
        href += path.substring(1);
    else
        href += path;
    if ((isFolder) && (!href.endsWith("/")))
        href += "/";

    generatedXML.writeText(rewriteUrl(href));

    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);

    String resourceName = path;
    int lastSlash = path.lastIndexOf('/');
    if (lastSlash != -1)
        resourceName = resourceName.substring(lastSlash + 1);

    Properties customProperties;
    Enumeration en;
    switch (type) {

    case FIND_ALL_PROP:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        generatedXML.writeProperty(null, "creationdate", creationdate);
        generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
        generatedXML.writeData(resourceName);
        generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
        if (!isFolder) {
            generatedXML.writeProperty(null, "getlastmodified", lastModified);
            generatedXML.writeProperty(null, "getcontentlength", resourceLength);
            String contentType = getServletContext().getMimeType(path);
            if (contentType != null) {
                generatedXML.writeProperty(null, "getcontenttype", contentType);
            }
            generatedXML.writeProperty(null, "getetag", getETag(path, resourceLength, lastModified));
            generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        } else {
            generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
            generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
        }

        // Get custom properties
        customProperties = fStore.getCustomProperties(path);
        if (customProperties != null && customProperties.size() > 0) {
            en = customProperties.keys();
            while (en.hasMoreElements()) {
                String key = (String) en.nextElement();
                generatedXML.writeProperty(null, key, customProperties.getProperty(key));
            }
        }

        generatedXML.writeProperty(null, "source", "");
        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;

    case FIND_PROPERTY_NAMES:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        generatedXML.writeElement(null, "creationdate", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "displayname", XMLWriter.NO_CONTENT);
        if (!isFolder) {
            generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontentlength", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontenttype", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getetag", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getlastmodified", XMLWriter.NO_CONTENT);
        }
        generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "source", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "lockdiscovery", XMLWriter.NO_CONTENT);

        // Get custom properties
        customProperties = fStore.getCustomProperties(path);
        if (customProperties != null && customProperties.size() > 0) {
            customProperties = fStore.getCustomProperties(path);
            en = customProperties.keys();
            while (en.hasMoreElements()) {
                String key = (String) en.nextElement();
                generatedXML.writeElement(null, key, XMLWriter.NO_CONTENT);
            }
        }

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;

    case FIND_BY_PROPERTY:

        Vector propertiesNotFound = new Vector();

        // Parse the list of properties

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        Enumeration properties = propertiesVector.elements();

        customProperties = fStore.getCustomProperties(path);

        while (properties.hasMoreElements()) {

            String property = (String) properties.nextElement();

            if (property.equals("creationdate")) {
                generatedXML.writeProperty(null, "creationdate", creationdate);
            } else if (property.equals("displayname")) {
                generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
                generatedXML.writeData(resourceName);
                generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
            } else if (property.equals("getcontentlanguage")) {
                if (isFolder) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("getcontentlength")) {
                if (isFolder) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontentlength", resourceLength);
                }
            } else if (property.equals("getcontenttype")) {
                if (isFolder) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontenttype", getServletContext().getMimeType(path));
                }
            } else if (property.equals("getetag")) {
                if (isFolder) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getetag", getETag(path, resourceLength, lastModified));
                }
            } else if (property.equals("getlastmodified")) {
                if (isFolder) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getlastmodified", lastModified);
                }
            } else if (property.equals("resourcetype")) {
                if (isFolder) {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
                    generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
                } else {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("source")) {
                generatedXML.writeProperty(null, "source", "");
            } else if (customProperties != null && customProperties.containsKey(property)) {
                generatedXML.writeProperty(null, property, customProperties.getProperty(property));
            } else {
                propertiesNotFound.addElement(property);
            }

        }

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        Enumeration propertiesNotFoundList = propertiesNotFound.elements();

        if (propertiesNotFoundList.hasMoreElements()) {

            status = new String("HTTP/1.1 " + WebdavStatus.SC_NOT_FOUND + " "
                    + WebdavStatus.getStatusText(WebdavStatus.SC_NOT_FOUND));

            generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
            generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

            while (propertiesNotFoundList.hasMoreElements()) {
                generatedXML.writeElement(null, (String) propertiesNotFoundList.nextElement(),
                        XMLWriter.NO_CONTENT);
            }

            generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "status", XMLWriter.OPENING);
            generatedXML.writeText(status);
            generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        }

        break;

    }

    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);

}

From source file:com.concursive.connect.web.webdav.servlets.WebdavServlet.java

/**
 * Propfind helper method. Dispays the properties of a lock-null resource.
 *
 * @param generatedXML     XML response to the Propfind request
 * @param path             Path of the current resource
 * @param type             Propfind type
 * @param propertiesVector If the propfind type is find properties by name,
 *                         then this Vector contains those properties
 * @param req              Description of the Parameter
 *///from w  ww . j  a  v a  2s .  co m
private void parseLockNullProperties(HttpServletRequest req, XMLWriter generatedXML, String path, int type,
        Vector propertiesVector) {

    // Exclude any resource in the /WEB-INF and /META-INF subdirectories
    // (the "toUpperCase()" avoids problems on Windows systems)
    if (path.toUpperCase().startsWith("/WEB-INF") || path.toUpperCase().startsWith("/META-INF")) {
        return;
    }

    // Retrieving the lock associated with the lock-null resource
    WebdavServlet.LockInfo lock = (WebdavServlet.LockInfo) resourceLocks.get(path);

    if (lock == null) {
        return;
    }

    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
    String status = new String(
            "HTTP/1.1 " + WebdavStatus.SC_OK + " " + WebdavStatus.getStatusText(WebdavStatus.SC_OK));

    // Generating href element
    generatedXML.writeElement(null, "href", XMLWriter.OPENING);

    String absoluteUri = req.getRequestURI();
    String relativePath = getRelativePath(req);
    String toAppend = path.substring(relativePath.length());
    if (!toAppend.startsWith("/")) {
        toAppend = "/" + toAppend;
    }

    generatedXML.writeText(rewriteUrl(normalize(absoluteUri + toAppend)));

    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);

    String resourceName = path;
    //System.out.println("Resource Name: " + resourceName);
    int lastSlash = path.lastIndexOf('/');
    if (lastSlash != -1) {
        resourceName = resourceName.substring(lastSlash + 1);
    }

    switch (type) {

    case FIND_ALL_PROP:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        generatedXML.writeProperty(null, "creationdate", getISOCreationDate(lock.creationDate.getTime()));
        generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
        generatedXML.writeData(resourceName);
        generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
        generatedXML.writeProperty(null, "getlastmodified",
                FastHttpDateFormat.formatDate(lock.creationDate.getTime(), null));
        generatedXML.writeProperty(null, "getcontentlength", String.valueOf(0));
        generatedXML.writeProperty(null, "getcontenttype", "");
        generatedXML.writeProperty(null, "getetag", "");
        generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
        generatedXML.writeElement(null, "lock-null", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);

        generatedXML.writeProperty(null, "source", "");

        String supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
        generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
        generatedXML.writeText(supportedLocks);
        generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);

        generateLockDiscovery(path, generatedXML);

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;
    case FIND_PROPERTY_NAMES:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        generatedXML.writeElement(null, "creationdate", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "displayname", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getcontentlength", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getcontenttype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getetag", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getlastmodified", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "source", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "lockdiscovery", XMLWriter.NO_CONTENT);

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;
    case FIND_BY_PROPERTY:

        Vector propertiesNotFound = new Vector();

        // Parse the list of properties

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        Enumeration properties = propertiesVector.elements();

        while (properties.hasMoreElements()) {

            String property = (String) properties.nextElement();

            if (property.equals("creationdate")) {
                generatedXML.writeProperty(null, "creationdate",
                        getISOCreationDate(lock.creationDate.getTime()));
            } else if (property.equals("displayname")) {
                generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
                generatedXML.writeData(resourceName);
                generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
            } else if (property.equals("getcontentlanguage")) {
                generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
            } else if (property.equals("getcontentlength")) {
                generatedXML.writeProperty(null, "getcontentlength", (String.valueOf(0)));
            } else if (property.equals("getcontenttype")) {
                generatedXML.writeProperty(null, "getcontenttype", "");
            } else if (property.equals("getetag")) {
                generatedXML.writeProperty(null, "getetag", "");
            } else if (property.equals("getlastmodified")) {
                generatedXML.writeProperty(null, "getlastmodified",
                        FastHttpDateFormat.formatDate(lock.creationDate.getTime(), null));
            } else if (property.equals("resourcetype")) {
                generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
                generatedXML.writeElement(null, "lock-null", XMLWriter.NO_CONTENT);
                generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
            } else if (property.equals("source")) {
                generatedXML.writeProperty(null, "source", "");
            } else if (property.equals("supportedlock")) {
                supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                        + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                        + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
                generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
                generatedXML.writeText(supportedLocks);
                generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);
            } else if (property.equals("lockdiscovery")) {
                if (!generateLockDiscovery(path, generatedXML)) {
                    propertiesNotFound.addElement(property);
                }
            } else {
                propertiesNotFound.addElement(property);
            }

        }

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        Enumeration propertiesNotFoundList = propertiesNotFound.elements();

        if (propertiesNotFoundList.hasMoreElements()) {

            status = new String("HTTP/1.1 " + WebdavStatus.SC_NOT_FOUND + " "
                    + WebdavStatus.getStatusText(WebdavStatus.SC_NOT_FOUND));

            generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
            generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

            while (propertiesNotFoundList.hasMoreElements()) {
                generatedXML.writeElement(null, (String) propertiesNotFoundList.nextElement(),
                        XMLWriter.NO_CONTENT);
            }

            generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "status", XMLWriter.OPENING);
            generatedXML.writeText(status);
            generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        }

        break;
    }

    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);

}

From source file:com.zeroio.webdav.WebdavServlet.java

/**
 * Propfind helper method. Dispays the properties of a lock-null resource.
 *
 * @param generatedXML     XML response to the Propfind request
 * @param path             Path of the current resource
 * @param type             Propfind type
 * @param propertiesVector If the propfind type is find properties by name,
 *                         then this Vector contains those properties
 * @param req              Description of the Parameter
 *//*from  ww w  .  j a  v  a 2  s .com*/
private void parseLockNullProperties(HttpServletRequest req, XMLWriter generatedXML, String path, int type,
        Vector propertiesVector) {

    //System.out.println("PARSING LOCK NULL PROPERTIES....PATH: " + path);
    // Exclude any resource in the /WEB-INF and /META-INF subdirectories
    // (the "toUpperCase()" avoids problems on Windows systems)
    if (path.toUpperCase().startsWith("/WEB-INF") || path.toUpperCase().startsWith("/META-INF")) {
        return;
    }

    // Retrieving the lock associated with the lock-null resource
    LockInfo lock = (LockInfo) resourceLocks.get(path);

    if (lock == null) {
        return;
    }

    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
    String status = new String(
            "HTTP/1.1 " + WebdavStatus.SC_OK + " " + WebdavStatus.getStatusText(WebdavStatus.SC_OK));

    // Generating href element
    generatedXML.writeElement(null, "href", XMLWriter.OPENING);

    String absoluteUri = req.getRequestURI();
    String relativePath = getRelativePath(req);
    String toAppend = path.substring(relativePath.length());
    if (!toAppend.startsWith("/")) {
        toAppend = "/" + toAppend;
    }

    generatedXML.writeText(rewriteUrl(normalize(absoluteUri + toAppend)));

    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);

    String resourceName = path;
    //System.out.println("Resource Name: " + resourceName);
    int lastSlash = path.lastIndexOf('/');
    if (lastSlash != -1) {
        resourceName = resourceName.substring(lastSlash + 1);
    }

    switch (type) {

    case FIND_ALL_PROP:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        generatedXML.writeProperty(null, "creationdate", getISOCreationDate(lock.creationDate.getTime()));
        generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
        generatedXML.writeData(resourceName);
        generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
        generatedXML.writeProperty(null, "getlastmodified",
                FastHttpDateFormat.formatDate(lock.creationDate.getTime(), null));
        generatedXML.writeProperty(null, "getcontentlength", String.valueOf(0));
        generatedXML.writeProperty(null, "getcontenttype", "");
        generatedXML.writeProperty(null, "getetag", "");
        generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
        generatedXML.writeElement(null, "lock-null", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);

        generatedXML.writeProperty(null, "source", "");

        String supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
        generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
        generatedXML.writeText(supportedLocks);
        generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);

        generateLockDiscovery(path, generatedXML);

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;
    case FIND_PROPERTY_NAMES:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        generatedXML.writeElement(null, "creationdate", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "displayname", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getcontentlength", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getcontenttype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getetag", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "getlastmodified", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "source", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "lockdiscovery", XMLWriter.NO_CONTENT);

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;
    case FIND_BY_PROPERTY:

        Vector propertiesNotFound = new Vector();

        // Parse the list of properties

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

        Enumeration properties = propertiesVector.elements();

        while (properties.hasMoreElements()) {

            String property = (String) properties.nextElement();

            if (property.equals("creationdate")) {
                generatedXML.writeProperty(null, "creationdate",
                        getISOCreationDate(lock.creationDate.getTime()));
            } else if (property.equals("displayname")) {
                generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
                generatedXML.writeData(resourceName);
                generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
            } else if (property.equals("getcontentlanguage")) {
                generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
            } else if (property.equals("getcontentlength")) {
                generatedXML.writeProperty(null, "getcontentlength", (String.valueOf(0)));
            } else if (property.equals("getcontenttype")) {
                generatedXML.writeProperty(null, "getcontenttype", "");
            } else if (property.equals("getetag")) {
                generatedXML.writeProperty(null, "getetag", "");
            } else if (property.equals("getlastmodified")) {
                generatedXML.writeProperty(null, "getlastmodified",
                        FastHttpDateFormat.formatDate(lock.creationDate.getTime(), null));
            } else if (property.equals("resourcetype")) {
                generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
                generatedXML.writeElement(null, "lock-null", XMLWriter.NO_CONTENT);
                generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
            } else if (property.equals("source")) {
                generatedXML.writeProperty(null, "source", "");
            } else if (property.equals("supportedlock")) {
                supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                        + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                        + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
                generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
                generatedXML.writeText(supportedLocks);
                generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);
            } else if (property.equals("lockdiscovery")) {
                if (!generateLockDiscovery(path, generatedXML)) {
                    propertiesNotFound.addElement(property);
                }
            } else {
                propertiesNotFound.addElement(property);
            }

        }

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        Enumeration propertiesNotFoundList = propertiesNotFound.elements();

        if (propertiesNotFoundList.hasMoreElements()) {

            status = new String("HTTP/1.1 " + WebdavStatus.SC_NOT_FOUND + " "
                    + WebdavStatus.getStatusText(WebdavStatus.SC_NOT_FOUND));

            generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
            generatedXML.writeElement(null, "prop", XMLWriter.OPENING);

            while (propertiesNotFoundList.hasMoreElements()) {
                generatedXML.writeElement(null, (String) propertiesNotFoundList.nextElement(),
                        XMLWriter.NO_CONTENT);
            }

            generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "status", XMLWriter.OPENING);
            generatedXML.writeText(status);
            generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        }

        break;
    }

    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);

}

From source file:com.concursive.connect.web.webdav.servlets.WebdavServlet.java

/**
 * Propfind helper method./*from   w w  w .  j  av a 2 s.  c  o  m*/
 *
 * @param resources        Resources object associated with this context
 * @param generatedXML     XML response to the Propfind request
 * @param path             Path of the current resource
 * @param type             Propfind type
 * @param propertiesVector If the propfind type is find properties by name,
 *                         then this Vector contains those properties
 * @param context          Description of the Parameter
 * @throws java.io.IOException Description of the Exception
 */
private void parseProperties(ActionContext context, ModuleContext resources, XMLWriter generatedXML,
        String path, int type, Vector propertiesVector) throws IOException {

    // Exclude any resource in the /WEB-INF and /META-INF subdirectories
    // (the "toUpperCase()" avoids problems on Windows systems)
    if (path.toUpperCase().startsWith("/WEB-INF") || path.toUpperCase().startsWith("/META-INF")) {
        return;
    }

    Connection db = null;
    ResourceInfo resourceInfo = null;
    boolean actionStatus = true;
    try {
        db = this.getConnection(context);
        resourceInfo = new ResourceInfo(db, path, resources);
    } catch (SQLException e) {
        e.printStackTrace(System.out);
        context.getResponse().sendError(SQLERROR, e.getMessage());
        actionStatus = false;
    } catch (FileNotFoundException e) {
        e.printStackTrace(System.out);
        actionStatus = false;
    } finally {
        this.freeConnection(db, context);
    }

    if (!actionStatus) {
        return;
    }

    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
    String status = new String(
            "HTTP/1.1 " + WebdavStatus.SC_OK + " " + WebdavStatus.getStatusText(WebdavStatus.SC_OK));

    // Generating href element
    generatedXML.writeElement(null, "href", XMLWriter.OPENING);

    String href = context.getRequest().getContextPath();
    if ((href.endsWith("/")) && (path.startsWith("/"))) {
        href += path.substring(1);
    } else {
        href += path;
    }
    if ((resourceInfo.collection) && (!href.endsWith("/"))) {
        href += "/";
    }

    generatedXML.writeText(rewriteUrl(href));
    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);

    String resourceName = path;
    int lastSlash = path.lastIndexOf('/');
    if (lastSlash != -1) {
        resourceName = resourceName.substring(lastSlash + 1);
    }

    switch (type) {

    case FIND_ALL_PROP:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        generatedXML.writeProperty(null, "creationdate", getISOCreationDate(resourceInfo.creationDate));
        generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
        generatedXML.writeData(resourceName);
        generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
        if (!resourceInfo.collection) {
            generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
            generatedXML.writeProperty(null, "getcontentlength", String.valueOf(resourceInfo.length));
            String contentType = getServletContext().getMimeType(resourceInfo.path);
            if (contentType != null) {
                generatedXML.writeProperty(null, "getcontenttype", contentType);
            }
            generatedXML.writeProperty(null, "getetag", getETag(resourceInfo));
            generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        } else {
            generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
            generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
        }

        generatedXML.writeProperty(null, "source", "");

        String supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
        generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
        generatedXML.writeText(supportedLocks);
        generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);

        generateLockDiscovery(path, generatedXML);

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;
    case FIND_PROPERTY_NAMES:
        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        generatedXML.writeElement(null, "creationdate", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "displayname", XMLWriter.NO_CONTENT);
        if (!resourceInfo.collection) {
            generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontentlength", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontenttype", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getetag", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getlastmodified", XMLWriter.NO_CONTENT);
        }
        generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "source", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "lockdiscovery", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        break;
    case FIND_BY_PROPERTY:
        Vector propertiesNotFound = new Vector();
        // Parse the list of properties
        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        Enumeration properties = propertiesVector.elements();
        while (properties.hasMoreElements()) {
            String property = (String) properties.nextElement();
            if (property.equals("creationdate")) {
                generatedXML.writeProperty(null, "creationdate", getISOCreationDate(resourceInfo.creationDate));
            } else if (property.equals("displayname")) {
                generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
                generatedXML.writeData(resourceName);
                generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
            } else if (property.equals("getcontentlanguage")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("getcontentlength")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontentlength", (String.valueOf(resourceInfo.length)));
                }
            } else if (property.equals("getcontenttype")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontenttype",
                            getServletContext().getMimeType(resourceInfo.path));
                }
            } else if (property.equals("getetag")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getetag", getETag(resourceInfo));
                }
            } else if (property.equals("getlastmodified")) {
                if (resourceInfo.collection) {
                    //propertiesNotFound.addElement(property);
                    // change
                    generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
                } else {
                    generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
                }
            } else if (property.equals("resourcetype")) {
                if (resourceInfo.collection) {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
                    generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
                } else {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("source")) {
                generatedXML.writeProperty(null, "source", "");
            } else if (property.equals("supportedlock")) {
                supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                        + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                        + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
                generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
                generatedXML.writeText(supportedLocks);
                generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);
            } else if (property.equals("lockdiscovery")) {
                if (!generateLockDiscovery(path, generatedXML)) {
                    propertiesNotFound.addElement(property);
                }
            } else {
                propertiesNotFound.addElement(property);
            }
        }
        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        Enumeration propertiesNotFoundList = propertiesNotFound.elements();
        if (propertiesNotFoundList.hasMoreElements()) {
            status = new String("HTTP/1.1 " + WebdavStatus.SC_NOT_FOUND + " "
                    + WebdavStatus.getStatusText(WebdavStatus.SC_NOT_FOUND));
            generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
            generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
            while (propertiesNotFoundList.hasMoreElements()) {
                generatedXML.writeElement(null, (String) propertiesNotFoundList.nextElement(),
                        XMLWriter.NO_CONTENT);
            }
            generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "status", XMLWriter.OPENING);
            generatedXML.writeText(status);
            generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        }
        break;
    }
    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);
}

From source file:com.zeroio.webdav.WebdavServlet.java

/**
 * Propfind helper method./*from w  ww  . ja v a 2s.  c o  m*/
 *
 * @param resources        Resources object associated with this context
 * @param generatedXML     XML response to the Propfind request
 * @param path             Path of the current resource
 * @param type             Propfind type
 * @param propertiesVector If the propfind type is find properties by name,
 *                         then this Vector contains those properties
 * @param context          Description of the Parameter
 * @throws IOException Description of the Exception
 */
private void parseProperties(ActionContext context, ModuleContext resources, XMLWriter generatedXML,
        String path, int type, Vector propertiesVector) throws IOException {

    // Exclude any resource in the /WEB-INF and /META-INF subdirectories
    // (the "toUpperCase()" avoids problems on Windows systems)
    if (path.toUpperCase().startsWith("/WEB-INF") || path.toUpperCase().startsWith("/META-INF")) {
        return;
    }

    ResourceInfo resourceInfo = null;
    SystemStatus thisSystem = null;
    boolean actionStatus = true;
    try {
        thisSystem = this.getSystemStatus(context);
        resourceInfo = new ResourceInfo(thisSystem, path, resources);
    } catch (FileNotFoundException e) {
        e.printStackTrace(System.out);
        actionStatus = false;
    }

    if (!actionStatus) {
        return;
    }

    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
    String status = new String(
            "HTTP/1.1 " + WebdavStatus.SC_OK + " " + WebdavStatus.getStatusText(WebdavStatus.SC_OK));

    // Generating href element
    generatedXML.writeElement(null, "href", XMLWriter.OPENING);

    String href = context.getRequest().getContextPath();
    if ((href.endsWith("/")) && (path.startsWith("/"))) {
        href += path.substring(1);
    } else {
        href += path;
    }
    if ((resourceInfo.collection) && (!href.endsWith("/"))) {
        href += "/";
    }

    //Encode the path information for this resource
    generatedXML.writeText(rewriteUrl(href));
    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);

    String resourceName = path;
    int lastSlash = path.lastIndexOf('/');
    if (lastSlash != -1) {
        resourceName = resourceName.substring(lastSlash + 1);
    }

    //System.out.println("CLIENT FILENAME: " + resourceInfo.clientFilename);
    //System.out.println("CONTENT TYPE: " + getServletContext().getMimeType(resourceInfo.clientFilename));

    switch (type) {

    case FIND_ALL_PROP:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        generatedXML.writeProperty(null, "creationdate", resourceInfo.creationDate);
        generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
        generatedXML.writeData(resourceName);
        generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
        if (!resourceInfo.collection) {
            generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
            generatedXML.writeProperty(null, "getcontentlength", String.valueOf(resourceInfo.length));
            String contentType = getServletContext().getMimeType(resourceInfo.clientFilename);
            if (contentType != null) {
                generatedXML.writeProperty(null, "getcontenttype", contentType);
            }
            generatedXML.writeProperty(null, "getetag", getETag(resourceInfo));
            generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        } else {
            generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
            generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
        }

        generatedXML.writeProperty(null, "source", "");

        String supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
        generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
        generatedXML.writeText(supportedLocks);
        generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);

        generateLockDiscovery(path, generatedXML);

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;
    case FIND_PROPERTY_NAMES:
        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        generatedXML.writeElement(null, "creationdate", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "displayname", XMLWriter.NO_CONTENT);
        if (!resourceInfo.collection) {
            generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontentlength", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontenttype", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getetag", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getlastmodified", XMLWriter.NO_CONTENT);
        }
        generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "source", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "lockdiscovery", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        break;
    case FIND_BY_PROPERTY:
        Vector propertiesNotFound = new Vector();
        // Parse the list of properties
        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        Enumeration properties = propertiesVector.elements();
        while (properties.hasMoreElements()) {
            String property = (String) properties.nextElement();
            if (property.equals("creationdate")) {
                generatedXML.writeProperty(null, "creationdate", resourceInfo.creationDate);
            } else if (property.equals("displayname")) {
                generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
                generatedXML.writeData(resourceName);
                generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
            } else if (property.equals("getcontentlanguage")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("getcontentlength")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontentlength", (String.valueOf(resourceInfo.length)));
                }
            } else if (property.equals("getcontenttype")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontenttype",
                            getServletContext().getMimeType(resourceInfo.clientFilename));
                }
            } else if (property.equals("getetag")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getetag", getETag(resourceInfo));
                }
            } else if (property.equals("getlastmodified")) {
                if (resourceInfo.collection) {
                    //propertiesNotFound.addElement(property);
                    // change
                    generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
                } else {
                    generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
                }
            } else if (property.equals("resourcetype")) {
                if (resourceInfo.collection) {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
                    generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
                } else {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("source")) {
                generatedXML.writeProperty(null, "source", "");
            } else if (property.equals("supportedlock")) {
                supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                        + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                        + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
                generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
                generatedXML.writeText(supportedLocks);
                generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);
            } else if (property.equals("lockdiscovery")) {
                if (!generateLockDiscovery(path, generatedXML)) {
                    propertiesNotFound.addElement(property);
                }
            } else {
                propertiesNotFound.addElement(property);
            }
        }
        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        Enumeration propertiesNotFoundList = propertiesNotFound.elements();
        if (propertiesNotFoundList.hasMoreElements()) {
            status = new String("HTTP/1.1 " + WebdavStatus.SC_NOT_FOUND + " "
                    + WebdavStatus.getStatusText(WebdavStatus.SC_NOT_FOUND));
            generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
            generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
            while (propertiesNotFoundList.hasMoreElements()) {
                generatedXML.writeElement(null, (String) propertiesNotFoundList.nextElement(),
                        XMLWriter.NO_CONTENT);
            }
            generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "status", XMLWriter.OPENING);
            generatedXML.writeText(status);
            generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        }
        break;
    }
    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);
}

From source file:org.sakaiproject.dav.DavServlet.java

/**
 * Propfind helper method. Dispays the properties of a lock-null resource.
 * /*from   w w w  .jav a  2  s.c  om*/
 * @param resources
 *        Resources object associated with this context
 * @param generatedXML
 *        XML response to the Propfind request
 * @param path
 *        Path of the current resource
 * @param type
 *        Propfind type
 * @param propertiesVector
 *        If the propfind type is find properties by name, then this Vector contains those properties
 */
private void parseLockNullProperties(HttpServletRequest req, XMLWriter generatedXML, String path, int type,
        Vector<String> propertiesVector) {

    // Exclude any resource in the /WEB-INF and /META-INF subdirectories
    // (the "toUpperCase()" avoids problems on Windows systems)
    if (path.toUpperCase().startsWith("/WEB-INF") || path.toUpperCase().startsWith("/META-INF"))
        return;

    // Retrieving the lock associated with the lock-null resource
    LockInfo lock = (LockInfo) resourceLocks.get(path);

    if (lock == null)
        return;

    generatedXML.writeElement("D", "response", XMLWriter.OPENING);
    String status = new String(
            "HTTP/1.1 " + SakaidavStatus.SC_OK + " " + SakaidavStatus.getStatusText(SakaidavStatus.SC_OK));

    // Generating href element
    generatedXML.writeElement("D", "href", XMLWriter.OPENING);

    String absoluteUri = req.getRequestURI();
    String relativePath = getRelativePath(req);
    String toAppend = path.substring(relativePath.length());
    if (!toAppend.startsWith("/"))
        toAppend = "/" + toAppend;

    generatedXML.writeText(rewriteUrl(normalize(absoluteUri + toAppend)));

    generatedXML.writeElement("D", "href", XMLWriter.CLOSING);

    String resourceName = justName(path);

    switch (type) {

    case FIND_ALL_PROP:

        generatedXML.writeElement("D", "propstat", XMLWriter.OPENING);
        generatedXML.writeElement("D", "prop", XMLWriter.OPENING);

        generatedXML.writeProperty("D", "creationdate", getISOCreationDate(lock.creationDate.getTime()));
        generatedXML.writeElement("D", "displayname", XMLWriter.OPENING);
        generatedXML.writeData(resourceName);
        generatedXML.writeElement("D", "displayname", XMLWriter.CLOSING);
        generatedXML.writeProperty("D", "getcontentlanguage", Locale.getDefault().toString());
        generatedXML.writeProperty("D", "getlastmodified", dateFormats()[0].format(lock.creationDate));
        generatedXML.writeProperty("D", "getcontentlength", String.valueOf(0));
        generatedXML.writeProperty("D", "getcontenttype", "");
        generatedXML.writeProperty("D", "getetag", "");
        generatedXML.writeElement("D", "resourcetype", XMLWriter.OPENING);
        generatedXML.writeElement("D", "lock-null", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "resourcetype", XMLWriter.CLOSING);

        generatedXML.writeProperty("D", "source", "");

        String supportedLocks = "<D:lockentry>" + "<D:lockscope><D:exclusive/></D:lockscope>"
                + "<D:locktype><D:write/></D:locktype>" + "</D:lockentry>" + "<D:lockentry>"
                + "<D:lockscope><D:shared/></D:lockscope>" + "<D:locktype><D:write/></D:locktype>"
                + "</D:lockentry>";
        generatedXML.writeElement("D", "supportedlock", XMLWriter.OPENING);
        generatedXML.writeText(supportedLocks);
        generatedXML.writeElement("D", "supportedlock", XMLWriter.CLOSING);

        generateLockDiscovery(path, generatedXML);

        generatedXML.writeElement("D", "prop", XMLWriter.CLOSING);
        generatedXML.writeElement("D", "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement("D", "status", XMLWriter.CLOSING);
        generatedXML.writeElement("D", "propstat", XMLWriter.CLOSING);

        break;

    case FIND_PROPERTY_NAMES:

        generatedXML.writeElement("D", "propstat", XMLWriter.OPENING);
        generatedXML.writeElement("D", "prop", XMLWriter.OPENING);

        generatedXML.writeElement("D", "creationdate", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "displayname", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "getcontentlanguage", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "getcontentlength", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "getcontenttype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "getetag", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "getlastmodified", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "resourcetype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "source", XMLWriter.NO_CONTENT);
        generatedXML.writeElement("D", "lockdiscovery", XMLWriter.NO_CONTENT);

        generatedXML.writeElement("D", "prop", XMLWriter.CLOSING);
        generatedXML.writeElement("D", "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement("D", "status", XMLWriter.CLOSING);
        generatedXML.writeElement("D", "propstat", XMLWriter.CLOSING);

        break;

    case FIND_BY_PROPERTY:

        Vector<String> propertiesNotFound = new Vector<String>();

        // Parse the list of properties

        generatedXML.writeElement("D", "propstat", XMLWriter.OPENING);
        generatedXML.writeElement("D", "prop", XMLWriter.OPENING);

        Enumeration<String> properties = propertiesVector.elements();

        while (properties.hasMoreElements()) {

            String property = properties.nextElement();

            if (property.equals("creationdate")) {
                generatedXML.writeProperty("D", "creationdate",
                        getISOCreationDate(lock.creationDate.getTime()));
            } else if (property.equals("displayname")) {
                generatedXML.writeElement("D", "displayname", XMLWriter.OPENING);
                generatedXML.writeData(resourceName);
                generatedXML.writeElement("D", "displayname", XMLWriter.CLOSING);
            } else if (property.equals("getcontentlanguage")) {
                generatedXML.writeProperty("D", "getcontentlanguage", Locale.getDefault().toString());
            } else if (property.equals("getcontentlength")) {
                generatedXML.writeProperty("D", "getcontentlength", (String.valueOf(0)));
            } else if (property.equals("getcontenttype")) {
                generatedXML.writeProperty("D", "getcontenttype", "");
            } else if (property.equals("getetag")) {
                generatedXML.writeProperty("D", "getetag", "");
            } else if (property.equals("getlastmodified")) {
                generatedXML.writeProperty("D", "getlastmodified", dateFormats()[0].format(lock.creationDate));
            } else if (property.equals("resourcetype")) {
                generatedXML.writeElement("D", "resourcetype", XMLWriter.OPENING);
                generatedXML.writeElement("D", "lock-null", XMLWriter.NO_CONTENT);
                generatedXML.writeElement("D", "resourcetype", XMLWriter.CLOSING);
            } else if (property.equals("source")) {
                generatedXML.writeProperty("D", "source", "");
            } else if (property.equals("supportedlock")) {
                supportedLocks = "<D:lockentry>" + "<D:lockscope><D:exclusive/></D:lockscope>"
                        + "<D:locktype><D:write/></D:locktype>" + "</D:lockentry>" + "<D:lockentry>"
                        + "<D:lockscope><D:shared/></D:lockscope>" + "<D:locktype><D:write/></D:locktype>"
                        + "</D:lockentry>";
                generatedXML.writeElement("D", "supportedlock", XMLWriter.OPENING);
                generatedXML.writeText(supportedLocks);
                generatedXML.writeElement("D", "supportedlock", XMLWriter.CLOSING);
            } else if (property.equals("lockdiscovery")) {
                if (!generateLockDiscovery(path, generatedXML))
                    propertiesNotFound.addElement(property);
            } else {
                propertiesNotFound.addElement(property);
            }

        }

        generatedXML.writeElement("D", "prop", XMLWriter.CLOSING);
        generatedXML.writeElement("D", "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement("D", "status", XMLWriter.CLOSING);
        generatedXML.writeElement("D", "propstat", XMLWriter.CLOSING);

        Enumeration<String> propertiesNotFoundList = propertiesNotFound.elements();

        if (propertiesNotFoundList.hasMoreElements()) {

            status = new String("HTTP/1.1 " + SakaidavStatus.SC_NOT_FOUND + " "
                    + SakaidavStatus.getStatusText(SakaidavStatus.SC_NOT_FOUND));

            generatedXML.writeElement("D", "propstat", XMLWriter.OPENING);
            generatedXML.writeElement("D", "prop", XMLWriter.OPENING);

            while (propertiesNotFoundList.hasMoreElements()) {
                generatedXML.writeElement("D", (String) propertiesNotFoundList.nextElement(),
                        XMLWriter.NO_CONTENT);
            }

            generatedXML.writeElement("D", "prop", XMLWriter.CLOSING);
            generatedXML.writeElement("D", "status", XMLWriter.OPENING);
            generatedXML.writeText(status);
            generatedXML.writeElement("D", "status", XMLWriter.CLOSING);
            generatedXML.writeElement("D", "propstat", XMLWriter.CLOSING);

        }

        break;

    }

    generatedXML.writeElement("D", "response", XMLWriter.CLOSING);

}