1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.springframework.extensions.webscripts;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.springframework.extensions.webscripts.processor.BaseProcessor;
27
28
29
30
31
32
33
34
35
36 public class TemplateProcessorRegistry
37 {
38 private static final Log logger = LogFactory.getLog(TemplateProcessorRegistry.class);
39
40
41 private String defaultTemplateProcessorName = "freemarker";
42
43
44 private Map<String, TemplateProcessor> templateProcessors = new HashMap<String, TemplateProcessor>(8);
45 private Map<String, String> templateProcessorNamesByExtension = new HashMap<String, String>(8);
46
47
48
49
50
51
52 public void setDefaultTemplateProcessor(String defaultTemplateProcessorName)
53 {
54 this.defaultTemplateProcessorName = defaultTemplateProcessorName;
55 }
56
57
58
59
60
61
62 public void registerTemplateProcessor(TemplateProcessor templateProcessor)
63 {
64 registerTemplateProcessor(templateProcessor, null, null);
65 }
66
67
68
69
70
71
72
73
74 public void registerTemplateProcessor(TemplateProcessor templateProcessor, String extension, String name)
75 {
76 if (name == null && extension == null)
77 {
78
79 if (templateProcessor instanceof BaseProcessor)
80 {
81 name = ((BaseProcessor)templateProcessor).getName();
82 extension = ((BaseProcessor)templateProcessor).getExtension();
83 }
84 }
85
86
87 if (name != null && extension != null)
88 {
89 this.templateProcessors.put(name, templateProcessor);
90 this.templateProcessorNamesByExtension.put(extension, name);
91
92 if (logger.isInfoEnabled())
93 {
94 logger.info("Registered template processor " + name + " for extension " + extension);
95 }
96 }
97 }
98
99
100
101
102
103
104 protected TemplateProcessor getDefaultTemplateProcessor()
105 {
106 return (TemplateProcessor) this.templateProcessors.get(this.defaultTemplateProcessorName);
107 }
108
109
110
111
112
113
114
115
116
117
118
119 public TemplateProcessor getTemplateProcessor(String path)
120 {
121 TemplateProcessor processor = null;
122
123 int i = path.lastIndexOf(".");
124 if (i > -1)
125 {
126 String extension = path.substring(i+1);
127 String templateProcessorName = (String) templateProcessorNamesByExtension.get(extension);
128 if (templateProcessorName != null)
129 {
130 processor = (TemplateProcessor) this.templateProcessors.get(templateProcessorName);
131 }
132 }
133
134 if (processor == null)
135 {
136 processor = getDefaultTemplateProcessor();
137 }
138
139 return processor;
140 }
141
142
143
144
145
146
147
148
149 public TemplateProcessor getTemplateProcessorByExtension(String extension)
150 {
151 TemplateProcessor processor = null;
152
153 String templateProcessorName = (String) templateProcessorNamesByExtension.get(extension);
154 if (templateProcessorName != null)
155 {
156 processor = (TemplateProcessor) this.templateProcessors.get(templateProcessorName);
157 }
158
159 return processor;
160 }
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 public String findValidTemplatePath(String path)
190 {
191 String validTemplatePath = null;
192
193
194 int i = path.lastIndexOf(".");
195 if (i > -1)
196 {
197 String extension = path.substring(i+1);
198 TemplateProcessor processor = getTemplateProcessorByExtension(extension);
199 if (processor != null && processor.hasTemplate(path))
200 {
201 validTemplatePath = path;
202 }
203 }
204
205 if (validTemplatePath == null)
206 {
207
208 String[] extensions = this.getRegisteredExtensions();
209 for (String extension: extensions)
210 {
211 TemplateProcessor processor = getTemplateProcessorByExtension(extension);
212 if (processor.hasTemplate(path + "." + extension))
213 {
214 validTemplatePath = path + "." + extension;
215 }
216 }
217 }
218
219 return validTemplatePath;
220 }
221
222
223
224
225
226
227 public String[] getRegisteredExtensions()
228 {
229 return templateProcessorNamesByExtension.keySet().toArray(new String[templateProcessorNamesByExtension.keySet().size()]);
230 }
231
232
233
234
235
236
237
238
239 public String getExtensionForProcessor(TemplateProcessor templateProcessor)
240 {
241 String ext = null;
242
243 String[] extensions = this.getRegisteredExtensions();
244 for (String extension: extensions)
245 {
246 TemplateProcessor processor = getTemplateProcessorByExtension(extension);
247 if (processor == templateProcessor)
248 {
249 ext = extension;
250 }
251 }
252
253 return ext;
254 }
255
256
257
258
259 public void reset()
260 {
261 for (TemplateProcessor p : this.templateProcessors.values())
262 {
263 p.reset();
264 }
265 }
266
267 }