1 7 package com.ibm.webdav.protocol.http; 8 9 import java.io.*; 10 import java.util.*; 11 import java.util.logging.*; 12 13 import javax.servlet.http.*; 14 import javax.xml.parsers.*; 15 16 import org.w3c.dom.*; 17 18 import com.ibm.webdav.*; 19 import com.ibm.webdav.impl.*; 20 21 28 public class ReportMethod extends WebDAVMethod { 29 private static Logger m_logger = Logger.getLogger(ReportMethod.class.getName()); 30 31 32 public static final String METHOD_NAME = "REPORT"; 33 34 39 public ReportMethod( 40 HttpServletRequest request, 41 HttpServletResponse response) 42 throws WebDAVException { 43 super(request, response); 44 methodName = METHOD_NAME; 45 } 46 47 50 public WebDAVStatus execute() throws WebDAVException { 51 MultiStatus multiStatus = null; 52 53 try { 54 String depth = context.getRequestContext().depth(); 56 57 Document contents = null; 58 59 if (context.getRequestContext().contentLength() > 0) { 60 WebDAVErrorHandler errorHandler = 62 new WebDAVErrorHandler(resource.getURL().toString()); 63 64 DocumentBuilderFactory factory = 65 DocumentBuilderFactory.newInstance(); 66 factory.setNamespaceAware(true); 67 68 DocumentBuilder docbuilder = factory.newDocumentBuilder(); 69 docbuilder.setErrorHandler(errorHandler); 70 contents = 71 docbuilder.parse( 72 new org.xml.sax.InputSource (request.getReader())); 73 74 if (errorHandler.getErrorCount() > 0) { 75 throw new WebDAVException( 76 WebDAVStatus.SC_BAD_REQUEST, 77 "Syntax error in PROPFIND request entity body"); 78 } 79 } 80 81 if (ResourceImpl.debug) { 84 System.err.println("property request entity:"); 85 86 PrintWriter pout = new PrintWriter(System.err); 87 pout.print(XMLUtility.printNode(contents.getDocumentElement())); 88 89 } 91 92 Element versionTree = 93 (Element) ((contents == null) 94 ? null 95 : contents.getDocumentElement()); 96 97 if(versionTree == null || versionTree.getElementsByTagNameNS("DAV:","version-tree").getLength() == 0) { 98 throw new WebDAVException(WebDAVStatus.SC_BAD_REQUEST,"Invalid request body"); 99 } else if (versionTree.getElementsByTagNameNS("DAV:", "allprop").getLength() 100 > 0) { 101 102 103 multiStatus = resource.getVersionTreeReport(context); 104 105 } else { 106 Vector tempNames = new Vector(); 107 Node prop = 108 versionTree.getElementsByTagNameNS("DAV:", "prop").item(0); 109 NodeList propnames = prop.getChildNodes(); 110 String sss = "bleh"; 111 Element propname = null; 112 113 for (int i = 0; i < propnames.getLength(); i++) { 114 Object objj = (Object ) propnames.item(i); 116 117 if (objj instanceof Text) { 118 Text tt = (Text) objj; 120 sss = "x" + tt.getNodeValue() + "y"; 121 } else { 122 propname = (Element) objj; 123 124 Element tx = (Element) propname; 125 126 tempNames.addElement(new PropertyName(tx)); 128 } 129 } 130 131 PropertyName[] names = new PropertyName[tempNames.size()]; 132 Enumeration nameEnumerator = tempNames.elements(); 133 int i = 0; 134 135 while (nameEnumerator.hasMoreElements()) { 136 names[i] = (PropertyName) nameEnumerator.nextElement(); 137 i++; 138 } 139 140 if (resource.exists() == true) { 141 multiStatus = resource.getVersionTreeReport(context, names); 142 } 143 } 144 145 context.getResponseContext().contentType("text/xml"); 146 setResponseHeaders(); 147 setStatusCode(WebDAVStatus.SC_MULTI_STATUS); 148 149 Document results = multiStatus.asXML(); 151 152 if (ResourceImpl.debug) { 156 System.err.println("property results:"); 157 158 PrintWriter pout = new PrintWriter(System.err); 159 pout.print(XMLUtility.printNode(results.getDocumentElement())); 160 161 } 163 164 PrintWriter pout = new PrintWriter(response.getWriter(), false); 165 pout.print(XMLUtility.printNode(results.getDocumentElement())); 166 167 pout.close(); 170 } catch (WebDAVException exc) { 171 setStatusCode(exc.getStatusCode()); 172 } catch (Exception exc) { 173 m_logger.log(Level.WARNING, exc.getMessage(), exc); 174 setStatusCode(WebDAVStatus.SC_INTERNAL_SERVER_ERROR); 175 } 176 177 return context.getStatusCode(); 178 } 179 180 } 181 | Popular Tags |