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