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.portlet.asset.AssetRendererFactoryRegistryUtil;
035    import com.liferay.portlet.dynamicdatamapping.model.DDMForm;
036    import com.liferay.portlet.dynamicdatamapping.storage.DDMFormFieldValue;
037    import com.liferay.portlet.dynamicdatamapping.storage.DDMFormValues;
038    import com.liferay.portlet.trash.util.TrashUtil;
039    
040    import java.util.Collections;
041    import java.util.Date;
042    import java.util.List;
043    import java.util.Locale;
044    
045    import javax.portlet.PortletMode;
046    import javax.portlet.PortletPreferences;
047    import javax.portlet.PortletRequest;
048    import javax.portlet.PortletResponse;
049    import javax.portlet.PortletURL;
050    import javax.portlet.RenderRequest;
051    import javax.portlet.RenderResponse;
052    import javax.portlet.WindowState;
053    
054    /**
055     * @author Jorge Ferrer
056     * @author Sergio Gonz??lez
057     */
058    public abstract class BaseAssetRenderer implements AssetRenderer {
059    
060            /**
061             * @deprecated As of 7.0.0, with no direct replacement
062             */
063            @Deprecated
064            @Override
065            public String getAddToPagePortletId() throws Exception {
066                    return StringPool.BLANK;
067            }
068    
069            public AssetRendererFactory getAssetRendererFactory() {
070                    if (_assetRendererFactory != null) {
071                            return _assetRendererFactory;
072                    }
073    
074                    _assetRendererFactory =
075                            AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
076                                    getClassName());
077    
078                    return _assetRendererFactory;
079            }
080    
081            @Override
082            public int getAssetRendererType() {
083                    return _assetRendererType;
084            }
085    
086            @Override
087            public String[] getAvailableLanguageIds() {
088                    return _AVAILABLE_LANGUAGE_IDS;
089            }
090    
091            /**
092             * @deprecated As of 6.2.0, replaced by {@link #getAvailableLanguageIds}
093             */
094            @Deprecated
095            @Override
096            public String[] getAvailableLocales() {
097                    return getAvailableLanguageIds();
098            }
099    
100            @Override
101            public DDMFormValuesReader getDDMFormValuesReader() {
102                    return _nullDDMFormValuesReader;
103            }
104    
105            @Override
106            public String getDiscussionPath() {
107                    return null;
108            }
109    
110            @Override
111            public Date getDisplayDate() {
112                    return null;
113            }
114    
115            @Override
116            @SuppressWarnings("unused")
117            public String getIconCssClass() throws PortalException {
118                    return getAssetRendererFactory().getIconCssClass();
119            }
120    
121            @Override
122            public String getIconPath(PortletRequest portletRequest) {
123                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
124                            WebKeys.THEME_DISPLAY);
125    
126                    return getIconPath(themeDisplay);
127            }
128    
129            @Override
130            public String getNewName(String oldName, String token) {
131                    return TrashUtil.getNewName(oldName, token);
132            }
133    
134            /**
135             * @deprecated As of 7.0.0, with no direct replacement
136             */
137            @Deprecated
138            @Override
139            public String getPreviewPath(
140                            PortletRequest portletRequest, PortletResponse PortletResponse)
141                    throws Exception {
142    
143                    return StringPool.BLANK;
144            }
145    
146            @Override
147            public String getSearchSummary(Locale locale) {
148                    return getSummary(null, null);
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                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
176                            WebKeys.THEME_DISPLAY);
177    
178                    return themeDisplay.getPathThemeImages() +
179                            "/file_system/large/default.png";
180            }
181    
182            @Override
183            public String getURLDownload(ThemeDisplay themeDisplay) {
184                    return null;
185            }
186    
187            @Override
188            public PortletURL getURLEdit(
189                            LiferayPortletRequest liferayPortletRequest,
190                            LiferayPortletResponse liferayPortletResponse)
191                    throws Exception {
192    
193                    return null;
194            }
195    
196            @Override
197            public PortletURL getURLEdit(
198                            LiferayPortletRequest liferayPortletRequest,
199                            LiferayPortletResponse liferayPortletResponse,
200                            WindowState windowState, PortletURL redirectURL)
201                    throws Exception {
202    
203                    LiferayPortletURL editPortletURL = (LiferayPortletURL)getURLEdit(
204                            liferayPortletRequest, liferayPortletResponse);
205    
206                    if (editPortletURL == null) {
207                            return null;
208                    }
209    
210                    ThemeDisplay themeDisplay =
211                            (ThemeDisplay)liferayPortletRequest.getAttribute(
212                                    WebKeys.THEME_DISPLAY);
213    
214                    Group group = themeDisplay.getScopeGroup();
215    
216                    if (group.isLayout()) {
217                            Layout layout = themeDisplay.getLayout();
218    
219                            group = layout.getGroup();
220                    }
221    
222                    if (group.hasStagingGroup()) {
223                            return null;
224                    }
225    
226                    editPortletURL.setDoAsGroupId(getGroupId());
227    
228                    editPortletURL.setParameter("redirect", redirectURL.toString());
229    
230                    PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
231    
232                    String portletResource = ParamUtil.getString(
233                            liferayPortletRequest, "portletResource", portletDisplay.getId());
234    
235                    if (Validator.isNotNull(portletResource)) {
236                            editPortletURL.setParameter(
237                                    "referringPortletResource", portletResource);
238                    }
239                    else {
240                            editPortletURL.setParameter(
241                                    "referringPortletResource", portletDisplay.getId());
242                    }
243    
244                    editPortletURL.setPortletMode(PortletMode.VIEW);
245                    editPortletURL.setRefererPlid(themeDisplay.getPlid());
246                    editPortletURL.setWindowState(windowState);
247    
248                    return editPortletURL;
249            }
250    
251            @Override
252            public PortletURL getURLExport(
253                            LiferayPortletRequest liferayPortletRequest,
254                            LiferayPortletResponse liferayPortletResponse)
255                    throws Exception {
256    
257                    return null;
258            }
259    
260            @Override
261            public String getURLImagePreview(PortletRequest portletRequest)
262                    throws Exception {
263    
264                    return getThumbnailPath(portletRequest);
265            }
266    
267            @Override
268            public String getUrlTitle() {
269                    return null;
270            }
271    
272            @Override
273            public PortletURL getURLView(
274                            LiferayPortletResponse liferayPortletResponse,
275                            WindowState windowState)
276                    throws Exception {
277    
278                    return null;
279            }
280    
281            @Override
282            public PortletURL getURLViewDiffs(
283                            LiferayPortletRequest liferayPortletRequest,
284                            LiferayPortletResponse liferayPortletResponse)
285                    throws Exception {
286    
287                    return null;
288            }
289    
290            @Override
291            public String getURLViewInContext(
292                            LiferayPortletRequest liferayPortletRequest,
293                            LiferayPortletResponse liferayPortletResponse,
294                            String noSuchEntryRedirect)
295                    throws Exception {
296    
297                    return null;
298            }
299    
300            @Override
301            public String getViewInContextMessage() {
302                    return "view-in-context";
303            }
304    
305            @Override
306            @SuppressWarnings("unused")
307            public boolean hasEditPermission(PermissionChecker permissionChecker)
308                    throws PortalException {
309    
310                    return false;
311            }
312    
313            @Override
314            @SuppressWarnings("unused")
315            public boolean hasViewPermission(PermissionChecker permissionChecker)
316                    throws PortalException {
317    
318                    return true;
319            }
320    
321            @Override
322            public boolean isConvertible() {
323                    return false;
324            }
325    
326            @Override
327            public boolean isDisplayable() {
328                    return true;
329            }
330    
331            @Override
332            public boolean isLocalizable() {
333                    return false;
334            }
335    
336            @Override
337            public boolean isPreviewInContext() {
338                    return false;
339            }
340    
341            @Override
342            public boolean isPrintable() {
343                    return false;
344            }
345    
346            public String renderActions(
347                            RenderRequest renderRequest, RenderResponse renderResponse)
348                    throws Exception {
349    
350                    return null;
351            }
352    
353            /**
354             * @deprecated As of 7.0.0, with no direct replacement
355             */
356            @Deprecated
357            @Override
358            public void setAddToPagePreferences(
359                            PortletPreferences portletPreferences, String portletId,
360                            ThemeDisplay themeDisplay)
361                    throws Exception {
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 DDMFormValuesReader _nullDDMFormValuesReader =
422                    new NullDDMFormValuesReader();
423    
424            private AssetRendererFactory _assetRendererFactory;
425            private int _assetRendererType = AssetRendererFactory.TYPE_LATEST_APPROVED;
426    
427            private static final class NullDDMFormValuesReader
428                    implements DDMFormValuesReader {
429    
430                    @Override
431                    public List<DDMFormFieldValue> getDDMFormFieldValues(
432                            String ddmFormFieldType) {
433    
434                            return Collections.emptyList();
435                    }
436    
437                    @Override
438                    public DDMFormValues getDDMFormValues() {
439                            return new DDMFormValues(new DDMForm());
440                    }
441    
442            }
443    
444    }