package scrum.server.common;
import ilarkesto.base.PermissionDeniedException;
import ilarkesto.core.logging.Log;
import ilarkesto.persistence.AEntity;
import ilarkesto.webapp.Servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import scrum.server.ScrumWebApplication;
import scrum.server.WebSession;
import scrum.server.project.Project;
public abstract class AHttpServlet extends HttpServlet {
private static final Log LOG = Log.get(AHttpServlet.class);
protected abstract void onRequest(HttpServletRequest req, HttpServletResponse resp, WebSession session)
throws IOException;
protected void onInit(ServletConfig config) {}
@Override
protected final void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Servlet.preventCaching(resp);
try {
onRequest(req, resp, (WebSession) ScrumWebApplication.get().getWebSession(req));
} catch (Throwable ex) {
LOG.fatal("GET failed:", getClass().getName(), "->", ex);
}
}
@Override
protected final void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Servlet.preventCaching(resp);
try {
onRequest(req, resp, (WebSession) ScrumWebApplication.get().getWebSession(req));
} catch (Throwable ex) {
LOG.fatal("POST failed:", getClass().getName(), "->", ex);
}
}
@Override
public final void init(ServletConfig config) throws ServletException {
super.init(config);
try {
onInit(config);
} catch (Throwable ex) {
LOG.fatal("Init failed:", getClass().getName(), "->", ex);
}
}
@Override
public final void init() throws ServletException {
super.init();
}
// --- helper ---
public static <E extends AEntity> E getEntityByParameter(HttpServletRequest req, Class<E> type) {
return getEntityByParameter(req, "entityId", type);
}
public static <E extends AEntity> E getEntityByParameter(HttpServletRequest req, String parameterName, Class<E> type) {
String id = req.getParameter(parameterName);
if (id == null) throw new RuntimeException(parameterName + "==null");
return (E) ScrumWebApplication.get().getDaoService().getById(id);
}
public static Project getProject(WebSession session, HttpServletRequest req) {
Project project = getEntityByParameter(req, "projectId", Project.class);
if (!project.isVisibleFor(session.getUser())) throw new PermissionDeniedException();
return project;
}
}