001    /**
002     * Copyright (c) 2000-2012 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.exception.SystemException;
019    import com.liferay.portal.kernel.log.Log;
020    import com.liferay.portal.kernel.log.LogFactoryUtil;
021    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
022    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
023    import com.liferay.portal.kernel.util.WebKeys;
024    import com.liferay.portal.model.WorkflowDefinitionLink;
025    import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
026    import com.liferay.portal.service.WorkflowInstanceLinkLocalServiceUtil;
027    import com.liferay.portal.theme.ThemeDisplay;
028    import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
029    import com.liferay.portlet.asset.model.AssetRenderer;
030    import com.liferay.portlet.asset.model.AssetRendererFactory;
031    
032    import java.io.Serializable;
033    
034    import java.util.Locale;
035    import java.util.Map;
036    
037    import javax.portlet.PortletURL;
038    import javax.portlet.RenderRequest;
039    import javax.portlet.RenderResponse;
040    
041    /**
042     * @author Bruno Farache
043     * @author Marcellus Tavares
044     * @author Juan Fernández
045     * @author Julio Camarero
046     * @author Jorge Ferrer
047     */
048    public abstract class BaseWorkflowHandler implements WorkflowHandler {
049    
050            public AssetRenderer getAssetRenderer(long classPK)
051                    throws PortalException, SystemException {
052    
053                    AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
054    
055                    if (assetRendererFactory != null) {
056                            return assetRendererFactory.getAssetRenderer(
057                                    classPK, AssetRendererFactory.TYPE_LATEST);
058                    }
059                    else {
060                            return null;
061                    }
062            }
063    
064            public AssetRendererFactory getAssetRendererFactory() {
065                    return AssetRendererFactoryRegistryUtil.
066                            getAssetRendererFactoryByClassName(getClassName());
067            }
068    
069            public String getIconPath(LiferayPortletRequest liferayPortletRequest) {
070                    ThemeDisplay themeDisplay =
071                            (ThemeDisplay)liferayPortletRequest.getAttribute(
072                                    WebKeys.THEME_DISPLAY);
073    
074                    return getIconPath(themeDisplay);
075            }
076    
077            public String getSummary(long classPK, Locale locale) {
078                    try {
079                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
080    
081                            if (assetRenderer != null) {
082                                    return assetRenderer.getSummary(locale);
083                            }
084                    }
085                    catch (Exception e) {
086                            if (_log.isWarnEnabled()) {
087                                    _log.warn(e, e);
088                            }
089                    }
090    
091                    return null;
092            }
093    
094            public String getTitle(long classPK, Locale locale) {
095                    try {
096                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
097    
098                            if (assetRenderer != null) {
099                                    return assetRenderer.getTitle(locale);
100                            }
101                    }
102                    catch (Exception e) {
103                            if (_log.isWarnEnabled()) {
104                                    _log.warn(e, e);
105                            }
106                    }
107    
108                    return null;
109            }
110    
111            public PortletURL getURLEdit(
112                    long classPK, LiferayPortletRequest liferayPortletRequest,
113                    LiferayPortletResponse liferayPortletResponse) {
114    
115                    try {
116                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
117    
118                            if (assetRenderer != null) {
119                                    return assetRenderer.getURLEdit(
120                                            liferayPortletRequest, liferayPortletResponse);
121                            }
122                    }
123                    catch (Exception e) {
124                            if (_log.isWarnEnabled()) {
125                                    _log.warn(e, e);
126                            }
127                    }
128    
129                    return null;
130            }
131    
132            public String getURLViewInContext(
133                    long classPK, LiferayPortletRequest liferayPortletRequest,
134                    LiferayPortletResponse liferayPortletResponse,
135                    String noSuchEntryRedirect) {
136    
137                    try {
138                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
139    
140                            if (assetRenderer != null) {
141                                    return assetRenderer.getURLViewInContext(
142                                            liferayPortletRequest, liferayPortletResponse,
143                                            noSuchEntryRedirect);
144                            }
145                    }
146                    catch (Exception e) {
147                            if (_log.isWarnEnabled()) {
148                                    _log.warn(e, e);
149                            }
150                    }
151    
152                    return null;
153            }
154    
155            public WorkflowDefinitionLink getWorkflowDefinitionLink(
156                            long companyId, long groupId, long classPK)
157                    throws PortalException, SystemException {
158    
159                    return WorkflowDefinitionLinkLocalServiceUtil.getWorkflowDefinitionLink(
160                            companyId, groupId, getClassName(), 0, 0);
161            }
162    
163            public boolean isAssetTypeSearchable() {
164                    return _ASSET_TYPE_SEARCHABLE;
165            }
166    
167            public boolean isScopeable() {
168                    return _SCOPEABLE;
169            }
170    
171            public boolean isVisible() {
172                    return _VISIBLE;
173            }
174    
175            public String render(
176                    long classPK, RenderRequest renderRequest,
177                    RenderResponse renderResponse, String template) {
178    
179                    try {
180                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
181    
182                            if (assetRenderer != null) {
183                                    return assetRenderer.render(
184                                            renderRequest, renderResponse, template);
185                            }
186                    }
187                    catch (Exception e) {
188                            if (_log.isWarnEnabled()) {
189                                    _log.warn(e, e);
190                            }
191                    }
192    
193                    return null;
194            }
195    
196            public void startWorkflowInstance(
197                            long companyId, long groupId, long userId, long classPK,
198                            Object model, Map<String, Serializable> workflowContext)
199                    throws PortalException, SystemException {
200    
201                    WorkflowInstanceLinkLocalServiceUtil.startWorkflowInstance(
202                            companyId, groupId, userId, getClassName(), classPK,
203                            workflowContext);
204            }
205    
206            protected String getIconPath(ThemeDisplay themeDisplay) {
207                    return themeDisplay.getPathThemeImages() + "/common/page.png";
208            }
209    
210            private static final boolean _ASSET_TYPE_SEARCHABLE = true;
211    
212            private static final boolean _SCOPEABLE = true;
213    
214            private static final boolean _VISIBLE = true;
215    
216            private static Log _log = LogFactoryUtil.getLog(BaseWorkflowHandler.class);
217    
218    }