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: jetspeed-dev-unsubscr...@portals.apache.org For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org