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.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.portal.util.PortletKeys;
036    import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
037    import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
038    import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
039    import com.liferay.portlet.trash.util.TrashUtil;
040    
041    import java.util.Date;
042    import java.util.Locale;
043    
044    import javax.portlet.PortletMode;
045    import javax.portlet.PortletPreferences;
046    import javax.portlet.PortletRequest;
047    import javax.portlet.PortletResponse;
048    import javax.portlet.PortletURL;
049    import javax.portlet.RenderRequest;
050    import javax.portlet.RenderResponse;
051    import javax.portlet.WindowState;
052    
053    /**
054     * @author Jorge Ferrer
055     * @author Sergio Gonz??lez
056     */
057    public abstract class BaseAssetRenderer implements AssetRenderer {
058    
059            @Override
060            public String getAddToPagePortletId() throws Exception {
061                    return PortletKeys.ASSET_PUBLISHER;
062            }
063    
064            public AssetRendererFactory getAssetRendererFactory() {
065                    if (_assetRendererFactory != null) {
066                            return _assetRendererFactory;
067                    }
068    
069                    _assetRendererFactory =
070                            AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
071                                    getClassName());
072    
073                    return _assetRendererFactory;
074            }
075    
076            @Override
077            public int getAssetRendererType() {
078                    return _assetRendererType;
079            }
080    
081            @Override
082            public String[] getAvailableLanguageIds() {
083                    return _AVAILABLE_LANGUAGE_IDS;
084            }
085    
086            /**
087             * @deprecated As of 6.2.0, replaced by {@link #getAvailableLanguageIds}
088             */
089            @Override
090            public String[] getAvailableLocales() {
091                    return getAvailableLanguageIds();
092            }
093    
094            @Override
095            public String getDiscussionPath() {
096                    return null;
097            }
098    
099            @Override
100            public Date getDisplayDate() {
101                    return null;
102            }
103    
104            @Override
105            public String getIconPath(PortletRequest portletRequest) {
106                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
107                            WebKeys.THEME_DISPLAY);
108    
109                    return getIconPath(themeDisplay);
110            }
111    
112            @Override
113            public String getNewName(String oldName, String token) {
114                    return TrashUtil.getNewName(oldName, token);
115            }
116    
117            @Override
118            public String getPreviewPath(
119                            PortletRequest portletRequest, PortletResponse PortletResponse)
120                    throws Exception {
121    
122                    return "/html/portlet/asset_publisher/display/preview.jsp";
123            }
124    
125            @Override
126            public String getSearchSummary(Locale locale) {
127                    return getSummary(locale);
128            }
129    
130            @Override
131            public int getStatus() {
132                    return WorkflowConstants.STATUS_APPROVED;
133            }
134    
135            @Override
136            public String getThumbnailPath(PortletRequest portletRequest)
137                    throws Exception {
138    
139                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
140                            WebKeys.THEME_DISPLAY);
141    
142                    return themeDisplay.getPathThemeImages() +
143                            "/file_system/large/default.png";
144            }
145    
146            @Override
147            public String getURLDownload(ThemeDisplay themeDisplay) {
148                    return null;
149            }
150    
151            @Override
152            public PortletURL getURLEdit(
153                            LiferayPortletRequest liferayPortletRequest,
154                            LiferayPortletResponse liferayPortletResponse)
155                    throws Exception {
156    
157                    return null;
158            }
159    
160            @Override
161            public PortletURL getURLEdit(
162                            LiferayPortletRequest liferayPortletRequest,
163                            LiferayPortletResponse liferayPortletResponse,
164                            WindowState windowState, PortletURL redirectURL)
165                    throws Exception {
166    
167                    LiferayPortletURL editPortletURL = (LiferayPortletURL)getURLEdit(
168                            liferayPortletRequest, liferayPortletResponse);
169    
170                    if (editPortletURL == null) {
171                            return null;
172                    }
173    
174                    ThemeDisplay themeDisplay =
175                            (ThemeDisplay)liferayPortletRequest.getAttribute(
176                                    WebKeys.THEME_DISPLAY);
177    
178                    Group group = themeDisplay.getScopeGroup();
179    
180                    if (group.isLayout()) {
181                            Layout layout = themeDisplay.getLayout();
182    
183                            group = layout.getGroup();
184                    }
185    
186                    if (group.hasStagingGroup()) {
187                            return null;
188                    }
189    
190                    editPortletURL.setDoAsGroupId(getGroupId());
191    
192                    editPortletURL.setParameter("redirect", redirectURL.toString());
193    
194                    PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
195    
196                    String portletResource = ParamUtil.getString(
197                            liferayPortletRequest, "portletResource", portletDisplay.getId());
198    
199                    if (Validator.isNotNull(portletResource)) {
200                            editPortletURL.setParameter(
201                                    "referringPortletResource", portletResource);
202                    }
203                    else {
204                            editPortletURL.setParameter(
205                                    "referringPortletResource", portletDisplay.getId());
206                    }
207    
208                    editPortletURL.setPortletMode(PortletMode.VIEW);
209                    editPortletURL.setRefererPlid(themeDisplay.getPlid());
210                    editPortletURL.setWindowState(windowState);
211    
212                    return editPortletURL;
213            }
214    
215            @Override
216            public PortletURL getURLExport(
217                            LiferayPortletRequest liferayPortletRequest,
218                            LiferayPortletResponse liferayPortletResponse)
219                    throws Exception {
220    
221                    return null;
222            }
223    
224            @Override
225            public String getURLImagePreview(PortletRequest portletRequest)
226                    throws Exception {
227    
228                    return getThumbnailPath(portletRequest);
229            }
230    
231            @Override
232            public String getUrlTitle() {
233                    return null;
234            }
235    
236            @Override
237            public PortletURL getURLView(
238                            LiferayPortletResponse liferayPortletResponse,
239                            WindowState windowState)
240                    throws Exception {
241    
242                    return null;
243            }
244    
245            @Override
246            public String getURLViewInContext(
247                            LiferayPortletRequest liferayPortletRequest,
248                            LiferayPortletResponse liferayPortletResponse,
249                            String noSuchEntryRedirect)
250                    throws Exception {
251    
252                    return null;
253            }
254    
255            @Override
256            public String getViewInContextMessage() {
257                    return "view-in-context";
258            }
259    
260            @Override
261            @SuppressWarnings("unused")
262            public boolean hasEditPermission(PermissionChecker permissionChecker)
263                    throws PortalException, SystemException {
264    
265                    return false;
266            }
267    
268            @Override
269            @SuppressWarnings("unused")
270            public boolean hasViewPermission(PermissionChecker permissionChecker)
271                    throws PortalException, SystemException {
272    
273                    return true;
274            }
275    
276            @Override
277            public boolean isConvertible() {
278                    return false;
279            }
280    
281            @Override
282            public boolean isDisplayable() {
283                    return true;
284            }
285    
286            @Override
287            public boolean isLocalizable() {
288                    return false;
289            }
290    
291            @Override
292            public boolean isPreviewInContext() {
293                    return false;
294            }
295    
296            @Override
297            public boolean isPrintable() {
298                    return false;
299            }
300    
301            public String renderActions(
302                            RenderRequest renderRequest, RenderResponse renderResponse)
303                    throws Exception {
304    
305                    return null;
306            }
307    
308            @Override
309            public void setAddToPagePreferences(
310                            PortletPreferences preferences, String portletId,
311                            ThemeDisplay themeDisplay)
312                    throws Exception {
313    
314                    preferences.setValue("displayStyle", "full-content");
315                    preferences.setValue(
316                            "emailAssetEntryAddedEnabled", Boolean.FALSE.toString());
317                    preferences.setValue("selectionStyle", "manual");
318                    preferences.setValue("showAddContentButton", Boolean.FALSE.toString());
319    
320                    AssetEntry entry = AssetEntryLocalServiceUtil.getEntry(
321                            getClassName(), getClassPK());
322    
323                    AssetPublisherUtil.addSelection(
324                            themeDisplay, preferences, portletId, entry.getEntryId(), -1,
325                            entry.getClassName());
326            }
327    
328            public void setAssetRendererType(int assetRendererType) {
329                    _assetRendererType = assetRendererType;
330            }
331    
332            protected long getControlPanelPlid(
333                            LiferayPortletRequest liferayPortletRequest)
334                    throws PortalException, SystemException {
335    
336                    return PortalUtil.getControlPanelPlid(liferayPortletRequest);
337            }
338    
339            protected long getControlPanelPlid(ThemeDisplay themeDisplay)
340                    throws PortalException, SystemException {
341    
342                    return PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId());
343            }
344    
345            protected String getIconPath(ThemeDisplay themeDisplay) {
346                    return themeDisplay.getPathThemeImages() + "/common/page.png";
347            }
348    
349            protected String getURLViewInContext(
350                    LiferayPortletRequest liferayPortletRequest, String noSuchEntryRedirect,
351                    String path, String primaryKeyParameterName,
352                    long primaryKeyParameterValue) {
353    
354                    ThemeDisplay themeDisplay =
355                            (ThemeDisplay)liferayPortletRequest.getAttribute(
356                                    WebKeys.THEME_DISPLAY);
357    
358                    StringBundler sb = new StringBundler(11);
359    
360                    sb.append(themeDisplay.getPortalURL());
361                    sb.append(themeDisplay.getPathMain());
362                    sb.append(path);
363                    sb.append("?p_l_id=");
364                    sb.append(themeDisplay.getPlid());
365                    sb.append("&noSuchEntryRedirect=");
366                    sb.append(HttpUtil.encodeURL(noSuchEntryRedirect));
367                    sb.append(StringPool.AMPERSAND);
368                    sb.append(primaryKeyParameterName);
369                    sb.append(StringPool.EQUAL);
370                    sb.append(primaryKeyParameterValue);
371    
372                    return PortalUtil.addPreservedParameters(themeDisplay, sb.toString());
373            }
374    
375            private static final String[] _AVAILABLE_LANGUAGE_IDS = new String[0];
376    
377            private AssetRendererFactory _assetRendererFactory;
378            private int _assetRendererType = AssetRendererFactory.TYPE_LATEST_APPROVED;
379    
380    }