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.portlet.asset.model;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
020    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
021    import com.liferay.portal.kernel.portlet.LiferayPortletURL;
022    import com.liferay.portal.kernel.util.HttpUtil;
023    import com.liferay.portal.kernel.util.ParamUtil;
024    import com.liferay.portal.kernel.util.StringBundler;
025    import com.liferay.portal.kernel.util.StringPool;
026    import com.liferay.portal.kernel.util.Validator;
027    import com.liferay.portal.kernel.util.WebKeys;
028    import com.liferay.portal.model.Group;
029    import com.liferay.portal.model.Layout;
030    import com.liferay.portal.security.permission.PermissionChecker;
031    import com.liferay.portal.theme.PortletDisplay;
032    import com.liferay.portal.theme.ThemeDisplay;
033    import com.liferay.portal.util.PortalUtil;
034    import com.liferay.portal.util.PortletKeys;
035    import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
036    import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
037    import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
038    
039    import java.util.Date;
040    import java.util.Locale;
041    
042    import javax.portlet.PortletMode;
043    import javax.portlet.PortletPreferences;
044    import javax.portlet.PortletRequest;
045    import javax.portlet.PortletResponse;
046    import javax.portlet.PortletURL;
047    import javax.portlet.RenderRequest;
048    import javax.portlet.RenderResponse;
049    import javax.portlet.WindowState;
050    
051    /**
052     * @author Jorge Ferrer
053     * @author Sergio González
054     */
055    public abstract class BaseAssetRenderer implements AssetRenderer {
056    
057            public String getAddToPagePortletId() throws Exception {
058                    return PortletKeys.ASSET_PUBLISHER;
059            }
060    
061            public AssetRendererFactory getAssetRendererFactory() {
062                    if (_assetRendererFactory != null) {
063                            return _assetRendererFactory;
064                    }
065    
066                    _assetRendererFactory =
067                            AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
068                                    getClassName());
069    
070                    return _assetRendererFactory;
071            }
072    
073            public int getAssetRendererType() {
074                    return _assetRendererType;
075            }
076    
077            public String[] getAvailableLocales() {
078                    return _AVAILABLE_LOCALES;
079            }
080    
081            public String getDiscussionPath() {
082                    return null;
083            }
084    
085            public Date getDisplayDate() {
086                    return null;
087            }
088    
089            public String getIconPath(PortletRequest portletRequest) {
090                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
091                            WebKeys.THEME_DISPLAY);
092    
093                    return getIconPath(themeDisplay);
094            }
095    
096            public String getPreviewPath(
097                            PortletRequest portletRequest, PortletResponse PortletResponse)
098                    throws Exception {
099    
100                    return "/html/portlet/asset_publisher/display/preview.jsp";
101            }
102    
103            public String getSearchSummary(Locale locale) {
104                    return getSummary(locale);
105            }
106    
107            public String getThumbnailPath(PortletRequest portletRequest)
108                    throws Exception {
109    
110                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
111                            WebKeys.THEME_DISPLAY);
112    
113                    return themeDisplay.getPathThemeImages() +
114                            "/file_system/large/default.png";
115            }
116    
117            public String getURLDownload(ThemeDisplay themeDisplay) {
118                    return null;
119            }
120    
121            public PortletURL getURLEdit(
122                            LiferayPortletRequest liferayPortletRequest,
123                            LiferayPortletResponse liferayPortletResponse)
124                    throws Exception {
125    
126                    return null;
127            }
128    
129            public PortletURL getURLEdit(
130                            LiferayPortletRequest liferayPortletRequest,
131                            LiferayPortletResponse liferayPortletResponse,
132                            WindowState windowState, PortletURL redirectURL)
133                    throws Exception {
134    
135                    LiferayPortletURL editPortletURL = (LiferayPortletURL)getURLEdit(
136                            liferayPortletRequest, liferayPortletResponse);
137    
138                    if (editPortletURL == null) {
139                            return null;
140                    }
141    
142                    ThemeDisplay themeDisplay =
143                            (ThemeDisplay)liferayPortletRequest.getAttribute(
144                                    WebKeys.THEME_DISPLAY);
145    
146                    Group group = themeDisplay.getScopeGroup();
147    
148                    if (group.isLayout()) {
149                            Layout layout = themeDisplay.getLayout();
150    
151                            group = layout.getGroup();
152                    }
153    
154                    if (group.hasStagingGroup()) {
155                            return null;
156                    }
157    
158                    editPortletURL.setDoAsGroupId(getGroupId());
159    
160                    editPortletURL.setParameter("redirect", redirectURL.toString());
161                    editPortletURL.setParameter("originalRedirect", redirectURL.toString());
162    
163                    PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
164    
165                    String portletResource = ParamUtil.getString(
166                            liferayPortletRequest, "portletResource", portletDisplay.getId());
167    
168                    if (Validator.isNotNull(portletResource)) {
169                            editPortletURL.setParameter(
170                                    "referringPortletResource", portletResource);
171                    }
172                    else {
173                            editPortletURL.setParameter(
174                                    "referringPortletResource", portletDisplay.getId());
175                    }
176    
177                    editPortletURL.setPortletMode(PortletMode.VIEW);
178                    editPortletURL.setRefererPlid(themeDisplay.getPlid());
179                    editPortletURL.setWindowState(windowState);
180    
181                    return editPortletURL;
182            }
183    
184            public PortletURL getURLExport(
185                            LiferayPortletRequest liferayPortletRequest,
186                            LiferayPortletResponse liferayPortletResponse)
187                    throws Exception {
188    
189                    return null;
190            }
191    
192            public String getURLImagePreview(PortletRequest portletRequest)
193                    throws Exception {
194    
195                    return getThumbnailPath(portletRequest);
196            }
197    
198            public String getUrlTitle() {
199                    return null;
200            }
201    
202            public PortletURL getURLView(
203                            LiferayPortletResponse liferayPortletResponse,
204                            WindowState windowState)
205                    throws Exception {
206    
207                    return null;
208            }
209    
210            public String getURLViewInContext(
211                            LiferayPortletRequest liferayPortletRequest,
212                            LiferayPortletResponse liferayPortletResponse,
213                            String noSuchEntryRedirect)
214                    throws Exception {
215    
216                    return null;
217            }
218    
219            public String getViewInContextMessage() {
220                    return "view-in-context";
221            }
222    
223            @SuppressWarnings("unused")
224            public boolean hasEditPermission(PermissionChecker permissionChecker)
225                    throws PortalException, SystemException {
226    
227                    return false;
228            }
229    
230            @SuppressWarnings("unused")
231            public boolean hasViewPermission(PermissionChecker permissionChecker)
232                    throws PortalException, SystemException {
233    
234                    return true;
235            }
236    
237            public boolean isConvertible() {
238                    return false;
239            }
240    
241            public boolean isDisplayable() {
242                    return true;
243            }
244    
245            public boolean isLocalizable() {
246                    return false;
247            }
248    
249            public boolean isPreviewInContext() {
250                    return false;
251            }
252    
253            public boolean isPrintable() {
254                    return false;
255            }
256    
257            public String renderActions(
258                            RenderRequest renderRequest, RenderResponse renderResponse)
259                    throws Exception {
260    
261                    return null;
262            }
263    
264            public void setAddToPagePreferences(
265                            PortletPreferences preferences, String portletId,
266                            ThemeDisplay themeDisplay)
267                    throws Exception {
268    
269                    preferences.setValue("displayStyle", "full-content");
270                    preferences.setValue(
271                            "emailAssetEntryAddedEnabled", Boolean.FALSE.toString());
272                    preferences.setValue("selectionStyle", "manual");
273                    preferences.setValue("showAddContentButton", Boolean.FALSE.toString());
274    
275                    AssetEntry entry = AssetEntryLocalServiceUtil.getEntry(
276                            getClassName(), getClassPK());
277    
278                    AssetPublisherUtil.addSelection(
279                            themeDisplay, preferences, portletId, entry.getEntryId(), -1,
280                            entry.getClassName());
281            }
282    
283            public void setAssetRendererType(int assetRendererType) {
284                    _assetRendererType = assetRendererType;
285            }
286    
287            protected long getControlPanelPlid(
288                            LiferayPortletRequest liferayPortletRequest)
289                    throws PortalException, SystemException {
290    
291                    return PortalUtil.getControlPanelPlid(liferayPortletRequest);
292            }
293    
294            protected long getControlPanelPlid(ThemeDisplay themeDisplay)
295                    throws PortalException, SystemException {
296    
297                    return PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId());
298            }
299    
300            protected String getIconPath(ThemeDisplay themeDisplay) {
301                    return themeDisplay.getPathThemeImages() + "/common/page.png";
302            }
303    
304            protected String getURLViewInContext(
305                    LiferayPortletRequest liferayPortletRequest, String noSuchEntryRedirect,
306                    String path, String primaryKeyParameterName,
307                    long primaryKeyParameterValue) {
308    
309                    ThemeDisplay themeDisplay =
310                            (ThemeDisplay)liferayPortletRequest.getAttribute(
311                                    WebKeys.THEME_DISPLAY);
312    
313                    StringBundler sb = new StringBundler(11);
314    
315                    sb.append(themeDisplay.getPortalURL());
316                    sb.append(themeDisplay.getPathMain());
317                    sb.append(path);
318                    sb.append("?p_l_id=");
319                    sb.append(themeDisplay.getPlid());
320                    sb.append("&noSuchEntryRedirect=");
321                    sb.append(HttpUtil.encodeURL(noSuchEntryRedirect));
322                    sb.append(StringPool.AMPERSAND);
323                    sb.append(primaryKeyParameterName);
324                    sb.append(StringPool.EQUAL);
325                    sb.append(primaryKeyParameterValue);
326    
327                    return sb.toString();
328            }
329    
330            private static final String[] _AVAILABLE_LOCALES = new String[0];
331    
332            private AssetRendererFactory _assetRendererFactory;
333            private int _assetRendererType = AssetRendererFactory.TYPE_LATEST_APPROVED;
334    
335    }