1
22
23 package com.liferay.portlet.wiki.action;
24
25 import com.liferay.portal.kernel.servlet.SessionErrors;
26 import com.liferay.portal.kernel.util.StringPool;
27 import com.liferay.portal.security.auth.PrincipalException;
28 import com.liferay.portal.security.permission.ActionKeys;
29 import com.liferay.portal.security.permission.PermissionChecker;
30 import com.liferay.portal.struts.PortletAction;
31 import com.liferay.portal.theme.ThemeDisplay;
32 import com.liferay.portal.util.PropsKeys;
33 import com.liferay.portal.util.PropsUtil;
34 import com.liferay.portal.util.WebKeys;
35 import com.liferay.portlet.wiki.NoSuchNodeException;
36 import com.liferay.portlet.wiki.NoSuchPageException;
37 import com.liferay.portlet.wiki.model.WikiNode;
38 import com.liferay.portlet.wiki.service.WikiNodeLocalServiceUtil;
39 import com.liferay.portlet.wiki.service.permission.WikiNodePermission;
40 import com.liferay.portlet.wiki.util.WikiUtil;
41
42 import java.util.List;
43
44 import javax.portlet.PortletConfig;
45 import javax.portlet.RenderRequest;
46 import javax.portlet.RenderResponse;
47
48 import org.apache.struts.action.ActionForm;
49 import org.apache.struts.action.ActionForward;
50 import org.apache.struts.action.ActionMapping;
51
52
59 public class ViewPageAction extends PortletAction {
60
61 public ActionForward render(
62 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
63 RenderRequest renderRequest, RenderResponse renderResponse)
64 throws Exception {
65
66 try {
67 getNode(renderRequest);
68 ActionUtil.getPage(renderRequest);
69 }
70 catch (Exception e) {
71 if (e instanceof NoSuchNodeException ||
72 e instanceof NoSuchPageException ||
73 e instanceof PrincipalException) {
74
75 SessionErrors.add(renderRequest, e.getClass().getName());
76
77 return mapping.findForward("portlet.wiki.error");
78 }
79 else {
80 throw e;
81 }
82 }
83
84 return mapping.findForward(
85 getForward(renderRequest, "portlet.wiki.view_page"));
86 }
87
88 protected void getNode(RenderRequest renderRequest) throws Exception {
89 ActionUtil.getNode(renderRequest);
90
91 WikiNode node = (WikiNode)renderRequest.getAttribute(WebKeys.WIKI_NODE);
92
93 if (node != null) {
94 return;
95 }
96
97 ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
98 WebKeys.THEME_DISPLAY);
99
100 List<WikiNode> nodes = WikiUtil.getNodes(renderRequest);
101
102 if (nodes.size() == 0) {
103 String nodeName = PropsUtil.get(PropsKeys.WIKI_INITIAL_NODE_NAME);
104
105 node = WikiNodeLocalServiceUtil.addNode(
106 themeDisplay.getUserId(), themeDisplay.getPlid(), nodeName,
107 StringPool.BLANK, true, true);
108 }
109 else {
110 PermissionChecker permissionChecker =
111 themeDisplay.getPermissionChecker();
112
113 for (WikiNode curNode : nodes) {
114 if (WikiNodePermission.contains(
115 permissionChecker, curNode.getNodeId(),
116 ActionKeys.VIEW)) {
117
118 node = curNode;
119
120 break;
121 }
122 }
123
124 if (node == null) {
125 throw new PrincipalException();
126 }
127 }
128
129 renderRequest.setAttribute(WebKeys.WIKI_NODE, node);
130 }
131
132 protected boolean isCheckMethodOnProcessAction() {
133 return false;
134 }
135
136 }