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/07/22 00:47:44 UTC

svn commit: r424486 - in /incubator/roller/branches/roller_3.0/src/org/apache/roller: pojos/ ui/rendering/ ui/rendering/servlets/ ui/rendering/velocity/

Author: agilliland
Date: Fri Jul 21 15:47:44 2006
New Revision: 424486

URL: http://svn.apache.org/viewvc?rev=424486&view=rev
Log:
final tweak to rendering system to simplify a couple things and make it truly pluggable.

- RendererFactory's are now given a full Template object to use when looking up a Renderer.

- removed VelocityWeblogPageRenderer.  no longer needed now that decorating process is built into the Templates.

- added StaticTemplate class which is needed for representing static template files.

- updated servlets to conform to tweaks in rendering system.



Added:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java
Removed:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityWeblogPageRenderer.java
Modified:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererFactory.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererManager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/FeedServlet.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PageServlet.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PlanetFeedServlet.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/RSDServlet.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/SearchServlet.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java?rev=424486&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java Fri Jul 21 15:47:44 2006
@@ -0,0 +1,125 @@
+/*
+ * 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.pojos;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * Represents a simple static Template.
+ *
+ * This template is not persisted or managed in any way, this class is here
+ * mainly as a wrapper so that we can represent our static template files as
+ * an object.
+ */
+public class StaticTemplate implements Template, Serializable {
+    
+    private String id = null;
+    private String name = null;
+    private String description = null;
+    private String contents = null;
+    private String link = null;
+    private Date lastModified = new Date();
+    private String templateLanguage = null;
+    private boolean hidden = false;
+    
+    
+    public StaticTemplate() {}
+    
+    public StaticTemplate(String id, String contents, String lang) {
+        this.id = id;
+        this.name = id;
+        this.description = id;
+        this.contents = contents;
+        this.link = id;
+        this.templateLanguage = lang;
+    }
+
+    
+    public Template getDecorator() {
+        return null;
+    }
+    
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getContents() {
+        return contents;
+    }
+
+    public void setContents(String contents) {
+        this.contents = contents;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public Date getLastModified() {
+        return lastModified;
+    }
+
+    public void setLastModified(Date lastModified) {
+        this.lastModified = lastModified;
+    }
+
+    public String getTemplateLanguage() {
+        return templateLanguage;
+    }
+
+    public void setTemplateLanguage(String templateLanguage) {
+        this.templateLanguage = templateLanguage;
+    }
+
+    public boolean isHidden() {
+        return hidden;
+    }
+
+    public void setHidden(boolean hidden) {
+        this.hidden = hidden;
+    }
+    
+    
+}

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererFactory.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererFactory.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererFactory.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererFactory.java Fri Jul 21 15:47:44 2006
@@ -18,6 +18,8 @@
 
 package org.apache.roller.ui.rendering;
 
+import org.apache.roller.pojos.Template;
+
 
 /**
  * A factory for Renderer objects.
@@ -29,10 +31,10 @@
     
     
     /**
-     * Get a Renderer that will handle the given rendererType and resource.
+     * Get a Renderer that will handle the given Template.
      * If a RendererFactory does not have a Renderer which can handle the
      * content then it may return null.
      */
-    public Renderer getRenderer(String rendererType, String resourceId);
+    public Renderer getRenderer(Template template);
     
 }

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererManager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererManager.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererManager.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererManager.java Fri Jul 21 15:47:44 2006
@@ -24,6 +24,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.config.RollerConfig;
+import org.apache.roller.pojos.Template;
 
 
 /**
@@ -106,8 +107,7 @@
      * instance and tries to find a Renderer for the content.  If no Renderer
      * can be found then we throw an exception.
      */
-    public static Renderer getRenderer(String rendererType, String resourceId) 
-            throws Exception {
+    public static Renderer getRenderer(Template template) throws Exception {
         
         Renderer renderer = null;
         
@@ -115,7 +115,7 @@
         // wants to handle this content
         Iterator factories = rendererFactories.iterator();
         while(factories.hasNext()) {
-            renderer = ((RendererFactory)factories.next()).getRenderer(rendererType, resourceId);
+            renderer = ((RendererFactory)factories.next()).getRenderer(template);
             
             if(renderer != null) {
                 return renderer;

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/FeedServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/FeedServlet.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/FeedServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/FeedServlet.java Fri Jul 21 15:47:44 2006
@@ -19,8 +19,6 @@
 package org.apache.roller.ui.rendering.servlets;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.Map;
 import javax.servlet.ServletConfig;
@@ -32,6 +30,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.RollerException;
 import org.apache.roller.config.RollerRuntimeConfig;
+import org.apache.roller.pojos.StaticTemplate;
+import org.apache.roller.pojos.Template;
 import org.apache.roller.pojos.WebsiteData;
 import org.apache.roller.ui.rendering.util.WeblogFeedRequest;
 import org.apache.roller.util.cache.CachedContent;
@@ -213,7 +213,8 @@
         Renderer renderer = null;
         try {
             log.debug("Looking up renderer");
-            renderer = RendererManager.getRenderer("velocity", pageId);
+            Template template = new StaticTemplate(pageId, null, "velocity");
+            renderer = RendererManager.getRenderer(template);
         } catch(Exception e) {
             // nobody wants to render my content :(
             log.error("Couldn't find renderer for page "+pageId, e);

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PageServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PageServlet.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PageServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PageServlet.java Fri Jul 21 15:47:44 2006
@@ -306,7 +306,7 @@
         Renderer renderer = null;
         try {
             log.debug("Looking up renderer");
-            renderer = RendererManager.getRenderer("velocityWeblogPage", page.getId());
+            renderer = RendererManager.getRenderer(page);
         } catch(Exception e) {
             // nobody wants to render my content :(
             log.error("Couldn't find renderer for page "+page.getId(), e);

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PlanetFeedServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PlanetFeedServlet.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PlanetFeedServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PlanetFeedServlet.java Fri Jul 21 15:47:44 2006
@@ -32,6 +32,8 @@
 import org.apache.roller.config.RollerRuntimeConfig;
 import org.apache.roller.model.PlanetManager;
 import org.apache.roller.model.RollerFactory;
+import org.apache.roller.pojos.StaticTemplate;
+import org.apache.roller.pojos.Template;
 import org.apache.roller.ui.rendering.Renderer;
 import org.apache.roller.ui.rendering.RendererManager;
 import org.apache.roller.ui.rendering.util.PlanetCache;
@@ -176,7 +178,8 @@
         Renderer renderer = null;
         try {
             log.debug("Looking up renderer");
-            renderer = RendererManager.getRenderer("velocity", "templates/planet/planetrss.vm");
+            Template template = new StaticTemplate("templates/planet/planetrss.vm", null, "velocity");
+            renderer = RendererManager.getRenderer(template);
         } catch(Exception e) {
             // nobody wants to render my content :(
             log.error("Couldn't find renderer for planet rss", e);

Modified: 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=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PreviewServlet.java Fri Jul 21 15:47:44 2006
@@ -181,7 +181,7 @@
         Renderer renderer = null;
         try {
             log.debug("Looking up renderer");
-            renderer = RendererManager.getRenderer("velocityWeblogPage", page.getId());
+            renderer = RendererManager.getRenderer(page);
         } catch(Exception e) {
             // nobody wants to render my content :(
             log.error("Couldn't find renderer for page "+page.getId(), e);

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/RSDServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/RSDServlet.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/RSDServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/RSDServlet.java Fri Jul 21 15:47:44 2006
@@ -29,6 +29,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.RollerException;
 import org.apache.roller.config.RollerRuntimeConfig;
+import org.apache.roller.pojos.StaticTemplate;
+import org.apache.roller.pojos.Template;
 import org.apache.roller.pojos.WebsiteData;
 import org.apache.roller.ui.rendering.util.WeblogRequest;
 import org.apache.roller.ui.rendering.Renderer;
@@ -116,7 +118,8 @@
         Renderer renderer = null;
         try {
             log.debug("Looking up renderer");
-            renderer = RendererManager.getRenderer("velocity", "templates/weblog/rsd.vm");
+            Template template = new StaticTemplate("templates/weblog/rsd.vm", null, "velocity");
+            renderer = RendererManager.getRenderer(template);
         } catch(Exception e) {
             // nobody wants to render my content :(
             log.error("Couldn't find renderer for rsd template", e);

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/SearchServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/SearchServlet.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/SearchServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/SearchServlet.java Fri Jul 21 15:47:44 2006
@@ -165,7 +165,7 @@
         Renderer renderer = null;
         try {
             log.debug("Looking up renderer");
-            renderer = RendererManager.getRenderer("velocity", page.getId());
+            renderer = RendererManager.getRenderer(page);
         } catch(Exception e) {
             // nobody wants to render my content :(
             log.error("Couldn't find renderer for rsd template", e);

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java Fri Jul 21 15:47:44 2006
@@ -18,13 +18,14 @@
 
 package org.apache.roller.ui.rendering.velocity;
 
+import java.io.StringWriter;
 import java.io.Writer;
 import java.util.Map;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.roller.pojos.Template;
 import org.apache.roller.ui.rendering.Renderer;
 import org.apache.roller.ui.rendering.model.UtilitiesModel;
-import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.context.Context;
 import org.apache.velocity.exception.ParseErrorException;
@@ -37,26 +38,40 @@
     
     private static Log log = LogFactory.getLog(VelocityRenderer.class);
     
-    private String resourceId = null;
-    private Template resourceTemplate = null;
+    // the original template we are supposed to render
+    private Template renderTemplate = null;
+    
+    // the velocity templates
+    private org.apache.velocity.Template velocityTemplate = null;
+    private org.apache.velocity.Template velocityDecorator = null;
+    
+    // a possible exception
     private Exception parseException = null;
     
     
-    public VelocityRenderer(String resource) throws Exception {
+    public VelocityRenderer(Template template) throws Exception {
         
-        this.resourceId = resource;
+        // the Template we are supposed to render
+        this.renderTemplate = template;
         
         try {
             // make sure that we can locate the template
             // if we can't then this will throw an exception
-            resourceTemplate = RollerVelocity.getTemplate(this.resourceId, "UTF-8");
+            velocityTemplate = RollerVelocity.getTemplate(template.getId(), "UTF-8");
+            
+            // if there is a decorator then look that up too
+            Template decorator = renderTemplate.getDecorator();
+            if(decorator != null) {
+                velocityDecorator = RollerVelocity.getTemplate(decorator.getId());
+            }
+            
         } catch(ParseErrorException ex) {
             // in the case of a parsing error we want to render an
             // error page instead so the user knows what was wrong
             parseException = ex;
             
             // need to lookup error page template
-            resourceTemplate = RollerVelocity.getTemplate("templates/error-page.vm");
+            velocityTemplate = RollerVelocity.getTemplate("templates/error-page.vm");
         }
     }
     
@@ -67,11 +82,11 @@
             
             Context ctx = new VelocityContext(model);
             ctx.put("exception", parseException);
-            ctx.put("exceptionSource", resourceId);
+            ctx.put("exceptionSource", renderTemplate.getId());
             ctx.put("utils", new UtilitiesModel());
             
             // render output to Writer
-            resourceTemplate.merge(ctx, out);
+            velocityTemplate.merge(ctx, out);
             
             // and we're done
             return;
@@ -82,13 +97,35 @@
         // convert model to Velocity Context
         Context ctx = new VelocityContext(model);
         
-        // render output to Writer
-        this.resourceTemplate.merge(ctx, out);
+        if(velocityDecorator != null) {
+            
+            /**
+             * We only allow decorating once, so the process isn't
+             * fully recursive.  This is just to keep it simple.
+             */
+            
+            // render base template to a temporary StringWriter
+            StringWriter sw = new StringWriter();
+            velocityTemplate.merge(ctx, sw);
+            
+            // put rendered template into context
+            ctx.put("decorator_body", sw.toString());
+            
+            log.debug("Applying decorator "+velocityDecorator.getName());
+            
+            // now render decorator to our output writer
+            velocityDecorator.merge(ctx, out);
+            
+        } else {
+            
+            // no decorator, so just merge template to our output writer
+            velocityTemplate.merge(ctx, out);
+        }
         
         long endTime = System.currentTimeMillis();
         long renderTime = (endTime - startTime)/1000;
         
-        log.debug("Rendered ["+this.resourceId+"] in "+renderTime+" secs");
+        log.debug("Rendered ["+renderTemplate.getId()+"] in "+renderTime+" secs");
     }
 
 }

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java?rev=424486&r1=424485&r2=424486&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java Fri Jul 21 15:47:44 2006
@@ -18,10 +18,9 @@
 
 package org.apache.roller.ui.rendering.velocity;
 
+import org.apache.roller.pojos.Template;
 import org.apache.roller.ui.rendering.Renderer;
 import org.apache.roller.ui.rendering.RendererFactory;
-import org.apache.velocity.exception.ParseErrorException;
-
 
 /**
  * Velocity RendererFactory for Roller.
@@ -29,33 +28,24 @@
 public class VelocityRendererFactory implements RendererFactory {
     
     
-    public Renderer getRenderer(String rendererType, String resourceId) {
+    public Renderer getRenderer(Template template) {
         
         Renderer renderer = null;
         
         // nothing we can do with null values
-        if(rendererType == null || resourceId == null) {
+        if(template.getTemplateLanguage() == null || template.getId() == null) {
             return null;
         }
         
-        if("velocity".equals(rendererType)) { 
+        if("velocity".equals(template.getTemplateLanguage())) { 
             
             // standard velocity template
             try {
-               renderer = new VelocityRenderer(resourceId);
+               renderer = new VelocityRenderer(template);
             } catch(Exception ignored) {
                 // can't render
             }            
             
-        } else if("velocityWeblogPage".equals(rendererType)) {
-            
-            // special case for velocity weblog page templates
-            // needed because of the way we do the decorator stuff
-            try {
-                renderer = new VelocityWeblogPageRenderer(resourceId);
-            } catch(Exception ignored) {
-                // can't render
-            }   
         }
         
         return renderer;