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.kernel.portlet;
016    
017    import com.liferay.asset.kernel.AssetRendererFactoryRegistryUtil;
018    import com.liferay.asset.kernel.model.AssetEntry;
019    import com.liferay.asset.kernel.model.AssetRendererFactory;
020    import com.liferay.portal.kernel.exception.PortalException;
021    import com.liferay.portal.kernel.model.Group;
022    import com.liferay.portal.kernel.util.PortalUtil;
023    import com.liferay.portal.kernel.util.StringPool;
024    import com.liferay.registry.collections.ServiceTrackerCollections;
025    import com.liferay.registry.collections.ServiceTrackerMap;
026    
027    import javax.portlet.PortletRequest;
028    import javax.portlet.PortletURL;
029    
030    import javax.servlet.http.HttpServletRequest;
031    
032    /**
033     * @author Eudaldo Alonso
034     */
035    public class PortletProviderUtil {
036    
037            public static String getPortletId(
038                    String className, PortletProvider.Action action) {
039    
040                    PortletProvider portletProvider = getPortletProvider(className, action);
041    
042                    if (portletProvider != null) {
043                            return portletProvider.getPortletName();
044                    }
045    
046                    return StringPool.BLANK;
047            }
048    
049            public static PortletURL getPortletURL(
050                            HttpServletRequest request, Group group, String className,
051                            PortletProvider.Action action)
052                    throws PortalException {
053    
054                    PortletProvider portletProvider = getPortletProvider(className, action);
055    
056                    if (portletProvider != null) {
057                            return portletProvider.getPortletURL(request, group);
058                    }
059    
060                    return null;
061            }
062    
063            public static PortletURL getPortletURL(
064                            HttpServletRequest request, String className,
065                            PortletProvider.Action action)
066                    throws PortalException {
067    
068                    PortletProvider portletProvider = getPortletProvider(className, action);
069    
070                    if (portletProvider != null) {
071                            return portletProvider.getPortletURL(request);
072                    }
073    
074                    return null;
075            }
076    
077            public static PortletURL getPortletURL(
078                            PortletRequest portletRequest, Group group, String className,
079                            PortletProvider.Action action)
080                    throws PortalException {
081    
082                    return getPortletURL(
083                            PortalUtil.getHttpServletRequest(portletRequest), group, className,
084                            action);
085            }
086    
087            public static PortletURL getPortletURL(
088                            PortletRequest portletRequest, String className,
089                            PortletProvider.Action action)
090                    throws PortalException {
091    
092                    return getPortletURL(
093                            PortalUtil.getHttpServletRequest(portletRequest), className,
094                            action);
095            }
096    
097            protected static PortletProvider getPortletProvider(
098                    String className, PortletProvider.Action action) {
099    
100                    PortletProvider portletProvider = null;
101    
102                    if (action.equals(PortletProvider.Action.ADD)) {
103                            return getPortletProvider(className, _addServiceTrackerMap);
104                    }
105                    else if (action.equals(PortletProvider.Action.BROWSE)) {
106                            return getPortletProvider(className, _browseServiceTrackerMap);
107                    }
108                    else if (action.equals(PortletProvider.Action.EDIT)) {
109                            return getPortletProvider(className, _editServiceTrackerMap);
110                    }
111                    else if (action.equals(PortletProvider.Action.MANAGE)) {
112                            return getPortletProvider(className, _manageServiceTrackerMap);
113                    }
114                    else if (action.equals(PortletProvider.Action.PREVIEW)) {
115                            return getPortletProvider(className, _previewServiceTrackerMap);
116                    }
117                    else if (action.equals(PortletProvider.Action.VIEW)) {
118                            return getPortletProvider(className, _viewServiceTrackerMap);
119                    }
120    
121                    return portletProvider;
122            }
123    
124            protected static PortletProvider getPortletProvider(
125                    String className,
126                    ServiceTrackerMap
127                            <String, ? extends PortletProvider> serviceTrackerMap) {
128    
129                    PortletProvider portletProvider = serviceTrackerMap.getService(
130                            className);
131    
132                    if ((portletProvider == null) && isAssetObject(className)) {
133                            portletProvider = serviceTrackerMap.getService(
134                                    AssetEntry.class.getName());
135                    }
136    
137                    return portletProvider;
138            }
139    
140            protected static boolean isAssetObject(String className) {
141                    AssetRendererFactory<?> assetRendererFactory =
142                            AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
143                                    className);
144    
145                    if (assetRendererFactory != null) {
146                            return true;
147                    }
148    
149                    return false;
150            }
151    
152            private static final ServiceTrackerMap<String, AddPortletProvider>
153                    _addServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
154                            AddPortletProvider.class, "model.class.name");
155            private static final ServiceTrackerMap<String, BrowsePortletProvider>
156                    _browseServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
157                            BrowsePortletProvider.class, "model.class.name");
158            private static final ServiceTrackerMap<String, EditPortletProvider>
159                    _editServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
160                            EditPortletProvider.class, "model.class.name");
161            private static final ServiceTrackerMap<String, ManagePortletProvider>
162                    _manageServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
163                            ManagePortletProvider.class, "model.class.name");
164            private static final ServiceTrackerMap<String, PreviewPortletProvider>
165                    _previewServiceTrackerMap =
166                            ServiceTrackerCollections.openSingleValueMap(
167                                    PreviewPortletProvider.class, "model.class.name");
168            private static final ServiceTrackerMap<String, ViewPortletProvider>
169                    _viewServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
170                            ViewPortletProvider.class, "model.class.name");
171    
172    }