| 1 18 19 package org.apache.roller.ui.rendering.servlets; 20 21 import java.io.IOException ; 22 import java.util.HashMap ; 23 import java.util.Map ; 24 import javax.servlet.ServletConfig ; 25 import javax.servlet.ServletException ; 26 import javax.servlet.http.HttpServlet ; 27 import javax.servlet.http.HttpServletRequest ; 28 import javax.servlet.http.HttpServletResponse ; 29 import javax.servlet.jsp.JspFactory ; 30 import javax.servlet.jsp.PageContext ; 31 import org.apache.commons.logging.Log; 32 import org.apache.commons.logging.LogFactory; 33 import org.apache.roller.RollerException; 34 import org.apache.roller.config.RollerConfig; 35 import org.apache.roller.config.RollerRuntimeConfig; 36 import org.apache.roller.pojos.Template; 37 import org.apache.roller.pojos.Theme; 38 import org.apache.roller.pojos.WebsiteData; 39 import org.apache.roller.ui.core.RollerContext; 40 import org.apache.roller.util.cache.CachedContent; 41 import org.apache.roller.ui.rendering.Renderer; 42 import org.apache.roller.ui.rendering.RendererManager; 43 import org.apache.roller.ui.rendering.model.ModelLoader; 44 import org.apache.roller.ui.rendering.util.WeblogPreviewRequest; 45 46 47 57 public class PreviewServlet extends HttpServlet { 58 59 private static Log log = LogFactory.getLog(PreviewServlet.class); 60 61 62 65 public void init(ServletConfig servletConfig) throws ServletException { 66 67 super.init(servletConfig); 68 69 log.info("Initializing PreviewServlet"); 70 } 71 72 73 76 public void doGet(HttpServletRequest request, HttpServletResponse response) 77 throws ServletException , IOException { 78 79 log.debug("Entering"); 80 81 WebsiteData weblog = null; 82 83 WeblogPreviewRequest previewRequest = null; 84 try { 85 previewRequest = new WeblogPreviewRequest(request); 86 87 weblog = previewRequest.getWeblog(); 89 if(weblog == null) { 90 throw new RollerException("unable to lookup weblog: "+ 91 previewRequest.getWeblogHandle()); 92 } 93 } catch (Exception e) { 94 log.error("error creating preview request", e); 96 response.sendError(HttpServletResponse.SC_NOT_FOUND); 97 return; 98 } 99 100 log.debug("preview theme = "+previewRequest.getThemeName()); 102 Theme previewTheme = previewRequest.getTheme(); 103 104 WebsiteData tmpWebsite = new WebsiteData(); 107 tmpWebsite.setData(weblog); 108 if(previewTheme != null && previewTheme.isEnabled()) { 109 tmpWebsite.setEditorTheme(previewTheme.getName()); 110 } else if(Theme.CUSTOM.equals(previewRequest.getThemeName())) { 111 tmpWebsite.setEditorTheme(Theme.CUSTOM); 112 } 113 114 previewRequest.setWeblog(tmpWebsite); 117 118 119 Template page = null; 120 try { 121 page = tmpWebsite.getDefaultPage(); 123 124 if(page == null) { 125 throw new RollerException("No default page for weblog: "+tmpWebsite.getHandle()); 126 } 127 } catch(RollerException re) { 128 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 130 log.error("Error getting default page for preview", re); 131 return; 132 } 133 134 log.debug("preview page found, dealing with it"); 135 136 String pageLink = previewRequest.getWeblogPageName(); 138 String mimeType = RollerContext.getServletContext().getMimeType(pageLink); 139 String contentType = "text/html; charset=utf-8"; 140 if(mimeType != null) { 141 contentType = mimeType+"; charset=utf-8"; 143 } else if ("_css".equals(previewRequest.getWeblogPageName())) { 144 contentType = "text/css; charset=utf-8"; 146 } 147 148 Map model = new HashMap (); 150 try { 151 PageContext pageContext = JspFactory.getDefaultFactory().getPageContext( 152 this, request, response,"", true, 8192, true); 153 154 request.setAttribute("pageRequest", previewRequest); 156 157 Map initData = new HashMap (); 159 initData.put("request", request); 160 initData.put("pageRequest", previewRequest); 161 initData.put("weblogRequest", previewRequest); 162 initData.put("pageContext", pageContext); 163 164 String pageModels = RollerConfig.getProperty("rendering.pageModels"); 166 ModelLoader.loadModels(pageModels, model, initData, true); 167 168 if(RollerRuntimeConfig.isSiteWideWeblog(weblog.getHandle())) { 170 String siteModels = RollerConfig.getProperty("rendering.siteModels"); 171 ModelLoader.loadModels(siteModels, model, initData, true); 172 } 173 174 ModelLoader.loadCustomModels(weblog, model, initData); 176 177 ModelLoader.loadOldModels(model, request, response, pageContext, previewRequest); 179 180 } catch (RollerException ex) { 181 log.error("ERROR loading model for page", ex); 182 183 if(!response.isCommitted()) response.reset(); 184 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 185 return; 186 } 187 188 189 Renderer renderer = null; 191 try { 192 log.debug("Looking up renderer"); 193 renderer = RendererManager.getRenderer(page); 194 } catch(Exception e) { 195 log.error("Couldn't find renderer for page "+page.getId(), e); 197 198 if(!response.isCommitted()) response.reset(); 199 response.sendError(HttpServletResponse.SC_NOT_FOUND); 200 return; 201 } 202 203 CachedContent rendererOutput = new CachedContent(24567); 205 try { 206 log.debug("Doing rendering"); 207 renderer.render(model, rendererOutput.getCachedWriter()); 208 209 rendererOutput.flush(); 211 rendererOutput.close(); 212 } catch(Exception e) { 213 log.error("Error during rendering for page "+page.getId(), e); 215 216 if(!response.isCommitted()) response.reset(); 217 response.sendError(HttpServletResponse.SC_NOT_FOUND); 218 return; 219 } 220 221 222 224 log.debug("Flushing response output"); 226 response.setContentType(contentType); 227 response.setContentLength(rendererOutput.getContent().length); 228 response.getOutputStream().write(rendererOutput.getContent()); 229 230 log.debug("Exiting"); 231 } 232 233 } 234 | Popular Tags |