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.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.util.HtmlUtil;
020    import com.liferay.portal.security.permission.ActionKeys;
021    import com.liferay.portal.security.permission.PermissionChecker;
022    import com.liferay.portal.theme.ThemeDisplay;
023    import com.liferay.portal.util.PortletKeys;
024    import com.liferay.portal.util.PropsValues;
025    import com.liferay.portal.util.WebKeys;
026    import com.liferay.portlet.asset.model.BaseAssetRenderer;
027    import com.liferay.portlet.wiki.model.WikiPage;
028    import com.liferay.portlet.wiki.model.WikiPageConstants;
029    import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
030    import com.liferay.portlet.wiki.util.WikiUtil;
031    
032    import java.util.Locale;
033    
034    import javax.portlet.PortletRequest;
035    import javax.portlet.PortletURL;
036    import javax.portlet.RenderRequest;
037    import javax.portlet.RenderResponse;
038    import javax.portlet.WindowState;
039    
040    /**
041     * @author Julio Camarero
042     * @author Sergio González
043     */
044    public class WikiPageAssetRenderer extends BaseAssetRenderer {
045    
046            public WikiPageAssetRenderer(WikiPage page) {
047                    _page = page;
048            }
049    
050            public long getClassPK() {
051                    if (!_page.isApproved() &&
052                            (_page.getVersion() != WikiPageConstants.VERSION_DEFAULT)) {
053    
054                            return _page.getPageId();
055                    }
056                    else {
057                            return _page.getResourcePrimKey();
058                    }
059            }
060    
061            @Override
062            public String getDiscussionPath() {
063                    if (PropsValues.WIKI_PAGE_COMMENTS_ENABLED) {
064                            return "edit_page_discussion";
065                    }
066                    else {
067                            return null;
068                    }
069            }
070    
071            public long getGroupId() {
072                    return _page.getGroupId();
073            }
074    
075            public String getSummary(Locale locale) {
076                    String content = _page.getContent();
077    
078                    try {
079                            content = HtmlUtil.extractText(
080                                    WikiUtil.convert(_page, null, null, null));
081                    }
082                    catch (Exception e) {
083                    }
084    
085                    return content;
086            }
087    
088            public String getTitle(Locale locale) {
089                    return _page.getTitle();
090            }
091    
092            @Override
093            public PortletURL getURLEdit(
094                            LiferayPortletRequest liferayPortletRequest,
095                            LiferayPortletResponse liferayPortletResponse)
096                    throws Exception {
097    
098                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
099                            getControlPanelPlid(liferayPortletRequest), PortletKeys.WIKI,
100                            PortletRequest.RENDER_PHASE);
101    
102                    portletURL.setParameter("struts_action", "/wiki/edit_page");
103                    portletURL.setParameter("nodeId", String.valueOf(_page.getNodeId()));
104                    portletURL.setParameter("title", _page.getTitle());
105    
106                    return portletURL;
107            }
108    
109            @Override
110            public PortletURL getURLExport(
111                    LiferayPortletRequest liferayPortletRequest,
112                    LiferayPortletResponse liferayPortletResponse) {
113    
114                    PortletURL exportPortletURL = liferayPortletResponse.createActionURL();
115    
116                    exportPortletURL.setParameter(
117                            "struts_action", "/asset_publisher/export_wiki_page");
118                    exportPortletURL.setParameter(
119                            "nodeId", String.valueOf(_page.getNodeId()));
120                    exportPortletURL.setParameter("title", _page.getTitle());
121    
122                    return exportPortletURL;
123            }
124    
125            @Override
126            public PortletURL getURLView(
127                            LiferayPortletResponse liferayPortletResponse,
128                            WindowState windowState)
129                    throws Exception {
130    
131                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
132                            PortletKeys.WIKI, PortletRequest.RENDER_PHASE);
133    
134                    portletURL.setWindowState(windowState);
135    
136                    portletURL.setParameter("struts_action", "/wiki/view");
137                    portletURL.setParameter("nodeId", String.valueOf(_page.getNodeId()));
138                    portletURL.setParameter("title", _page.getTitle());
139    
140                    return portletURL;
141            }
142    
143            @Override
144            public String getURLViewInContext(
145                    LiferayPortletRequest liferayPortletRequest,
146                    LiferayPortletResponse liferayPortletResponse,
147                    String noSuchEntryRedirect) {
148    
149                    return getURLViewInContext(
150                            liferayPortletRequest, noSuchEntryRedirect, "/wiki/find_page",
151                            "pageResourcePrimKey", _page.getResourcePrimKey());
152            }
153    
154            public long getUserId() {
155                    return _page.getUserId();
156            }
157    
158            public String getUuid() {
159                    return _page.getUuid();
160            }
161    
162            @Override
163            public boolean hasEditPermission(PermissionChecker permissionChecker) {
164                    return WikiPagePermission.contains(
165                            permissionChecker, _page, ActionKeys.UPDATE);
166            }
167    
168            @Override
169            public boolean hasViewPermission(PermissionChecker permissionChecker) {
170                    return WikiPagePermission.contains(
171                            permissionChecker, _page, ActionKeys.VIEW);
172            }
173    
174            @Override
175            public boolean isConvertible() {
176                    return true;
177            }
178    
179            @Override
180            public boolean isPrintable() {
181                    return true;
182            }
183    
184            public String render(
185                            RenderRequest renderRequest, RenderResponse renderResponse,
186                            String template)
187                    throws Exception {
188    
189                    if (template.equals(TEMPLATE_ABSTRACT) ||
190                            template.equals(TEMPLATE_FULL_CONTENT)) {
191    
192                            renderRequest.setAttribute(WebKeys.WIKI_PAGE, _page);
193    
194                            return "/html/portlet/wiki/asset/" + template + ".jsp";
195                    }
196                    else {
197                            return null;
198                    }
199            }
200    
201            @Override
202            protected String getIconPath(ThemeDisplay themeDisplay) {
203                    return themeDisplay.getPathThemeImages() + "/common/pages.png";
204            }
205    
206            private WikiPage _page;
207    
208    }