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 03:12:48 UTC
svn commit: r414421 - in /incubator/roller/branches/roller_3.0:
src/org/apache/roller/ui/rendering/
src/org/apache/roller/ui/rendering/servlets/
src/org/apache/roller/ui/rendering/velocity/ web/WEB-INF/classes/
Author: agilliland
Date: Wed Jun 14 18:12:47 2006
New Revision: 414421
URL: http://svn.apache.org/viewvc?rev=414421&view=rev
Log:
adding in RendererManager class for governing the rendering system.
- added RendererManager class.
- modified servlets (page, feed, rsd) to use RendererManager.
- tweaked RendererFactory interface to not throw exception from getRenderer().
- renamed RollerRendererFactory to VelocityRendererFactory.
- added new static config properties for specifying renderer factories.
Added:
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/VelocityRendererFactory.java
- copied, changed from r414313, incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RollerRendererFactory.java
Removed:
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RollerRendererFactory.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/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/RSDServlet.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/VelocityWeblogPageRenderer.java
incubator/roller/branches/roller_3.0/web/WEB-INF/classes/roller.properties
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=414421&r1=414420&r2=414421&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 Wed Jun 14 18:12:47 2006
@@ -1,3 +1,20 @@
+/*
+ * 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;
@@ -5,11 +22,17 @@
/**
* A factory for Renderer objects.
*
- * Implementations of this interface are used to handle that actual lookup of
+ * Implementations of this interface are used to handle the actual lookup of
* what Renderer object should be used to render a given resource.
*/
public interface RendererFactory {
- public Renderer getRenderer(String rendererType, String resourceId) throws Exception;
+
+ /**
+ * Get a Renderer that will handle the given rendererType and resource.
+ * 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);
}
Added: 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=414421&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererManager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RendererManager.java Wed Jun 14 18:12:47 2006
@@ -0,0 +1,128 @@
+/*
+ * 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;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.config.RollerConfig;
+
+
+/**
+ * A governing class for Rollers rendering system.
+ *
+ * The purpose of the RendererManager is to provide a level of abstraction
+ * between classes that are rendering content and the implementations of the
+ * rendering technology. This allows us to provide easily pluggable rendering
+ * implementations.
+ */
+public class RendererManager {
+
+ private static Log log = LogFactory.getLog(RendererManager.class);
+
+ // a set of all renderer factories we are consulting
+ private static Set rendererFactories = new HashSet();
+
+
+ static {
+ // lookup set of renderer factories we are going to use
+ String rollerFactories = RollerConfig.getProperty("rendering.rollerRendererFactories");
+ String userFactories = RollerConfig.getProperty("rendering.userRendererFactories");
+
+ // instantiate user defined renderer factory classes
+ if(userFactories != null && userFactories.trim().length() > 0) {
+
+ RendererFactory rendererFactory = null;
+ String[] uFactories = userFactories.split(",");
+ for(int i=0; i < uFactories.length; i++) {
+ try {
+ Class factoryClass = Class.forName(uFactories[i]);
+ rendererFactory = (RendererFactory) factoryClass.newInstance();
+ rendererFactories.add(rendererFactory);
+ } catch(ClassCastException cce) {
+ log.error("It appears that your factory does not implement "+
+ "the RendererFactory interface", cce);
+ } catch(Exception e) {
+ log.error("Unable to instantiate renderer factory ["+uFactories[i]+"]", e);
+ }
+ }
+ }
+
+ // instantiate roller standard renderer factory classes
+ if(rollerFactories != null && rollerFactories.trim().length() > 0) {
+
+ RendererFactory rendererFactory = null;
+ String[] rFactories = rollerFactories.split(",");
+ for(int i=0; i < rFactories.length; i++) {
+ try {
+ Class factoryClass = Class.forName(rFactories[i]);
+ rendererFactory = (RendererFactory) factoryClass.newInstance();
+ rendererFactories.add(rendererFactory);
+ } catch(ClassCastException cce) {
+ log.error("It appears that your factory does not implement "+
+ "the RendererFactory interface", cce);
+ } catch(Exception e) {
+ log.error("Unable to instantiate renderer factory ["+rFactories[i]+"]", e);
+ }
+ }
+ }
+
+ if(rendererFactories.size() < 1) {
+ // hmm ... failed to load any renderer factories?
+ log.warn("Failed to load any renderer factories. "+
+ "Rendering probably won't function as you expect.");
+ }
+
+ log.info("Renderer Manager Initialized.");
+ }
+
+
+ // this class is non-instantiable
+ private RendererManager() {}
+
+
+ /**
+ * Find the appropriate Renderer for the given content.
+ *
+ * This method checks all renderer factories configured for the Roller
+ * 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 {
+
+ Renderer renderer = null;
+
+ // iterate over our renderer factories and see if one of them
+ // wants to handle this content
+ Iterator factories = rendererFactories.iterator();
+ while(factories.hasNext()) {
+ renderer = ((RendererFactory)factories.next()).getRenderer(rendererType, resourceId);
+
+ if(renderer != null) {
+ return renderer;
+ }
+ }
+
+ throw new Exception("No renderer found!");
+ }
+
+}
Copied: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/VelocityRendererFactory.java (from r414313, incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RollerRendererFactory.java)
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/VelocityRendererFactory.java?p2=incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/VelocityRendererFactory.java&p1=incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RollerRendererFactory.java&r1=414313&r2=414421&rev=414421&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/RollerRendererFactory.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/VelocityRendererFactory.java Wed Jun 14 18:12:47 2006
@@ -8,11 +8,10 @@
/**
* The default RendererFactory for Roller.
*/
-public class RollerRendererFactory implements RendererFactory {
+public class VelocityRendererFactory implements RendererFactory {
- public Renderer getRenderer(String rendererType, String resourceId)
- throws Exception {
+ public Renderer getRenderer(String rendererType, String resourceId) {
if("velocity".equals(rendererType)) {
@@ -25,7 +24,8 @@
return new VelocityWeblogPageRenderer(resourceId);
}
- throw new Exception("No renderer found!");
+ // we don't want to handle this content
+ return null;
}
}
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=414421&r1=414420&r2=414421&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 Wed Jun 14 18:12:47 2006
@@ -52,8 +52,7 @@
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.RendererFactory;
-import org.apache.roller.ui.rendering.RollerRendererFactory;
+import org.apache.roller.ui.rendering.RendererManager;
import org.apache.roller.util.cache.Cache;
import org.apache.roller.util.cache.CacheHandler;
import org.apache.roller.util.cache.CacheManager;
@@ -76,8 +75,6 @@
// roller config properties that apply to this cache
private static final String CACHE_ID = "cache.feed";
- private RendererFactory rendererFactory = null;
-
private Cache contentCache = null;
// for metrics
@@ -112,8 +109,6 @@
log.info(cacheProps);
contentCache = CacheManager.constructCache(this, cacheProps);
-
- this.rendererFactory = new RollerRendererFactory();
}
@@ -285,7 +280,7 @@
Renderer renderer = null;
try {
log.debug("Looking up renderer");
- renderer = rendererFactory.getRenderer("velocity", pageId);
+ renderer = RendererManager.getRenderer("velocity", pageId);
} 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=414421&r1=414420&r2=414421&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 Wed Jun 14 18:12:47 2006
@@ -48,13 +48,10 @@
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.core.util.ResponseContent;
import org.apache.roller.ui.rendering.velocity.ContextLoader;
-import org.apache.roller.ui.rendering.velocity.WebappResourceLoader;
import org.apache.roller.util.cache.CachedContent;
import org.apache.roller.ui.rendering.Renderer;
-import org.apache.roller.ui.rendering.RendererFactory;
-import org.apache.roller.ui.rendering.RollerRendererFactory;
+import org.apache.roller.ui.rendering.RendererManager;
import org.apache.roller.util.Utilities;
import org.apache.roller.util.cache.Cache;
import org.apache.roller.util.cache.CacheHandler;
@@ -76,8 +73,6 @@
// roller config properties that apply to this cache
private static final String CACHE_ID = "cache.weblogpage";
- private RendererFactory rendererFactory = null;
-
private boolean excludeOwnerPages = false;
private Cache contentCache = null;
@@ -117,8 +112,6 @@
log.info(cacheProps);
contentCache = CacheManager.constructCache(this, cacheProps);
-
- this.rendererFactory = new RollerRendererFactory();
}
@@ -284,7 +277,7 @@
Renderer renderer = null;
try {
log.debug("Looking up renderer");
- renderer = rendererFactory.getRenderer("velocityWeblogPage", page.getId());
+ 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);
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=414421&r1=414420&r2=414421&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 Wed Jun 14 18:12:47 2006
@@ -35,8 +35,7 @@
import org.apache.roller.ui.core.RollerContext;
import org.apache.roller.ui.core.WeblogRequest;
import org.apache.roller.ui.rendering.Renderer;
-import org.apache.roller.ui.rendering.RendererFactory;
-import org.apache.roller.ui.rendering.RollerRendererFactory;
+import org.apache.roller.ui.rendering.RendererManager;
import org.apache.roller.util.cache.CachedContent;
@@ -53,8 +52,6 @@
private static Log log = LogFactory.getLog(RSDServlet.class);
- private RendererFactory rendererFactory = null;
-
/**
* Init method for this servlet
@@ -64,8 +61,6 @@
super.init(servletConfig);
log.info("Initializing RSDServlet");
-
- this.rendererFactory = new RollerRendererFactory();
}
@@ -131,7 +126,7 @@
Renderer renderer = null;
try {
log.debug("Looking up renderer");
- renderer = rendererFactory.getRenderer("velocity", "templates/weblog/rsd.vm");
+ renderer = RendererManager.getRenderer("velocity", "templates/weblog/rsd.vm");
} 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=414421&r1=414420&r2=414421&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 Wed Jun 14 18:12:47 2006
@@ -21,7 +21,7 @@
private String resourceId = null;
- public VelocityRenderer(String resource) throws Exception {
+ public VelocityRenderer(String resource) {
this.resourceId = resource;
}
Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityWeblogPageRenderer.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityWeblogPageRenderer.java?rev=414421&r1=414420&r2=414421&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityWeblogPageRenderer.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityWeblogPageRenderer.java Wed Jun 14 18:12:47 2006
@@ -27,7 +27,7 @@
private String resourceId = null;
- public VelocityWeblogPageRenderer(String resource) throws Exception {
+ public VelocityWeblogPageRenderer(String resource) {
this.resourceId = resource;
}
Modified: incubator/roller/branches/roller_3.0/web/WEB-INF/classes/roller.properties
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/web/WEB-INF/classes/roller.properties?rev=414421&r1=414420&r2=414421&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/web/WEB-INF/classes/roller.properties (original)
+++ incubator/roller/branches/roller_3.0/web/WEB-INF/classes/roller.properties Wed Jun 14 18:12:47 2006
@@ -74,6 +74,17 @@
# is false, comments are not included in the index.
search.index.comments=true
+
+#----------------------------------
+# Rendering system settings.
+
+# The set of default Roller renderer factories.
+rendering.rollerRendererFactories=org.apache.roller.ui.rendering.VelocityRendererFactory
+
+# The set of user defined renderer factories. This is added to the list above.
+rendering.userRendererFactories=
+
+
#----------------------------------
# Cache settings.
# Remember ... times are in seconds