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.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.util.StringPool;
019    import com.liferay.portal.model.Group;
020    import com.liferay.portal.util.PortalUtil;
021    import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
022    import com.liferay.portlet.asset.model.AssetEntry;
023    import com.liferay.portlet.asset.model.AssetRendererFactory;
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.getPortletId();
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.VIEW)) {
115                            return getPortletProvider(className, _viewServiceTrackerMap);
116                    }
117    
118                    return portletProvider;
119            }
120    
121            protected static PortletProvider getPortletProvider(
122                    String className,
123                    ServiceTrackerMap
124                            <String, ? extends PortletProvider> serviceTrackerMap) {
125    
126                    PortletProvider portletProvider = serviceTrackerMap.getService(
127                            className);
128    
129                    if ((portletProvider == null) && isAssetObject(className)) {
130                            portletProvider = serviceTrackerMap.getService(
131                                    AssetEntry.class.getName());
132                    }
133    
134                    return portletProvider;
135            }
136    
137            protected static boolean isAssetObject(String className) {
138                    AssetRendererFactory<?> assetRendererFactory =
139                            AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
140                                    className);
141    
142                    if (assetRendererFactory != null) {
143                            return true;
144                    }
145    
146                    return false;
147            }
148    
149            private static final ServiceTrackerMap<String, AddPortletProvider>
150                    _addServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
151                            AddPortletProvider.class, "model.class.name");
152            private static final ServiceTrackerMap<String, BrowsePortletProvider>
153                    _browseServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
154                            BrowsePortletProvider.class, "model.class.name");
155            private static final ServiceTrackerMap<String, EditPortletProvider>
156                    _editServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
157                            EditPortletProvider.class, "model.class.name");
158            private static final ServiceTrackerMap<String, ManagePortletProvider>
159                    _manageServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
160                            ManagePortletProvider.class, "model.class.name");
161            private static final ServiceTrackerMap<String, ViewPortletProvider>
162                    _viewServiceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
163                            ViewPortletProvider.class, "model.class.name");
164    
165    }