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