package nsf.playground.playground;
import java.io.IOException;
import java.io.PrintWriter;
import javax.faces.FactoryFinder;
import javax.faces.application.ApplicationFactory;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibm.commons.util.StringUtil;
import com.ibm.domino.xsp.module.nsf.NotesContext;
import com.ibm.xsp.application.ApplicationEx;
import com.ibm.xsp.application.ApplicationFactoryEx;
import com.ibm.xsp.context.FacesContextEx;
import com.ibm.xsp.extlib.servlet.FacesContextServlet;
public class PreviewServlet extends FacesContextServlet {
private static final long serialVersionUID = 1L;
private PreviewJavaScriptHandler javaScriptHandler;
private PreviewJavaHandler javaHandler;
private PreviewXPagesHandler xpagesHandler;
private PreviewGadgetHandler gadgetHandler;
private PreviewExportHandler exportHandler;
private PreviewImportHandler importHandler;
public PreviewServlet() {
}
public PreviewHandler getJavaScriptSnippetHandler() {
if(javaScriptHandler==null) {
javaScriptHandler = new PreviewJavaScriptHandler();
}
return javaScriptHandler;
}
public PreviewHandler getJavaSnippetHandler() {
if(javaHandler==null) {
javaHandler = new PreviewJavaHandler();
}
return javaHandler;
}
public PreviewHandler getXPagesSnippetHandler() {
if(xpagesHandler==null) {
xpagesHandler = new PreviewXPagesHandler();
}
return xpagesHandler;
}
public PreviewHandler getGadgetSnippetHandler() {
if(gadgetHandler==null) {
gadgetHandler = new PreviewGadgetHandler();
}
return gadgetHandler;
}
public PreviewHandler getExportHandler() {
if(exportHandler==null) {
exportHandler = new PreviewExportHandler();
}
return exportHandler;
}
public PreviewHandler getImportHandler() {
if(importHandler==null) {
importHandler = new PreviewImportHandler();
}
return importHandler;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// Maybe this is an Ajax request and the application is not *yet* initialized
// In this case, it is not a ApplicationEx
ApplicationFactory f = (ApplicationFactoryEx )FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
if(!(f.getApplication() instanceof ApplicationEx)) {
emitError(servletResponse);
return;
}
// Make sure that the JSF servlet is created and initialized
NotesContext.getCurrent().getModule().getXspEngineServlet();
// Create a temporary FacesContext and make it available
FacesContext context = initContext(servletRequest, servletResponse);
try {
// Make sure that the app hasn't been discarded
// If so, then we return a SERVICE_UNAVAILABLE error
// Just for security
ApplicationEx app = ((FacesContextEx)context).getApplicationEx();
if(app.getController()==null) {
emitError(servletResponse);
return;
}
// Do whatever you need
super.service(servletRequest, servletResponse);
} finally {
releaseContext(context);
}
}
private void emitError(ServletResponse servletResponse) throws IOException {
HttpServletResponse resp = (HttpServletResponse)servletResponse;
resp.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
resp.setContentType("text/html");
PrintWriter w = resp.getWriter();
w.println("The server session has expired. Please reload the main page to start a new session");
w.flush();
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// Dispatch to the right handler
String pathInfo = req.getPathInfo();
if(StringUtil.startsWithIgnoreCase(pathInfo, "/javascriptsnippet")) {
getJavaScriptSnippetHandler().doService(req, resp);
} else if(StringUtil.startsWithIgnoreCase(pathInfo, "/javasnippet")) {
getJavaSnippetHandler().doService(req, resp);
} else if(StringUtil.startsWithIgnoreCase(pathInfo, "/jsppage")) {
getJavaSnippetHandler().doService(req, resp);
} else if(StringUtil.startsWithIgnoreCase(pathInfo, "/xpagessnippet")) {
getXPagesSnippetHandler().doService(req, resp);
} else if(StringUtil.startsWithIgnoreCase(pathInfo, "/gadgetsnippet")) {
getGadgetSnippetHandler().doService(req, resp);
} else if(StringUtil.startsWithIgnoreCase(pathInfo, "/export")) {
getExportHandler().doService(req, resp);
} else if(StringUtil.startsWithIgnoreCase(pathInfo, "/import")) {
getImportHandler().doService(req, resp);
}
}
}