1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.osgi;
23
24 import java.io.File;
25 import java.io.IOException;
26
27 import javax.servlet.ServletContext;
28
29 import org.apache.struts2.osgi.loaders.FreeMarkerBundleResourceLoader;
30 import org.apache.struts2.views.freemarker.FreemarkerManager;
31 import org.apache.struts2.views.freemarker.StrutsClassTemplateLoader;
32
33 import com.opensymphony.xwork2.util.logging.Logger;
34 import com.opensymphony.xwork2.util.logging.LoggerFactory;
35
36 import freemarker.cache.FileTemplateLoader;
37 import freemarker.cache.MultiTemplateLoader;
38 import freemarker.cache.TemplateLoader;
39 import freemarker.cache.WebappTemplateLoader;
40
41 /***
42 * This class extends FreemarkerManager in core to add a template loader
43 * (that finds resources inside bundles) to MultiTemplateLoader
44 */
45 public class BundleFreemarkerManager extends FreemarkerManager {
46 private static final Logger LOG = LoggerFactory.getLogger(BundleFreemarkerManager.class);
47
48 @Override
49 protected TemplateLoader getTemplateLoader(ServletContext servletContext) {
50
51 FileTemplateLoader templatePathLoader = null;
52
53 String templatePath = servletContext.getInitParameter("TemplatePath");
54 if (templatePath == null) {
55 templatePath = servletContext.getInitParameter("templatePath");
56 }
57
58 if (templatePath != null) {
59 try {
60 templatePathLoader = new FileTemplateLoader(new File(templatePath));
61 } catch (IOException e) {
62 if (LOG.isErrorEnabled())
63 LOG.error("Invalid template path specified: [#0]", e, e.getMessage());
64 }
65 }
66
67
68
69 return templatePathLoader != null ?
70 new MultiTemplateLoader(new TemplateLoader[]{
71 templatePathLoader,
72 new WebappTemplateLoader(servletContext),
73 new StrutsClassTemplateLoader(),
74 new FreeMarkerBundleResourceLoader()
75 })
76 : new MultiTemplateLoader(new TemplateLoader[]{
77 new WebappTemplateLoader(servletContext),
78 new StrutsClassTemplateLoader(),
79 new FreeMarkerBundleResourceLoader()
80 });
81 }
82
83 }