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