/*
* Copyright Robert Newson
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.rnewson.couchdb.lucene.util;
import org.json.JSONException;
import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;
public final class ServletUtils {
private ServletUtils() {
throw new InstantiationError("This class is not supposed to be instantiated.");
}
public static boolean getBooleanParameter(final HttpServletRequest req, final String parameterName) {
return Boolean.parseBoolean(req.getParameter(parameterName));
}
public static int getIntParameter(final HttpServletRequest req, final String parameterName, final int defaultValue) {
final String result = req.getParameter(parameterName);
return result != null ? Integer.parseInt(result) : defaultValue;
}
public static long getLongParameter(final HttpServletRequest req, final String parameterName, final long defaultValue) {
final String result = req.getParameter(parameterName);
return result != null ? Long.parseLong(result) : defaultValue;
}
public static String getParameter(final HttpServletRequest req, final String parameterName, final String defaultValue) {
final String result = req.getParameter(parameterName);
return result != null ? result : defaultValue;
}
public static void setResponseContentTypeAndEncoding(final HttpServletRequest req, final HttpServletResponse resp) {
final String accept = req.getHeader("Accept");
if (getBooleanParameter(req, "force_json") || (accept != null && accept.contains("application/json"))) {
resp.setContentType("application/json");
} else {
resp.setContentType("text/plain");
}
if (!resp.containsHeader("Vary")) {
resp.addHeader("Vary", "Accept");
}
resp.setCharacterEncoding("utf-8");
}
public static void sendJsonError(final HttpServletRequest request, final HttpServletResponse response, final int code,
final String reason) throws IOException, JSONException {
final JSONObject obj = new JSONObject();
obj.put("reason", reason);
sendJsonError(request, response, code, obj);
}
public static void sendJsonError(final HttpServletRequest request, final HttpServletResponse response, final int code,
final JSONObject error) throws IOException, JSONException {
setResponseContentTypeAndEncoding(request, response);
response.setHeader("Cache-Control", "must-revalidate,no-cache,no-store");
response.setStatus(code);
error.put("code", code);
final Writer writer = response.getWriter();
try {
writer.write(error.toString());
writer.write("\r\n");
} finally {
writer.close();
}
}
public static void sendJson(final HttpServletRequest req, final HttpServletResponse resp, final JSONObject json) throws IOException {
setResponseContentTypeAndEncoding(req, resp);
final Writer writer = resp.getWriter();
try {
writer.write(json.toString() + "\r\n");
} finally {
writer.close();
}
}
public static void sendJsonSuccess(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
setResponseContentTypeAndEncoding(req, resp);
final Writer writer = resp.getWriter();
try {
writer.write("{\"ok\": true}\r\n");
} finally {
writer.close();
}
}
}