Map<String,QName> requestedProps = null;
Set<QName> requestedProps = null;
	public void handle(DavContext ctxt) throws DavException, IOException {		boolean nameOnly = false;		Map<String,QName> requestedProps = null;				if (ctxt.hasRequestMessage()) {			Document req = ctxt.getRequestMessage();			Element top = req.getRootElement();			if (!top.getName().equals(DavElements.P_PROPFIND))				throw new DavException("msg "+top.getName()+" not allowed in PROPFIND", HttpServletResponse.SC_BAD_REQUEST, null);			@SuppressWarnings("unchecked")			List<Element> elems = top.elements();			if (elems.size() != 1)				throw new DavException("msg propfind should contain one element", HttpServletResponse.SC_BAD_REQUEST, null);						for (Element e : elems) {				String name = e.getName();				if (name.equals(DavElements.P_ALLPROP))					requestedProps = null;				else if (name.equals(DavElements.P_PROPNAME))					nameOnly = true;				else if (!name.equals(DavElements.P_PROP))					throw new DavException("invalid element "+e.getName(), HttpServletResponse.SC_BAD_REQUEST, null);				else {					requestedProps = new java.util.HashMap<String,QName>();					@SuppressWarnings("unchecked")					List<Element> props = e.elements();					for (Element prop : props)						requestedProps.put(prop.getName(), prop.getQName());				}			}		}		DavResource resource = UrlNamespace.getResource(ctxt);		addComplianceHeader(ctxt, resource);		ctxt.setStatus(DavProtocol.STATUS_MULTI_STATUS);				Document document = org.dom4j.DocumentHelper.createDocument();		Element resp = document.addElement(DavElements.E_MULTISTATUS);		addResourceToResponse(ctxt, resource, resp, nameOnly, requestedProps, false);		if (resource.isCollection() && ctxt.getDepth() != Depth.ZERO) {			//ZimbraLog.dav.debug("depth: "+ctxt.getDepth().name());			List<DavResource> children = resource.getChildren(ctxt);			for (DavResource child : children)				addResourceToResponse(ctxt, child, resp, nameOnly, requestedProps, ctxt.getDepth() == Depth.INFINITY);		}		sendResponse(ctxt, document);	}