package frostillicus.xsp.controller;
import java.io.PrintStream;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @since 1.0
*/
public abstract class BasicXAgentController extends BasicXPageController {
private static final long serialVersionUID = 1L;
@Override
public void beforeRenderResponse(final PhaseEvent event) throws Exception {
super.beforeRenderResponse(event);
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse res = (HttpServletResponse)externalContext.getResponse();
HttpServletRequest req = (HttpServletRequest)externalContext.getRequest();
try {
execute(facesContext, req, res);
} catch(Throwable t) {
t.printStackTrace();
res.setStatus(HttpServletResponse.SC_BAD_REQUEST);
res.setContentType("text/plain");
t.printStackTrace(new PrintStream(res.getOutputStream()));
} finally {
facesContext.responseComplete();
}
}
public abstract void execute(final FacesContext facesContext, final HttpServletRequest req, final HttpServletResponse res) throws Exception;
}