001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portlet.asset.model;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
020    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
021    import com.liferay.portal.kernel.portlet.LiferayPortletURL;
022    import com.liferay.portal.kernel.util.HttpUtil;
023    import com.liferay.portal.kernel.util.LocaleUtil;
024    import com.liferay.portal.kernel.util.ParamUtil;
025    import com.liferay.portal.kernel.util.StringBundler;
026    import com.liferay.portal.kernel.util.StringPool;
027    import com.liferay.portal.kernel.util.Validator;
028    import com.liferay.portal.kernel.util.WebKeys;
029    import com.liferay.portal.kernel.workflow.WorkflowConstants;
030    import com.liferay.portal.model.Group;
031    import com.liferay.portal.model.Layout;
032    import com.liferay.portal.security.permission.PermissionChecker;
033    import com.liferay.portal.theme.PortletDisplay;
034    import com.liferay.portal.theme.ThemeDisplay;
035    import com.liferay.portal.util.PortalUtil;
036    import com.liferay.portal.util.PortletKeys;
037    import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
038    import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
039    import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
040    import com.liferay.portlet.trash.util.TrashUtil;
041    
042    import java.util.Date;
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            @Override
061            public String getAddToPagePortletId() throws Exception {
062                    return PortletKeys.ASSET_PUBLISHER;
063            }
064    
065            public AssetRendererFactory getAssetRendererFactory() {
066                    if (_assetRendererFactory != null) {
067                            return _assetRendererFactory;
068                    }
069    
070                    _assetRendererFactory =
071                            AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
072                                    getClassName());
073    
074                    return _assetRendererFactory;
075            }
076    
077            @Override
078            public int getAssetRendererType() {
079                    return _assetRendererType;
080            }
081    
082            @Override
083            public String[] getAvailableLanguageIds() {
084                    return _AVAILABLE_LANGUAGE_IDS;
085            }
086    
087            /**
088             * @deprecated As of 6.2.0, replaced by {@link #getAvailableLanguageIds}
089             */
090            @Override
091            public String[] getAvailableLocales() {
092                    return getAvailableLanguageIds();
093            }
094    
095            @Override
096            public String getDiscussionPath() {
097                    return null;
098            }
099    
100            @Override
101            public Date getDisplayDate() {
102                    return null;
103            }
104    
105            @Override
106            public String getIconPath(PortletRequest portletRequest) {
107                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
108                            WebKeys.THEME_DISPLAY);
109    
110                    return getIconPath(themeDisplay);
111            }
112    
113            @Override
114            public String getNewName(String oldName, String token) {
115                    return TrashUtil.getNewName(oldName, token);
116            }
117    
118            @Override
119            public String getPreviewPath(
120                            PortletRequest portletRequest, PortletResponse PortletResponse)
121                    throws Exception {
122    
123                    return "/html/portlet/asset_publisher/display/preview.jsp";
124            }
125    
126            @Override
127            public String getSearchSummary(Locale locale) {
128                    return getSummary(null, null);
129            }
130    
131            @Override
132            public int getStatus() {
133                    return WorkflowConstants.STATUS_APPROVED;
134            }
135    
136            /**
137             * @deprecated As of 7.0.0, replaced by {@link #getSummary(PortletRequest,
138             *                              PortletResponse)}
139             */
140            @Deprecated
141            @Override
142            public String getSummary(Locale locale) {
143                    throw new UnsupportedOperationException();
144            }
145    
146            @Override
147            public String getSummary(
148                    PortletRequest portletRequest, PortletResponse portletResponse) {
149    
150                    return getSummary(getLocale(portletRequest));
151            }
152    
153            @Override
154            public String getThumbnailPath(PortletRequest portletRequest)
155                    throws Exception {
156    
157                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
158                            WebKeys.THEME_DISPLAY);
159    
160                    return themeDisplay.getPathThemeImages() +
161                            "/file_system/large/default.png";
162            }
163    
164            @Override
165            public String getURLDownload(ThemeDisplay themeDisplay) {
166                    return null;
167            }
168    
169            @Override
170            public PortletURL getURLEdit(
171                            LiferayPortletRequest liferayPortletRequest,
172                            LiferayPortletResponse liferayPortletResponse)
173                    throws Exception {
174    
175                    return null;
176            }
177    
178            @Override
179            public PortletURL getURLEdit(
180                            LiferayPortletRequest liferayPortletRequest,
181                            LiferayPortletResponse liferayPortletResponse,
182                            WindowState windowState, PortletURL redirectURL)
183                    throws Exception {
184    
185                    LiferayPortletURL editPortletURL = (LiferayPortletURL)getURLEdit(
186                            liferayPortletRequest, liferayPortletResponse);
187    
188                    if (editPortletURL == null) {
189                            return null;
190                    }
191    
192                    ThemeDisplay themeDisplay =
193                            (ThemeDisplay)liferayPortletRequest.getAttribute(
194                                    WebKeys.THEME_DISPLAY);
195    
196                    Group group = themeDisplay.getScopeGroup();
197    
198                    if (group.isLayout()) {
199                            Layout layout = themeDisplay.getLayout();
200    
201                            group = layout.getGroup();
202                    }
203    
204                    if (group.hasStagingGroup()) {
205                            return null;
206                    }
207    
208                    editPortletURL.setDoAsGroupId(getGroupId());
209    
210                    editPortletURL.setParameter("redirect", redirectURL.toString());
211    
212                    PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
213    
214                    String portletResource = ParamUtil.getString(
215                            liferayPortletRequest, "portletResource", portletDisplay.getId());
216    
217                    if (Validator.isNotNull(portletResource)) {
218                            editPortletURL.setParameter(
219                                    "referringPortletResource", portletResource);
220                    }
221                    else {
222                            editPortletURL.setParameter(
223                                    "referringPortletResource", portletDisplay.getId());
224                    }
225    
226                    editPortletURL.setPortletMode(PortletMode.VIEW);
227                    editPortletURL.setRefererPlid(themeDisplay.getPlid());
228                    editPortletURL.setWindowState(windowState);
229    
230                    return editPortletURL;
231            }
232    
233            @Override
234            public PortletURL getURLExport(
235                            LiferayPortletRequest liferayPortletRequest,
236                            LiferayPortletResponse liferayPortletResponse)
237                    throws Exception {
238    
239                    return null;
240            }
241    
242            @Override
243            public String getURLImagePreview(PortletRequest portletRequest)
244                    throws Exception {
245    
246                    return getThumbnailPath(portletRequest);
247            }
248    
249            @Override
250            public String getUrlTitle() {
251                    return null;
252            }
253    
254            protected Locale getLocale(PortletRequest portletRequest) {
255                    if (portletRequest != null) {
256                            return portletRequest.getLocale();
257                    }
258    
259                    return LocaleUtil.getMostRelevantLocale();
260            }
261    
262            @Override
263            public PortletURL getURLView(
264                            LiferayPortletResponse liferayPortletResponse,
265                            WindowState windowState)
266                    throws Exception {
267    
268                    return null;
269            }
270    
271            @Override
272            public String getURLViewInContext(
273                            LiferayPortletRequest liferayPortletRequest,
274                            LiferayPortletResponse liferayPortletResponse,
275                            String noSuchEntryRedirect)
276                    throws Exception {
277    
278                    return null;
279            }
280    
281            @Override
282            public String getViewInContextMessage() {
283                    return "view-in-context";
284            }
285    
286            @Override
287            @SuppressWarnings("unused")
288            public boolean hasEditPermission(PermissionChecker permissionChecker)
289                    throws PortalException, SystemException {
290    
291                    return false;
292            }
293    
294            @Override
295            @SuppressWarnings("unused")
296            public boolean hasViewPermission(PermissionChecker permissionChecker)
297                    throws PortalException, SystemException {
298    
299                    return true;
300            }
301    
302            @Override
303            public boolean isConvertible() {
304                    return false;
305            }
306    
307            @Override
308            public boolean isDisplayable() {
309                    return true;
310            }
311    
312            @Override
313            public boolean isLocalizable() {
314                    return false;
315            }
316    
317            @Override
318            public boolean isPreviewInContext() {
319                    return false;
320            }
321    
322            @Override
323            public boolean isPrintable() {
324                    return false;
325            }
326    
327            public String renderActions(
328                            RenderRequest renderRequest, RenderResponse renderResponse)
329                    throws Exception {
330    
331                    return null;
332            }
333    
334            @Override
335            public void setAddToPagePreferences(
336                            PortletPreferences preferences, String portletId,
337                            ThemeDisplay themeDisplay)
338                    throws Exception {
339    
340                    preferences.setValue("displayStyle", "full-content");
341                    preferences.setValue(
342                            "emailAssetEntryAddedEnabled", Boolean.FALSE.toString());
343                    preferences.setValue("selectionStyle", "manual");
344                    preferences.setValue("showAddContentButton", Boolean.FALSE.toString());
345    
346                    AssetEntry entry = AssetEntryLocalServiceUtil.getEntry(
347                            getClassName(), getClassPK());
348    
349                    AssetPublisherUtil.addSelection(
350                            themeDisplay, preferences, portletId, entry.getEntryId(), -1,
351                            entry.getClassName());
352            }
353    
354            public void setAssetRendererType(int assetRendererType) {
355                    _assetRendererType = assetRendererType;
356            }
357    
358            protected long getControlPanelPlid(
359                            LiferayPortletRequest liferayPortletRequest)
360                    throws PortalException, SystemException {
361    
362                    return PortalUtil.getControlPanelPlid(liferayPortletRequest);
363            }
364    
365            protected long getControlPanelPlid(ThemeDisplay themeDisplay)
366                    throws PortalException, SystemException {
367    
368                    return PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId());
369            }
370    
371            protected String getIconPath(ThemeDisplay themeDisplay) {
372                    return themeDisplay.getPathThemeImages() + "/common/page.png";
373            }
374    
375            protected String getURLViewInContext(
376                    LiferayPortletRequest liferayPortletRequest, String noSuchEntryRedirect,
377                    String path, String primaryKeyParameterName,
378                    long primaryKeyParameterValue) {
379    
380                    ThemeDisplay themeDisplay =
381                            (ThemeDisplay)liferayPortletRequest.getAttribute(
382                                    WebKeys.THEME_DISPLAY);
383    
384                    StringBundler sb = new StringBundler(11);
385    
386                    sb.append(themeDisplay.getPortalURL());
387                    sb.append(themeDisplay.getPathMain());
388                    sb.append(path);
389                    sb.append("?p_l_id=");
390                    sb.append(themeDisplay.getPlid());
391                    sb.append("&noSuchEntryRedirect=");
392                    sb.append(HttpUtil.encodeURL(noSuchEntryRedirect));
393                    sb.append(StringPool.AMPERSAND);
394                    sb.append(primaryKeyParameterName);
395                    sb.append(StringPool.EQUAL);
396                    sb.append(primaryKeyParameterValue);
397    
398                    return PortalUtil.addPreservedParameters(themeDisplay, sb.toString());
399            }
400    
401            private static final String[] _AVAILABLE_LANGUAGE_IDS = new String[0];
402    
403            private AssetRendererFactory _assetRendererFactory;
404            private int _assetRendererType = AssetRendererFactory.TYPE_LATEST_APPROVED;
405    
406    }