1
14
15 package com.liferay.portal.freemarker;
16
17 import com.liferay.portal.kernel.log.Log;
18 import com.liferay.portal.kernel.log.LogFactoryUtil;
19
20 import freemarker.cache.TemplateLoader;
21
22 import java.io.IOException;
23 import java.io.Reader;
24
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.concurrent.ConcurrentHashMap;
29
30
35 public class LiferayTemplateLoader implements TemplateLoader {
36
37 public void closeTemplateSource(Object templateSource) {
38 LiferayTemplateSource liferayTemplateSource =
39 (LiferayTemplateSource)templateSource;
40
41 liferayTemplateSource.close();
42 }
43
44 public Object findTemplateSource(String name) throws IOException {
45 FreeMarkerTemplateLoader freeMarkerTemplateLoader =
46 _freeMarkerTemplateLoadersMap.get(name);
47
48 if (freeMarkerTemplateLoader != null) {
49 Object templateSource = freeMarkerTemplateLoader.findTemplateSource(
50 name);
51
52 if (templateSource != null) {
53 return new LiferayTemplateSource(
54 freeMarkerTemplateLoader, templateSource);
55 }
56 }
57
58 for (int i = 0; i < _freeMarkerTemplateLoaders.length; i++) {
59 freeMarkerTemplateLoader = _freeMarkerTemplateLoaders[i];
60
61 Object templateSource = freeMarkerTemplateLoader.findTemplateSource(
62 name);
63
64 if (templateSource != null) {
65 _freeMarkerTemplateLoadersMap.put(
66 name, freeMarkerTemplateLoader);
67
68 return new LiferayTemplateSource(
69 freeMarkerTemplateLoader, templateSource);
70 }
71 }
72
73 return null;
74 }
75
76 public long getLastModified(Object templateSource) {
77 LiferayTemplateSource liferayTemplateSource =
78 (LiferayTemplateSource)templateSource;
79
80 return liferayTemplateSource.getLastModified();
81 }
82
83 public Reader getReader(Object templateSource, String encoding)
84 throws IOException {
85
86 LiferayTemplateSource liferayTemplateSource =
87 (LiferayTemplateSource)templateSource;
88
89 return liferayTemplateSource.getReader(encoding);
90 }
91 public void setTemplateLoaders(
92 String[] freeMarkerTemplateLoaderClassNames) {
93
94 List<FreeMarkerTemplateLoader> freeMarkerTemplateLoaders =
95 new ArrayList<FreeMarkerTemplateLoader>(
96 freeMarkerTemplateLoaderClassNames.length);
97
98 for (String freeMarkerTemplateLoaderClassName :
99 freeMarkerTemplateLoaderClassNames) {
100
101 try {
102 FreeMarkerTemplateLoader freeMarkerTemplateLoader =
103 (FreeMarkerTemplateLoader)Class.forName(
104 freeMarkerTemplateLoaderClassName).newInstance();
105
106 freeMarkerTemplateLoaders.add(freeMarkerTemplateLoader);
107 }
108 catch (Exception e) {
109 _log.error(e, e);
110 }
111 }
112
113 _freeMarkerTemplateLoaders = freeMarkerTemplateLoaders.toArray(
114 new FreeMarkerTemplateLoader[freeMarkerTemplateLoaders.size()]);
115 }
116
117 private static Log _log = LogFactoryUtil.getLog(
118 LiferayTemplateLoader.class);
119
120 private FreeMarkerTemplateLoader[] _freeMarkerTemplateLoaders;
121 private Map<String, FreeMarkerTemplateLoader>
122 _freeMarkerTemplateLoadersMap =
123 new ConcurrentHashMap<String, FreeMarkerTemplateLoader>();
124
125 }