001
014
015 package com.liferay.portlet.wikidisplay.action;
016
017 import com.liferay.portal.kernel.servlet.SessionErrors;
018 import com.liferay.portal.kernel.util.GetterUtil;
019 import com.liferay.portal.kernel.util.ParamUtil;
020 import com.liferay.portal.kernel.util.StringPool;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.security.auth.PrincipalException;
023 import com.liferay.portal.struts.PortletAction;
024 import com.liferay.portal.theme.ThemeDisplay;
025 import com.liferay.portal.util.WebKeys;
026 import com.liferay.portlet.wiki.NoSuchNodeException;
027 import com.liferay.portlet.wiki.NoSuchPageException;
028 import com.liferay.portlet.wiki.model.WikiNode;
029 import com.liferay.portlet.wiki.model.WikiPage;
030 import com.liferay.portlet.wiki.model.WikiPageConstants;
031 import com.liferay.portlet.wiki.service.WikiNodeServiceUtil;
032 import com.liferay.portlet.wiki.service.WikiPageServiceUtil;
033
034 import javax.portlet.PortletConfig;
035 import javax.portlet.PortletPreferences;
036 import javax.portlet.RenderRequest;
037 import javax.portlet.RenderResponse;
038
039 import org.apache.struts.action.ActionForm;
040 import org.apache.struts.action.ActionForward;
041 import org.apache.struts.action.ActionMapping;
042
043
046 public class ViewAction extends PortletAction {
047
048 @Override
049 public ActionForward render(
050 ActionMapping actionMapping, ActionForm actionForm,
051 PortletConfig portletConfig, RenderRequest renderRequest,
052 RenderResponse renderResponse)
053 throws Exception {
054
055 try {
056 PortletPreferences portletPreferences =
057 renderRequest.getPreferences();
058
059 ThemeDisplay themeDisplay =
060 (ThemeDisplay)renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
061
062 String title = ParamUtil.getString(
063 renderRequest, "title",
064 portletPreferences.getValue(
065 "title", WikiPageConstants.FRONT_PAGE));
066 double version = ParamUtil.getDouble(renderRequest, "version");
067
068 WikiNode node = getNode(renderRequest);
069
070 if (node.getGroupId() != themeDisplay.getScopeGroupId()) {
071 throw new NoSuchNodeException(
072 "{nodeId=" + node.getNodeId() + "}");
073 }
074
075 WikiPage page = WikiPageServiceUtil.fetchPage(
076 node.getNodeId(), title, version);
077
078 if ((page == null) || page.isInTrash()) {
079 page = WikiPageServiceUtil.getPage(
080 node.getNodeId(), WikiPageConstants.FRONT_PAGE);
081 }
082
083 renderRequest.setAttribute(WebKeys.WIKI_NODE, node);
084 renderRequest.setAttribute(WebKeys.WIKI_PAGE, page);
085
086 return actionMapping.findForward("portlet.wiki_display.view");
087 }
088 catch (NoSuchNodeException nsne) {
089 return actionMapping.findForward("/portal/portlet_not_setup");
090 }
091 catch (NoSuchPageException nspe) {
092 return actionMapping.findForward("/portal/portlet_not_setup");
093 }
094 catch (PrincipalException pe) {
095 SessionErrors.add(renderRequest, pe.getClass());
096
097 return actionMapping.findForward("portlet.wiki_display.error");
098 }
099 }
100
101 protected WikiNode getNode(RenderRequest renderRequest) throws Exception {
102 PortletPreferences portletPreferences = renderRequest.getPreferences();
103
104 ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
105 WebKeys.THEME_DISPLAY);
106
107 String nodeName = ParamUtil.getString(renderRequest, "nodeName");
108
109 if (Validator.isNotNull(nodeName)) {
110 return WikiNodeServiceUtil.getNode(
111 themeDisplay.getScopeGroupId(), nodeName);
112 }
113 else {
114 long nodeId = GetterUtil.getLong(
115 portletPreferences.getValue("nodeId", StringPool.BLANK));
116
117 return WikiNodeServiceUtil.getNode(nodeId);
118 }
119 }
120
121 }