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