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.notifications.UserNotificationDefinition;
019    import com.liferay.portal.kernel.notifications.UserNotificationHandler;
020    import com.liferay.portal.kernel.poller.PollerProcessor;
021    import com.liferay.portal.kernel.pop.MessageListener;
022    import com.liferay.portal.kernel.portlet.ConfigurationAction;
023    import com.liferay.portal.kernel.portlet.FriendlyURLMapperTracker;
024    import com.liferay.portal.kernel.portlet.PortletBag;
025    import com.liferay.portal.kernel.portlet.PortletLayoutListener;
026    import com.liferay.portal.kernel.portlet.ResourceBundleTracker;
027    import com.liferay.portal.kernel.scheduler.SchedulerEntry;
028    import com.liferay.portal.kernel.search.Indexer;
029    import com.liferay.portal.kernel.search.OpenSearch;
030    import com.liferay.portal.kernel.servlet.URLEncoder;
031    import com.liferay.portal.kernel.template.TemplateHandler;
032    import com.liferay.portal.kernel.trash.TrashHandler;
033    import com.liferay.portal.kernel.util.ClassUtil;
034    import com.liferay.portal.kernel.util.LocaleUtil;
035    import com.liferay.portal.kernel.webdav.WebDAVStorage;
036    import com.liferay.portal.kernel.workflow.WorkflowHandler;
037    import com.liferay.portal.kernel.xmlrpc.Method;
038    import com.liferay.portal.security.permission.PermissionPropagator;
039    import com.liferay.portlet.asset.model.AssetRendererFactory;
040    import com.liferay.portlet.dynamicdatamapping.util.DDMDisplay;
041    import com.liferay.portlet.expando.model.CustomAttributesDisplay;
042    import com.liferay.portlet.exportimport.lar.PortletDataHandler;
043    import com.liferay.portlet.exportimport.lar.StagedModelDataHandler;
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(_stagedModelDataHandlerInstances);
174                    close(_templateHandlerInstances);
175                    close(_trashHandlerInstances);
176                    close(_urlEncoderInstances);
177                    close(_userNotificationDefinitionInstances);
178                    close(_userNotificationHandlerInstances);
179                    close(_webDAVStorageInstances);
180                    close(_workflowHandlerInstances);
181                    close(_xmlRpcMethodInstances);
182            }
183    
184            @Override
185            public List<AssetRendererFactory> getAssetRendererFactoryInstances() {
186                    return _assetRendererFactoryInstances;
187            }
188    
189            @Override
190            public List<AtomCollectionAdapter<?>> getAtomCollectionAdapterInstances() {
191                    return _atomCollectionAdapterInstances;
192            }
193    
194            @Override
195            public List<ConfigurationAction> getConfigurationActionInstances() {
196                    return _configurationActionInstances;
197            }
198    
199            @Override
200            public List<ControlPanelEntry> getControlPanelEntryInstances() {
201                    return _controlPanelEntryInstances;
202            }
203    
204            @Override
205            public List<CustomAttributesDisplay> getCustomAttributesDisplayInstances() {
206                    return _customAttributesDisplayInstances;
207            }
208    
209            @Override
210            public List<DDMDisplay> getDdmDisplayInstances() {
211                    return _ddmDisplayInstances;
212            }
213    
214            @Override
215            public FriendlyURLMapperTracker getFriendlyURLMapperTracker() {
216                    return _friendlyURLMapperTracker;
217            }
218    
219            @Override
220            public List<Indexer> getIndexerInstances() {
221                    return _indexerInstances;
222            }
223    
224            @Override
225            public List<OpenSearch> getOpenSearchInstances() {
226                    return _openSearchInstances;
227            }
228    
229            @Override
230            public List<PermissionPropagator> getPermissionPropagatorInstances() {
231                    return _permissionPropagatorInstances;
232            }
233    
234            @Override
235            public List<PollerProcessor> getPollerProcessorInstances() {
236                    return _pollerProcessorInstances;
237            }
238    
239            @Override
240            public List<MessageListener> getPopMessageListenerInstances() {
241                    return _popMessageListenerInstances;
242            }
243    
244            @Override
245            public List<PortletDataHandler> getPortletDataHandlerInstances() {
246                    return _portletDataHandlerInstances;
247            }
248    
249            @Override
250            public Portlet getPortletInstance() {
251                    return _portletInstance;
252            }
253    
254            @Override
255            public List<PortletLayoutListener> getPortletLayoutListenerInstances() {
256                    return _portletLayoutListenerInstances;
257            }
258    
259            @Override
260            public String getPortletName() {
261                    return _portletName;
262            }
263    
264            @Override
265            public List<PreferencesValidator> getPreferencesValidatorInstances() {
266                    return _preferencesValidatorInstances;
267            }
268    
269            @Override
270            public ResourceBundle getResourceBundle(Locale locale) {
271                    ResourceBundle resourceBundle =
272                            _resourceBundleTracker.getResourceBundle(
273                                    LocaleUtil.toLanguageId(locale));
274    
275                    if (resourceBundle == null) {
276                            resourceBundle = _resourceBundleTracker.getResourceBundle(
277                                    locale.getLanguage());
278    
279                            if (resourceBundle == null) {
280                                    resourceBundle = _resourceBundleTracker.getResourceBundle(
281                                            LocaleUtil.toLanguageId(LocaleUtil.getDefault()));
282                            }
283                    }
284    
285                    return resourceBundle;
286            }
287    
288            @Override
289            public ResourceBundleTracker getResourceBundleTracker() {
290                    return _resourceBundleTracker;
291            }
292    
293            @Override
294            public List<SchedulerEntry> getSchedulerEntryInstances() {
295                    return _schedulerEntryInstances;
296            }
297    
298            @Override
299            public ServletContext getServletContext() {
300                    return _servletContext;
301            }
302    
303            @Override
304            public List<SocialActivityInterpreter>
305                    getSocialActivityInterpreterInstances() {
306    
307                    return _socialActivityInterpreterInstances;
308            }
309    
310            @Override
311            public List<SocialRequestInterpreter>
312                    getSocialRequestInterpreterInstances() {
313    
314                    return _socialRequestInterpreterInstances;
315            }
316    
317            @Override
318            public List<StagedModelDataHandler<?>>
319                    getStagedModelDataHandlerInstances() {
320    
321                    return _stagedModelDataHandlerInstances;
322            }
323    
324            @Override
325            public List<TemplateHandler> getTemplateHandlerInstances() {
326                    return _templateHandlerInstances;
327            }
328    
329            @Override
330            public List<TrashHandler> getTrashHandlerInstances() {
331                    return _trashHandlerInstances;
332            }
333    
334            @Override
335            public List<URLEncoder> getURLEncoderInstances() {
336                    return _urlEncoderInstances;
337            }
338    
339            @Override
340            public List<UserNotificationDefinition>
341                    getUserNotificationDefinitionInstances() {
342    
343                    return _userNotificationDefinitionInstances;
344            }
345    
346            @Override
347            public List<UserNotificationHandler>
348                    getUserNotificationHandlerInstances() {
349    
350                    return _userNotificationHandlerInstances;
351            }
352    
353            @Override
354            public List<WebDAVStorage> getWebDAVStorageInstances() {
355                    return _webDAVStorageInstances;
356            }
357    
358            @Override
359            public List<WorkflowHandler<?>> getWorkflowHandlerInstances() {
360                    return _workflowHandlerInstances;
361            }
362    
363            @Override
364            public List<Method> getXmlRpcMethodInstances() {
365                    return _xmlRpcMethodInstances;
366            }
367    
368            @Override
369            public void setPortletInstance(Portlet portletInstance) {
370                    _portletInstance = portletInstance;
371            }
372    
373            @Override
374            public void setPortletName(String portletName) {
375                    _portletName = portletName;
376            }
377    
378            protected void close(Object object) {
379                    try {
380                            Closeable closeable = (Closeable)object;
381    
382                            closeable.close();
383                    }
384                    catch (Exception e) {
385                            throw new RuntimeException(
386                                    "Unable to close " + ClassUtil.getClassName(object), e);
387                    }
388            }
389    
390            private final List<AssetRendererFactory> _assetRendererFactoryInstances;
391            private final List<AtomCollectionAdapter<?>>
392                    _atomCollectionAdapterInstances;
393            private final List<ConfigurationAction> _configurationActionInstances;
394            private final List<ControlPanelEntry> _controlPanelEntryInstances;
395            private final List<CustomAttributesDisplay>
396                    _customAttributesDisplayInstances;
397            private final List<DDMDisplay> _ddmDisplayInstances;
398            private final FriendlyURLMapperTracker _friendlyURLMapperTracker;
399            private final List<Indexer> _indexerInstances;
400            private final List<OpenSearch> _openSearchInstances;
401            private final List<PermissionPropagator> _permissionPropagatorInstances;
402            private final List<PollerProcessor> _pollerProcessorInstances;
403            private final List<MessageListener> _popMessageListenerInstances;
404            private final List<PortletDataHandler> _portletDataHandlerInstances;
405            private Portlet _portletInstance;
406            private final List<PortletLayoutListener> _portletLayoutListenerInstances;
407            private String _portletName;
408            private final List<PreferencesValidator> _preferencesValidatorInstances;
409            private final ResourceBundleTracker _resourceBundleTracker;
410            private final List<SchedulerEntry> _schedulerEntryInstances;
411            private final ServletContext _servletContext;
412            private final List<SocialActivityInterpreter>
413                    _socialActivityInterpreterInstances;
414            private final List<SocialRequestInterpreter>
415                    _socialRequestInterpreterInstances;
416            private final List<StagedModelDataHandler<?>>
417                    _stagedModelDataHandlerInstances;
418            private final List<TemplateHandler> _templateHandlerInstances;
419            private final List<TrashHandler> _trashHandlerInstances;
420            private final List<URLEncoder> _urlEncoderInstances;
421            private final List<UserNotificationDefinition>
422                    _userNotificationDefinitionInstances;
423            private final List<UserNotificationHandler>
424                    _userNotificationHandlerInstances;
425            private final List<WebDAVStorage> _webDAVStorageInstances;
426            private final List<WorkflowHandler<?>> _workflowHandlerInstances;
427            private final List<Method> _xmlRpcMethodInstances;
428    
429    }