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