[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