Author: woonsan
Date: Tue Dec 22 16:18:39 2009
New Revision: 893217
URL: http://svn.apache.org/viewvc?rev=893217&view=rev
Log:
JS2-1057: Adding sub folder menu in page navigator.
TODO: To keep the menu structure when navigating the sub folder.
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java?rev=893217&r1=893216&r2=893217&view=diff
==============================================================================
---
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
(original)
+++
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
Tue Dec 22 16:18:39 2009
@@ -17,6 +17,8 @@
package org.apache.jetspeed.portlets.spaces;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import javax.portlet.ActionRequest;
@@ -24,21 +26,31 @@
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
import javax.portlet.PortletException;
+import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang.StringUtils;
import org.apache.jetspeed.CommonPortletServices;
import org.apache.jetspeed.Jetspeed;
import org.apache.jetspeed.administration.PortalAdministration;
import org.apache.jetspeed.container.url.BasePortalURL;
+import org.apache.jetspeed.om.folder.Folder;
import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.om.portlet.LocalizedField;
import org.apache.jetspeed.page.PageManager;
+import org.apache.jetspeed.page.document.NodeNotFoundException;
+import org.apache.jetspeed.portalsite.Menu;
+import org.apache.jetspeed.portalsite.MenuElement;
+import org.apache.jetspeed.portalsite.PortalSiteRequestContext;
import org.apache.jetspeed.request.RequestContext;
import org.apache.jetspeed.spaces.Space;
import org.apache.jetspeed.spaces.Spaces;
import org.apache.portals.bridges.common.GenericServletPortlet;
import org.apache.portals.messaging.PortletMessaging;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Jetspeed Navigator
@@ -48,10 +60,17 @@
*/
public class PageNavigator extends GenericServletPortlet
{
+
+ public static final String DEFAULT_PAGES_MENU = "pages";
+ public static final String DEFAULT_SPACE_NAVS_MENU = "space-navigations";
+
+ private static Logger log = LoggerFactory.getLogger(PageNavigator.class);
+
private Spaces spacesService;
private PortalAdministration admin;
protected PageManager pageManager;
private BasePortalURL baseUrlAccess = null;
+ private String defaultMenu = DEFAULT_SPACE_NAVS_MENU;
public void init(PortletConfig config) throws PortletException
{
@@ -120,27 +139,25 @@
request.setAttribute("space", space);
request.setAttribute("pageNavigator", this);
- try
- {
- super.doView(request, response);
- }
- catch (Throwable t)
- {
- t.printStackTrace();
- }
+ request.setAttribute("spaceMenuElements", getSpaceMenuElements(space,
request));
+
+ super.doView(request, response);
}
public void processAction(ActionRequest actionRequest, ActionResponse
actionResponse) throws PortletException,
IOException
{
String addPage = actionRequest.getParameter("addPage");
+
if (addPage != null)
{
addPage = addPage.replace(' ', '_');
Space space =
(Space)actionRequest.getPortletSession().getAttribute("space");
+
if (space != null)
{
String spacePath = space.getPath();
+
try
{
String path = spacePath + "/" + addPage + ".psml";
@@ -155,9 +172,9 @@
String redirect = admin.getPortalURL(actionRequest,
actionResponse, path);
actionResponse.sendRedirect(redirect);
}
- catch (Throwable t)
+ catch (Exception e)
{
- t.printStackTrace();
+ log.error("Failed to update page.", e);
}
}
}
@@ -170,6 +187,7 @@
{
HttpServletRequest request = rc.getRequest();
StringBuffer path = new StringBuffer();
+
if ( !rc.getPortalURL().isRelativeOnly() )
{
if (this.baseUrlAccess == null)
@@ -181,6 +199,7 @@
path.append(baseUrlAccess.getServerScheme()).append("://").append(baseUrlAccess.getServerName()).append(":").append(baseUrlAccess.getServerPort());
}
}
+
return
renderResponse.encodeURL(path.append(request.getContextPath()).append(request.getServletPath()).append(relativePath).toString());
}
@@ -190,4 +209,75 @@
}
}
+ private List<MenuElement> getSpaceMenuElements(Space space, PortletRequest
request)
+ {
+ ArrayList<MenuElement> spaceMenuElements = new
ArrayList<MenuElement>();
+
+ try
+ {
+ String spacePath = StringUtils.trim(space.getPath());
+ boolean isRootSpace = StringUtils.isBlank(spacePath) ||
"/".equals(spacePath);
+
+ RequestContext rc = (RequestContext)
request.getAttribute(RequestContext.REQUEST_PORTALENV);
+ PortalSiteRequestContext psrc = (PortalSiteRequestContext)
rc.getAttribute("org.apache.jetspeed.portalsite.PortalSiteRequestContext");
+
+ Menu spaceMenu = null;
+
+ String menuName = request.getPreferences().getValue("Menu",
defaultMenu);
+
+ try
+ {
+ spaceMenu = psrc.getMenu(menuName);
+ }
+ catch (NodeNotFoundException e)
+ {
+ if (!DEFAULT_PAGES_MENU.equals(menuName))
+ {
+ spaceMenu = psrc.getMenu(DEFAULT_PAGES_MENU);
+ defaultMenu = DEFAULT_PAGES_MENU;
+ }
+ }
+
+ for (MenuElement element :
(List<MenuElement>)spaceMenu.getElements())
+ {
+ String type = element.getElementType();
+
+ if (MenuElement.MENU_ELEMENT_TYPE.equals(type))
+ {
+ Menu folderMenu = (Menu) element;
+
+ if (!isRootSpace)
+ {
+ spaceMenuElements.add(element);
+ }
+ else
+ {
+ // TODO: folder menu's url is same to path?
+ String folderPath = folderMenu.getUrl();
+
+ if (pageManager.folderExists(folderPath))
+ {
+ Folder folder = pageManager.getFolder(folderPath);
+ Collection<LocalizedField> fields =
folder.getMetadata().getFields("space-owner");
+
+ if (fields == null || fields.isEmpty())
+ {
+ spaceMenuElements.add(element);
+ }
+ }
+ }
+ }
+ else if (MenuElement.OPTION_ELEMENT_TYPE.equals(type))
+ {
+ spaceMenuElements.add(element);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ log.error("Failed to retrieve space menu elements.", e);
+ }
+
+ return spaceMenuElements;
+ }
}
\ No newline at end of file
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java?rev=893217&r1=893216&r2=893217&view=diff
==============================================================================
---
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java
(original)
+++
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java
Tue Dec 22 16:18:39 2009
@@ -188,7 +188,7 @@
throw new PortletException("No categories defined, please add
categories via edit mode.");
}
- categories = Arrays.asList(StringUtils.split(cats, ", \t\n"));
+ categories = Arrays.asList(StringUtils.split(cats, ", \t\r\n"));
request.getPortletSession().setAttribute("categories", categories);
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp?rev=893217&r1=893216&r2=893217&view=diff
==============================================================================
---
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
(original)
+++
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
Tue Dec 22 16:18:39 2009
@@ -41,14 +41,30 @@
Space space = (Space)renderRequest.getAttribute("space");
Locale locale = renderRequest.getLocale();
PageNavigator pageNavigator =
(PageNavigator)renderRequest.getAttribute("pageNavigator");
+List<MenuElement> menuElements = (List<MenuElement>)
renderRequest.getAttribute("spaceMenuElements");
%>
<table>
<tr><td class="portlet-section-body"><b><%=space.getName() %>
Space</b></td> </tr>
<%
-Menu spaceMenu = psrc.getMenu("pages");
-for (MenuElement element : (List<MenuElement>)spaceMenu.getElements())
+for (MenuElement element : menuElements)
{
- if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE))
+ String type = element.getElementType();
+
+ if (MenuElement.MENU_ELEMENT_TYPE.equals(type))
+ {
+ Menu folderMenu = (Menu) element;
+ String folderName = folderMenu.getName();
+ String folderUrl = folderMenu.getUrl();
+ String url = pageNavigator.getAbsoluteUrl(folderUrl, renderResponse,
rc);
+ //TODO: why the folderMenu's name is null?
+ if (folderName == null) folderName =
folderUrl.substring(space.getPath().length() + 1);
+ %>
+ <tr>
+ <td class="portlet-section-body"><a
href="<%=url%>"><%=folderName%></a></td>
+ </tr>
+ <%
+ }
+ else if (MenuElement.OPTION_ELEMENT_TYPE.equals(type))
{
MenuOption option = (MenuOption)element;
String url = pageNavigator.getAbsoluteUrl(option.getUrl(),
renderResponse, rc);
@@ -57,14 +73,6 @@
<td class="portlet-section-body"><a
href="<%=url%>"><%=element.getTitle(locale) %></a></td>
</tr>
<%
- }
- else
- {
- %>
- <tr>
- <td class="portlet-section-body">---</td>
- </tr>
- <%
}
}
%>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]