KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > ibm > webdav > protocol > http > ReportMethod


1 /*
2  * (C) Copyright SimulacraMedia 2003. All rights reserved.
3  *
4  * Created on Nov 13, 2003
5  *
6  */

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 /**
22  * Executes the WebDAV Delta-V Report method.
23  *
24  * @author Michael Bell
25  * @version $Revision: 1.1 $
26  *
27  */

28 public class ReportMethod extends WebDAVMethod {
29     private static Logger m_logger = Logger.getLogger(ReportMethod.class.getName());
30
31
32     public static final String JavaDoc METHOD_NAME = "REPORT";
33
34     /**
35      * @param request
36      * @param response
37      * @throws WebDAVException
38      */

39     public ReportMethod(
40         HttpServletRequest request,
41         HttpServletResponse response)
42         throws WebDAVException {
43         super(request, response);
44         methodName = METHOD_NAME;
45     }
46
47     /* (non-Javadoc)
48      * @see com.ibm.webdav.protocol.http.WebDAVMethod#execute()
49      */

50     public WebDAVStatus execute() throws WebDAVException {
51         MultiStatus multiStatus = null;
52
53         try {
54             // get any arguments out of the headers
55
String JavaDoc depth = context.getRequestContext().depth();
56
57             Document contents = null;
58
59             if (context.getRequestContext().contentLength() > 0) {
60                 // get the request entity body and parse it
61
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 JavaDoc(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             // get the arguments for the getProperties() method, and figure
82
// out which method variant to call.
83
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                 //((Document) contents).printWithFormat(pout);
90
}
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 JavaDoc sss = "bleh";
111                 Element propname = null;
112
113                 for (int i = 0; i < propnames.getLength(); i++) {
114                     //propname = (Element) propnames.item(i);
115
Object JavaDoc objj = (Object JavaDoc) propnames.item(i);
116
117                     if (objj instanceof Text) {
118                         // skip. Probably just a CRLF or something
119
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(propname.getTagName());
127
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             // output the results as an XML document
150
Document results = multiStatus.asXML();
151
152             // set the character encoding for the document to that specified by
153
// the client in the Accept header
154
//((Document) results).setEncoding(getResponseCharset());
155
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                 //((Document) results).printWithFormat(pout);
162
}
163
164             PrintWriter pout = new PrintWriter(response.getWriter(), false);
165             pout.print(XMLUtility.printNode(results.getDocumentElement()));
166
167             //((Document) results).print(pout);
168
//pout.print(multiStatus.toString());
169
pout.close();
170         } catch (WebDAVException exc) {
171             setStatusCode(exc.getStatusCode());
172         } catch (Exception JavaDoc 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