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.model.impl;
016    
017    import com.liferay.portal.kernel.util.StringPool;
018    import com.liferay.portal.kernel.util.StringUtil;
019    import com.liferay.portal.kernel.util.Validator;
020    import com.liferay.portal.kernel.xml.QName;
021    import com.liferay.portal.model.EventDefinition;
022    import com.liferay.portal.model.Portlet;
023    import com.liferay.portal.model.PortletApp;
024    import com.liferay.portal.model.PortletFilter;
025    import com.liferay.portal.model.PortletURLListener;
026    import com.liferay.portal.model.PublicRenderParameter;
027    import com.liferay.portal.model.SpriteImage;
028    
029    import java.util.ArrayList;
030    import java.util.HashMap;
031    import java.util.LinkedHashMap;
032    import java.util.LinkedHashSet;
033    import java.util.List;
034    import java.util.Map;
035    import java.util.Properties;
036    import java.util.Set;
037    
038    import javax.servlet.ServletContext;
039    
040    import javax.xml.XMLConstants;
041    
042    /**
043     * @author Brian Wing Shun Chan
044     */
045    public class PortletAppImpl implements PortletApp {
046    
047            public PortletAppImpl(String servletContextName) {
048                    _servletContextName = servletContextName;
049    
050                    if (Validator.isNotNull(_servletContextName)) {
051                            _contextPath = StringPool.SLASH.concat(_servletContextName);
052                            _warFile = true;
053                    }
054                    else {
055                            _warFile = false;
056                    }
057            }
058    
059            @Override
060            public void addEventDefinition(EventDefinition eventDefinition) {
061                    _eventDefinitions.add(eventDefinition);
062            }
063    
064            @Override
065            public void addPortlet(Portlet portlet) {
066                    _portlets.add(portlet);
067            }
068    
069            @Override
070            public void addPortletFilter(PortletFilter portletFilter) {
071                    _portletFilters.add(portletFilter);
072                    _portletFiltersByFilterName.put(
073                            portletFilter.getFilterName(), portletFilter);
074            }
075    
076            @Override
077            public void addPortletURLListener(PortletURLListener portletURLListener) {
078                    _portletURLListeners.add(portletURLListener);
079                    _portletURLListenersByListenerClass.put(
080                            portletURLListener.getListenerClass(), portletURLListener);
081            }
082    
083            @Override
084            public void addPublicRenderParameter(
085                    PublicRenderParameter publicRenderParameter) {
086    
087                    _publicRenderParametersByIdentifier.put(
088                            publicRenderParameter.getIdentifier(), publicRenderParameter);
089            }
090    
091            @Override
092            public void addPublicRenderParameter(String identifier, QName qName) {
093                    PublicRenderParameter publicRenderParameter =
094                            new PublicRenderParameterImpl(identifier, qName, this);
095    
096                    addPublicRenderParameter(publicRenderParameter);
097            }
098    
099            @Override
100            public void addServletURLPatterns(Set<String> servletURLPatterns) {
101                    _servletURLPatterns.addAll(servletURLPatterns);
102            }
103    
104            @Override
105            public Map<String, String[]> getContainerRuntimeOptions() {
106                    return _containerRuntimeOptions;
107            }
108    
109            @Override
110            public String getContextPath() {
111                    return _contextPath;
112            }
113    
114            @Override
115            public Map<String, String> getCustomUserAttributes() {
116                    return _customUserAttributes;
117            }
118    
119            @Override
120            public String getDefaultNamespace() {
121                    return _defaultNamespace;
122            }
123    
124            @Override
125            public Set<EventDefinition> getEventDefinitions() {
126                    return _eventDefinitions;
127            }
128    
129            @Override
130            public PortletFilter getPortletFilter(String filterName) {
131                    return _portletFiltersByFilterName.get(filterName);
132            }
133    
134            @Override
135            public Set<PortletFilter> getPortletFilters() {
136                    return _portletFilters;
137            }
138    
139            @Override
140            public List<Portlet> getPortlets() {
141                    return new ArrayList<>(_portlets);
142            }
143    
144            @Override
145            public PortletURLListener getPortletURLListener(String listenerClass) {
146                    return _portletURLListenersByListenerClass.get(listenerClass);
147            }
148    
149            @Override
150            public Set<PortletURLListener> getPortletURLListeners() {
151                    return _portletURLListeners;
152            }
153    
154            @Override
155            public PublicRenderParameter getPublicRenderParameter(String identifier) {
156                    return _publicRenderParametersByIdentifier.get(identifier);
157            }
158    
159            @Override
160            public ServletContext getServletContext() {
161                    return _servletContext;
162            }
163    
164            @Override
165            public String getServletContextName() {
166                    return _servletContextName;
167            }
168    
169            @Override
170            public Set<String> getServletURLPatterns() {
171                    return _servletURLPatterns;
172            }
173    
174            @Override
175            public SpriteImage getSpriteImage(String fileName) {
176                    return _spriteImagesMap.get(fileName);
177            }
178    
179            @Override
180            public Set<String> getUserAttributes() {
181                    return _userAttributes;
182            }
183    
184            @Override
185            public boolean isWARFile() {
186                    return _warFile;
187            }
188    
189            @Override
190            public void removePortlet(Portlet portletModel) {
191                    _portlets.remove(portletModel);
192            }
193    
194            @Override
195            public void setDefaultNamespace(String defaultNamespace) {
196                    _defaultNamespace = defaultNamespace;
197            }
198    
199            @Override
200            public void setServletContext(ServletContext servletContext) {
201                    _servletContext = servletContext;
202    
203                    _contextPath = _servletContext.getContextPath();
204            }
205    
206            @Override
207            public void setSpriteImages(String spriteFileName, Properties properties) {
208                    for (Map.Entry<Object, Object> entry : properties.entrySet()) {
209                            String key = (String)entry.getKey();
210                            String value = (String)entry.getValue();
211    
212                            int[] values = StringUtil.split(value, 0);
213    
214                            int offset = values[0];
215                            int height = values[1];
216                            int width = values[2];
217    
218                            SpriteImage spriteImage = new SpriteImage(
219                                    spriteFileName, key, offset, height, width);
220    
221                            _spriteImagesMap.put(key, spriteImage);
222                    }
223            }
224    
225            @Override
226            public void setWARFile(boolean warFile) {
227                    _warFile = warFile;
228            }
229    
230            private final Map<String, String[]> _containerRuntimeOptions =
231                    new HashMap<>();
232            private String _contextPath = StringPool.BLANK;
233            private final Map<String, String> _customUserAttributes =
234                    new LinkedHashMap<>();
235            private String _defaultNamespace = XMLConstants.NULL_NS_URI;
236            private final Set<EventDefinition> _eventDefinitions =
237                    new LinkedHashSet<>();
238            private final Set<PortletFilter> _portletFilters = new LinkedHashSet<>();
239            private final Map<String, PortletFilter> _portletFiltersByFilterName =
240                    new HashMap<>();
241            private final Set<Portlet> _portlets = new LinkedHashSet<>();
242            private final Set<PortletURLListener> _portletURLListeners =
243                    new LinkedHashSet<>();
244            private final Map<String, PortletURLListener>
245                    _portletURLListenersByListenerClass = new HashMap<>();
246            private final Map<String, PublicRenderParameter>
247                    _publicRenderParametersByIdentifier = new HashMap<>();
248            private ServletContext _servletContext;
249            private final String _servletContextName;
250            private final Set<String> _servletURLPatterns = new LinkedHashSet<>();
251            private final Map<String, SpriteImage> _spriteImagesMap = new HashMap<>();
252            private final Set<String> _userAttributes = new LinkedHashSet<>();
253            private boolean _warFile;
254    
255    }