001
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
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 String getSummary(Locale locale) {
107 String content = _page.getContent();
108
109 try {
110 content = HtmlUtil.extractText(
111 WikiUtil.convert(_page, null, null, null));
112 }
113 catch (Exception e) {
114 }
115
116 return content;
117 }
118
119 @Override
120 public String getThumbnailPath(PortletRequest portletRequest)
121 throws Exception {
122
123 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
124 WebKeys.THEME_DISPLAY);
125
126 return themeDisplay.getPathThemeImages() +
127 "/file_system/large/wiki_page.png";
128 }
129
130 @Override
131 public String getTitle(Locale locale) {
132 if (!_page.isInTrash()) {
133 return _page.getTitle();
134 }
135
136 return TrashUtil.getOriginalTitle(_page.getTitle());
137 }
138
139 @Override
140 public String getType() {
141 return TYPE;
142 }
143
144 @Override
145 public PortletURL getURLEdit(
146 LiferayPortletRequest liferayPortletRequest,
147 LiferayPortletResponse liferayPortletResponse)
148 throws Exception {
149
150 PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
151 getControlPanelPlid(liferayPortletRequest), PortletKeys.WIKI,
152 PortletRequest.RENDER_PHASE);
153
154 portletURL.setParameter("struts_action", "/wiki/edit_page");
155 portletURL.setParameter("nodeId", String.valueOf(_page.getNodeId()));
156 portletURL.setParameter("title", _page.getTitle());
157
158 return portletURL;
159 }
160
161 @Override
162 public PortletURL getURLExport(
163 LiferayPortletRequest liferayPortletRequest,
164 LiferayPortletResponse liferayPortletResponse) {
165
166 PortletURL exportPortletURL = liferayPortletResponse.createActionURL();
167
168 exportPortletURL.setParameter(
169 "struts_action", "/asset_publisher/export_wiki_page");
170 exportPortletURL.setParameter(
171 "nodeId", String.valueOf(_page.getNodeId()));
172 exportPortletURL.setParameter("title", _page.getTitle());
173
174 return exportPortletURL;
175 }
176
177 @Override
178 public PortletURL getURLView(
179 LiferayPortletResponse liferayPortletResponse,
180 WindowState windowState)
181 throws Exception {
182
183 AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
184
185 PortletURL portletURL = assetRendererFactory.getURLView(
186 liferayPortletResponse, windowState);
187
188 portletURL.setParameter("struts_action", "/wiki/view");
189 portletURL.setParameter("nodeId", String.valueOf(_page.getNodeId()));
190 portletURL.setParameter("title", _page.getTitle());
191 portletURL.setWindowState(windowState);
192
193 return portletURL;
194 }
195
196 @Override
197 public String getURLViewInContext(
198 LiferayPortletRequest liferayPortletRequest,
199 LiferayPortletResponse liferayPortletResponse,
200 String noSuchEntryRedirect) {
201
202 return getURLViewInContext(
203 liferayPortletRequest, noSuchEntryRedirect, "/wiki/find_page",
204 "pageResourcePrimKey", _page.getResourcePrimKey());
205 }
206
207 @Override
208 public long getUserId() {
209 return _page.getUserId();
210 }
211
212 @Override
213 public String getUserName() {
214 return _page.getUserName();
215 }
216
217 @Override
218 public String getUuid() {
219 return _page.getUuid();
220 }
221
222 public boolean hasDeletePermission(PermissionChecker permissionChecker)
223 throws SystemException {
224
225 return WikiPagePermission.contains(
226 permissionChecker, _page, ActionKeys.DELETE);
227 }
228
229 @Override
230 public boolean hasEditPermission(PermissionChecker permissionChecker)
231 throws SystemException {
232
233 return WikiPagePermission.contains(
234 permissionChecker, _page, ActionKeys.UPDATE);
235 }
236
237 @Override
238 public boolean hasViewPermission(PermissionChecker permissionChecker)
239 throws SystemException {
240
241 return WikiPagePermission.contains(
242 permissionChecker, _page, ActionKeys.VIEW);
243 }
244
245 @Override
246 public boolean isConvertible() {
247 return true;
248 }
249
250 @Override
251 public boolean isPrintable() {
252 return true;
253 }
254
255 @Override
256 public String render(
257 RenderRequest renderRequest, RenderResponse renderResponse,
258 String template)
259 throws Exception {
260
261 if (template.equals(TEMPLATE_ABSTRACT) ||
262 template.equals(TEMPLATE_FULL_CONTENT)) {
263
264 renderRequest.setAttribute(WebKeys.WIKI_PAGE, _page);
265
266 return "/html/portlet/wiki/asset/" + template + ".jsp";
267 }
268 else {
269 return null;
270 }
271 }
272
273 @Override
274 protected String getIconPath(ThemeDisplay themeDisplay) {
275 return themeDisplay.getPathThemeImages() + "/common/page.png";
276 }
277
278 private WikiPage _page;
279
280 }