1 package com.ibm.webdav.protocol.http; 2 3 17 import java.io.*; 18 import java.util.*; 19 import java.util.logging.*; 20 21 import javax.servlet.http.*; 22 import javax.xml.parsers.*; 23 24 import org.w3c.dom.*; 25 26 import com.ibm.webdav.*; 27 import com.ibm.webdav.impl.*; 28 29 32 public class MkcolMethod extends WebDAVMethod { 33 34 private static Logger m_logger = Logger.getLogger(MkcolMethod.class.getName()); 35 36 public static final String METHOD_NAME = "MKCOL"; 37 42 public MkcolMethod(HttpServletRequest request, HttpServletResponse response) throws WebDAVException { 43 super(request, response); 44 methodName = METHOD_NAME; 45 } 46 49 public WebDAVStatus execute() { 50 setStatusCode(WebDAVStatus.SC_CREATED); MultiStatus multiStatus = null; 52 try { 53 WebDAVErrorHandler errorHandler = new WebDAVErrorHandler(resource.getURL().toString()); 55 58 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 59 factory.setNamespaceAware(true); 60 DocumentBuilder docbuilder = factory.newDocumentBuilder(); 61 docbuilder.setErrorHandler(errorHandler); 62 Document contents = null; 63 if (context.getRequestContext().contentLength() > 0) { 64 contents = docbuilder.parse(new org.xml.sax.InputSource (request.getReader())); 66 if (errorHandler.getErrorCount() > 0) { 67 throw new WebDAVException(WebDAVStatus.SC_BAD_REQUEST, "Syntax error in MKCOL request entity body"); 68 } 69 } 70 multiStatus = ((CollectionImpl) resource).createCollection(context, contents); 71 Enumeration stats = multiStatus.getResponses(); 72 if (stats.hasMoreElements()) { stats.nextElement(); } 73 if (stats.hasMoreElements()) { 74 context.getResponseContext().contentType("text/xml"); 77 setResponseHeaders(); 78 setStatusCode(WebDAVStatus.SC_MULTI_STATUS); 79 Document results = multiStatus.asXML(); 80 PrintWriter pout = new PrintWriter(response.getWriter(), false); 82 pout.print(multiStatus.toString()); 84 pout.close(); 85 } else { 86 int rc = getStatusCode(); 87 if (rc == WebDAVStatus.SC_MULTI_STATUS) { 88 stats = multiStatus.getResponses(); 89 MethodResponse response = (MethodResponse) stats.nextElement(); 90 rc = response.getStatus(); 91 } 92 setStatusCode( rc ); 93 setResponseHeaders(); 94 } 95 } catch (WebDAVException exc) { 96 m_logger.log(Level.INFO, exc.getLocalizedMessage() + " - " + request.getQueryString()); 97 setStatusCode(exc.getStatusCode()); 98 99 } catch (Exception exc) { 100 m_logger.log(Level.WARNING, exc.getMessage(), exc); 101 setStatusCode(WebDAVStatus.SC_INTERNAL_SERVER_ERROR); 102 } 103 return context.getStatusCode(); 104 } 105 } 106 | Popular Tags |