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

Reply via email to