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); } } }