You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2006/06/15 22:05:48 UTC

svn commit: r414668 - in /incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering: servlets/PreviewServlet.java velocity/PreviewServlet.java

Author: agilliland
Date: Thu Jun 15 13:05:48 2006
New Revision: 414668

URL: http://svn.apache.org/viewvc?rev=414668&view=rev
Log:
new version of preview servlet using new rendering system.  unmapping old preview servlet.


Added:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java
Modified:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/PreviewServlet.java

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java?rev=414668&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java Thu Jun 15 13:05:48 2006
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.rendering.servlets;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspFactory;
+import javax.servlet.jsp.PageContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
+import org.apache.roller.ThemeNotFoundException;
+import org.apache.roller.model.RollerFactory;
+import org.apache.roller.model.ThemeManager;
+import org.apache.roller.pojos.Template;
+import org.apache.roller.pojos.Theme;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.ui.core.InvalidRequestException;
+import org.apache.roller.ui.core.RollerContext;
+import org.apache.roller.ui.core.RollerRequest;
+import org.apache.roller.ui.core.WeblogPageRequest;
+import org.apache.roller.ui.rendering.velocity.ContextLoader;
+import org.apache.roller.util.cache.CachedContent;
+import org.apache.roller.ui.rendering.Renderer;
+import org.apache.roller.ui.rendering.RendererManager;
+
+/**
+ * Responsible for rendering weblog page previews.
+ *
+ * @web.servlet name="PreviewServlet" load-on-startup="7"
+ * @web.servlet-mapping url-pattern="/preview/*"
+ */
+public class PreviewServlet extends HttpServlet {
+    
+    private static Log log = LogFactory.getLog(PreviewServlet.class);
+    
+    
+    /**
+     * Init method for this servlet
+     */
+    public void init(ServletConfig servletConfig) throws ServletException {
+        
+        super.init(servletConfig);
+        
+        log.info("Initializing PreviewServlet");
+    }
+    
+    
+    /**
+     * Handle GET requests for weblog pages.
+     */
+    public void doGet(HttpServletRequest request, HttpServletResponse response) 
+            throws ServletException, IOException {
+        
+        log.debug("Entering");
+        
+        Theme previewTheme = null;
+        WebsiteData website = null;
+        
+        // try getting the preview theme
+        String themeName = request.getParameter("theme");
+        log.debug("preview theme = "+themeName);
+        if (themeName != null) {
+            try {
+                ThemeManager themeMgr = RollerFactory.getRoller().getThemeManager();
+                previewTheme = themeMgr.getTheme(themeName);
+                
+            } catch(ThemeNotFoundException tnfe) {
+                // bogus theme specified ... don't worry about it
+                // possibly "custom", but we'll handle that below
+            } catch(RollerException re) {
+                
+                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                log.error("Error doing page preview", re);
+                return;
+            }
+        }
+        
+        // TODO 3.0: change to previewRequest
+//        WeblogPageRequest pageRequest = null;
+//        try {
+//            pageRequest = new WeblogPageRequest(request);
+//        } catch (Exception e) {
+//            // some kind of error parsing the request
+//            log.error("error creating page request", e);
+//            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+//            return;
+//        }
+        
+        // TODO: this is old logic from pre 3.0 that we'll remove when possible
+        RollerRequest rreq = null;
+        try {
+            PageContext pageContext = 
+                    JspFactory.getDefaultFactory().getPageContext(
+                    this, request, response,"", true, 8192, true);
+            
+            rreq = RollerRequest.getRollerRequest(pageContext);
+            
+            // make sure the website is valid
+            website = rreq.getWebsite();
+            if(website == null)
+                throw new InvalidRequestException("invalid weblog");
+            
+        } catch (Exception e) {
+            // An error initializing the request is considered to be a 404
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            log.error("ERROR initializing RollerRequest", e);
+            return;
+        }
+        
+        // construct a temporary Website object for this request
+        // and set the EditorTheme to our previewTheme
+        WebsiteData tmpWebsite = new WebsiteData();
+        tmpWebsite.setData(website);
+        if(previewTheme != null && previewTheme.isEnabled()) {
+            tmpWebsite.setEditorTheme(previewTheme.getName());
+        } else if(themeName.equals(Theme.CUSTOM)) {
+            tmpWebsite.setEditorTheme(Theme.CUSTOM);
+        }
+        
+        Template page = null;
+        try {
+            page = tmpWebsite.getDefaultPage();
+        } catch(RollerException re) {
+            // couldn't get page
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            log.error("Error getting default page for preview", re);
+            return;
+        }
+        
+        if (page == null) {
+            // previewing a custom theme when they have no templates
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            log.error("No page found for rendering");
+            return;
+        }
+        
+        // update our roller request object
+        rreq.setPage(page);
+        rreq.setWebsite(tmpWebsite);
+        
+        log.debug("preview page found, dealing with it");
+        
+        // set the content type
+        String pageLink = page.getLink();
+        String mimeType = RollerContext.getServletContext().getMimeType(pageLink);
+        if(mimeType != null) {
+            // we found a match ... set the content type
+            response.setContentType(mimeType+"; charset=utf-8");
+        } else {
+            response.setContentType("text/html; charset=utf-8");
+        }
+        
+        // looks like we need to render content
+        HashMap model = new HashMap();
+        try {
+            // populate the model
+            ContextLoader.setupContext(model, rreq, response);
+            
+        } catch (RollerException ex) {
+            log.error("ERROR loading model for page", ex);
+            
+            if(!response.isCommitted()) response.reset();
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            return;
+        }
+        
+        
+        // lookup Renderer we are going to use
+        Renderer renderer = null;
+        try {
+            log.debug("Looking up renderer");
+            renderer = RendererManager.getRenderer("velocityWeblogPage", page.getId());
+        } catch(Exception e) {
+            // nobody wants to render my content :(
+            log.error("Couldn't find renderer for page "+page.getId(), e);
+            
+            if(!response.isCommitted()) response.reset();
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
+        
+        // render content.  use default size of about 24K for a standard page
+        CachedContent rendererOutput = new CachedContent(24567);
+        try {
+            log.debug("Doing rendering");
+            renderer.render(model, rendererOutput.getCachedWriter());
+            
+            // flush rendered output and close
+            rendererOutput.flush();
+            rendererOutput.close();
+        } catch(Exception e) {
+            // bummer, error during rendering
+            log.error("Error during rendering for page "+page.getId(), e);
+            
+            if(!response.isCommitted()) response.reset();
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
+        
+        
+        // post rendering process
+        
+        // flush rendered content to response
+        log.debug("Flushing response output");
+        response.setContentLength(rendererOutput.getContent().length);
+        response.getOutputStream().write(rendererOutput.getContent());
+        
+        log.debug("Exiting");
+    }
+    
+}

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/PreviewServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/PreviewServlet.java?rev=414668&r1=414667&r2=414668&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/PreviewServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/PreviewServlet.java Thu Jun 15 13:05:48 2006
@@ -43,8 +43,8 @@
 /**
  * Allow users to preview what their blog would look like in a given theme.
  *
- * @web.servlet name="PreviewServlet" load-on-startup="1"
- * @web.servlet-mapping url-pattern="/preview/*"
+ * web.servlet name="PreviewServlet" load-on-startup="1"
+ * web.servlet-mapping url-pattern="/preview/*"
  */
 public class PreviewServlet extends PageServlet {