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
37 public class ScriptProcessorRegistry
38 {
39 private static final Log logger = LogFactory.getLog(ScriptProcessorRegistry.class);
40
41
42 private String defaultScriptProcessorName = "javascript";
43
44
45 private Map<String, ScriptProcessor> scriptProcessors = new HashMap<String, ScriptProcessor>(8);
46 private Map<String, String> scriptProcessorNamesByExtension = new HashMap<String, String>(8);
47
48
49
50
51
52
53 public void setDefaultScriptProcessor(String defaultScriptProcessorName)
54 {
55 this.defaultScriptProcessorName = defaultScriptProcessorName;
56 }
57
58
59
60
61
62
63 public void registerScriptProcessor(ScriptProcessor scriptProcessor)
64 {
65 registerScriptProcessor(scriptProcessor, null, null);
66 }
67
68
69
70
71
72
73
74
75 public void registerScriptProcessor(ScriptProcessor scriptProcessor, String extension, String name)
76 {
77 if (name == null && extension == null)
78 {
79
80 if (scriptProcessor instanceof BaseProcessor)
81 {
82 name = ((BaseProcessor)scriptProcessor).getName();
83 extension = ((BaseProcessor)scriptProcessor).getExtension();
84 }
85 }
86
87
88 if (name != null && extension != null)
89 {
90 this.scriptProcessors.put(name, scriptProcessor);
91 this.scriptProcessorNamesByExtension.put(extension, name);
92
93 if (logger.isInfoEnabled())
94 {
95 logger.info("Registered script processor " + name + " for extension " + extension);
96 }
97 }
98 }
99
100
101
102
103
104
105 protected ScriptProcessor getDefaultScriptProcessor()
106 {
107 return (ScriptProcessor) this.scriptProcessors.get(this.defaultScriptProcessorName);
108 }
109
110
111
112
113
114
115
116
117
118
119
120
121 public ScriptProcessor getScriptProcessor(String path)
122 {
123 ScriptProcessor processor = null;
124
125 int i = path.lastIndexOf(".");
126 if (i > -1)
127 {
128 String extension = path.substring(i+1);
129 processor = getScriptProcessorByExtension(extension);
130 }
131
132 if (processor == null)
133 {
134 processor = getDefaultScriptProcessor();
135 }
136
137 return processor;
138 }
139
140
141
142
143
144
145
146
147
148
149
150
151 public ScriptProcessor getScriptProcessor(ScriptContent scriptContent)
152 {
153 return getScriptProcessor(scriptContent.getPath());
154 }
155
156
157
158
159
160
161
162
163 public ScriptProcessor getScriptProcessorByExtension(String extension)
164 {
165 ScriptProcessor processor = null;
166
167 String scriptProcessorName = (String) scriptProcessorNamesByExtension.get(extension);
168 if (scriptProcessorName != null)
169 {
170 processor = (ScriptProcessor) this.scriptProcessors.get(scriptProcessorName);
171 }
172
173 return processor;
174 }
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203 public String findValidScriptPath(String path)
204 {
205 String validScriptPath = null;
206
207
208 int i = path.lastIndexOf(".");
209 if (i > -1)
210 {
211 String extension = path.substring(i+1);
212 ScriptProcessor processor = getScriptProcessorByExtension(extension);
213 if (processor != null && processor.findScript(path) != null)
214 {
215 validScriptPath = path;
216 }
217 }
218
219 if (validScriptPath == null)
220 {
221
222 String[] extensions = this.getRegisteredExtensions();
223 for (String extension: extensions)
224 {
225 ScriptProcessor processor = getScriptProcessorByExtension(extension);
226 if (processor.findScript(path + "." + extension) != null)
227 {
228 validScriptPath = path + "." + extension;
229 }
230 }
231 }
232
233 return validScriptPath;
234 }
235
236
237
238
239
240
241 public String[] getRegisteredExtensions()
242 {
243 return scriptProcessorNamesByExtension.keySet().toArray(new String[scriptProcessorNamesByExtension.keySet().size()]);
244 }
245
246
247
248
249
250
251
252
253 public String getExtensionForProcessor(ScriptProcessor scriptProcessor)
254 {
255 String ext = null;
256
257 String[] extensions = this.getRegisteredExtensions();
258 for (String extension: extensions)
259 {
260 ScriptProcessor processor = getScriptProcessorByExtension(extension);
261 if (processor == scriptProcessor)
262 {
263 ext = extension;
264 }
265 }
266
267 return ext;
268 }
269
270
271
272
273
274 public void reset()
275 {
276 for (ScriptProcessor p : this.scriptProcessors.values())
277 {
278 p.reset();
279 }
280 }
281 }