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                    List<TemplateResource> templateResources, boolean restricted) {
036    
037                    return getTemplate(templateResources, null, restricted);
038            }
039    
040            @NotPrivileged
041            @Override
042            public Template getTemplate(
043                    List<TemplateResource> templateResources,
044                    TemplateResource errorTemplateResource, boolean restricted) {
045    
046                    throw new UnsupportedOperationException(
047                            "Template type does not support multi templates");
048            }
049    
050            @NotPrivileged
051            @Override
052            public Template getTemplate(
053                    TemplateResource templateResource, boolean restricted) {
054    
055                    return getTemplate(templateResource, null, restricted);
056            }
057    
058            @NotPrivileged
059            @Override
060            public Template getTemplate(
061                    TemplateResource templateResource,
062                    TemplateResource errorTemplateResource, boolean restricted) {
063    
064                    AccessControlContext accessControlContext = getAccessControlContext();
065    
066                    if (accessControlContext == null) {
067                            return doGetTemplate(
068                                    templateResource, errorTemplateResource, restricted,
069                                    getHelperUtilities(restricted), false);
070                    }
071    
072                    Map<String, Object> helperUtilities = AccessController.doPrivileged(
073                            new DoGetHelperUtilitiesPrivilegedAction(
074                                    templateContextHelper, getTemplateControlContextClassLoader(),
075                                    restricted),
076                            accessControlContext);
077    
078                    Template template = AccessController.doPrivileged(
079                            new DoGetSingleTemplatePrivilegedAction(
080                                    templateResource, errorTemplateResource, restricted,
081                                    helperUtilities));
082    
083                    return new PrivilegedTemplateWrapper(accessControlContext, template);
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    }