try {
Document requestDocument = WebDavUtil.getDocumentFromRequest(request);
if (Debug.verboseOn()) {
Debug.logVerbose("[handlePropFindRequest] PROPFIND body:\r\n" + UtilXml.writeXmlDocument(requestDocument), module);
}
PropFindHelper helper = new PropFindHelper(requestDocument);
if (!helper.isAllProp() && !helper.isPropName()) {
Document responseDocument = helper.getResponseDocument();
List<Element> supportedProps = FastList.newInstance();
List<Element> unSupportedProps = FastList.newInstance();
List<Element> propElements = helper.getFindPropsList(ResponseHelper.DAV_NAMESPACE_URI);
for (Element propElement : propElements) {
if ("getetag".equals(propElement.getLocalName())) {
Element etagElement = helper.createElementSetValue("D:getetag", String.valueOf(System.currentTimeMillis()));
supportedProps.add(etagElement);
continue;
}
if ("getlastmodified".equals(propElement.getLocalName())) {
Date lastModified = getLastModifiedDate(request);
Element lmElement = helper.createElementSetValue("D:getlastmodified", WebDavUtil.formatDate(WebDavUtil.RFC1123_DATE_FORMAT, lastModified));
supportedProps.add(lmElement);
continue;
}
unSupportedProps.add(responseDocument.createElementNS(propElement.getNamespaceURI(), propElement.getTagName()));
}
Element responseElement = helper.createResponseElement();
responseElement.appendChild(helper.createHrefElement("/" + workEffortId + "/"));
if (supportedProps.size() > 0) {
Element propElement = helper.createPropElement(supportedProps);
responseElement.appendChild(helper.createPropStatElement(propElement, ResponseHelper.STATUS_200));
}
if (unSupportedProps.size() > 0) {
Element propElement = helper.createPropElement(unSupportedProps);
responseElement.appendChild(helper.createPropStatElement(propElement, ResponseHelper.STATUS_404));
}
Element rootElement = helper.createMultiStatusElement();
rootElement.appendChild(responseElement);
responseDocument.appendChild(rootElement);
if (Debug.verboseOn()) {
Debug.logVerbose("[handlePropFindRequest] PROPFIND response:\r\n" + UtilXml.writeXmlDocument(responseDocument), module);
}
ResponseHelper.prepareResponse(response, 207, "Multi-Status");
Writer writer = getWriter(response, context);
try {
helper.writeResponse(response, writer);
} finally {
writer.close();
}
return;
}