package org.distributeme.registry.servlet; import net.anotheria.moskito.web.MoskitoHttpServlet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; /** * Base servlet for registry functionality. * @author lrosenberg */ public abstract class BaseRegistryServlet extends MoskitoHttpServlet{ /** * SerialVersionUID. */ private static final long serialVersionUID = 1L; /** * Logger. */ private static Logger log = LoggerFactory.getLogger(BaseRegistryServlet.class); /** * Result constant for sucess case. */ public static final String RESULT_SUCCESS = "SUCCESS"; /** * Result constant for error case. */ public static final String RESULT_ERROR = "ERROR"; /** * Returns the value of the submitted id parameter. * @param req http servlet request object. * @return value of the parameter. */ protected String getId(HttpServletRequest req){ return getRequiredParameter(req, "id"); } /** * Returns a required parameter of given name. If the parameter is not present an illegal argument exception is thrown. * @param req http servlet request object. * @param parameterName name of the parameter. * @return value of the parameter. */ protected String getRequiredParameter(HttpServletRequest req, String parameterName){ String parameter = req.getParameter(parameterName); if (parameter==null || parameter.length()==0) throw new IllegalArgumentException("Parameter \""+parameterName+"\" is required but empty."); return parameter; } /** * Returns the value of the submitted operation parameter. * @param req * @return */ protected String getOperation(HttpServletRequest req){ String op = req.getPathInfo(); if (op==null) op = ""; while (op.length()>0 && op.charAt(0)=='/') op = op.substring(1); return op; } /** * Sends success or error to into the response stream. * @param res http servlet response object. * @param value value to send. */ protected void sendBooleanResponse(HttpServletResponse res, boolean value){ sendResponse(res, value ? RESULT_SUCCESS : RESULT_ERROR); } /** * Sends a message response to the client. The message is sent as plain text. * @param res http servlet response object. * @param message message to send. */ protected void sendResponse(HttpServletResponse res, String message){ res.setContentLength(message.getBytes().length); res.setContentType("text/plain"); OutputStream out = null; try{ out = res.getOutputStream(); out.write(message.getBytes()); out.flush(); }catch(IOException e){ log.warn("sendResponse(res, "+message+")", e); }finally{ if (out!=null){ try{ out.close(); }catch(IOException ignored){//NOPMD } } } } }