[richfaces-svn-commits] JBoss Rich Faces SVN: r9238 - in trunk: samples/tree-demo/src/main/java/org/richfaces and 3 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Thu Jun 26 09:33:39 EDT 2008


Author: dmorozov
Date: 2008-06-26 09:33:39 -0400 (Thu, 26 Jun 2008)
New Revision: 9238

Modified:
   trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java
   trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java
   trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java
   trunk/samples/tree-demo/src/main/java/org/richfaces/TreeDndBean.java
   trunk/samples/tree-demo/src/main/webapp/pages/dnd.jsp
   trunk/ui/tree/src/main/java/org/richfaces/component/UITree.java
   trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java
Log:
Add tests for add & remove nodes methods in tree.
By the way were fixed 2 old bugs in tree component:
1. locateTreeNode was return root node if no one node located by rowKey
2. CacheableTreeDataModel didn't update cached nodes from source data model

Modified: trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java	2008-06-26 13:28:48 UTC (rev 9237)
+++ trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java	2008-06-26 13:33:39 UTC (rev 9238)
@@ -172,4 +172,9 @@
 	
 	return convertedKey;
 	}
+	
+	@Override
+	public T locateTreeNode(TreeRowKey rowKey) {
+		return locateTreeNode(rowKey, true);
+	}
 }

Modified: trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java	2008-06-26 13:28:48 UTC (rev 9237)
+++ trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java	2008-06-26 13:33:39 UTC (rev 9238)
@@ -54,7 +54,9 @@
 
 	@Override
 	protected void setDefaultNodeData(TreeNode node, Object data) {
-		((TreeNodeImpl) node).setData(data);
+		if (node != null) {
+			((TreeNodeImpl) node).setData(data);
+		}
 	}
 
 }

Modified: trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java	2008-06-26 13:28:48 UTC (rev 9237)
+++ trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java	2008-06-26 13:33:39 UTC (rev 9238)
@@ -188,39 +188,42 @@
 	}
 
 	public T locateTreeNode(TreeRowKey rowKey, boolean allowCreate) {
-		boolean useCached = (rowTreeData != null && rowKey != null && rowKey.equals(this.oldRowKey));
+		T tmpRowTreeData = this.rowTreeData;
+		TreeRowKey tmpOldRowKey = this.oldRowKey;
+		
+		boolean useCached = (rowTreeData != null && rowKey != null && rowKey.equals(tmpOldRowKey));		
 		if (!useCached) {
 			T rootNode = getData();
 
 			if (rootNode != null) {
 				if (rowKey != null) {
-					int commonPathLength = rowKey.getCommonPathLength(oldRowKey);
-					if (oldRowKey == null) {
-						rowTreeData = rootNode;
+					int commonPathLength = rowKey.getCommonPathLength(tmpOldRowKey);
+					if (tmpOldRowKey == null) {
+						tmpRowTreeData = rootNode;
 					} else {
 						int rootOpsCount = rowKey.depth();
-						int currentUpOpsCount = oldRowKey.depth() - commonPathLength;
+						int currentUpOpsCount = tmpOldRowKey.depth() - commonPathLength;
 						int currentOpsCount = currentUpOpsCount + rootOpsCount - commonPathLength;
 
 						if (rootOpsCount > currentOpsCount) {
-							for (int i = 0; i < oldRowKey.depth() 
+							for (int i = 0; i < tmpOldRowKey.depth() 
 							- commonPathLength; i++) {
 
-								rowTreeData = nodeAdaptor.getParent(rowTreeData);
+								tmpRowTreeData = nodeAdaptor.getParent(tmpRowTreeData);
 							}
 						} else {
 							commonPathLength = 0;
-							rowTreeData = rootNode;
-							oldRowKey = null;
+							tmpRowTreeData = rootNode;
+							tmpOldRowKey = null;
 						}
 					}
-					oldRowKey = rowKey;
+					tmpOldRowKey = rowKey;
 					Iterator<?> iterator = rowKey.getSubPathIterator(commonPathLength);
 					while (iterator.hasNext()) {
 						//TODO nick - check rowTreeData for null
 						
 						Object pathSegment = iterator.next();
-						T childRowTreeData = nodeAdaptor.getChild(rowTreeData, pathSegment);
+						T childRowTreeData = nodeAdaptor.getChild(tmpRowTreeData, pathSegment);
 
 						if (childRowTreeData == null) {
 							if (!allowCreate) {
@@ -229,7 +232,7 @@
 							} else {
 								if (missingNodeHandler != null) {
 									childRowTreeData = missingNodeHandler.
-										handleMissingNode(rowTreeData, pathSegment);
+										handleMissingNode(tmpRowTreeData, pathSegment);
 
 									if (childRowTreeData == null) {
 										return null;
@@ -240,7 +243,7 @@
 							}
 						}
 
-						rowTreeData = childRowTreeData;
+						tmpRowTreeData = childRowTreeData;
 					}
 				} else {
 					return rootNode;
@@ -249,6 +252,12 @@
 				return null;
 			}
 		}
+		
+		// check whether we were found something and store it
+		if (tmpRowTreeData != null) {
+			rowTreeData = tmpRowTreeData;
+			oldRowKey = tmpOldRowKey;
+		}
 		return rowTreeData;
 	}
 

Modified: trunk/samples/tree-demo/src/main/java/org/richfaces/TreeDndBean.java
===================================================================
--- trunk/samples/tree-demo/src/main/java/org/richfaces/TreeDndBean.java	2008-06-26 13:28:48 UTC (rev 9237)
+++ trunk/samples/tree-demo/src/main/java/org/richfaces/TreeDndBean.java	2008-06-26 13:33:39 UTC (rev 9238)
@@ -11,6 +11,7 @@
 import java.util.Properties;
 
 import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 
@@ -323,16 +324,39 @@
 	AjaxContext ac = AjaxContext.getCurrentInstance();
 	// Add destination tree to reRender
 	try {
-	    ac.addComponentToAjaxRender(destTree);
+		ac.addComponentToAjaxRender(destTree);
 	} catch (Exception e) {
-	    System.err.print(e.getMessage());
+		System.err.print(e.getMessage());
 	}
 	
+	if (leftTree.getRowKey() != null) {
+        	leftSelectedNodeTitle = (String) leftTree.getRowData();
+        	UIComponent selectL = context.getViewRoot().findComponent("DnDTreeForm:selectedNodeL");
+        	if (selectL != null) {
+                	try {
+                		ac.addComponentToAjaxRender(selectL);
+                	} catch (Exception e) {
+                		System.err.print(e.getMessage());
+                	}
+        	}
+	}
+	if (rightTree.getRowKey() != null) {
+        	rightSelectedNodeTitle = (String) rightTree.getRowData();
+        	UIComponent selectR = context.getViewRoot().findComponent("DnDTreeForm:selectedNodeR");
+        	if (selectR != null) {
+        		try {
+        			ac.addComponentToAjaxRender(selectR);
+        		} catch (Exception e) {
+        			System.err.print(e.getMessage());
+        		}
+        	}
+	}
+
 	// Add source tree to reRender
 	try {
-	    ac.addComponentToAjaxRender(srcTree);
+		ac.addComponentToAjaxRender(srcTree);
 	} catch (Exception e) {
-	    System.err.print(e.getMessage());
+		System.err.print(e.getMessage());
 	}
 	
 	System.out.println("+++++");

Modified: trunk/samples/tree-demo/src/main/webapp/pages/dnd.jsp
===================================================================
--- trunk/samples/tree-demo/src/main/webapp/pages/dnd.jsp	2008-06-26 13:28:48 UTC (rev 9237)
+++ trunk/samples/tree-demo/src/main/webapp/pages/dnd.jsp	2008-06-26 13:33:39 UTC (rev 9238)
@@ -35,7 +35,7 @@
 </head>
 <body>
 <f:view>
-	<h:form>
+	<h:form id="DnDTreeForm">
 		<dnd:dragIndicator id="treeIndicator">
 			<f:facet name="single">
 				<f:verbatim>{marker} {nodeParam}({treeParam})</f:verbatim>

Modified: trunk/ui/tree/src/main/java/org/richfaces/component/UITree.java
===================================================================
--- trunk/ui/tree/src/main/java/org/richfaces/component/UITree.java	2008-06-26 13:28:48 UTC (rev 9237)
+++ trunk/ui/tree/src/main/java/org/richfaces/component/UITree.java	2008-06-26 13:33:39 UTC (rev 9238)
@@ -1139,6 +1139,7 @@
 				// 2. clean up node state
 				nodeState = getTreeNodeState(true);
 				clearTreeNodeState();
+				setRowKey(null);
 			} finally {
 				try {
 					setRowKey(context, storedKey);

Modified: trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java
===================================================================
--- trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java	2008-06-26 13:28:48 UTC (rev 9237)
+++ trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java	2008-06-26 13:33:39 UTC (rev 9238)
@@ -52,6 +52,8 @@
 import org.richfaces.event.NodeSelectedEvent;
 import org.richfaces.event.NodeSelectedListener;
 import org.richfaces.model.ListRowKey;
+import org.richfaces.model.TreeNode;
+import org.richfaces.model.TreeNodeImpl;
 import org.xml.sax.InputSource;
 
 import com.gargoylesoftware.htmlunit.html.HtmlElement;
@@ -914,7 +916,43 @@
 		tree.removeDragListener(dragListener);
 		treeNode.removeDragListener(dragListener);
 	}
-
+	
+	public final void testAddNode() {
+	    TreeNode rootNode = new TreeNodeImpl<String>();
+	    rootNode.setData("root");
+	    tree.setValue(rootNode);
+	    tree.setPreserveModel("");
+	    
+	    TreeNode<String> newNode = new TreeNodeImpl<String>();
+	    newNode.setData("Sample node");
+	    	    
+	    tree.addNode(facesContext, null, newNode, new Integer(111), null);
+	    Object rowKey = tree.getTreeNodeRowKey(newNode);
+	    assertNotNull(rowKey);
+	    TreeNode<String> node = tree.getTreeNode(rowKey);
+	    assertSame(node, newNode);
+	}
+	
+	public final void testRemoveNode() {
+	    TreeNode rootNode = new TreeNodeImpl<String>();
+	    rootNode.setData("root");
+	    tree.setValue(rootNode);
+	    tree.setPreserveModel("");
+	    
+	    TreeNode<String> newNode = new TreeNodeImpl<String>();
+	    newNode.setData("Sample node");
+	    	    
+	    tree.addNode(facesContext, null, newNode, new Integer(111), null);
+	    Object rowKey = tree.getTreeNodeRowKey(newNode);
+	    assertNotNull(rowKey);
+	    TreeNode<String> node = tree.getTreeNode(rowKey);
+	    assertSame(node, newNode);
+	    
+	    tree.removeNode(rowKey);
+	    
+	    tree.setRowKey(rowKey);
+	    assertFalse(tree.isRowAvailable());
+	}
 }
 
 




More information about the richfaces-svn-commits mailing list