001    /**
002     * Copyright (c) 2000-2013 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            @Override
051            public AssetRenderer getAssetRenderer(long classPK)
052                    throws PortalException, SystemException {
053    
054                    AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
055    
056                    if (assetRendererFactory != null) {
057                            return assetRendererFactory.getAssetRenderer(
058                                    classPK, AssetRendererFactory.TYPE_LATEST);
059                    }
060                    else {
061                            return null;
062                    }
063            }
064    
065            @Override
066            public AssetRendererFactory getAssetRendererFactory() {
067                    return AssetRendererFactoryRegistryUtil.
068                            getAssetRendererFactoryByClassName(getClassName());
069            }
070    
071            @Override
072            public String getIconPath(LiferayPortletRequest liferayPortletRequest) {
073                    ThemeDisplay themeDisplay =
074                            (ThemeDisplay)liferayPortletRequest.getAttribute(
075                                    WebKeys.THEME_DISPLAY);
076    
077                    return getIconPath(themeDisplay);
078            }
079    
080            @Override
081            public String getSummary(long classPK, Locale locale) {
082                    try {
083                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
084    
085                            if (assetRenderer != null) {
086                                    return assetRenderer.getSummary(locale);
087                            }
088                    }
089                    catch (Exception e) {
090                            if (_log.isWarnEnabled()) {
091                                    _log.warn(e, e);
092                            }
093                    }
094    
095                    return null;
096            }
097    
098            @Override
099            public String getTitle(long classPK, Locale locale) {
100                    try {
101                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
102    
103                            if (assetRenderer != null) {
104                                    return assetRenderer.getTitle(locale);
105                            }
106                    }
107                    catch (Exception e) {
108                            if (_log.isWarnEnabled()) {
109                                    _log.warn(e, e);
110                            }
111                    }
112    
113                    return null;
114            }
115    
116            @Override
117            public PortletURL getURLEdit(
118                    long classPK, LiferayPortletRequest liferayPortletRequest,
119                    LiferayPortletResponse liferayPortletResponse) {
120    
121                    try {
122                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
123    
124                            if (assetRenderer != null) {
125                                    return assetRenderer.getURLEdit(
126                                            liferayPortletRequest, liferayPortletResponse);
127                            }
128                    }
129                    catch (Exception e) {
130                            if (_log.isWarnEnabled()) {
131                                    _log.warn(e, e);
132                            }
133                    }
134    
135                    return null;
136            }
137    
138            @Override
139            public String getURLViewInContext(
140                    long classPK, LiferayPortletRequest liferayPortletRequest,
141                    LiferayPortletResponse liferayPortletResponse,
142                    String noSuchEntryRedirect) {
143    
144                    try {
145                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
146    
147                            if (assetRenderer != null) {
148                                    return assetRenderer.getURLViewInContext(
149                                            liferayPortletRequest, liferayPortletResponse,
150                                            noSuchEntryRedirect);
151                            }
152                    }
153                    catch (Exception e) {
154                            if (_log.isWarnEnabled()) {
155                                    _log.warn(e, e);
156                            }
157                    }
158    
159                    return null;
160            }
161    
162            @Override
163            public WorkflowDefinitionLink getWorkflowDefinitionLink(
164                            long companyId, long groupId, long classPK)
165                    throws PortalException, SystemException {
166    
167                    return WorkflowDefinitionLinkLocalServiceUtil.
168                            fetchWorkflowDefinitionLink(
169                                    companyId, groupId, getClassName(), 0, 0);
170            }
171    
172            @Override
173            public boolean isAssetTypeSearchable() {
174                    return _ASSET_TYPE_SEARCHABLE;
175            }
176    
177            @Override
178            public boolean isScopeable() {
179                    return _SCOPEABLE;
180            }
181    
182            @Override
183            public boolean isVisible() {
184                    return _VISIBLE;
185            }
186    
187            @Override
188            public String render(
189                    long classPK, RenderRequest renderRequest,
190                    RenderResponse renderResponse, String template) {
191    
192                    try {
193                            AssetRenderer assetRenderer = getAssetRenderer(classPK);
194    
195                            if (assetRenderer != null) {
196                                    return assetRenderer.render(
197                                            renderRequest, renderResponse, template);
198                            }
199                    }
200                    catch (Exception e) {
201                            if (_log.isWarnEnabled()) {
202                                    _log.warn(e, e);
203                            }
204                    }
205    
206                    return null;
207            }
208    
209            @Override
210            public void startWorkflowInstance(
211                            long companyId, long groupId, long userId, long classPK,
212                            Object model, Map<String, Serializable> workflowContext)
213                    throws PortalException, SystemException {
214    
215                    WorkflowInstanceLinkLocalServiceUtil.startWorkflowInstance(
216                            companyId, groupId, userId, getClassName(), classPK,
217                            workflowContext);
218            }
219    
220            protected String getIconPath(ThemeDisplay themeDisplay) {
221                    return themeDisplay.getPathThemeImages() + "/common/page.png";
222            }
223    
224            private static final boolean _ASSET_TYPE_SEARCHABLE = true;
225    
226            private static final boolean _SCOPEABLE = true;
227    
228            private static final boolean _VISIBLE = true;
229    
230            private static Log _log = LogFactoryUtil.getLog(BaseWorkflowHandler.class);
231    
232    }