You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by to...@apache.org on 2005/09/24 02:00:55 UTC
svn commit: r291224 -
/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/
Author: tomsp
Date: Fri Sep 23 17:00:49 2005
New Revision: 291224
URL: http://svn.apache.org/viewcvs?rev=291224&view=rev
Log:
Refactoring navigation
Modified:
myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItem.java
myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItemTag.java
myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java
myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java
myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java
Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItem.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItem.java?rev=291224&r1=291223&r2=291224&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItem.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItem.java Fri Sep 23 17:00:49 2005
@@ -30,6 +30,7 @@
import java.util.List;
/**
+ * @author Manfred Geiler
* @author Thomas Spiegl
*/
public class HtmlCommandNavigationItem extends HtmlCommandLink
Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItemTag.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItemTag.java?rev=291224&r1=291223&r2=291224&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItemTag.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlCommandNavigationItemTag.java Fri Sep 23 17:00:49 2005
@@ -23,6 +23,8 @@
*/
public class HtmlCommandNavigationItemTag extends HtmlCommandLinkTag
{
+
+
public String getComponentType()
{
return HtmlCommandNavigationItem.COMPONENT_TYPE;
@@ -30,6 +32,6 @@
public String getRendererType()
{
- return "org.apache.myfaces.NavigationMenu";
+ return HtmlNavigationMenuRenderer.RENDERER_TYPE;
}
}
Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java?rev=291224&r1=291223&r2=291224&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java Fri Sep 23 17:00:49 2005
@@ -17,6 +17,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.custom.navmenu.UINavigationMenuItem;
+import org.apache.myfaces.el.SimpleActionMethodBinding;
import org.apache.myfaces.renderkit.RendererUtils;
import org.apache.myfaces.renderkit.html.HTML;
import org.apache.myfaces.renderkit.html.HtmlRendererUtils;
@@ -24,20 +26,23 @@
import javax.faces.component.UIComponent;
import javax.faces.component.UIOutput;
+import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
+import javax.faces.el.MethodBinding;
import java.io.IOException;
-import java.util.Iterator;
import java.util.List;
/**
- * @author Manfred Geiler
* @author Thomas Spiegl
+ * @author Manfred Geiler
*/
public class HtmlNavigationMenuRenderer extends HtmlLinkRenderer
{
private static final Log log = LogFactory.getLog(HtmlNavigationMenuRenderer.class);
+ public static final String RENDERER_TYPE = "org.apache.myfaces.NavigationMenu";
+
private static final Integer ZERO_INTEGER = new Integer(0);
public boolean getRendersChildren()
@@ -84,6 +89,14 @@
HtmlPanelNavigationMenu panelNav = (HtmlPanelNavigationMenu)component;
if (HtmlNavigationMenuRendererUtils.isListLayout(panelNav))
{
+ // get old view
+ UIViewRoot previousViewRoot = (UIViewRoot)
+ facesContext.getExternalContext().getRequestMap().get(HtmlPanelNavigationMenu.PREVIOUS_VIEW_ROOT);
+ // preprocess component tree
+ preprocessNavigationItems(facesContext, panelNav, previousViewRoot, panelNav.getChildren());
+ // render list
+ if (log.isDebugEnabled())
+ HtmlNavigationMenuRendererUtils.debugTree(log, panelNav.getChildren(), 0);
renderListLayout(facesContext, panelNav);
}
else
@@ -92,54 +105,67 @@
}
}
- private void postProcessComponentTree(List children)
+ private void preprocessNavigationItems(FacesContext facesContext, UIComponent parent, UIViewRoot previousViewRoot, List children)
{
- for (Iterator it = children.iterator(); it.hasNext(); )
+ for (int i = 0; i < children.size(); i++)
{
- UIComponent child = (UIComponent)it.next();
+ UIComponent child = (UIComponent)children.get(i);
if (!child.isRendered()) continue;
- if (child instanceof HtmlCommandNavigationItem)
+ if (child instanceof UINavigationMenuItem)
{
- HtmlCommandNavigationItem navItem = (HtmlCommandNavigationItem) child;
- if (navItem.isActive())
+ UINavigationMenuItem uiNavMenuItem = (UINavigationMenuItem) child;
+
+ // Create HtmlCommandNavigationItem
+ HtmlCommandNavigationItem item = (HtmlCommandNavigationItem)
+ facesContext.getApplication().createComponent(HtmlCommandNavigationItem.COMPONENT_TYPE);
+ item.setRendererType(RENDERER_TYPE);
+ parent.getChildren().add(i + 1, item);
+ item.setParent(parent);
+ // set action
+ item.setAction(getAction(facesContext, uiNavMenuItem));
+ // restore state
+ HtmlCommandNavigationItem previousItem =
+ HtmlNavigationMenuRendererUtils.findPreviousItem(previousViewRoot, item.getClientId(facesContext));
+ if (previousItem != null)
+ {
+ item.setActive(Boolean.valueOf(previousItem.isActive()));
+ item.setOpen(Boolean.valueOf(previousItem.isOpen()));
+ }
+
+ // Create UIOutput
+ UIOutput uiOutput = (UIOutput) facesContext.getApplication().createComponent(UIOutput.COMPONENT_TYPE);
+ item.getChildren().add(uiOutput);
+ uiOutput.setParent(item);
+ if (uiNavMenuItem.getItemLabel() != null)
{
- navItem.getChildren().remove(0);
- navItem.getChildren().remove(0);
+ uiOutput.setValue(uiNavMenuItem.getItemLabel());
}
- if (navItem.isOpen() && navItem.getChildren().size() > 0)
+ else
{
- postProcessComponentTree(navItem.getChildren());
+ uiOutput.setValue(uiNavMenuItem.getValue());
}
+ // process next level
+ preprocessNavigationItems(facesContext, item, previousViewRoot, uiNavMenuItem.getChildren());
}
}
}
- private void preProcessComponentTree(FacesContext facesContext, UIComponent activeItemPrefix, List children)
+ private MethodBinding getAction(FacesContext facesContext, UINavigationMenuItem uiNavMenuItem)
{
- for (Iterator it = children.iterator(); it.hasNext(); )
+ String action = uiNavMenuItem.getAction();
+ MethodBinding mb;
+ if (HtmlNavigationMenuRendererUtils.isValueReference(action))
{
- UIComponent child = (UIComponent)it.next();
- if (!child.isRendered()) continue;
- if (child instanceof HtmlCommandNavigationItem)
- {
- HtmlCommandNavigationItem navItem = (HtmlCommandNavigationItem) child;
- if (navItem.isActive())
- {
- UIOutput uiOutput = (UIOutput) facesContext.getApplication().createComponent(UIOutput.COMPONENT_TYPE);
- uiOutput.setValue(navItem.getValue());
- uiOutput.setTransient(true);
- navItem.setValue(null);
- navItem.getChildren().add(0, uiOutput);
- navItem.getChildren().add(0, activeItemPrefix);
- }
- if (navItem.isOpen() && navItem.getChildren().size() > 0)
- {
- preProcessComponentTree(facesContext, activeItemPrefix, navItem.getChildren());
- }
- }
+ mb = facesContext.getApplication().createMethodBinding(action, null);
}
+ else
+ {
+ mb = new SimpleActionMethodBinding(action);
+ }
+ return mb;
}
+
protected void renderListLayout(FacesContext facesContext, HtmlPanelNavigationMenu component) throws IOException
{
ResponseWriter writer = facesContext.getResponseWriter();
@@ -188,8 +214,8 @@
}
}
- // protected
-
+// protected
+
protected String getStyle(FacesContext facesContext, UIComponent link)
{
if (!(link instanceof HtmlCommandNavigationItem))
Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java?rev=291224&r1=291223&r2=291224&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java Fri Sep 23 17:00:49 2005
@@ -3,10 +3,14 @@
import org.apache.myfaces.renderkit.html.HtmlRendererUtils;
import org.apache.myfaces.renderkit.html.HTML;
import org.apache.myfaces.renderkit.RendererUtils;
+import org.apache.myfaces.custom.navmenu.UINavigationMenuItem;
+import org.apache.commons.logging.Log;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.component.UIViewRoot;
import java.util.List;
import java.util.Iterator;
import java.io.IOException;
@@ -28,6 +32,10 @@
{
UIComponent child = (UIComponent)it.next();
if (!child.isRendered()) continue;
+ if (child instanceof UINavigationMenuItem)
+ {
+ renderChildrenListLayout(facesContext, writer, panelNav, child.getChildren(), level);
+ }
if (child instanceof HtmlCommandNavigationItem)
{
//navigation item
@@ -206,7 +214,7 @@
public static boolean isListLayout(HtmlPanelNavigationMenu panelNav)
{
- return "List".equalsIgnoreCase(panelNav.getLayout());
+ return !"Table".equalsIgnoreCase(panelNav.getLayout());
}
public static void renderChildren(FacesContext facesContext, HtmlCommandNavigationItem component) throws IOException
@@ -224,4 +232,62 @@
}
}
+ public static void debugTree(Log log, List children, int level)
+ {
+ for (Iterator it = children.iterator(); it.hasNext(); )
+ {
+ UIComponent child = (UIComponent) it.next();
+ if (child instanceof UINavigationMenuItem)
+ {
+ UINavigationMenuItem item = (UINavigationMenuItem) child;
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < level * 4; i++) buf.append(' ');
+ log.debug(buf.toString() + "--> " + item.getItemLabel());
+ debugTree(log, child.getChildren(), level + 1);
+ }
+ else if (child instanceof HtmlCommandNavigationItem)
+ {
+ HtmlCommandNavigationItem item = (HtmlCommandNavigationItem) child;
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < level * 4; i++) buf.append(' ');
+ String value;
+ if (item.getChildren().size() > 0 && item.getChildren().get(0) instanceof UIOutput)
+ {
+ UIOutput uiOutput = (UIOutput) item.getChildren().get(0);
+ value = uiOutput.getValue() != null ? uiOutput.getValue().toString() : "?";
+ }
+ else
+ {
+ value = item.getValue() != null ? item.getValue().toString() : "";
+ }
+ log.debug(buf.toString() + value);
+ debugTree(log, child.getChildren(), level + 1);
+ }
+ }
+ }
+
+ public static HtmlCommandNavigationItem findPreviousItem(UIViewRoot previousViewRoot, String clientId)
+ {
+ HtmlCommandNavigationItem previousItem = null;
+ if (previousViewRoot != null)
+ {
+ UIComponent previousComp = previousViewRoot.findComponent(clientId);
+ if (previousComp instanceof HtmlCommandNavigationItem)
+ {
+ previousItem = (HtmlCommandNavigationItem) previousComp;
+ }
+ }
+ return previousItem;
+ }
+
+ public static boolean isValueReference(String value)
+ {
+ if (value == null) throw new NullPointerException("value");
+
+ int start = value.indexOf("#{");
+ if (start < 0) return false;
+
+ int end = value.lastIndexOf('}');
+ return (end >=0 && start < end);
+ }
}
Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java?rev=291224&r1=291223&r2=291224&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java Fri Sep 23 17:00:49 2005
@@ -35,7 +35,7 @@
{
private static final Log log = LogFactory.getLog(HtmlPanelNavigationMenu.class);
- private static final String PREVIOUS_VIEW_ROOT = HtmlPanelNavigationMenu.class.getName() + ".PREVIOUS_VIEW_ROOT";
+ static final String PREVIOUS_VIEW_ROOT = HtmlPanelNavigationMenu.class.getName() + ".PREVIOUS_VIEW_ROOT";
private boolean _itemOpenActiveStatesRestored = false;
public void decode(FacesContext context)