[jboss-svn-commits] JBoss Portal SVN: r5128 - trunk/core/src/main/org/jboss/portal/core/portlet/catalog

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 1 15:09:02 EDT 2006


Author: roy.russo at jboss.com
Date: 2006-09-01 15:09:01 -0400 (Fri, 01 Sep 2006)
New Revision: 5128

Modified:
   trunk/core/src/main/org/jboss/portal/core/portlet/catalog/NavigationPortlet.java
Log:
JBPORTAL-1014

Modified: trunk/core/src/main/org/jboss/portal/core/portlet/catalog/NavigationPortlet.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/portlet/catalog/NavigationPortlet.java	2006-08-31 20:36:07 UTC (rev 5127)
+++ trunk/core/src/main/org/jboss/portal/core/portlet/catalog/NavigationPortlet.java	2006-09-01 19:09:01 UTC (rev 5128)
@@ -21,6 +21,8 @@
 */
 package org.jboss.portal.core.portlet.catalog;
 
+import org.jboss.portal.api.node.PortalNode;
+import org.jboss.portal.api.node.PortalNodeURL;
 import org.jboss.portal.core.api.JBossPortalNode;
 import org.jboss.portal.core.impl.model.portal.PortalObjectImpl;
 import org.jboss.portal.core.model.portal.Context;
@@ -28,14 +30,12 @@
 import org.jboss.portal.core.model.portal.Portal;
 import org.jboss.portal.core.model.portal.PortalObject;
 import org.jboss.portal.core.model.portal.PortalObjectContainer;
+import org.jboss.portal.core.model.portal.PortalObjectPermission;
 import org.jboss.portal.core.model.portal.Window;
-import org.jboss.portal.core.model.portal.PortalObjectPermission;
 import org.jboss.portal.security.spi.auth.PortalAuthorizationManagerFactory;
-import org.jboss.portal.api.node.PortalNodeURL;
 import org.jboss.portlet.JBossPortlet;
 import org.jboss.portlet.JBossRenderRequest;
 import org.jboss.portlet.JBossRenderResponse;
-import org.jboss.portal.api.node.PortalNode;
 
 import javax.portlet.PortletException;
 import javax.portlet.PortletPreferences;
@@ -45,9 +45,10 @@
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
 
 /**
- *
  * @author <a href="mailto:mholzner at novell.com">Martin Holzner</a>
  * @version $Revision$
  */
@@ -57,11 +58,16 @@
    private PortalObjectContainer container;
    private PortalAuthorizationManagerFactory portalAuthorizationManagerFactory;
 
+   /**
+    * Prepender to resource bundle lookup for page names.
+    */
+   private static final String RESOURCE_PREFIX = "PAGENAME_";
+
    public void init() throws PortletException
    {
-      container = (PortalObjectContainer)getPortletContext().getAttribute("PortalObjectContainer");
-      portalAuthorizationManagerFactory = (PortalAuthorizationManagerFactory)getPortletContext().getAttribute("PortalAuthorizationManagerFactory");
-      if (container == null)
+      container = (PortalObjectContainer) getPortletContext().getAttribute("PortalObjectContainer");
+      portalAuthorizationManagerFactory = (PortalAuthorizationManagerFactory) getPortletContext().getAttribute("PortalAuthorizationManagerFactory");
+      if(container == null)
       {
          throw new PortletException("No portal object container");
       }
@@ -87,107 +93,137 @@
 
          // get the list of portal nodes to display (portals or pages, based on preference)
          Iterator portalObjectIterator;
-         if ("page".equalsIgnoreCase(rootLevel)){
+         if("page".equalsIgnoreCase(rootLevel))
+         {
             // if the pages of the current portal are requested, then read up the hierarchie to the current portal, to
             // get the children from there (which are the pages to display)
             PortalNode current = req.getPortalNode();
-            while(current != null && current.getType() != PortalNode.TYPE_PORTAL){
+            while(current != null && current.getType() != PortalNode.TYPE_PORTAL)
+            {
                current = current.getParent();
             }
-            if(current != null && current.getType() == PortalNode.TYPE_PORTAL){
+            if(current != null && current.getType() == PortalNode.TYPE_PORTAL)
+            {
                PortalObject root = context.getChild(current.getName());
                portalObjectIterator = root.getChildren().iterator();
             }
-            else{
+            else
+            {
                throw new PortletException("the current node has no parent of type 'portal'");
             }
          }
-         else{
+         else
+         {
             // ok, we are to display portals then; they are the children of the container root
             portalObjectIterator = context.getChildren().iterator();
          }
          // now build the list
-         while(portalObjectIterator.hasNext()){
-            PortalObject child = (PortalObject)portalObjectIterator.next();
-            if (child.getType() == PortalNode.TYPE_PAGE ||
-                child.getType() == PortalNode.TYPE_PORTAL){
-               PortalObjectImpl portalObject = (PortalObjectImpl)child;
-               if (allowed(portalObject.getPortalNode(), child.getType())){
+         while(portalObjectIterator.hasNext())
+         {
+            PortalObject child = (PortalObject) portalObjectIterator.next();
+            if(child.getType() == PortalNode.TYPE_PAGE ||
+               child.getType() == PortalNode.TYPE_PORTAL)
+            {
+               PortalObjectImpl portalObject = (PortalObjectImpl) child;
+               if(allowed(portalObject.getPortalNode(), child.getType()))
+               {
                   navElements.add(portalObject);
                }
             }
          }
 
-         Collections.sort(navElements, new Comparator()
+         // order tabs as per preference setting
+         String sOrdering = req.getPreferences().getValue("ordering", "default");
+         if(sOrdering.equalsIgnoreCase("explicit"))
          {
-            public int compare(Object o1, Object o2)
+            String sOrderList = req.getPreferences().getValue("explicitlist", "");
+            if(!sOrderList.equals(""))
             {
-               int high1 = getOrder(o1);
-               int high2 = getOrder(o2);
-               if (high1 == high2)
-               {
-                  return ((PortalObject)o1).getName().compareTo(((PortalObject)o2).getName());
-               }
-               else
-               {
-                  return high1 - high2;
-               }
+               sortTabsExplicit(navElements, sOrderList.split(","));
             }
-         });
+            else
+            {
+               sortTabs(navElements);
+            }
+         }
+         else
+         {
+            sortTabs(navElements);
+         }
 
          // find the selected item in the level that was selected to be the root
          // from the current portal node walk up the hierarchie until the node type matches
          // that of the nav elements; if there is a match, hold on to it to mark the selected item later on
          PortalNode selectedNode = null;
-         if (navElements.size() > 0){
-            PortalObject first = (PortalObject)navElements.get(0);
+         if(navElements.size() > 0)
+         {
+            PortalObject first = (PortalObject) navElements.get(0);
             int navElementType = first.getType();
             PortalNode current = req.getPortalNode();
-            while(current != null && current.getType() != navElementType){
+            while(current != null && current.getType() != navElementType)
+            {
                current = current.getParent();
             }
 
             // now read up the hierarchie within the same node type until the type changes, to find the top level node of that type
-            if (current.getParent() != null){
+            if(current.getParent() != null)
+            {
                PortalNode sameTypeLevelUp = current;
-               while(sameTypeLevelUp != null && sameTypeLevelUp.getType() == current.getType()){
+               while(sameTypeLevelUp != null && sameTypeLevelUp.getType() == current.getType())
+               {
                   current = sameTypeLevelUp;
                   sameTypeLevelUp = current.getParent();
                }
             }
 
-            if (current != null && current.getType() == navElementType){
+            if(current != null && current.getType() == navElementType)
+            {
                selectedNode = current;
             }
          }
 
          StringBuffer html = new StringBuffer();
          html.append("<ul id=\"tabsHeader\">");
-         for (Iterator i=navElements.iterator(); i.hasNext(); ){
-            PortalObjectImpl navElement = (PortalObjectImpl)i.next();
 
+         for(Iterator i = navElements.iterator(); i.hasNext();)
+         {
+            PortalObjectImpl navElement = (PortalObjectImpl) i.next();
+
             // build up Marks markup for the navigation , based on these nodes
             String name = navElement.getName();
+
+            // localize node name
+            Locale requestLocale = req.getLocale();
+            ResourceBundle bundle = getResourceBundle(requestLocale);
+            name = bundle.getString(RESOURCE_PREFIX + name);
+
             JBossPortalNode urlNode = null;
-            if (navElement instanceof Portal){
+            if(navElement instanceof Portal)
+            {
                // get the default page node for this portal to get a valid URL from it
-               Page defaultPage = ((Portal)navElement).getDefaultPage();
-               if(defaultPage != null){
+               Page defaultPage = ((Portal) navElement).getDefaultPage();
+               if(defaultPage != null)
+               {
                   PortalObject node = navElement.getChild(defaultPage.getName());
-                  if (node instanceof PortalObjectImpl){
-                     urlNode = ((PortalObjectImpl)node).getPortalNode();
+                  if(node instanceof PortalObjectImpl)
+                  {
+                     urlNode = ((PortalObjectImpl) node).getPortalNode();
                   }
                }
-            }else if (navElement instanceof Page){
+            }
+            else if(navElement instanceof Page)
+            {
                urlNode = navElement.getPortalNode();
             }
 
-            if (urlNode != null){
+            if(urlNode != null)
+            {
                PortalNodeURL childURL = resp.createRenderURL(urlNode);
                html.append("<li");
                // if we were able to detect the selected node in the hierarchie level of the nav elements,
                // then flag the node so the css can style it as the selected one
-               if (selectedNode != null && selectedNode.equals(navElement.getPortalNode())){
+               if(selectedNode != null && selectedNode.equals(navElement.getPortalNode()))
+               {
                   html.append(" id=\"current\"");
                }
                html.append(" onmouseover=\"this.className='hoverOn'\" onmouseout=\"this.className='hoverOff'\"><a href='").append(childURL).append("'>").append(name).append("</a></li>");
@@ -213,22 +249,112 @@
 
    private static int getOrder(Object o)
    {
-      if (o instanceof Context)
+      if(o instanceof Context)
       {
          return 0;
       }
-      if (o instanceof Portal)
+      if(o instanceof Portal)
       {
          return 1;
       }
-      if (o instanceof Page)
+      if(o instanceof Page)
       {
          return 2;
       }
-      if (o instanceof Window)
+      if(o instanceof Window)
       {
          return 3;
       }
       return 4;
    }
+
+   private void sortTabs(List navElements)
+   {
+      Collections.sort(navElements, new Comparator()
+      {
+         public int compare(Object o1, Object o2)
+         {
+            int high1 = getOrder(o1);
+            int high2 = getOrder(o2);
+            if(high1 == high2)
+            {
+               return ((PortalObject) o1).getName().compareTo(((PortalObject) o2).getName());
+            }
+            else
+            {
+               return high1 - high2;
+            }
+         }
+      });
+   }
+
+   /**
+    * For explicit ordering of tabs set in the portlet preferences.
+    *
+    * @param navElements
+    * @param explicitOrder
+    */
+   private void sortTabsExplicit(List navElements, final String[] explicitOrder)
+   {
+      Collections.sort(navElements, new Comparator()
+      {
+         public int compare(Object o1, Object o2)
+         {
+            Float high1 = new Float(getExplicitOrder(o1));
+            Float high2 = new Float(getExplicitOrder(o2));
+            if(high1.equals(high2))
+            {
+               return ((PortalObject) o1).getName()
+                     .compareTo(((PortalObject) o2).getName());
+            }
+            else
+            {
+               return high1.compareTo(high2);
+            }
+         }
+
+         private float getExplicitOrder(Object o)
+         {
+            if(o instanceof Context)
+            {
+               return 0;
+            }
+            if(o instanceof Portal)
+            {
+               return 1;
+            }
+            if(o instanceof Page)
+            {
+               String pagename = ((Page) o).getName();
+               int order = 0;
+               for(int i = 0; i < explicitOrder.length; i++)
+               {
+                  if(pagename.equalsIgnoreCase(explicitOrder[i]))
+                  {
+                     order = i + 1;
+                  }
+               }
+
+               // get pagenum and ordernumber from explicitlist
+               if(order == 0)
+               {
+                  return 2.999f;
+               }
+               try
+               {
+                  return Float.parseFloat("2." + order);
+               }
+               catch(NumberFormatException e)
+               {
+                  return 2.999f;
+               }
+            }
+            if(o instanceof Window)
+            {
+               return 3;
+            }
+            return 4;
+         }
+      });
+   }
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list