Author: scottbw
Date: Wed Apr 28 10:01:56 2010
New Revision: 938843
URL: http://svn.apache.org/viewvc?rev=938843&view=rev
Log:
Added support for returning output from controllers in JSON and Atom formats,
and also allow specifying a content-type using a "format=" parameter in the
request where it doesn't already exist in the HTTP request itself (handy for
debugging in the browser).
Modified:
incubator/wookie/trunk/src/org/apache/wookie/controller/Controller.java
Modified:
incubator/wookie/trunk/src/org/apache/wookie/controller/Controller.java
URL:
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/controller/Controller.java?rev=938843&r1=938842&r2=938843&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/controller/Controller.java
(original)
+++ incubator/wookie/trunk/src/org/apache/wookie/controller/Controller.java Wed
Apr 28 10:01:56 2010
@@ -49,6 +49,11 @@ public abstract class Controller extends
* Content type for HTML output
*/
protected final String HTML_CONTENT_TYPE =
"text/html;charset=\"UTF-8\"";
+
+ /**
+ * Content type for ATOM output
+ */
+ protected final String ATOM_CONTENT_TYPE =
"application/atom+xml;charset=\"UTF-8\"";
/* (non-Javadoc)
* @see
javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse)
@@ -248,9 +253,7 @@ public abstract class Controller extends
* @throws IOException
*/
protected void returnXml(String xml, HttpServletResponse response)
throws IOException{
- response.setContentType(XML_CONTENT_TYPE);
- PrintWriter out = response.getWriter();
- out.println(xml);
+ output(xml,response, XML_CONTENT_TYPE);
}
/**
@@ -260,9 +263,40 @@ public abstract class Controller extends
* @throws IOException
*/
protected void returnHtml(String html, HttpServletResponse response)
throws IOException{
- response.setContentType(HTML_CONTENT_TYPE);
+ output(html,response, HTML_CONTENT_TYPE);
+ }
+
+ /**
+ * Send JSON back to client
+ * @param json the JSON string
+ * @param response the response object
+ * @throws IOException
+ */
+ protected void returnJson(String json, HttpServletResponse response)
throws IOException{
+ output(json,response, JSON_CONTENT_TYPE);
+ }
+
+ /**
+ * Send Atom back to client
+ * @param xml
+ * @param response
+ * @throws IOException
+ */
+ protected void returnAtom(String xml, HttpServletResponse response)
throws IOException{
+ output(xml,response, ATOM_CONTENT_TYPE);
+ }
+
+ /**
+ * Sends the output from the controller to the client
+ * @param content the content to write
+ * @param response the response object
+ * @param contentType the content type for the response
+ * @throws IOException
+ */
+ private void output(String content, HttpServletResponse response,
String contentType) throws IOException{
+ response.setContentType(contentType);
PrintWriter out = response.getWriter();
- out.println(html);
+ out.println(content);
}
/**
@@ -282,6 +316,7 @@ public abstract class Controller extends
protected static final int XML = 0;
protected static final int HTML = 1;
protected static final int JSON = 2;
+ protected static final int ATOM = 3;
/**
* Returns an int value for the content-type of a request; this
@@ -291,11 +326,21 @@ public abstract class Controller extends
* request, this method will return HTML (1)
*/
protected int format(HttpServletRequest request){
- if (request.getContentType() == null) return HTML;
- if (request.getContentType().contains("xml"))
+ String type = request.getContentType();
+ if (type == null){
+ // check for format parameters in the request
+ if (request.getParameter("format")!=null){
+ type = request.getParameter("format");
+ } else {
+ return HTML;
+ }
+ }
+ if (type.contains("xml"))
return XML;
- if (request.getContentType().contains("json"))
+ if (type.contains("json"))
return JSON;
+ if (type.contains("atom"))
+ return ATOM;
return HTML;
}