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            @Override
125            public String getIconPath(PortletRequest portletRequest) {
126                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
127                            WebKeys.THEME_DISPLAY);
128    
129                    return getIconPath(themeDisplay);
130            }
131    
132            @Override
133            public String getNewName(String oldName, String token) {
134                    return TrashUtil.getNewName(oldName, token);
135            }
136    
137            /**
138             * @deprecated As of 7.0.0, with no direct replacement
139             */
140            @Deprecated
141            @Override
142            public String getPreviewPath(
143                            PortletRequest portletRequest, PortletResponse PortletResponse)
144                    throws Exception {
145    
146                    return StringPool.BLANK;
147            }
148    
149            @Override
150            public String getSearchSummary(Locale locale) {
151                    return getSummary(null, null);
152            }
153    
154            @Override
155            public int getStatus() {
156                    return WorkflowConstants.STATUS_APPROVED;
157            }
158    
159            @Override
160            public String getSummary() {
161                    return getSummary(null, null);
162            }
163    
164            /**
165             * @deprecated As of 7.0.0, replaced by {@link #getSummary(PortletRequest,
166             *             PortletResponse)}
167             */
168            @Deprecated
169            @Override
170            public String getSummary(Locale locale) {
171                    return getSummary(null, null);
172            }
173    
174            @Override
175            public String[] getSupportedConversions() {
176                    return null;
177            }
178    
179            @Override
180            public String getThumbnailPath(PortletRequest portletRequest)
181                    throws Exception {
182    
183                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
184                            WebKeys.THEME_DISPLAY);
185    
186                    return themeDisplay.getPathThemeImages() +
187                            "/file_system/large/default.png";
188            }
189    
190            @Override
191            public String getURLDownload(ThemeDisplay themeDisplay) {
192                    return null;
193            }
194    
195            @Override
196            public PortletURL getURLEdit(
197                            LiferayPortletRequest liferayPortletRequest,
198                            LiferayPortletResponse liferayPortletResponse)
199                    throws Exception {
200    
201                    return null;
202            }
203    
204            @Override
205            public PortletURL getURLEdit(
206                            LiferayPortletRequest liferayPortletRequest,
207                            LiferayPortletResponse liferayPortletResponse,
208                            WindowState windowState, PortletURL redirectURL)
209                    throws Exception {
210    
211                    LiferayPortletURL editPortletURL = (LiferayPortletURL)getURLEdit(
212                            liferayPortletRequest, liferayPortletResponse);
213    
214                    if (editPortletURL == null) {
215                            return null;
216                    }
217    
218                    ThemeDisplay themeDisplay =
219                            (ThemeDisplay)liferayPortletRequest.getAttribute(
220                                    WebKeys.THEME_DISPLAY);
221    
222                    Group group = themeDisplay.getScopeGroup();
223    
224                    if (group.isLayout()) {
225                            Layout layout = themeDisplay.getLayout();
226    
227                            group = layout.getGroup();
228                    }
229    
230                    if (group.hasStagingGroup()) {
231                            return null;
232                    }
233    
234                    editPortletURL.setParameter("redirect", redirectURL.toString());
235    
236                    PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
237    
238                    String portletResource = ParamUtil.getString(
239                            liferayPortletRequest, "portletResource", portletDisplay.getId());
240    
241                    if (Validator.isNotNull(portletResource)) {
242                            editPortletURL.setParameter(
243                                    "referringPortletResource", portletResource);
244                    }
245                    else {
246                            editPortletURL.setParameter(
247                                    "referringPortletResource", portletDisplay.getId());
248                    }
249    
250                    editPortletURL.setPortletMode(PortletMode.VIEW);
251                    editPortletURL.setRefererPlid(themeDisplay.getPlid());
252                    editPortletURL.setWindowState(windowState);
253    
254                    return editPortletURL;
255            }
256    
257            @Override
258            public PortletURL getURLExport(
259                            LiferayPortletRequest liferayPortletRequest,
260                            LiferayPortletResponse liferayPortletResponse)
261                    throws Exception {
262    
263                    return null;
264            }
265    
266            @Override
267            public String getURLImagePreview(PortletRequest portletRequest)
268                    throws Exception {
269    
270                    return getThumbnailPath(portletRequest);
271            }
272    
273            @Override
274            public String getUrlTitle() {
275                    return null;
276            }
277    
278            @Override
279            public String getURLView(
280                            LiferayPortletResponse liferayPortletResponse,
281                            WindowState windowState)
282                    throws Exception {
283    
284                    return StringPool.BLANK;
285            }
286    
287            @Override
288            public PortletURL getURLViewDiffs(
289                            LiferayPortletRequest liferayPortletRequest,
290                            LiferayPortletResponse liferayPortletResponse)
291                    throws Exception {
292    
293                    return null;
294            }
295    
296            @Override
297            public String getURLViewInContext(
298                            LiferayPortletRequest liferayPortletRequest,
299                            LiferayPortletResponse liferayPortletResponse,
300                            String noSuchEntryRedirect)
301                    throws Exception {
302    
303                    return null;
304            }
305    
306            @Override
307            public String getViewInContextMessage() {
308                    return "view-in-context";
309            }
310    
311            @Override
312            @SuppressWarnings("unused")
313            public boolean hasEditPermission(PermissionChecker permissionChecker)
314                    throws PortalException {
315    
316                    return false;
317            }
318    
319            @Override
320            @SuppressWarnings("unused")
321            public boolean hasViewPermission(PermissionChecker permissionChecker)
322                    throws PortalException {
323    
324                    return true;
325            }
326    
327            @Override
328            public boolean isCommentable() {
329                    if (Validator.isNull(getDiscussionPath())) {
330                            return false;
331                    }
332    
333                    return true;
334            }
335    
336            @Override
337            public boolean isConvertible() {
338                    return false;
339            }
340    
341            @Override
342            public boolean isDisplayable() {
343                    return true;
344            }
345    
346            @Override
347            public boolean isLocalizable() {
348                    return false;
349            }
350    
351            @Override
352            public boolean isPreviewInContext() {
353                    return false;
354            }
355    
356            @Override
357            public boolean isPrintable() {
358                    return false;
359            }
360    
361            @Override
362            public boolean isRatable() {
363                    return true;
364            }
365    
366            public String renderActions(
367                            RenderRequest renderRequest, RenderResponse renderResponse)
368                    throws Exception {
369    
370                    return null;
371            }
372    
373            /**
374             * @deprecated As of 7.0.0, with no direct replacement
375             */
376            @Deprecated
377            @Override
378            public void setAddToPagePreferences(
379                            PortletPreferences portletPreferences, String portletId,
380                            ThemeDisplay themeDisplay)
381                    throws Exception {
382            }
383    
384            public void setAssetRendererType(int assetRendererType) {
385                    _assetRendererType = assetRendererType;
386            }
387    
388            protected long getControlPanelPlid(
389                            LiferayPortletRequest liferayPortletRequest)
390                    throws PortalException {
391    
392                    return PortalUtil.getControlPanelPlid(liferayPortletRequest);
393            }
394    
395            protected long getControlPanelPlid(ThemeDisplay themeDisplay)
396                    throws PortalException {
397    
398                    return PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId());
399            }
400    
401            protected String getIconPath(ThemeDisplay themeDisplay) {
402                    return themeDisplay.getPathThemeImages() + "/common/page.png";
403            }
404    
405            protected Locale getLocale(PortletRequest portletRequest) {
406                    if (portletRequest != null) {
407                            return portletRequest.getLocale();
408                    }
409    
410                    return LocaleUtil.getMostRelevantLocale();
411            }
412    
413            protected String getURLViewInContext(
414                    LiferayPortletRequest liferayPortletRequest, String noSuchEntryRedirect,
415                    String path, String primaryKeyParameterName,
416                    long primaryKeyParameterValue) {
417    
418                    ThemeDisplay themeDisplay =
419                            (ThemeDisplay)liferayPortletRequest.getAttribute(
420                                    WebKeys.THEME_DISPLAY);
421    
422                    StringBundler sb = new StringBundler(11);
423    
424                    sb.append(themeDisplay.getPortalURL());
425                    sb.append(themeDisplay.getPathMain());
426                    sb.append(path);
427                    sb.append("?p_l_id=");
428                    sb.append(themeDisplay.getPlid());
429                    sb.append("&noSuchEntryRedirect=");
430                    sb.append(HttpUtil.encodeURL(noSuchEntryRedirect));
431                    sb.append(StringPool.AMPERSAND);
432                    sb.append(primaryKeyParameterName);
433                    sb.append(StringPool.EQUAL);
434                    sb.append(primaryKeyParameterValue);
435    
436                    return PortalUtil.addPreservedParameters(themeDisplay, sb.toString());
437            }
438    
439            private static final String[] _AVAILABLE_LANGUAGE_IDS = new String[0];
440    
441            private static final DDMFormValuesReader _nullDDMFormValuesReader =
442                    new NullDDMFormValuesReader();
443    
444            private AssetRendererFactory<T> _assetRendererFactory;
445            private int _assetRendererType = AssetRendererFactory.TYPE_LATEST_APPROVED;
446    
447            private static final class NullDDMFormValuesReader
448                    implements DDMFormValuesReader {
449    
450                    @Override
451                    public List<DDMFormFieldValue> getDDMFormFieldValues(
452                            String ddmFormFieldType) {
453    
454                            return Collections.emptyList();
455                    }
456    
457                    @Override
458                    public DDMFormValues getDDMFormValues() {
459                            return new DDMFormValues(new DDMForm());
460                    }
461    
462            }
463    
464    }