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