[richfaces-svn-commits] JBoss Rich Faces SVN: r316 - in trunk/richfaces/tree/src/main/java/org/richfaces: renderkit and 1 other directory.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Fri Apr 6 13:05:52 EDT 2007
Author: nbelaevski
Date: 2007-04-06 13:05:52 -0400 (Fri, 06 Apr 2007)
New Revision: 316
Added:
trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeRequestDataModel.java
Modified:
trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeDataModel.java
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-76 fixed.
- CacheableTreeRequestDataModel class added
- Method resetSub() implemented in CacheableTreeDataModel to re-read children state
- Methods getTreeNode(Object key) & getRowData(Object key) implemented in UITree to read data by key
Modified: trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeDataModel.java
===================================================================
--- trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeDataModel.java 2007-04-06 16:48:21 UTC (rev 315)
+++ trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeDataModel.java 2007-04-06 17:05:52 UTC (rev 316)
@@ -22,7 +22,7 @@
package org.richfaces.component;
import java.io.IOException;
-import java.util.HashSet;
+import java.util.Iterator;
import javax.faces.component.StateHolder;
import javax.faces.context.FacesContext;
@@ -47,11 +47,6 @@
public void process(FacesContext context, Object rowKey, Object argument)
throws IOException {
treeDataModel.setRowKey(rowKey);
- if (!treeDataModel.isLeaf()) {
- leafSet.add(rowKey);
- } else {
- leafSet.remove(rowKey);
- }
locateTreeNode((TreeRowKey) rowKey, true).setData(
treeDataModel.getRowData());
if (visitor != null) {
@@ -75,15 +70,26 @@
}
private TreeDataModel treeDataModel;
- private HashSet leafSet = new HashSet();
public boolean isLeaf() {
- return !leafSet.contains(getRowKey());
+ TreeRowKey rowKey = (TreeRowKey) getRowKey();
+ TreeNode treeNode = locateTreeNode(rowKey);
+ if (treeNode != null && !treeNode.isLeaf()) {
+ return false;
+ }
+
+ treeNode = treeDataModel.locateTreeNode(rowKey);
+ if (treeNode != null) {
+ return treeNode.isLeaf();
+ }
+
+ return false;
}
- public CacheableTreeDataModel() {
+ public CacheableTreeDataModel(TreeDataModel model) {
super();
setWrappedData(new TreeNodeImpl());
+ setTreeDataModel(model);
}
public void walkModel(FacesContext context, DataVisitor visitor,
@@ -96,6 +102,10 @@
public void setTreeDataModel(TreeDataModel treeDataModel) {
this.treeDataModel = treeDataModel;
}
+
+ public TreeDataModel getTreeDataModel() {
+ return treeDataModel;
+ }
public void walk(FacesContext context, final DataVisitor dataVisitor,
Range range, TreeRowKey rowKey, Object argument, boolean last)
@@ -120,13 +130,11 @@
public void restoreState(FacesContext context, Object state) {
Object[] _state = (Object[]) state;
setWrappedData(_state[0]);
- leafSet = (HashSet) _state[1];
}
public Object saveState(FacesContext context) {
- Object[] state = new Object[2];
+ Object[] state = new Object[1];
state[0] = getWrappedData();
- state[1] = leafSet;
return state;
}
@@ -137,4 +145,10 @@
}
}
+ public void resetSub(TreeRowKey key) {
+ TreeNode node = locateTreeNode(key);
+ for (Iterator iterator = node.getChildren(); iterator.hasNext();) {
+ iterator.remove();
+ }
+ }
}
Added: trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeRequestDataModel.java
===================================================================
--- trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeRequestDataModel.java (rev 0)
+++ trunk/richfaces/tree/src/main/java/org/richfaces/component/CacheableTreeRequestDataModel.java 2007-04-06 17:05:52 UTC (rev 316)
@@ -0,0 +1,47 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces 3.0 - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.component;
+
+
+/**
+ * @author Nick Belaevski - nbelaevski at exadel.com
+ * created 06.04.2007
+ *
+ */
+public class CacheableTreeRequestDataModel extends CacheableTreeDataModel {
+
+ public CacheableTreeRequestDataModel(TreeDataModel model) {
+ super(model);
+ }
+
+ public void resetAll() {
+ throw new IllegalStateException("Should not be called for this class!");
+ }
+
+ public void resetSub(TreeRowKey key) {
+ throw new IllegalStateException("Should not be called for this class!");
+ }
+
+ public boolean isTransient() {
+ return true;
+ }
+}
Modified: trunk/richfaces/tree/src/main/java/org/richfaces/component/UITree.java
===================================================================
--- trunk/richfaces/tree/src/main/java/org/richfaces/component/UITree.java 2007-04-06 16:48:21 UTC (rev 315)
+++ trunk/richfaces/tree/src/main/java/org/richfaces/component/UITree.java 2007-04-06 17:05:52 UTC (rev 316)
@@ -244,6 +244,14 @@
TreeState state = (TreeState) getComponentState();
+ CacheableTreeDataModel cacheableModel = state.getTreeDataModel();
+ if (cacheableModel != null) {
+ if (cacheableModel.isTransient()) {
+ setExtendedDataModel(cacheableModel.getTreeDataModel());
+ state.setTreeDataModel(null);
+ }
+ }
+
// transfer nodes delayed to open to rendering queue
state.transferQueuedNodes();
// re-set stopInCollapsed to handle AJAX switch type change
@@ -478,14 +486,18 @@
TreeDataModel treeDataModel = new TreeDataModel();
treeDataModel.setWrappedData(this.getValue());
if (stateModel == null) {
- if (!PRESERVE_MODEL_NONE.equals(getPreserveModel())) {
- stateModel = new CacheableTreeDataModel();
- state.setTreeDataModel(stateModel);
+ String preserveModel = getPreserveModel();
+ if (PRESERVE_MODEL_REQUEST.equals(preserveModel)) {
+ stateModel = new CacheableTreeRequestDataModel(treeDataModel);
+ } else if (PRESERVE_MODEL_STATE.equals(preserveModel)) {
+ stateModel = new CacheableTreeDataModel(treeDataModel);
} else {
return treeDataModel;
}
+ } else {
+ stateModel.setTreeDataModel(treeDataModel);
}
- stateModel.setTreeDataModel(treeDataModel);
+
return stateModel;
}
@@ -629,6 +641,40 @@
}
+ /**
+ * Return the data object representing the node data for the contextual row key
+ *
+ * @param rowKey contextual row key
+ * @return data corresponding to the current row key
+ */
+ public Object getRowData(Object rowKey) {
+ Object storedKey = getRowKey();
+ try {
+ setRowKey(rowKey);
+
+ return getRowData();
+ } finally {
+ setRowKey(storedKey);
+ }
+ }
+
+ /**
+ * Return the data object representing the node for the contextual row key
+ *
+ * @param rowKey contextual row key
+ * @return {@link TreeNode} instance corresponding to the current row key
+ */
+ public TreeNode getTreeNode(Object rowKey) {
+ Object storedKey = getRowKey();
+ try {
+ setRowKey(rowKey);
+
+ return getTreeNode();
+ } finally {
+ setRowKey(storedKey);
+ }
+ }
+
private UIOutput createDefaultNodeFaceOutput(FacesContext facesContext) {
UIOutput component = new UIOutput() {
Modified: trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
--- trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-04-06 16:48:21 UTC (rev 315)
+++ trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-04-06 17:05:52 UTC (rev 316)
@@ -41,11 +41,13 @@
import org.ajax4jsf.framework.util.javascript.JSFunction;
import org.ajax4jsf.framework.util.javascript.JSReference;
import org.ajax4jsf.framework.util.javascript.ScriptUtils;
+import org.richfaces.component.CacheableTreeDataModel;
import org.richfaces.component.LastElementAware;
import org.richfaces.component.TreeRowKey;
import org.richfaces.component.UITree;
import org.richfaces.component.UITreeNode;
import org.richfaces.component.nsutils.NSUtils;
+import org.richfaces.component.state.TreeState;
public abstract class TreeRendererBase extends CompositeRenderer {
@@ -296,6 +298,13 @@
final Flag droppedDownToLevelFlag = new Flag();
TreeRowKey rowKey = (TreeRowKey) key;
+
+ TreeState state = (TreeState) input.getComponentState();
+ CacheableTreeDataModel cacheableModel = state.getTreeDataModel();
+ if (cacheableModel != null) {
+ cacheableModel.resetSub(rowKey);
+ }
+
final TreeDataModelEventNavigator levelNavigator = new TreeDataModelEventNavigator(
input, rowKey) {
More information about the richfaces-svn-commits
mailing list