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.portlet;
016    
017    import com.liferay.portal.kernel.atom.AtomCollectionAdapter;
018    import com.liferay.portal.kernel.lar.PortletDataHandler;
019    import com.liferay.portal.kernel.lar.StagedModelDataHandler;
020    import com.liferay.portal.kernel.notifications.UserNotificationDefinition;
021    import com.liferay.portal.kernel.notifications.UserNotificationHandler;
022    import com.liferay.portal.kernel.poller.PollerProcessor;
023    import com.liferay.portal.kernel.pop.MessageListener;
024    import com.liferay.portal.kernel.portlet.ConfigurationAction;
025    import com.liferay.portal.kernel.portlet.FriendlyURLMapperTracker;
026    import com.liferay.portal.kernel.portlet.PortletBag;
027    import com.liferay.portal.kernel.portlet.PortletLayoutListener;
028    import com.liferay.portal.kernel.portlet.ResourceBundleTracker;
029    import com.liferay.portal.kernel.scheduler.SchedulerEntry;
030    import com.liferay.portal.kernel.search.Indexer;
031    import com.liferay.portal.kernel.search.OpenSearch;
032    import com.liferay.portal.kernel.servlet.URLEncoder;
033    import com.liferay.portal.kernel.template.TemplateHandler;
034    import com.liferay.portal.kernel.trash.TrashHandler;
035    import com.liferay.portal.kernel.util.ClassUtil;
036    import com.liferay.portal.kernel.util.LocaleUtil;
037    import com.liferay.portal.kernel.webdav.WebDAVStorage;
038    import com.liferay.portal.kernel.workflow.WorkflowHandler;
039    import com.liferay.portal.kernel.xmlrpc.Method;
040    import com.liferay.portal.security.permission.PermissionPropagator;
041    import com.liferay.portlet.asset.model.AssetRendererFactory;
042    import com.liferay.portlet.dynamicdatamapping.util.DDMDisplay;
043    import com.liferay.portlet.expando.model.CustomAttributesDisplay;
044    import com.liferay.portlet.social.model.SocialActivityInterpreter;
045    import com.liferay.portlet.social.model.SocialRequestInterpreter;
046    
047    import java.io.Closeable;
048    
049    import java.util.List;
050    import java.util.Locale;
051    import java.util.ResourceBundle;
052    
053    import javax.portlet.Portlet;
054    import javax.portlet.PreferencesValidator;
055    
056    import javax.servlet.ServletContext;
057    
058    /**
059     * @author Brian Wing Shun Chan
060     * @author Jorge Ferrer
061     */
062    public class PortletBagImpl implements PortletBag {
063    
064            public PortletBagImpl(
065                    String portletName, ServletContext servletContext,
066                    Portlet portletInstance, ResourceBundleTracker resourceBundleTracker,
067                    List<ConfigurationAction> configurationActionInstances,
068                    List<Indexer> indexerInstances, List<OpenSearch> openSearchInstances,
069                    List<SchedulerEntry> schedulerEntryInstances,
070                    FriendlyURLMapperTracker friendlyURLMapperTracker,
071                    List<URLEncoder> urlEncoderInstances,
072                    List<PortletDataHandler> portletDataHandlerInstances,
073                    List<StagedModelDataHandler<?>> stagedModelDataHandlerInstances,
074                    List<TemplateHandler> templateHandlerInstances,
075                    List<PortletLayoutListener> portletLayoutListenerInstances,
076                    List<PollerProcessor> pollerProcessorInstances,
077                    List<MessageListener> popMessageListenerInstances,
078                    List<SocialActivityInterpreter> socialActivityInterpreterInstances,
079                    List<SocialRequestInterpreter> socialRequestInterpreterInstances,
080                    List<UserNotificationDefinition> userNotificationDefinitionInstances,
081                    List<UserNotificationHandler> userNotificationHandlerInstances,
082                    List<WebDAVStorage> webDAVStorageInstances,
083                    List<Method> xmlRpcMethodInstances,
084                    List<ControlPanelEntry> controlPanelEntryInstances,
085                    List<AssetRendererFactory> assetRendererFactoryInstances,
086                    List<AtomCollectionAdapter<?>> atomCollectionAdapters,
087                    List<CustomAttributesDisplay> customAttributesDisplayInstances,
088                    List<DDMDisplay> ddmDisplayInstances,
089                    List<PermissionPropagator> permissionPropagatorInstances,
090                    List<TrashHandler> trashHandlerInstances,
091                    List<WorkflowHandler<?>> workflowHandlerInstances,
092                    List<PreferencesValidator> preferencesValidatorInstances) {
093    
094                    _portletName = portletName;
095                    _servletContext = servletContext;
096                    _portletInstance = portletInstance;
097                    _resourceBundleTracker = resourceBundleTracker;
098                    _configurationActionInstances = configurationActionInstances;
099                    _indexerInstances = indexerInstances;
100                    _openSearchInstances = openSearchInstances;
101                    _schedulerEntryInstances = schedulerEntryInstances;
102                    _friendlyURLMapperTracker = friendlyURLMapperTracker;
103                    _urlEncoderInstances = urlEncoderInstances;
104                    _portletDataHandlerInstances = portletDataHandlerInstances;
105                    _stagedModelDataHandlerInstances = stagedModelDataHandlerInstances;
106                    _templateHandlerInstances = templateHandlerInstances;
107                    _portletLayoutListenerInstances = portletLayoutListenerInstances;
108                    _pollerProcessorInstances = pollerProcessorInstances;
109                    _popMessageListenerInstances = popMessageListenerInstances;
110                    _socialActivityInterpreterInstances =
111                            socialActivityInterpreterInstances;
112                    _socialRequestInterpreterInstances = socialRequestInterpreterInstances;
113                    _userNotificationDefinitionInstances =
114                            userNotificationDefinitionInstances;
115                    _userNotificationHandlerInstances = userNotificationHandlerInstances;
116                    _webDAVStorageInstances = webDAVStorageInstances;
117                    _xmlRpcMethodInstances = xmlRpcMethodInstances;
118                    _controlPanelEntryInstances = controlPanelEntryInstances;
119                    _assetRendererFactoryInstances = assetRendererFactoryInstances;
120                    _atomCollectionAdapterInstances = atomCollectionAdapters;
121                    _customAttributesDisplayInstances = customAttributesDisplayInstances;
122                    _ddmDisplayInstances = ddmDisplayInstances;
123                    _permissionPropagatorInstances = permissionPropagatorInstances;
124                    _trashHandlerInstances = trashHandlerInstances;
125                    _workflowHandlerInstances = workflowHandlerInstances;
126                    _preferencesValidatorInstances = preferencesValidatorInstances;
127            }
128    
129            @Override
130            public Object clone() {
131                    return new PortletBagImpl(
132                            getPortletName(), getServletContext(), getPortletInstance(),
133                            getResourceBundleTracker(), getConfigurationActionInstances(),
134                            getIndexerInstances(), getOpenSearchInstances(),
135                            getSchedulerEntryInstances(), getFriendlyURLMapperTracker(),
136                            getURLEncoderInstances(), getPortletDataHandlerInstances(),
137                            getStagedModelDataHandlerInstances(), getTemplateHandlerInstances(),
138                            getPortletLayoutListenerInstances(), getPollerProcessorInstances(),
139                            getPopMessageListenerInstances(),
140                            getSocialActivityInterpreterInstances(),
141                            getSocialRequestInterpreterInstances(),
142                            getUserNotificationDefinitionInstances(),
143                            getUserNotificationHandlerInstances(), getWebDAVStorageInstances(),
144                            getXmlRpcMethodInstances(), getControlPanelEntryInstances(),
145                            getAssetRendererFactoryInstances(),
146                            getAtomCollectionAdapterInstances(),
147                            getCustomAttributesDisplayInstances(), getDdmDisplayInstances(),
148                            getPermissionPropagatorInstances(), getTrashHandlerInstances(),
149                            getWorkflowHandlerInstances(), getPreferencesValidatorInstances());
150            }
151    
152            @Override
153            public void destroy() {
154                    close(_assetRendererFactoryInstances);
155                    close(_atomCollectionAdapterInstances);
156                    close(_configurationActionInstances);
157                    close(_controlPanelEntryInstances);
158                    close(_customAttributesDisplayInstances);
159                    close(_ddmDisplayInstances);
160                    close(_friendlyURLMapperTracker);
161                    close(_indexerInstances);
162                    close(_openSearchInstances);
163                    close(_permissionPropagatorInstances);
164                    close(_pollerProcessorInstances);
165                    close(_popMessageListenerInstances);
166                    close(_portletDataHandlerInstances);
167                    close(_portletLayoutListenerInstances);
168                    close(_preferencesValidatorInstances);
169                    close(_resourceBundleTracker);
170                    close(_schedulerEntryInstances);
171                    close(_socialActivityInterpreterInstances);
172                    close(_socialRequestInterpreterInstances);
173                    close(_templateHandlerInstances);
174                    close(_trashHandlerInstances);
175                    close(_urlEncoderInstances);
176                    close(_userNotificationDefinitionInstances);
177                    close(_userNotificationHandlerInstances);
178                    close(_webDAVStorageInstances);
179                    close(_workflowHandlerInstances);
180                    close(_xmlRpcMethodInstances);
181            }
182    
183            @Override
184            public List<AssetRendererFactory> getAssetRendererFactoryInstances() {
185                    return _assetRendererFactoryInstances;
186            }
187    
188            @Override
189            public List<AtomCollectionAdapter<?>> getAtomCollectionAdapterInstances() {
190                    return _atomCollectionAdapterInstances;
191            }
192    
193            @Override
194            public List<ConfigurationAction> getConfigurationActionInstances() {
195                    return _configurationActionInstances;
196            }
197    
198            @Override
199            public List<ControlPanelEntry> getControlPanelEntryInstances() {
200                    return _controlPanelEntryInstances;
201            }
202    
203            @Override
204            public List<CustomAttributesDisplay> getCustomAttributesDisplayInstances() {
205                    return _customAttributesDisplayInstances;
206            }
207    
208            @Override
209            public List<DDMDisplay> getDdmDisplayInstances() {
210                    return _ddmDisplayInstances;
211            }
212    
213            @Override
214            public FriendlyURLMapperTracker getFriendlyURLMapperTracker() {
215                    return _friendlyURLMapperTracker;
216            }
217    
218            @Override
219            public List<Indexer> getIndexerInstances() {
220                    return _indexerInstances;
221            }
222    
223            @Override
224            public List<OpenSearch> getOpenSearchInstances() {
225                    return _openSearchInstances;
226            }
227    
228            @Override
229            public List<PermissionPropagator> getPermissionPropagatorInstances() {
230                    return _permissionPropagatorInstances;
231            }
232    
233            @Override
234            public List<PollerProcessor> getPollerProcessorInstances() {
235                    return _pollerProcessorInstances;
236            }
237    
238            @Override
239            public List<MessageListener> getPopMessageListenerInstances() {
240                    return _popMessageListenerInstances;
241            }
242    
243            @Override
244            public List<PortletDataHandler> getPortletDataHandlerInstances() {
245                    return _portletDataHandlerInstances;
246            }
247    
248            @Override
249            public Portlet getPortletInstance() {
250                    return _portletInstance;
251            }
252    
253            @Override
254            public List<PortletLayoutListener> getPortletLayoutListenerInstances() {
255                    return _portletLayoutListenerInstances;
256            }
257    
258            @Override
259            public String getPortletName() {
260                    return _portletName;
261            }
262    
263            @Override
264            public List<PreferencesValidator> getPreferencesValidatorInstances() {
265                    return _preferencesValidatorInstances;
266            }
267    
268            @Override
269            public ResourceBundle getResourceBundle(Locale locale) {
270                    ResourceBundle resourceBundle = _resourceBundleTracker.getResouceBundle(
271                            LocaleUtil.toLanguageId(locale));
272    
273                    if (resourceBundle == null) {
274                            resourceBundle = _resourceBundleTracker.getResouceBundle(
275                                    locale.getLanguage());
276    
277                            if (resourceBundle == null) {
278                                    resourceBundle = _resourceBundleTracker.getResouceBundle(
279                                            LocaleUtil.toLanguageId(LocaleUtil.getDefault()));
280                            }
281                    }
282    
283                    return resourceBundle;
284            }
285    
286            @Override
287            public ResourceBundleTracker getResourceBundleTracker() {
288                    return _resourceBundleTracker;
289            }
290    
291            @Override
292            public List<SchedulerEntry> getSchedulerEntryInstances() {
293                    return _schedulerEntryInstances;
294            }
295    
296            @Override
297            public ServletContext getServletContext() {
298                    return _servletContext;
299            }
300    
301            @Override
302            public List<SocialActivityInterpreter>
303                    getSocialActivityInterpreterInstances() {
304    
305                    return _socialActivityInterpreterInstances;
306            }
307    
308            @Override
309            public List<SocialRequestInterpreter>
310                    getSocialRequestInterpreterInstances() {
311    
312                    return _socialRequestInterpreterInstances;
313            }
314    
315            @Override
316            public List<StagedModelDataHandler<?>>
317                    getStagedModelDataHandlerInstances() {
318    
319                    return _stagedModelDataHandlerInstances;
320            }
321    
322            @Override
323            public List<TemplateHandler> getTemplateHandlerInstances() {
324                    return _templateHandlerInstances;
325            }
326    
327            @Override
328            public List<TrashHandler> getTrashHandlerInstances() {
329                    return _trashHandlerInstances;
330            }
331    
332            @Override
333            public List<URLEncoder> getURLEncoderInstances() {
334                    return _urlEncoderInstances;
335            }
336    
337            @Override
338            public List<UserNotificationDefinition>
339                    getUserNotificationDefinitionInstances() {
340    
341                    return _userNotificationDefinitionInstances;
342            }
343    
344            @Override
345            public List<UserNotificationHandler>
346                    getUserNotificationHandlerInstances() {
347    
348                    return _userNotificationHandlerInstances;
349            }
350    
351            @Override
352            public List<WebDAVStorage> getWebDAVStorageInstances() {
353                    return _webDAVStorageInstances;
354            }
355    
356            @Override
357            public List<WorkflowHandler<?>> getWorkflowHandlerInstances() {
358                    return _workflowHandlerInstances;
359            }
360    
361            @Override
362            public List<Method> getXmlRpcMethodInstances() {
363                    return _xmlRpcMethodInstances;
364            }
365    
366            @Override
367            public void setPortletInstance(Portlet portletInstance) {
368                    _portletInstance = portletInstance;
369            }
370    
371            @Override
372            public void setPortletName(String portletName) {
373                    _portletName = portletName;
374            }
375    
376            protected void close(Object object) {
377                    try {
378                            Closeable closeable = (Closeable)object;
379    
380                            closeable.close();
381                    }
382                    catch (Exception e) {
383                            throw new RuntimeException(
384                                    "Unable to close " + ClassUtil.getClassName(object), e);
385                    }
386            }
387    
388            private final List<AssetRendererFactory> _assetRendererFactoryInstances;
389            private final List<AtomCollectionAdapter<?>>
390                    _atomCollectionAdapterInstances;
391            private final List<ConfigurationAction> _configurationActionInstances;
392            private final List<ControlPanelEntry> _controlPanelEntryInstances;
393            private final List<CustomAttributesDisplay>
394                    _customAttributesDisplayInstances;
395            private final List<DDMDisplay> _ddmDisplayInstances;
396            private final FriendlyURLMapperTracker _friendlyURLMapperTracker;
397            private final List<Indexer> _indexerInstances;
398            private final List<OpenSearch> _openSearchInstances;
399            private final List<PermissionPropagator> _permissionPropagatorInstances;
400            private final List<PollerProcessor> _pollerProcessorInstances;
401            private final List<MessageListener> _popMessageListenerInstances;
402            private final List<PortletDataHandler> _portletDataHandlerInstances;
403            private Portlet _portletInstance;
404            private final List<PortletLayoutListener> _portletLayoutListenerInstances;
405            private String _portletName;
406            private final List<PreferencesValidator> _preferencesValidatorInstances;
407            private final ResourceBundleTracker _resourceBundleTracker;
408            private final List<SchedulerEntry> _schedulerEntryInstances;
409            private final ServletContext _servletContext;
410            private final List<SocialActivityInterpreter>
411                    _socialActivityInterpreterInstances;
412            private final List<SocialRequestInterpreter>
413                    _socialRequestInterpreterInstances;
414            private final List<StagedModelDataHandler<?>>
415                    _stagedModelDataHandlerInstances;
416            private final List<TemplateHandler> _templateHandlerInstances;
417            private final List<TrashHandler> _trashHandlerInstances;
418            private final List<URLEncoder> _urlEncoderInstances;
419            private final List<UserNotificationDefinition>
420                    _userNotificationDefinitionInstances;
421            private final List<UserNotificationHandler>
422                    _userNotificationHandlerInstances;
423            private final List<WebDAVStorage> _webDAVStorageInstances;
424            private final List<WorkflowHandler<?>> _workflowHandlerInstances;
425            private final List<Method> _xmlRpcMethodInstances;
426    
427    }