001    /**
002     * Copyright (c) 2000-2013 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.security.pacl.NotPrivileged;
018    import com.liferay.portal.kernel.template.Template;
019    import com.liferay.portal.kernel.template.TemplateContextType;
020    import com.liferay.portal.kernel.template.TemplateManager;
021    import com.liferay.portal.kernel.template.TemplateResource;
022    
023    import java.security.AccessController;
024    import java.security.PrivilegedAction;
025    
026    import java.util.Map;
027    
028    /**
029     * @author Raymond Augé
030     */
031    public abstract class BaseTemplateManager implements TemplateManager {
032    
033            @NotPrivileged
034            public Template getTemplate(
035                    TemplateResource templateResource,
036                    TemplateContextType templateContextType) {
037    
038                    return getTemplate(templateResource, null, templateContextType);
039            }
040    
041            @NotPrivileged
042            public Template getTemplate(
043                    TemplateResource templateResource,
044                    TemplateResource errorTemplateResource,
045                    TemplateContextType templateContextType) {
046    
047                    TemplateContextHelper templateContextHelper =
048                            getTemplateContextHelper();
049    
050                    Map<String, Object> helperUtilities =
051                            templateContextHelper.getHelperUtilities(templateContextType);
052    
053                    return AccessController.doPrivileged(
054                            new DoGetTemplatePrivilegedAction(
055                                    templateResource, errorTemplateResource, templateContextType,
056                                    helperUtilities));
057            }
058    
059            protected abstract Template doGetTemplate(
060                    TemplateResource templateResource,
061                    TemplateResource errorTemplateResource,
062                    TemplateContextType templateContextType,
063                    Map<String, Object> helperUtilities);
064    
065            protected abstract TemplateContextHelper getTemplateContextHelper();
066    
067            private class DoGetTemplatePrivilegedAction
068                    implements PrivilegedAction<Template> {
069    
070                    public DoGetTemplatePrivilegedAction(
071                            TemplateResource templateResource,
072                            TemplateResource errorTemplateResource,
073                            TemplateContextType templateContextType,
074                            Map<String, Object> helperUtilities) {
075    
076                            _templateResource = templateResource;
077                            _errorTemplateResource = errorTemplateResource;
078                            _templateContextType = templateContextType;
079                            _helperUtilities = helperUtilities;
080                    }
081    
082                    public Template run() {
083                            return doGetTemplate(
084                                    _templateResource, _errorTemplateResource, _templateContextType,
085                                    _helperUtilities);
086                    }
087    
088                    private TemplateResource _errorTemplateResource;
089                    private Map<String, Object> _helperUtilities;
090                    private TemplateContextType _templateContextType;
091                    private TemplateResource _templateResource;
092    
093            }
094    
095    }