001
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
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 }