001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.kernel.template;
016    
017    import com.liferay.portal.kernel.security.pacl.permission.PortalRuntimePermission;
018    
019    import java.util.Collections;
020    import java.util.List;
021    import java.util.Map;
022    import java.util.Set;
023    import java.util.concurrent.ConcurrentHashMap;
024    
025    /**
026     * @author Tina Tian
027     * @author Raymond Augé
028     */
029    public class TemplateManagerUtil {
030    
031            public static void destroy() {
032                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
033    
034                    for (TemplateManager templateManager : templateManagers.values()) {
035                            templateManager.destroy();
036                    }
037    
038                    templateManagers.clear();
039            }
040    
041            public static void destroy(ClassLoader classLoader) {
042                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
043    
044                    for (TemplateManager templateManager : templateManagers.values()) {
045                            templateManager.destroy(classLoader);
046                    }
047            }
048    
049            public static Template getTemplate(
050                            String templateManagerName, TemplateResource templateResource,
051                            TemplateContextType templateContextType)
052                    throws TemplateException {
053    
054                    TemplateManager templateManager = _getTemplateManager(
055                            templateManagerName);
056    
057                    return templateManager.getTemplate(
058                            templateResource, templateContextType);
059            }
060    
061            public static Template getTemplate(
062                            String templateManagerName, TemplateResource templateResource,
063                            TemplateResource errorTemplateResource,
064                            TemplateContextType templateContextType)
065                    throws TemplateException {
066    
067                    TemplateManager templateManager = _getTemplateManager(
068                            templateManagerName);
069    
070                    return templateManager.getTemplate(
071                            templateResource, errorTemplateResource, templateContextType);
072            }
073    
074            public static TemplateManager getTemplateManager(
075                    String templateManagerName) {
076    
077                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
078    
079                    return templateManagers.get(templateManagerName);
080            }
081    
082            public static Set<String> getTemplateManagerNames(
083                    String templateManagerName) {
084    
085                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
086    
087                    return templateManagers.keySet();
088            }
089    
090            public static Map<String, TemplateManager> getTemplateManagers() {
091                    return Collections.unmodifiableMap(_getTemplateManagers());
092            }
093    
094            public static boolean hasTemplateManager(String templateManagerName) {
095                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
096    
097                    return templateManagers.containsKey(templateManagerName);
098            }
099    
100            public static void init() throws TemplateException {
101                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
102    
103                    for (TemplateManager templateManager : templateManagers.values()) {
104                            templateManager.init();
105                    }
106            }
107    
108            public static void registerTemplateManager(TemplateManager templateManager)
109                    throws TemplateException {
110    
111                    templateManager.init();
112    
113                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
114    
115                    templateManagers.put(templateManager.getName(), templateManager);
116            }
117    
118            public static void unregisterTemplateManager(String templateManagerName) {
119                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
120    
121                    TemplateManager templateManager = templateManagers.remove(
122                            templateManagerName);
123    
124                    if (templateManager != null) {
125                            templateManager.destroy();
126                    }
127            }
128    
129            public void setTemplateManagers(List<TemplateManager> templateManagers) {
130                    PortalRuntimePermission.checkSetBeanProperty(getClass());
131    
132                    Map<String, TemplateManager> templateManagersMap =
133                            _getTemplateManagers();
134    
135                    for (TemplateManager templateManager : templateManagers) {
136                            templateManagersMap.put(templateManager.getName(), templateManager);
137                    }
138            }
139    
140            private static TemplateManager _getTemplateManager(
141                            String templateManagerName)
142                    throws TemplateException {
143    
144                    Map<String, TemplateManager> templateManagers = _getTemplateManagers();
145    
146                    TemplateManager templateManager = templateManagers.get(
147                            templateManagerName);
148    
149                    if (templateManager == null) {
150                            throw new TemplateException(
151                                    "Unsupported template manager " + templateManagerName);
152                    }
153    
154                    return templateManager;
155            }
156    
157            private static Map<String, TemplateManager> _getTemplateManagers() {
158                    PortalRuntimePermission.checkGetBeanProperty(TemplateManagerUtil.class);
159    
160                    return _templateManagers;
161            }
162    
163            private static Map<String, TemplateManager> _templateManagers =
164                    new ConcurrentHashMap<String, TemplateManager>();
165    
166    }