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