001
014
015 package com.liferay.portal.kernel.template;
016
017 import com.liferay.registry.Registry;
018 import com.liferay.registry.RegistryUtil;
019 import com.liferay.registry.ServiceReference;
020 import com.liferay.registry.ServiceTracker;
021 import com.liferay.registry.ServiceTrackerCustomizer;
022
023 import java.util.Map;
024 import java.util.Set;
025 import java.util.concurrent.ConcurrentHashMap;
026
027
030 public class TemplateResourceLoaderUtil {
031
032 public static void clearCache() {
033 _instance._clearCache();
034 }
035
036 public static void clearCache(String templateResourceLoaderName)
037 throws TemplateException {
038
039 _instance._clearCache(templateResourceLoaderName);
040 }
041
042 public static void clearCache(
043 String templateResourceLoaderName, String templateId)
044 throws TemplateException {
045
046 _instance._clearCache(templateResourceLoaderName, templateId);
047 }
048
049 public static TemplateResource getTemplateResource(
050 String templateResourceLoaderName, String templateId)
051 throws TemplateException {
052
053 return _instance._getTemplateResource(
054 templateResourceLoaderName, templateId);
055 }
056
057 public static TemplateResourceLoader getTemplateResourceLoader(
058 String templateResourceLoaderName)
059 throws TemplateException {
060
061 return _instance._getTemplateResourceLoader(templateResourceLoaderName);
062 }
063
064 public static Set<String> getTemplateResourceLoaderNames() {
065 return _instance._getTemplateResourceLoaderNames();
066 }
067
068 public static boolean hasTemplateResource(
069 String templateResourceLoaderName, String templateId)
070 throws TemplateException {
071
072 return _instance._hasTemplateResource(
073 templateResourceLoaderName, templateId);
074 }
075
076 public static boolean hasTemplateResourceLoader(
077 String templateResourceLoaderName) {
078
079 return _instance._hasTemplateResourceLoader(templateResourceLoaderName);
080 }
081
082 private TemplateResourceLoaderUtil() {
083 Registry registry = RegistryUtil.getRegistry();
084
085 _serviceTracker = registry.trackServices(
086 TemplateResourceLoader.class,
087 new TemplateResourceLoaderTrackerCustomizer());
088
089 _serviceTracker.open();
090 }
091
092 private void _clearCache() {
093 for (TemplateResourceLoader templateResourceLoader :
094 _templateResourceLoaders.values()) {
095
096 templateResourceLoader.clearCache();
097 }
098 }
099
100 private void _clearCache(String templateResourceLoaderName)
101 throws TemplateException {
102
103 TemplateResourceLoader templateResourceLoader =
104 _getTemplateResourceLoader(templateResourceLoaderName);
105
106 templateResourceLoader.clearCache();
107 }
108
109 private void _clearCache(
110 String templateResourceLoaderName, String templateId)
111 throws TemplateException {
112
113 TemplateResourceLoader templateResourceLoader =
114 _getTemplateResourceLoader(templateResourceLoaderName);
115
116 templateResourceLoader.clearCache(templateId);
117 }
118
119 private TemplateResource _getTemplateResource(
120 String templateResourceLoaderName, String templateId)
121 throws TemplateException {
122
123 TemplateResourceLoader templateResourceLoader =
124 _getTemplateResourceLoader(templateResourceLoaderName);
125
126 return templateResourceLoader.getTemplateResource(templateId);
127 }
128
129 private TemplateResourceLoader _getTemplateResourceLoader(
130 String templateResourceLoaderName)
131 throws TemplateException {
132
133 TemplateResourceLoader templateResourceLoader =
134 _templateResourceLoaders.get(templateResourceLoaderName);
135
136 if (templateResourceLoader == null) {
137 throw new TemplateException(
138 "Unsupported template resource loader " +
139 templateResourceLoaderName);
140 }
141
142 return templateResourceLoader;
143 }
144
145 private Set<String> _getTemplateResourceLoaderNames() {
146 return _templateResourceLoaders.keySet();
147 }
148
149 private boolean _hasTemplateResource(
150 String templateResourceLoaderName, String templateId)
151 throws TemplateException {
152
153 TemplateResourceLoader templateResourceLoader =
154 _getTemplateResourceLoader(templateResourceLoaderName);
155
156 return templateResourceLoader.hasTemplateResource(templateId);
157 }
158
159 private boolean _hasTemplateResourceLoader(
160 String templateResourceLoaderName) {
161
162 return _templateResourceLoaders.containsKey(templateResourceLoaderName);
163 }
164
165 private static final TemplateResourceLoaderUtil _instance =
166 new TemplateResourceLoaderUtil();
167
168 private final ServiceTracker<TemplateResourceLoader, TemplateResourceLoader>
169 _serviceTracker;
170 private final Map<String, TemplateResourceLoader> _templateResourceLoaders =
171 new ConcurrentHashMap<>();
172
173 private class TemplateResourceLoaderTrackerCustomizer
174 implements ServiceTrackerCustomizer
175 <TemplateResourceLoader, TemplateResourceLoader> {
176
177 @Override
178 public TemplateResourceLoader addingService(
179 ServiceReference<TemplateResourceLoader> serviceReference) {
180
181 Registry registry = RegistryUtil.getRegistry();
182
183 TemplateResourceLoader templateResourceLoader = registry.getService(
184 serviceReference);
185
186 _templateResourceLoaders.put(
187 templateResourceLoader.getName(), templateResourceLoader);
188
189 return templateResourceLoader;
190 }
191
192 @Override
193 public void modifiedService(
194 ServiceReference<TemplateResourceLoader> serviceReference,
195 TemplateResourceLoader templateResourceLoader) {
196 }
197
198 @Override
199 public void removedService(
200 ServiceReference<TemplateResourceLoader> serviceReference,
201 TemplateResourceLoader templateResourceLoader) {
202
203 _templateResourceLoaders.remove(templateResourceLoader.getName());
204
205 templateResourceLoader.clearCache();
206
207 templateResourceLoader.destroy();
208
209 Registry registry = RegistryUtil.getRegistry();
210
211 registry.ungetService(serviceReference);
212 }
213
214 }
215
216 }