File Source: RendererManager.java
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. The ASF licenses this file to You
4 * under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License. For additional information regarding
15 * copyright in this work, please see the NOTICE file in the top level
16 * directory of this distribution.
17 */
18
19 package org.apache.roller.weblogger.ui.rendering;
20
21 import java.util.HashSet;
22 import java.util.Iterator;
23 import java.util.Set;
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.roller.weblogger.config.WebloggerConfig;
27 import org.apache.roller.weblogger.pojos.Template;
28
29
30 /**
31 * Returns Renderer for Template via configured RendererFactories.
32 *
33 * The purpose of the RendererManager is to provide a level of abstraction
34 * between classes that are rendering content and the implementations of the
35 * rendering technology. This allows us to provide easily pluggable rendering
36 * implementations.
37 */
38 public class RendererManager {
39
/*
P/P * Method: org.apache.roller.weblogger.ui.rendering.RendererManager__static_init
*
* Presumptions:
* org.apache.commons.logging.LogFactory:getLog(...)@40 != null
*
* Postconditions:
* "Unable to instantiate renderer factory ["._tainted == 0
* "]"._tainted == 0
* (soft) log != null
* rendererFactories == &new HashSet(RendererManager__static_init#1)
* new HashSet(RendererManager__static_init#1) num objects == 1
*
* Test Vectors:
* java.lang.String:length(...)@52: {0}, {1..232-1}
* java.lang.String:length(...)@71: {0}, {1..232-1}
* java.util.Set:size(...)@89: {1..232-1}, {-231..0}
* org.apache.roller.weblogger.config.WebloggerConfig:getProperty(...)@48: Addr_Set{null}, Inverse{null}
* org.apache.roller.weblogger.config.WebloggerConfig:getProperty(...)@49: Addr_Set{null}, Inverse{null}
*/
40 private static Log log = LogFactory.getLog(RendererManager.class);
41
42 // a set of all renderer factories we are consulting
43 private static Set rendererFactories = new HashSet();
44
45
46 static {
47 // lookup set of renderer factories we are going to use
48 String rollerFactories = WebloggerConfig.getProperty("rendering.rollerRendererFactories");
49 String userFactories = WebloggerConfig.getProperty("rendering.userRendererFactories");
50
51 // instantiate user defined renderer factory classes
52 if(userFactories != null && userFactories.trim().length() > 0) {
53
54 RendererFactory rendererFactory = null;
55 String[] uFactories = userFactories.split(",");
+ 56 for(int i=0; i < uFactories.length; i++) {
57 try {
+ 58 Class factoryClass = Class.forName(uFactories[i]);
59 rendererFactory = (RendererFactory) factoryClass.newInstance();
60 rendererFactories.add(rendererFactory);
61 } catch(ClassCastException cce) {
62 log.error("It appears that your factory does not implement "+
63 "the RendererFactory interface", cce);
64 } catch(Exception e) {
65 log.error("Unable to instantiate renderer factory ["+uFactories[i]+"]", e);
66 }
67 }
68 }
69
70 // instantiate roller standard renderer factory classes
71 if(rollerFactories != null && rollerFactories.trim().length() > 0) {
72
73 RendererFactory rendererFactory = null;
74 String[] rFactories = rollerFactories.split(",");
+ 75 for(int i=0; i < rFactories.length; i++) {
76 try {
+ 77 Class factoryClass = Class.forName(rFactories[i]);
78 rendererFactory = (RendererFactory) factoryClass.newInstance();
79 rendererFactories.add(rendererFactory);
80 } catch(ClassCastException cce) {
81 log.error("It appears that your factory does not implement "+
82 "the RendererFactory interface", cce);
83 } catch(Exception e) {
84 log.error("Unable to instantiate renderer factory ["+rFactories[i]+"]", e);
85 }
86 }
87 }
88
89 if(rendererFactories.size() < 1) {
90 // hmm ... failed to load any renderer factories?
91 log.warn("Failed to load any renderer factories. "+
92 "Rendering probably won't function as you expect.");
93 }
94
95 log.info("Renderer Manager Initialized.");
96 }
97
98
99 // this class is non-instantiable
/*
P/P * Method: void org.apache.roller.weblogger.ui.rendering.RendererManager()
*/
100 private RendererManager() {}
101
102
103 /**
104 * Find the appropriate Renderer for the given content.
105 *
106 * This method checks all renderer factories configured for the Roller
107 * instance and tries to find a Renderer for the content. If no Renderer
108 * can be found then we throw an exception.
109 */
110 public static Renderer getRenderer(Template template)
111 throws RenderingException {
112
/*
P/P * Method: Renderer getRenderer(Template)
*
* Preconditions:
* rendererFactories != null
*
* Presumptions:
* java.util.Iterator:hasNext(...)@118 == 1
* java.util.Iterator:next(...)@119 != null
*
* Postconditions:
* return_value != null
*
* Test Vectors:
* getRenderer(...)@119: Addr_Set{null}, Inverse{null}
*/
113 Renderer renderer = null;
114
115 // iterate over our renderer factories and see if one of them
116 // wants to handle this content
117 Iterator factories = rendererFactories.iterator();
118 while(factories.hasNext()) {
119 renderer = ((RendererFactory)factories.next()).getRenderer(template);
120
121 if(renderer != null) {
122 return renderer;
123 }
124 }
125
+ 126 throw new RenderingException("No renderer found for template "+
127 template.getId()+"!");
128 }
129
130 }
SofCheck Inspector Build Version : 2.18479
| RendererManager.java |
2009-Jan-02 14:25:26 |
| RendererManager.class |
2009-Sep-04 03:12:44 |