001    /**
002     * Copyright (c) 2000-2012 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.messageboards.asset;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.parsers.bbcode.BBCodeTranslatorUtil;
020    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
021    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
022    import com.liferay.portal.kernel.trash.TrashRenderer;
023    import com.liferay.portal.kernel.util.HtmlUtil;
024    import com.liferay.portal.security.permission.ActionKeys;
025    import com.liferay.portal.security.permission.PermissionChecker;
026    import com.liferay.portal.theme.ThemeDisplay;
027    import com.liferay.portal.util.PortletKeys;
028    import com.liferay.portal.util.WebKeys;
029    import com.liferay.portlet.asset.model.AssetRendererFactory;
030    import com.liferay.portlet.asset.model.BaseAssetRenderer;
031    import com.liferay.portlet.messageboards.model.MBMessage;
032    import com.liferay.portlet.messageboards.service.permission.MBDiscussionPermission;
033    import com.liferay.portlet.messageboards.service.permission.MBMessagePermission;
034    
035    import java.util.Locale;
036    
037    import javax.portlet.PortletRequest;
038    import javax.portlet.PortletURL;
039    import javax.portlet.RenderRequest;
040    import javax.portlet.RenderResponse;
041    import javax.portlet.WindowState;
042    
043    /**
044     * @author Julio Camarero
045     * @author Juan Fernández
046     * @author Sergio González
047     */
048    public class MBMessageAssetRenderer
049            extends BaseAssetRenderer implements TrashRenderer {
050    
051            public MBMessageAssetRenderer(MBMessage message) {
052                    _message = message;
053            }
054    
055            public String getAssetRendererFactoryClassName() {
056                    return MBCategoryAssetRendererFactory.CLASS_NAME;
057            }
058    
059            public String getClassName() {
060                    return MBMessage.class.getName();
061            }
062    
063            public long getClassPK() {
064                    return _message.getMessageId();
065            }
066    
067            public long getGroupId() {
068                    return _message.getGroupId();
069            }
070    
071            public String getPortletId() {
072                    AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
073    
074                    return assetRendererFactory.getPortletId();
075            }
076    
077            @Override
078            public String getSearchSummary(Locale locale) {
079                    if (_message.isFormatBBCode()) {
080                            return HtmlUtil.extractText(
081                                    BBCodeTranslatorUtil.getHTML(_message.getBody()));
082                    }
083    
084                    return getSummary(locale);
085            }
086    
087            public String getSummary(Locale locale) {
088                    return HtmlUtil.extractText(_message.getBody());
089            }
090    
091            public String getTitle(Locale locale) {
092                    return _message.getSubject();
093            }
094    
095            public String getType() {
096                    return MBMessageAssetRendererFactory.TYPE;
097            }
098    
099            @Override
100            public PortletURL getURLEdit(
101                            LiferayPortletRequest liferayPortletRequest,
102                            LiferayPortletResponse liferayPortletResponse)
103                    throws Exception {
104    
105                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
106                            getControlPanelPlid(liferayPortletRequest),
107                            PortletKeys.MESSAGE_BOARDS, PortletRequest.RENDER_PHASE);
108    
109                    portletURL.setParameter(
110                            "struts_action", "/message_boards/edit_message");
111                    portletURL.setParameter(
112                            "messageId", String.valueOf(_message.getMessageId()));
113    
114                    return portletURL;
115            }
116    
117            @Override
118            public PortletURL getURLView(
119                            LiferayPortletResponse liferayPortletResponse,
120                            WindowState windowState)
121                    throws Exception {
122    
123                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
124                            PortletKeys.MESSAGE_BOARDS, PortletRequest.RENDER_PHASE);
125    
126                    portletURL.setWindowState(windowState);
127    
128                    portletURL.setParameter(
129                            "struts_action", "/message_boards/view_message");
130                    portletURL.setParameter(
131                            "messageId", String.valueOf(_message.getMessageId()));
132    
133                    return portletURL;
134            }
135    
136            @Override
137            public String getURLViewInContext(
138                    LiferayPortletRequest liferayPortletRequest,
139                    LiferayPortletResponse liferayPortletResponse,
140                    String noSuchEntryRedirect) {
141    
142                    return getURLViewInContext(
143                            liferayPortletRequest, noSuchEntryRedirect,
144                            "/message_boards/find_message", "messageId",
145                            _message.getMessageId());
146            }
147    
148            public long getUserId() {
149                    return _message.getUserId();
150            }
151    
152            public String getUserName() {
153                    return _message.getUserName();
154            }
155    
156            public String getUuid() {
157                    return _message.getUuid();
158            }
159    
160            @Override
161            public boolean hasEditPermission(PermissionChecker permissionChecker)
162                    throws PortalException, SystemException {
163    
164                    if (_message.isDiscussion()) {
165                            return MBDiscussionPermission.contains(
166                                    permissionChecker, _message.getCompanyId(),
167                                    _message.getGroupId(), _message.getClassName(),
168                                    _message.getClassPK(), _message.getMessageId(),
169                                    _message.getUserId(), ActionKeys.UPDATE);
170                    }
171                    else {
172                            return MBMessagePermission.contains(
173                                    permissionChecker, _message, ActionKeys.UPDATE);
174                    }
175            }
176    
177            @Override
178            public boolean hasViewPermission(PermissionChecker permissionChecker)
179                    throws PortalException, SystemException {
180    
181                    if (_message.isDiscussion()) {
182                            return MBDiscussionPermission.contains(
183                                    permissionChecker, _message.getCompanyId(),
184                                    _message.getGroupId(), _message.getClassName(),
185                                    _message.getClassPK(), _message.getMessageId(),
186                                    _message.getUserId(), ActionKeys.VIEW);
187                    }
188                    else {
189                            return MBMessagePermission.contains(
190                                    permissionChecker, _message, ActionKeys.VIEW);
191                    }
192            }
193    
194            @Override
195            public boolean isPrintable() {
196                    return true;
197            }
198    
199            public String render(
200                            RenderRequest renderRequest, RenderResponse renderResponse,
201                            String template)
202                    throws Exception {
203    
204                    if (template.equals(TEMPLATE_ABSTRACT) ||
205                            template.equals(TEMPLATE_FULL_CONTENT)) {
206    
207                            renderRequest.setAttribute(
208                                    WebKeys.MESSAGE_BOARDS_MESSAGE, _message);
209    
210                            return "/html/portlet/message_boards/asset/" + template + ".jsp";
211                    }
212                    else {
213                            return null;
214                    }
215            }
216    
217            @Override
218            protected String getIconPath(ThemeDisplay themeDisplay) {
219                    return themeDisplay.getPathThemeImages() + "/common/message.png";
220            }
221    
222            private MBMessage _message;
223    
224    }