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