2011-08-02 05:34:47 +02:00
|
|
|
package com.google.refine.commands;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.PrintWriter;
|
|
|
|
import java.io.StringWriter;
|
|
|
|
import java.io.Writer;
|
|
|
|
import java.util.Properties;
|
|
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
import org.apache.velocity.VelocityContext;
|
|
|
|
import org.json.JSONException;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
import org.json.JSONWriter;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
import com.google.refine.Jsonizable;
|
|
|
|
import com.google.refine.RefineServlet;
|
|
|
|
import com.google.refine.util.ParsingUtilities;
|
|
|
|
|
|
|
|
abstract public class HttpUtilities {
|
|
|
|
final static protected Logger logger = LoggerFactory.getLogger("command");
|
|
|
|
|
|
|
|
static public void respond(HttpServletResponse response, String content)
|
|
|
|
throws IOException, ServletException {
|
|
|
|
|
|
|
|
response.setCharacterEncoding("UTF-8");
|
|
|
|
response.setStatus(HttpServletResponse.SC_OK);
|
|
|
|
Writer w = response.getWriter();
|
|
|
|
if (w != null) {
|
|
|
|
w.write(content);
|
|
|
|
w.flush();
|
|
|
|
w.close();
|
|
|
|
} else {
|
|
|
|
throw new ServletException("response returned a null writer");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static public void respond(HttpServletResponse response, String status, String message)
|
|
|
|
throws IOException {
|
|
|
|
|
|
|
|
Writer w = response.getWriter();
|
|
|
|
try {
|
|
|
|
JSONWriter writer = new JSONWriter(w);
|
|
|
|
writer.object();
|
|
|
|
writer.key("status"); writer.value(status);
|
|
|
|
writer.key("message"); writer.value(message);
|
|
|
|
writer.endObject();
|
|
|
|
w.flush();
|
|
|
|
w.close();
|
|
|
|
} catch (JSONException e) {
|
|
|
|
// This can never occue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static public void respondJSON(HttpServletResponse response, Jsonizable o)
|
|
|
|
throws IOException, JSONException {
|
|
|
|
|
|
|
|
respondJSON(response, o, new Properties());
|
|
|
|
}
|
|
|
|
|
|
|
|
static public void respondJSON(
|
|
|
|
HttpServletResponse response, Jsonizable o, Properties options)
|
|
|
|
throws IOException, JSONException {
|
|
|
|
|
|
|
|
response.setCharacterEncoding("UTF-8");
|
|
|
|
response.setHeader("Content-Type", "application/json");
|
|
|
|
|
|
|
|
Writer w = response.getWriter();
|
|
|
|
JSONWriter writer = new JSONWriter(w);
|
|
|
|
|
|
|
|
o.write(writer, options);
|
|
|
|
w.flush();
|
|
|
|
w.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
static public void respondException(HttpServletResponse response, Exception e)
|
|
|
|
throws IOException, ServletException {
|
|
|
|
|
|
|
|
logger.warn("Exception caught", e);
|
|
|
|
|
|
|
|
if (response == null) {
|
|
|
|
throw new ServletException("Response object can't be null");
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
JSONObject o = new JSONObject();
|
|
|
|
o.put("code", "error");
|
|
|
|
o.put("message", e.getMessage());
|
|
|
|
|
|
|
|
StringWriter sw = new StringWriter();
|
|
|
|
PrintWriter pw = new PrintWriter(sw);
|
|
|
|
e.printStackTrace(pw);
|
|
|
|
pw.flush();
|
|
|
|
sw.flush();
|
|
|
|
|
|
|
|
o.put("stack", sw.toString());
|
|
|
|
|
|
|
|
response.setCharacterEncoding("UTF-8");
|
|
|
|
response.setHeader("Content-Type", "application/json");
|
|
|
|
respond(response, o.toString());
|
|
|
|
} catch (JSONException e1) {
|
|
|
|
e.printStackTrace(response.getWriter());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static public void redirect(HttpServletResponse response, String url) throws IOException {
|
|
|
|
response.sendRedirect(url);
|
|
|
|
}
|
|
|
|
|
|
|
|
static public int getIntegerParameter(HttpServletRequest request, String name, int def) {
|
2011-08-03 00:21:47 +02:00
|
|
|
if (request == null) {
|
|
|
|
throw new IllegalArgumentException("parameter 'request' should not be null");
|
|
|
|
}
|
2011-08-02 05:34:47 +02:00
|
|
|
try {
|
|
|
|
return Integer.parseInt(request.getParameter(name));
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.warn("Error getting integer parameter", e);
|
|
|
|
}
|
|
|
|
return def;
|
|
|
|
}
|
|
|
|
|
|
|
|
static public JSONObject getJsonParameter(HttpServletRequest request, String name) {
|
2011-08-03 00:21:47 +02:00
|
|
|
if (request == null) {
|
|
|
|
throw new IllegalArgumentException("parameter 'request' should not be null");
|
|
|
|
}
|
2011-08-02 05:34:47 +02:00
|
|
|
String value = request.getParameter(name);
|
|
|
|
if (value != null) {
|
|
|
|
try {
|
|
|
|
return ParsingUtilities.evaluateJsonStringToObject(value);
|
|
|
|
} catch (JSONException e) {
|
|
|
|
logger.warn("Error getting json parameter", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
static public void respondWithErrorPage(
|
|
|
|
RefineServlet servlet,
|
|
|
|
HttpServletRequest request,
|
|
|
|
HttpServletResponse response,
|
|
|
|
String message,
|
|
|
|
Throwable e
|
|
|
|
) {
|
|
|
|
respondWithErrorPage(servlet, request, response, message,
|
|
|
|
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
|
|
|
|
}
|
|
|
|
|
|
|
|
static public void respondWithErrorPage(
|
|
|
|
RefineServlet servlet,
|
|
|
|
HttpServletRequest request,
|
|
|
|
HttpServletResponse response,
|
|
|
|
String message,
|
|
|
|
int status,
|
|
|
|
Throwable e
|
|
|
|
) {
|
|
|
|
VelocityContext context = new VelocityContext();
|
|
|
|
|
|
|
|
context.put("message", message);
|
|
|
|
|
|
|
|
if (e != null) {
|
|
|
|
StringWriter writer = new StringWriter();
|
|
|
|
|
|
|
|
e.printStackTrace(new PrintWriter(writer));
|
|
|
|
|
|
|
|
context.put("stack", writer.toString());
|
|
|
|
} else {
|
|
|
|
context.put("stack", "");
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
response.setStatus(status);
|
|
|
|
|
|
|
|
servlet.getModule("core").sendTextFromTemplate(
|
|
|
|
request, response, context, "error.vt", "UTF-8", "text/html", true);
|
|
|
|
|
|
|
|
} catch (Exception e1) {
|
|
|
|
e1.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|