Author: sergeyhalipov
Date: 2007-06-22 10:24:08 -0400 (Fri, 22 Jun 2007)
New Revision: 1276
Modified:
trunk/richfaces/tree/src/main/config/component/tree.xml
trunk/richfaces/tree/src/main/java/org/richfaces/component/UITree.java
trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
Log:
http://jira.jboss.com/jira/browse/RF-86
Modified: trunk/richfaces/tree/src/main/config/component/tree.xml
===================================================================
--- trunk/richfaces/tree/src/main/config/component/tree.xml 2007-06-22 14:15:23 UTC (rev
1275)
+++ trunk/richfaces/tree/src/main/config/component/tree.xml 2007-06-22 14:24:08 UTC (rev
1276)
@@ -213,6 +213,20 @@
<classname>java.lang.Object</classname>
<description>
</description>
+ </property>
+ <property>
+ <name>adviseNodeOpened</name>
+ <classname>javax.faces.el.MethodBinding</classname>
+ <description>
+ </description>
+ <methodargs>org.richfaces.component.UITree.class</methodargs>
+ </property>
+ <property>
+ <name>adviseNodeSelected</name>
+ <classname>javax.faces.el.MethodBinding</classname>
+ <description>
+ </description>
+ <methodargs>org.richfaces.component.UITree.class</methodargs>
</property>
</component>
Modified: trunk/richfaces/tree/src/main/java/org/richfaces/component/UITree.java
===================================================================
--- trunk/richfaces/tree/src/main/java/org/richfaces/component/UITree.java 2007-06-22
14:15:23 UTC (rev 1275)
+++ trunk/richfaces/tree/src/main/java/org/richfaces/component/UITree.java 2007-06-22
14:24:08 UTC (rev 1276)
@@ -30,6 +30,7 @@
import javax.faces.component.NamingContainer;
import javax.faces.component.UIOutput;
import javax.faces.context.FacesContext;
+import javax.faces.el.MethodBinding;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
import javax.faces.event.FacesListener;
@@ -572,11 +573,24 @@
public abstract String getSelectedClass();
public abstract void setNodeFace(String nodeFace);
+
public abstract String getNodeFace();
public abstract void setToggleOnClick(boolean toggleOnClick);
public abstract boolean isToggleOnClick();
+
+ public abstract void setStateAdvisor(Object nodeFace);
+
+ public abstract Object getStateAdvisor();
+
+ public abstract MethodBinding getAdviseNodeOpened();
+
+ public abstract void setAdviseNodeOpened(MethodBinding adviseNodeOpened);
+
+ public abstract MethodBinding getAdviseNodeSelected();
+
+ public abstract void setAdviseNodeSelected(MethodBinding adviseNodeSelected);
public void addChangeExpandListener(NodeExpandedListener listener) {
addFacesListener(listener);
Modified:
trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
---
trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-06-22
14:15:23 UTC (rev 1275)
+++
trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-06-22
14:24:08 UTC (rev 1276)
@@ -33,6 +33,7 @@
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
+import javax.faces.el.MethodBinding;
import org.ajax4jsf.ajax.repeat.DataVisitor;
import org.ajax4jsf.framework.renderer.AjaxRendererUtils;
@@ -82,22 +83,7 @@
navigator.followRowKey((TreeRowKey) rowKey);
- TreeState componentState = (TreeState) tree.getComponentState();
- TreeStateAdvisor stateAdvisor =
(TreeStateAdvisor)tree.getAttributes().get("stateAdvisor");
- if (null != stateAdvisor) {
- Boolean adviseOpened = stateAdvisor.adviseNodeOpened(tree);
- if (null != adviseOpened)
- if (adviseOpened.booleanValue())
- componentState.expandNode((TreeRowKey)rowKey);
- else
- componentState.collapseNode((TreeRowKey)rowKey);
-
- Boolean adviseSelected = stateAdvisor.adviseNodeSelected(tree);
- if (null != adviseSelected)
- if (adviseSelected.booleanValue())
- componentState.setSelected((TreeRowKey)rowKey);
- }
-
+ processAdvisors(context, (TreeRowKey)rowKey);
if (tree.isSelected()) {
holder.setValue(tree.getNodeFacet().getClientId(context));
@@ -134,6 +120,73 @@
isLastElement = false;
navigator.resetLastElement();
}
+
+ public void processAdvisors(FacesContext context, TreeRowKey rowKey) throws IOException
{
+ TreeState componentState = (TreeState) tree.getComponentState();
+ TreeStateAdvisor stateAdvisor = (TreeStateAdvisor)tree.getStateAdvisor();
+ if (null != stateAdvisor) {
+ Boolean adviseOpened = stateAdvisor.adviseNodeOpened(tree);
+ if (null != adviseOpened) {
+ if (adviseOpened.booleanValue()) {
+ if (!componentState.isExpanded(rowKey)) {
+ componentState.expandNode(rowKey);
+ }
+ }
+ else {
+ if (componentState.isExpanded(rowKey)) {
+ componentState.collapseNode(rowKey);
+ }
+ }
+ }
+ Boolean adviseSelected = stateAdvisor.adviseNodeSelected(tree);
+ if (null != adviseSelected) {
+ if (adviseSelected.booleanValue()) {
+ if (!componentState.isSelected(rowKey)) {
+ componentState.setSelected(rowKey);
+ }
+ }
+ else {
+ if (componentState.isSelected(rowKey)) {
+ componentState.setSelected(null);
+ }
+ }
+ }
+ }
+
+ MethodBinding adviseNodeOpened = tree.getAdviseNodeOpened();
+ if (null != adviseNodeOpened) {
+ Boolean nodeOpened = (Boolean) adviseNodeOpened.invoke(context, new Object[]
{tree});
+ if (null != nodeOpened) {
+ if (nodeOpened.booleanValue()) {
+ if (!componentState.isExpanded(rowKey)) {
+ componentState.expandNode(rowKey);
+ }
+ }
+ else {
+ if (componentState.isExpanded((TreeRowKey)rowKey)) {
+ componentState.collapseNode(rowKey);
+ }
+ }
+ }
+ }
+
+ MethodBinding adviseNodeSelected = tree.getAdviseNodeSelected();
+ if (null != adviseNodeSelected) {
+ Boolean nodeSelected = (Boolean) adviseNodeSelected.invoke(context, new Object []
{tree});
+ if (null != nodeSelected) {
+ if (nodeSelected.booleanValue()) {
+ if (!componentState.isSelected(rowKey)) {
+ componentState.setSelected(rowKey);
+ }
+ }
+ else {
+ if (componentState.isSelected(rowKey)) {
+ componentState.setSelected(null);
+ }
+ }
+ }
+ }
+ }
}
public TreeRendererBase() {