1 14 package com.ibm.webdav.protocol.http; 15 16 import java.io.*; 17 import java.util.*; 18 import java.util.logging.*; 19 20 import javax.servlet.http.*; 21 import javax.xml.parsers.*; 22 23 import org.w3c.dom.*; 24 25 import com.ibm.webdav.*; 26 import com.ibm.webdav.impl.*; 27 28 35 public class OrderPatchMethod extends WebDAVMethod { 36 37 private static Logger m_logger = Logger.getLogger(OrderPatchMethod.class.getName()); 38 39 40 public static final String METHOD_NAME = "ORDERPATCH"; 41 42 47 public OrderPatchMethod( 48 HttpServletRequest request, 49 HttpServletResponse response) 50 throws WebDAVException { 51 super(request, response); 52 methodName = METHOD_NAME; 53 } 54 55 58 public WebDAVStatus execute() throws WebDAVException { 59 60 try { 61 String depth = context.getRequestContext().depth(); 63 64 Document contents = null; 65 66 if (context.getRequestContext().contentLength() > 0) { 67 WebDAVErrorHandler errorHandler = 69 new WebDAVErrorHandler(resource.getURL().toString()); 70 71 DocumentBuilderFactory factory = 72 DocumentBuilderFactory.newInstance(); 73 factory.setNamespaceAware(true); 74 75 DocumentBuilder docbuilder = factory.newDocumentBuilder(); 76 docbuilder.setErrorHandler(errorHandler); 77 contents = 78 docbuilder.parse( 79 new org.xml.sax.InputSource (request.getReader())); 80 81 if (errorHandler.getErrorCount() > 0) { 82 throw new WebDAVException( 83 WebDAVStatus.SC_BAD_REQUEST, 84 "Syntax error in PROPFIND request entity body"); 85 } 86 } 87 88 if (ResourceImpl.debug) { 91 System.err.println("property request entity:"); 92 93 PrintWriter pout = new PrintWriter(System.err); 94 pout.print(XMLUtility.printNode(contents.getDocumentElement())); 95 96 } 98 99 if(resource.isCollection() == true) { 100 MultiStatus multiStatus = ((CollectionImpl)resource).setOrdering(context,contents); 101 Enumeration responses = multiStatus.getResponses(); 102 103 if (responses.hasMoreElements()) { 104 context.getResponseContext().contentType("text/xml"); 106 setResponseHeaders(); 107 setStatusCode(WebDAVStatus.SC_MULTI_STATUS); 108 109 Document results = multiStatus.asXML(); 111 if (ResourceImpl.debug) { 113 System.err.println("property update results:"); 114 PrintWriter pout = new PrintWriter(System.err); 115 pout.print(XMLUtility.printNode(results.getDocumentElement())); 116 } 118 PrintWriter pout = new PrintWriter(response.getWriter(), false); 119 pout.print(multiStatus.toString()); 121 pout.close(); 122 } else { 123 setStatusCode(WebDAVStatus.SC_OK); setResponseHeaders(); 125 } 126 } else { 127 throw new WebDAVException(WebDAVStatus.SC_BAD_REQUEST,"Invalid request on a non-collection resource"); 128 } 129 130 131 } catch (WebDAVException exc) { 132 m_logger.log(Level.INFO, exc.getLocalizedMessage()); 133 setStatusCode(exc.getStatusCode()); 134 } catch (Exception exc) { 135 m_logger.log(Level.WARNING, exc.getMessage(), exc); 136 setStatusCode(WebDAVStatus.SC_INTERNAL_SERVER_ERROR); 137 } 138 139 return context.getStatusCode(); 140 } 141 142 } 143 | Popular Tags |