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;