001    /**
002     * Copyright (c) 2000-2012 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.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 getUserName() {
159                    return _page.getUserName();
160            }
161    
162            public String getUuid() {
163                    return _page.getUuid();
164            }
165    
166            @Override
167            public boolean hasEditPermission(PermissionChecker permissionChecker) {
168                    return WikiPagePermission.contains(
169                            permissionChecker, _page, ActionKeys.UPDATE);
170            }
171    
172            @Override
173            public boolean hasViewPermission(PermissionChecker permissionChecker) {
174                    return WikiPagePermission.contains(
175                            permissionChecker, _page, ActionKeys.VIEW);
176            }
177    
178            @Override
179            public boolean isConvertible() {
180                    return true;
181            }
182    
183            @Override
184            public boolean isPrintable() {
185                    return true;
186            }
187    
188            public String render(
189                            RenderRequest renderRequest, RenderResponse renderResponse,
190                            String template)
191                    throws Exception {
192    
193                    if (template.equals(TEMPLATE_ABSTRACT) ||
194                            template.equals(TEMPLATE_FULL_CONTENT)) {
195    
196                            renderRequest.setAttribute(WebKeys.WIKI_PAGE, _page);
197    
198                            return "/html/portlet/wiki/asset/" + template + ".jsp";
199                    }
200                    else {
201                            return null;
202                    }
203            }
204    
205            @Override
206            protected String getIconPath(ThemeDisplay themeDisplay) {
207                    return themeDisplay.getPathThemeImages() + "/common/pages.png";
208            }
209    
210            private WikiPage _page;
211    
212    }