001    /**
002     * Copyright (c) 2000-2013 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.wiki.asset;
016    
017    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
018    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
019    import com.liferay.portal.kernel.trash.TrashRenderer;
020    import com.liferay.portal.kernel.util.HtmlUtil;
021    import com.liferay.portal.security.permission.ActionKeys;
022    import com.liferay.portal.security.permission.PermissionChecker;
023    import com.liferay.portal.theme.ThemeDisplay;
024    import com.liferay.portal.util.PortletKeys;
025    import com.liferay.portal.util.PropsValues;
026    import com.liferay.portal.util.WebKeys;
027    import com.liferay.portlet.asset.model.BaseAssetRenderer;
028    import com.liferay.portlet.trash.util.TrashUtil;
029    import com.liferay.portlet.wiki.model.WikiPage;
030    import com.liferay.portlet.wiki.model.WikiPageConstants;
031    import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
032    import com.liferay.portlet.wiki.util.WikiUtil;
033    
034    import java.util.Date;
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 Sergio Gonz??lez
046     */
047    public class WikiPageAssetRenderer
048            extends BaseAssetRenderer implements TrashRenderer {
049    
050            public static final String TYPE = "wiki_page";
051    
052            public static long getClassPK(WikiPage page) {
053                    if (!page.isApproved() && !page.isDraft() && !page.isPending() &&
054                            !page.isInTrash() && !page.isInTrashContainer() &&
055                            (page.getVersion() != WikiPageConstants.VERSION_DEFAULT)) {
056    
057                            return page.getPageId();
058                    }
059                    else {
060                            return page.getResourcePrimKey();
061                    }
062            }
063    
064            public WikiPageAssetRenderer(WikiPage page) {
065                    _page = page;
066            }
067    
068            @Override
069            public String getClassName() {
070                    return WikiPage.class.getName();
071            }
072    
073            @Override
074            public long getClassPK() {
075                    return getClassPK(_page);
076            }
077    
078            @Override
079            public String getDiscussionPath() {
080                    if (PropsValues.WIKI_PAGE_COMMENTS_ENABLED) {
081                            return "edit_page_discussion";
082                    }
083                    else {
084                            return null;
085                    }
086            }
087    
088            @Override
089            public Date getDisplayDate() {
090                    return _page.getModifiedDate();
091            }
092    
093            @Override
094            public long getGroupId() {
095                    return _page.getGroupId();
096            }
097    
098            @Override
099            public String getPortletId() {
100                    return PortletKeys.WIKI;
101            }
102    
103            @Override
104            public String getSummary(Locale locale) {
105                    String content = _page.getContent();
106    
107                    try {
108                            content = HtmlUtil.extractText(
109                                    WikiUtil.convert(_page, null, null, null));
110                    }
111                    catch (Exception e) {
112                    }
113    
114                    return content;
115            }
116    
117            @Override
118            public String getThumbnailPath(PortletRequest portletRequest)
119                    throws Exception {
120    
121                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
122                            WebKeys.THEME_DISPLAY);
123    
124                    return themeDisplay.getPathThemeImages() +
125                            "/file_system/large/wiki_page.png";
126            }
127    
128            @Override
129            public String getTitle(Locale locale) {
130                    if (!_page.isInTrash()) {
131                            return _page.getTitle();
132                    }
133    
134                    return TrashUtil.getOriginalTitle(_page.getTitle());
135            }
136    
137            @Override
138            public String getType() {
139                    return TYPE;
140            }
141    
142            @Override
143            public PortletURL getURLEdit(
144                            LiferayPortletRequest liferayPortletRequest,
145                            LiferayPortletResponse liferayPortletResponse)
146                    throws Exception {
147    
148                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
149                            getControlPanelPlid(liferayPortletRequest), PortletKeys.WIKI,
150                            PortletRequest.RENDER_PHASE);
151    
152                    portletURL.setParameter("struts_action", "/wiki/edit_page");
153                    portletURL.setParameter("nodeId", String.valueOf(_page.getNodeId()));
154                    portletURL.setParameter("title", _page.getTitle());
155    
156                    return portletURL;
157            }
158    
159            @Override
160            public PortletURL getURLExport(
161                    LiferayPortletRequest liferayPortletRequest,
162                    LiferayPortletResponse liferayPortletResponse) {
163    
164                    PortletURL exportPortletURL = liferayPortletResponse.createActionURL();
165    
166                    exportPortletURL.setParameter(
167                            "struts_action", "/asset_publisher/export_wiki_page");
168                    exportPortletURL.setParameter(
169                            "nodeId", String.valueOf(_page.getNodeId()));
170                    exportPortletURL.setParameter("title", _page.getTitle());
171    
172                    return exportPortletURL;
173            }
174    
175            @Override
176            public PortletURL getURLView(
177                            LiferayPortletResponse liferayPortletResponse,
178                            WindowState windowState)
179                    throws Exception {
180    
181                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
182                            PortletKeys.WIKI, PortletRequest.RENDER_PHASE);
183    
184                    portletURL.setParameter("struts_action", "/wiki/view");
185                    portletURL.setParameter("nodeId", String.valueOf(_page.getNodeId()));
186                    portletURL.setParameter("title", _page.getTitle());
187                    portletURL.setWindowState(windowState);
188    
189                    return portletURL;
190            }
191    
192            @Override
193            public String getURLViewInContext(
194                    LiferayPortletRequest liferayPortletRequest,
195                    LiferayPortletResponse liferayPortletResponse,
196                    String noSuchEntryRedirect) {
197    
198                    return getURLViewInContext(
199                            liferayPortletRequest, noSuchEntryRedirect, "/wiki/find_page",
200                            "pageResourcePrimKey", _page.getResourcePrimKey());
201            }
202    
203            @Override
204            public long getUserId() {
205                    return _page.getUserId();
206            }
207    
208            @Override
209            public String getUserName() {
210                    return _page.getUserName();
211            }
212    
213            @Override
214            public String getUuid() {
215                    return _page.getUuid();
216            }
217    
218            public boolean hasDeletePermission(PermissionChecker permissionChecker) {
219                    return WikiPagePermission.contains(
220                            permissionChecker, _page, ActionKeys.DELETE);
221            }
222    
223            @Override
224            public boolean hasEditPermission(PermissionChecker permissionChecker) {
225                    return WikiPagePermission.contains(
226                            permissionChecker, _page, ActionKeys.UPDATE);
227            }
228    
229            @Override
230            public boolean hasViewPermission(PermissionChecker permissionChecker) {
231                    return WikiPagePermission.contains(
232                            permissionChecker, _page, ActionKeys.VIEW);
233            }
234    
235            @Override
236            public boolean isConvertible() {
237                    return true;
238            }
239    
240            @Override
241            public boolean isPrintable() {
242                    return true;
243            }
244    
245            @Override
246            public String render(
247                            RenderRequest renderRequest, RenderResponse renderResponse,
248                            String template)
249                    throws Exception {
250    
251                    if (template.equals(TEMPLATE_ABSTRACT) ||
252                            template.equals(TEMPLATE_FULL_CONTENT)) {
253    
254                            renderRequest.setAttribute(WebKeys.WIKI_PAGE, _page);
255    
256                            return "/html/portlet/wiki/asset/" + template + ".jsp";
257                    }
258                    else {
259                            return null;
260                    }
261            }
262    
263            @Override
264            protected String getIconPath(ThemeDisplay themeDisplay) {
265                    return themeDisplay.getPathThemeImages() + "/common/page.png";
266            }
267    
268            private WikiPage _page;
269    
270    }