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.security.pacl.NotPrivileged;
018    import com.liferay.portal.kernel.template.Template;
019    import com.liferay.portal.kernel.template.TemplateResource;
020    
021    import java.security.AccessControlContext;
022    import java.security.AccessController;
023    
024    import java.util.List;
025    import java.util.Map;
026    
027    /**
028     * @author Leonardo Barros
029     */
030    public abstract class BaseSingleTemplateManager extends BaseTemplateManager {
031    
032            @NotPrivileged
033            @Override
034            public Template getTemplate(
035                    TemplateResource templateResource, boolean restricted) {
036    
037                    return getTemplate(templateResource, null, restricted);
038            }
039    
040            @NotPrivileged
041            @Override
042            public Template getTemplate(
043                    TemplateResource templateResource,
044                    TemplateResource errorTemplateResource, boolean restricted) {
045    
046                    AccessControlContext accessControlContext = getAccessControlContext();
047    
048                    if (accessControlContext == null) {
049                            return doGetTemplate(
050                                    templateResource, errorTemplateResource, restricted,
051                                    getHelperUtilities(restricted), false);
052                    }
053    
054                    Map<String, Object> helperUtilities = AccessController.doPrivileged(
055                            new DoGetHelperUtilitiesPrivilegedAction(
056                                    templateContextHelper, getTemplateControlContextClassLoader(),
057                                    restricted),
058                            accessControlContext);
059    
060                    Template template = AccessController.doPrivileged(
061                            new DoGetSingleTemplatePrivilegedAction(
062                                    templateResource, errorTemplateResource, restricted,
063                                    helperUtilities));
064    
065                    return new PrivilegedTemplateWrapper(accessControlContext, template);
066            }
067    
068            @NotPrivileged
069            @Override
070            public Template getTemplates(
071                    List<TemplateResource> templateResources, boolean restricted) {
072    
073                    return getTemplates(templateResources, null, restricted);
074            }
075    
076            @NotPrivileged
077            @Override
078            public Template getTemplates(
079                    List<TemplateResource> templateResources,
080                    TemplateResource errorTemplateResource, boolean restricted) {
081    
082                    throw new UnsupportedOperationException(
083                            "Template type does not support multi templates");
084            }
085    
086            protected abstract Template doGetTemplate(
087                    TemplateResource templateResource,
088                    TemplateResource errorTemplateResource, boolean restricted,
089                    Map<String, Object> helperUtilities, boolean privileged);
090    
091            protected class DoGetSingleTemplatePrivilegedAction
092                    extends DoGetAbstractTemplatePrivilegedAction {
093    
094                    public DoGetSingleTemplatePrivilegedAction(
095                            TemplateResource templateResource,
096                            TemplateResource errorTemplateResource, boolean restricted,
097                            Map<String, Object> helperUtilities) {
098    
099                            super(errorTemplateResource, restricted, helperUtilities);
100                            _templateResource = templateResource;
101                    }
102    
103                    @Override
104                    public Template run() {
105                            return doGetTemplate(
106                                    _templateResource, errorTemplateResource, restricted,
107                                    helperUtilities, true);
108                    }
109    
110                    private final TemplateResource _templateResource;
111    
112            }
113    
114    }