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.workflow;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.log.Log;
019    import com.liferay.portal.kernel.log.LogFactoryUtil;
020    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
021    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
022    import com.liferay.portal.kernel.util.StringPool;
023    import com.liferay.portal.model.WorkflowDefinitionLink;
024    import com.liferay.portal.service.ServiceContext;
025    import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
026    import com.liferay.portal.service.WorkflowInstanceLinkLocalServiceUtil;
027    import com.liferay.portal.util.PortalUtil;
028    import com.liferay.portal.util.PortletKeys;
029    import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
030    import com.liferay.portlet.asset.model.AssetRenderer;
031    import com.liferay.portlet.asset.model.AssetRendererFactory;
032    
033    import java.io.Serializable;
034    
035    import java.util.Locale;
036    import java.util.Map;
037    
038    import javax.portlet.PortletRequest;
039    import javax.portlet.PortletResponse;
040    import javax.portlet.PortletURL;
041    import javax.portlet.WindowState;
042    import javax.portlet.WindowStateException;
043    
044    import javax.servlet.http.HttpServletRequest;
045    import javax.servlet.http.HttpServletResponse;
046    
047    /**
048     * @author Bruno Farache
049     * @author Marcellus Tavares
050     * @author Juan Fern??ndez
051     * @author Julio Camarero
052     * @author Jorge Ferrer
053     */
054    public abstract class BaseWorkflowHandler<T> implements WorkflowHandler<T> {
055    
056            @Override
057            public AssetRenderer<T> getAssetRenderer(long classPK)
058                    throws PortalException {
059    
060                    AssetRendererFactory<T> assetRendererFactory =
061                            getAssetRendererFactory();
062    
063                    if (assetRendererFactory != null) {
064                            return assetRendererFactory.getAssetRenderer(
065                                    classPK, AssetRendererFactory.TYPE_LATEST);
066                    }
067                    else {
068                            return null;
069                    }
070            }
071    
072            @Override
073            public AssetRendererFactory<T> getAssetRendererFactory() {
074                    return (AssetRendererFactory<T>)AssetRendererFactoryRegistryUtil.
075                            getAssetRendererFactoryByClassName(getClassName());
076            }
077    
078            @Override
079            public String getIconCssClass() {
080                    AssetRendererFactory<?> assetRendererFactory =
081                            getAssetRendererFactory();
082    
083                    if (assetRendererFactory != null) {
084                            return assetRendererFactory.getIconCssClass();
085                    }
086    
087                    return StringPool.BLANK;
088            }
089    
090            /**
091             * @deprecated As of 7.0.0, with no direct replacement
092             */
093            @Deprecated
094            @Override
095            public String getIconPath(LiferayPortletRequest liferayPortletRequest) {
096                    return StringPool.BLANK;
097            }
098    
099            /**
100             * @deprecated As of 7.0.0, replaced by {@link #getSummary(long,
101             *             PortletRequest, PortletResponse)}
102             */
103            @Deprecated
104            @Override
105            public String getSummary(long classPK, Locale locale) {
106                    return getSummary(classPK, null, null);
107            }
108    
109            @Override
110            public String getSummary(
111                    long classPK, PortletRequest portletRequest,
112                    PortletResponse portletResponse) {
113    
114                    try {
115                            AssetRenderer<?> assetRenderer = getAssetRenderer(classPK);
116    
117                            if (assetRenderer != null) {
118                                    return assetRenderer.getSummary(
119                                            portletRequest, portletResponse);
120                            }
121                    }
122                    catch (Exception e) {
123                            if (_log.isWarnEnabled()) {
124                                    _log.warn(e, e);
125                            }
126                    }
127    
128                    return null;
129            }
130    
131            @Override
132            public String getTitle(long classPK, Locale locale) {
133                    try {
134                            AssetRenderer<?> assetRenderer = getAssetRenderer(classPK);
135    
136                            if (assetRenderer != null) {
137                                    return assetRenderer.getTitle(locale);
138                            }
139                    }
140                    catch (Exception e) {
141                            if (_log.isWarnEnabled()) {
142                                    _log.warn(e, e);
143                            }
144                    }
145    
146                    return null;
147            }
148    
149            @Override
150            public PortletURL getURLEdit(
151                    long classPK, LiferayPortletRequest liferayPortletRequest,
152                    LiferayPortletResponse liferayPortletResponse) {
153    
154                    try {
155                            AssetRenderer<?> assetRenderer = getAssetRenderer(classPK);
156    
157                            if (assetRenderer != null) {
158                                    return assetRenderer.getURLEdit(
159                                            liferayPortletRequest, liferayPortletResponse);
160                            }
161                    }
162                    catch (Exception e) {
163                            if (_log.isWarnEnabled()) {
164                                    _log.warn(e, e);
165                            }
166                    }
167    
168                    return null;
169            }
170    
171            @Override
172            public String getURLEditWorkflowTask(
173                            long workflowTaskId, ServiceContext serviceContext)
174                    throws PortalException {
175    
176                    try {
177                            PortletURL portletURL = PortalUtil.getControlPanelPortletURL(
178                                    serviceContext.getRequest(), PortletKeys.MY_WORKFLOW_TASK,
179                                    PortletRequest.RENDER_PHASE);
180    
181                            portletURL.setParameter("mvcPath", "/edit_workflow_task.jsp");
182                            portletURL.setParameter(
183                                    "workflowTaskId", String.valueOf(workflowTaskId));
184                            portletURL.setWindowState(WindowState.MAXIMIZED);
185    
186                            return portletURL.toString();
187                    }
188                    catch (WindowStateException wse) {
189                            throw new PortalException(wse);
190                    }
191            }
192    
193            @Override
194            public PortletURL getURLViewDiffs(
195                    long classPK, LiferayPortletRequest liferayPortletRequest,
196                    LiferayPortletResponse liferayPortletResponse) {
197    
198                    try {
199                            AssetRenderer<?> assetRenderer = getAssetRenderer(classPK);
200    
201                            if (assetRenderer != null) {
202                                    return assetRenderer.getURLViewDiffs(
203                                            liferayPortletRequest, liferayPortletResponse);
204                            }
205                    }
206                    catch (Exception e) {
207                            if (_log.isWarnEnabled()) {
208                                    _log.warn(e, e);
209                            }
210                    }
211    
212                    return null;
213            }
214    
215            @Override
216            public String getURLViewInContext(
217                    long classPK, LiferayPortletRequest liferayPortletRequest,
218                    LiferayPortletResponse liferayPortletResponse,
219                    String noSuchEntryRedirect) {
220    
221                    try {
222                            AssetRenderer<?> assetRenderer = getAssetRenderer(classPK);
223    
224                            if (assetRenderer != null) {
225                                    return assetRenderer.getURLViewInContext(
226                                            liferayPortletRequest, liferayPortletResponse,
227                                            noSuchEntryRedirect);
228                            }
229                    }
230                    catch (Exception e) {
231                            if (_log.isWarnEnabled()) {
232                                    _log.warn(e, e);
233                            }
234                    }
235    
236                    return null;
237            }
238    
239            /**
240             * @throws PortalException
241             */
242            @Override
243            public WorkflowDefinitionLink getWorkflowDefinitionLink(
244                            long companyId, long groupId, long classPK)
245                    throws PortalException {
246    
247                    return WorkflowDefinitionLinkLocalServiceUtil.
248                            fetchWorkflowDefinitionLink(
249                                    companyId, groupId, getClassName(), 0, 0);
250            }
251    
252            @Override
253            public boolean include(
254                    long classPK, HttpServletRequest request, HttpServletResponse response,
255                    String template) {
256    
257                    try {
258                            AssetRenderer<?> assetRenderer = getAssetRenderer(classPK);
259    
260                            if (assetRenderer != null) {
261                                    return assetRenderer.include(request, response, template);
262                            }
263                    }
264                    catch (Exception e) {
265                            if (_log.isWarnEnabled()) {
266                                    _log.warn(e, e);
267                            }
268                    }
269    
270                    return false;
271            }
272    
273            @Override
274            public boolean isAssetTypeSearchable() {
275                    return _ASSET_TYPE_SEARCHABLE;
276            }
277    
278            @Override
279            public boolean isScopeable() {
280                    return _SCOPEABLE;
281            }
282    
283            @Override
284            public boolean isVisible() {
285                    return _VISIBLE;
286            }
287    
288            @Override
289            public void startWorkflowInstance(
290                            long companyId, long groupId, long userId, long classPK, T model,
291                            Map<String, Serializable> workflowContext)
292                    throws PortalException {
293    
294                    WorkflowInstanceLinkLocalServiceUtil.startWorkflowInstance(
295                            companyId, groupId, userId, getClassName(), classPK,
296                            workflowContext);
297            }
298    
299            private static final boolean _ASSET_TYPE_SEARCHABLE = true;
300    
301            private static final boolean _SCOPEABLE = true;
302    
303            private static final boolean _VISIBLE = true;
304    
305            private static final Log _log = LogFactoryUtil.getLog(
306                    BaseWorkflowHandler.class);
307    
308    }