001    /**
002     * Copyright (c) 2000-present 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.template;
016    
017    import com.liferay.portal.kernel.template.Template;
018    import com.liferay.portal.kernel.template.TemplateManager;
019    import com.liferay.portal.kernel.template.TemplateResource;
020    import com.liferay.portal.kernel.template.TemplateResourceLoader;
021    
022    import java.security.AccessControlContext;
023    import java.security.PrivilegedAction;
024    
025    import java.util.Map;
026    
027    import javax.servlet.ServletContext;
028    import javax.servlet.http.HttpServletRequest;
029    import javax.servlet.http.HttpServletResponse;
030    
031    /**
032     * @author Raymond Aug??
033     */
034    public abstract class BaseTemplateManager implements TemplateManager {
035    
036            @Override
037            public void addContextObjects(
038                    Map<String, Object> contextObjects,
039                    Map<String, Object> newContextObjects) {
040    
041                    for (String variableName : newContextObjects.keySet()) {
042                            if (contextObjects.containsKey(variableName)) {
043                                    continue;
044                            }
045    
046                            Object object = newContextObjects.get(variableName);
047    
048                            if (object instanceof Class) {
049                                    addStaticClassSupport(
050                                            contextObjects, variableName, (Class<?>)object);
051                            }
052                            else {
053                                    contextObjects.put(variableName, object);
054                            }
055                    }
056            }
057    
058            @Override
059            public void addStaticClassSupport(
060                    Map<String, Object> contextObjects, String variableName,
061                    Class<?> variableClass) {
062            }
063    
064            @Override
065            public void addTaglibApplication(
066                    Map<String, Object> contextObjects, String applicationName,
067                    ServletContext servletContext) {
068            }
069    
070            @Override
071            public void addTaglibFactory(
072                    Map<String, Object> contextObjects, String taglibLiferayHash,
073                    ServletContext servletContext) {
074            }
075    
076            @Override
077            public void addTaglibRequest(
078                    Map<String, Object> contextObjects, String applicationName,
079                    HttpServletRequest request, HttpServletResponse response) {
080            }
081    
082            @Override
083            public void addTaglibTheme(
084                    Map<String, Object> contextObjects, String themeName,
085                    HttpServletRequest request, HttpServletResponse response) {
086            }
087    
088            @Override
089            public String[] getRestrictedVariables() {
090                    return new String[0];
091            }
092    
093            public void setTemplateContextHelper(
094                    TemplateContextHelper templateContextHelper) {
095    
096                    this.templateContextHelper = templateContextHelper;
097            }
098    
099            public void setTemplateResourceLoader(
100                    TemplateResourceLoader templateResourceLoader) {
101    
102                    this.templateResourceLoader = templateResourceLoader;
103            }
104    
105            protected AccessControlContext getAccessControlContext() {
106                    TemplateControlContext templateControlContext =
107                            templateContextHelper.getTemplateControlContext();
108    
109                    return templateControlContext.getAccessControlContext();
110            }
111    
112            protected Map<String, Object> getHelperUtilities(boolean restricted) {
113                    return templateContextHelper.getHelperUtilities(
114                            getTemplateControlContextClassLoader(), restricted);
115            }
116    
117            protected ClassLoader getTemplateControlContextClassLoader() {
118                    TemplateControlContext templateControlContext =
119                            templateContextHelper.getTemplateControlContext();
120    
121                    return templateControlContext.getClassLoader();
122            }
123    
124            protected TemplateContextHelper templateContextHelper;
125            protected TemplateResourceLoader templateResourceLoader;
126    
127            protected abstract class DoGetAbstractTemplatePrivilegedAction
128                    implements PrivilegedAction<Template> {
129    
130                    public DoGetAbstractTemplatePrivilegedAction(
131                            TemplateResource errorTemplateResource, boolean restricted,
132                            Map<String, Object> helperUtilities) {
133    
134                            this.errorTemplateResource = errorTemplateResource;
135                            this.restricted = restricted;
136                            this.helperUtilities = helperUtilities;
137                    }
138    
139                    protected final TemplateResource errorTemplateResource;
140                    protected final Map<String, Object> helperUtilities;
141                    protected boolean restricted;
142    
143            }
144    
145            protected class DoGetHelperUtilitiesPrivilegedAction
146                    implements PrivilegedAction<Map<String, Object>> {
147    
148                    public DoGetHelperUtilitiesPrivilegedAction(
149                            TemplateContextHelper templateContextHelper,
150                            ClassLoader classLoader, boolean restricted) {
151    
152                            _templateContextHelper = templateContextHelper;
153                            _classLoader = classLoader;
154                            _restricted = restricted;
155                    }
156    
157                    @Override
158                    public Map<String, Object> run() {
159                            return _templateContextHelper.getHelperUtilities(
160                                    _classLoader, _restricted);
161                    }
162    
163                    private final ClassLoader _classLoader;
164                    private final boolean _restricted;
165                    private final TemplateContextHelper _templateContextHelper;
166    
167            }
168    
169    }