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