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