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 addTaglibSupport(
084                    Map<String, Object> contextObjects, HttpServletRequest request,
085                    HttpServletResponse response) {
086            }
087    
088            @Override
089            public void addTaglibTheme(
090                    Map<String, Object> contextObjects, String themeName,
091                    HttpServletRequest request, HttpServletResponse response) {
092            }
093    
094            @Override
095            public String[] getRestrictedVariables() {
096                    return new String[0];
097            }
098    
099            public void setTemplateContextHelper(
100                    TemplateContextHelper templateContextHelper) {
101    
102                    this.templateContextHelper = templateContextHelper;
103            }
104    
105            public void setTemplateResourceLoader(
106                    TemplateResourceLoader templateResourceLoader) {
107    
108                    this.templateResourceLoader = templateResourceLoader;
109            }
110    
111            protected AccessControlContext getAccessControlContext() {
112                    TemplateControlContext templateControlContext =
113                            templateContextHelper.getTemplateControlContext();
114    
115                    return templateControlContext.getAccessControlContext();
116            }
117    
118            protected Map<String, Object> getHelperUtilities(boolean restricted) {
119                    return templateContextHelper.getHelperUtilities(
120                            getTemplateControlContextClassLoader(), restricted);
121            }
122    
123            protected ClassLoader getTemplateControlContextClassLoader() {
124                    TemplateControlContext templateControlContext =
125                            templateContextHelper.getTemplateControlContext();
126    
127                    return templateControlContext.getClassLoader();
128            }
129    
130            protected TemplateContextHelper templateContextHelper;
131            protected TemplateResourceLoader templateResourceLoader;
132    
133            protected abstract class DoGetAbstractTemplatePrivilegedAction
134                    implements PrivilegedAction<Template> {
135    
136                    public DoGetAbstractTemplatePrivilegedAction(
137                            TemplateResource errorTemplateResource, boolean restricted,
138                            Map<String, Object> helperUtilities) {
139    
140                            this.errorTemplateResource = errorTemplateResource;
141                            this.restricted = restricted;
142                            this.helperUtilities = helperUtilities;
143                    }
144    
145                    protected final TemplateResource errorTemplateResource;
146                    protected final Map<String, Object> helperUtilities;
147                    protected boolean restricted;
148    
149            }
150    
151            protected class DoGetHelperUtilitiesPrivilegedAction
152                    implements PrivilegedAction<Map<String, Object>> {
153    
154                    public DoGetHelperUtilitiesPrivilegedAction(
155                            TemplateContextHelper templateContextHelper,
156                            ClassLoader classLoader, boolean restricted) {
157    
158                            _templateContextHelper = templateContextHelper;
159                            _classLoader = classLoader;
160                            _restricted = restricted;
161                    }
162    
163                    @Override
164                    public Map<String, Object> run() {
165                            return _templateContextHelper.getHelperUtilities(
166                                    _classLoader, _restricted);
167                    }
168    
169                    private final ClassLoader _classLoader;
170                    private final boolean _restricted;
171                    private final TemplateContextHelper _templateContextHelper;
172    
173            }
174    
175    }