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