1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet.wiki.action;
16  
17  import com.liferay.portal.kernel.exception.PortalException;
18  import com.liferay.portal.kernel.exception.SystemException;
19  import com.liferay.portal.kernel.util.ParamUtil;
20  import com.liferay.portal.kernel.util.PropsKeys;
21  import com.liferay.portal.kernel.util.StringPool;
22  import com.liferay.portal.kernel.util.Validator;
23  import com.liferay.portal.model.Layout;
24  import com.liferay.portal.security.auth.PrincipalException;
25  import com.liferay.portal.service.ServiceContext;
26  import com.liferay.portal.service.ServiceContextFactory;
27  import com.liferay.portal.service.UserLocalServiceUtil;
28  import com.liferay.portal.theme.ThemeDisplay;
29  import com.liferay.portal.util.PortalUtil;
30  import com.liferay.portal.util.PropsUtil;
31  import com.liferay.portal.util.WebKeys;
32  import com.liferay.portlet.wiki.NoSuchPageException;
33  import com.liferay.portlet.wiki.model.WikiNode;
34  import com.liferay.portlet.wiki.model.WikiPage;
35  import com.liferay.portlet.wiki.model.WikiPageConstants;
36  import com.liferay.portlet.wiki.service.WikiNodeLocalServiceUtil;
37  import com.liferay.portlet.wiki.service.WikiNodeServiceUtil;
38  import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
39  import com.liferay.portlet.wiki.service.WikiPageServiceUtil;
40  import com.liferay.portlet.wiki.util.WikiUtil;
41  
42  import java.util.List;
43  
44  import javax.portlet.ActionRequest;
45  import javax.portlet.RenderRequest;
46  
47  import javax.servlet.http.HttpServletRequest;
48  
49  /**
50   * <a href="ActionUtil.java.html"><b><i>View Source</i></b></a>
51   *
52   * @author Brian Wing Shun Chan
53   * @author Jorge Ferrer
54   */
55  public class ActionUtil {
56  
57      public static WikiNode getFirstVisibleNode(RenderRequest renderRequest)
58          throws PortalException, SystemException {
59  
60          ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
61              WebKeys.THEME_DISPLAY);
62  
63          WikiNode node = null;
64  
65          int nodesCount = WikiNodeLocalServiceUtil.getNodesCount(
66              themeDisplay.getScopeGroupId());
67  
68          if (nodesCount == 0) {
69              String nodeName = PropsUtil.get(PropsKeys.WIKI_INITIAL_NODE_NAME);
70  
71              Layout layout = themeDisplay.getLayout();
72  
73              ServiceContext serviceContext = ServiceContextFactory.getInstance(
74                  WikiNode.class.getName(), renderRequest);
75  
76              serviceContext.setAddCommunityPermissions(true);
77  
78              if (layout.isPublicLayout()) {
79                  serviceContext.setAddGuestPermissions(true);
80              }
81              else {
82                  serviceContext.setAddGuestPermissions(false);
83              }
84  
85              node = WikiNodeLocalServiceUtil.addNode(
86                  themeDisplay.getUserId(), nodeName, StringPool.BLANK,
87                  serviceContext);
88          }
89          else {
90              List<WikiNode> nodes = WikiUtil.getNodes(renderRequest);
91  
92              if (nodes.size() == 0) {
93                  throw new PrincipalException();
94              }
95  
96              node = nodes.get(0);
97          }
98  
99          renderRequest.setAttribute(WebKeys.WIKI_NODE, node);
100 
101         return node;
102     }
103 
104     public static WikiNode getNode(ActionRequest actionRequest)
105         throws Exception {
106 
107         HttpServletRequest request = PortalUtil.getHttpServletRequest(
108             actionRequest);
109 
110         return getNode(request);
111     }
112 
113     public static WikiNode getNode(RenderRequest renderRequest)
114         throws Exception {
115 
116         HttpServletRequest request = PortalUtil.getHttpServletRequest(
117             renderRequest);
118 
119         return getNode(request);
120     }
121 
122     public static WikiNode getNode(HttpServletRequest request)
123         throws Exception {
124 
125         ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
126             WebKeys.THEME_DISPLAY);
127 
128         long nodeId = ParamUtil.getLong(request, "nodeId");
129         String nodeName = ParamUtil.getString(request, "nodeName");
130 
131         WikiNode node = null;
132 
133         if (nodeId > 0) {
134             node = WikiNodeServiceUtil.getNode(nodeId);
135         }
136         else if (Validator.isNotNull(nodeName)) {
137             node = WikiNodeServiceUtil.getNode(
138                 themeDisplay.getScopeGroupId(), nodeName);
139         }
140 
141         request.setAttribute(WebKeys.WIKI_NODE, node);
142 
143         return node;
144     }
145 
146     public static void getPage(ActionRequest actionRequest) throws Exception {
147         HttpServletRequest request = PortalUtil.getHttpServletRequest(
148             actionRequest);
149 
150         getPage(request);
151     }
152 
153     public static void getPage(RenderRequest renderRequest) throws Exception {
154         HttpServletRequest request = PortalUtil.getHttpServletRequest(
155             renderRequest);
156 
157         getPage(request);
158     }
159 
160     public static void getPage(HttpServletRequest request) throws Exception {
161         ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
162             WebKeys.THEME_DISPLAY);
163 
164         long nodeId = ParamUtil.getLong(request, "nodeId");
165         String title = ParamUtil.getString(request, "title");
166         double version = ParamUtil.getDouble(request, "version");
167 
168         if (nodeId == 0) {
169             WikiNode node = (WikiNode)request.getAttribute(WebKeys.WIKI_NODE);
170 
171             if (node != null) {
172                 nodeId = node.getNodeId();
173             }
174         }
175 
176         if (Validator.isNull(title)) {
177             title = WikiPageConstants.FRONT_PAGE;
178         }
179 
180         WikiPage page = null;
181 
182         try {
183             page = WikiPageServiceUtil.getPage(nodeId, title, version);
184         }
185         catch (NoSuchPageException nspe) {
186             if (title.equals(WikiPageConstants.FRONT_PAGE) && (version == 0)) {
187                 long userId = PortalUtil.getUserId(request);
188 
189                 if (userId == 0) {
190                     long companyId = PortalUtil.getCompanyId(request);
191 
192                     userId = UserLocalServiceUtil.getDefaultUserId(companyId);
193                 }
194 
195                 ServiceContext serviceContext = new ServiceContext();
196 
197                 Layout layout = themeDisplay.getLayout();
198 
199                 serviceContext.setAddCommunityPermissions(true);
200 
201                 if (layout.isPublicLayout()) {
202                     serviceContext.setAddGuestPermissions(true);
203                 }
204                 else {
205                     serviceContext.setAddGuestPermissions(false);
206                 }
207 
208                 page = WikiPageLocalServiceUtil.addPage(
209                     userId, nodeId, title, null, WikiPageConstants.NEW, true,
210                     serviceContext);
211             }
212             else {
213                 throw nspe;
214             }
215         }
216 
217         request.setAttribute(WebKeys.WIKI_PAGE, page);
218     }
219 
220 }