Author: maksimkaszynski
Date: 2007-09-21 14:17:14 -0400 (Fri, 21 Sep 2007)
New Revision: 3059
Modified:
branches/3.1.x/framework/api/src/main/java/org/richfaces/model/StackingTreeModel.java
branches/3.1.x/ui/tree/src/main/java/org/richfaces/component/UITree.java
branches/3.1.x/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
Log:
http://jira.jboss.com/jira/browse/RF-980
Modified:
branches/3.1.x/framework/api/src/main/java/org/richfaces/model/StackingTreeModel.java
===================================================================
---
branches/3.1.x/framework/api/src/main/java/org/richfaces/model/StackingTreeModel.java 2007-09-21
17:31:32 UTC (rev 3058)
+++
branches/3.1.x/framework/api/src/main/java/org/richfaces/model/StackingTreeModel.java 2007-09-21
18:17:14 UTC (rev 3059)
@@ -76,8 +76,12 @@
return ((StackEntry) stackEntries.getLast()).model;
}
+ return null;
+ //FIXME: Maksim: Handle deleted entries correctly
+/*
throw new IllegalStateException(
"No tree element available or row key not set!");
+*/
}
public boolean isEmpty() {
@@ -222,9 +226,12 @@
if (isRowAvailable()) {
return null;
}
-
+ return null;
+ //FIXME: Maksim: Handle deleted entries correctly
+/*
throw new IllegalStateException(
"No tree element available or row key not set!");
+*/
}
/*
@@ -245,9 +252,12 @@
return true;
}
-
+ return true;
+ //FIXME: Maksim: Handle deleted entries correctly
+/*
throw new IllegalStateException(
"No tree element available or row key not set!");
+*/
}
protected StackingTreeModel getRoot() {
@@ -481,8 +491,12 @@
return lastEntry.model.rowData;
}
+ return null;
+ //FIXME: Maksim: Handle deleted entries correctly
+ /*
throw new IllegalStateException(
"No tree element available or row key not set!");
+ */
}
/*
Modified: branches/3.1.x/ui/tree/src/main/java/org/richfaces/component/UITree.java
===================================================================
--- branches/3.1.x/ui/tree/src/main/java/org/richfaces/component/UITree.java 2007-09-21
17:31:32 UTC (rev 3058)
+++ branches/3.1.x/ui/tree/src/main/java/org/richfaces/component/UITree.java 2007-09-21
18:17:14 UTC (rev 3059)
@@ -22,7 +22,9 @@
package org.richfaces.component;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import javax.faces.application.Application;
@@ -62,6 +64,7 @@
import org.richfaces.event.NodeSelectedListener;
import org.richfaces.event.TreeListenerEventsProducer;
import org.richfaces.model.AbstractTreeDataModel;
+import org.richfaces.model.ListRowKey;
import org.richfaces.model.StackingTreeModel;
import org.richfaces.model.StackingTreeModelProvider;
import org.richfaces.model.TreeDataModel;
@@ -473,10 +476,10 @@
return !SWITCH_CLIENT.equals(getSwitchType());
}
-
+
public void broadcast(FacesEvent event) throws AbortProcessingException {
super.broadcast(event);
-
+
DataComponentState componentState = getComponentState();
if (componentState instanceof FacesListener) {
FacesListener facesListener = (FacesListener) componentState;
Modified:
branches/3.1.x/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
---
branches/3.1.x/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-09-21
17:31:32 UTC (rev 3058)
+++
branches/3.1.x/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-09-21
18:17:14 UTC (rev 3059)
@@ -25,6 +25,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -49,6 +50,7 @@
import org.richfaces.component.state.TreeState;
import org.richfaces.component.state.TreeStateAdvisor;
import org.richfaces.model.LastElementAware;
+import org.richfaces.model.ListRowKey;
import org.richfaces.model.TreeRange;
import org.richfaces.model.TreeRowKey;
@@ -365,6 +367,28 @@
NSUtils.writeNameSpace(context, component);
}
+
+ private TreeRowKey parentRowKey(TreeRowKey key) {
+ //If depth is > 1, return parent row key
+ int depth = key.depth();
+ TreeRowKey rowKey = key;
+
+ if (depth > 1) {
+ List keyComps = new ArrayList(depth);
+
+ for(Iterator iter = key.iterator(); iter.hasNext(); ) {
+ Object next = iter.next();
+ if (iter.hasNext()) {
+ keyComps.add(next);
+ }
+ }
+
+ rowKey = new ListRowKey(keyComps);
+ }
+
+ return rowKey;
+ }
+
public void encodeAjaxChildren(FacesContext context, UIComponent component,
String path, Set ids, Set renderedAreas) throws IOException {
super.encodeAjaxChildren(context, component, path, ids, renderedAreas);
@@ -392,7 +416,23 @@
try {
Set ajaxKeys = tree.getAllAjaxKeys();
+
if (ajaxKeys != null) {
+ Set aKeys = new HashSet();
+
+ for(Iterator it = ajaxKeys.iterator(); it.hasNext(); ) {
+ TreeRowKey treeRowKey = (TreeRowKey) it.next();
+ treeRowKey = parentRowKey(treeRowKey);
+
+ if (treeRowKey.depth() > 0) {
+ aKeys.add(treeRowKey);
+ }
+ }
+ ajaxKeys = aKeys;
+ }
+
+
+ if (ajaxKeys != null) {
List sortedKeys = new ArrayList(ajaxKeys.size());
sortedKeys.addAll(ajaxKeys);
Collections.sort(sortedKeys, treeRowKeyComparator);
@@ -400,6 +440,8 @@
TreeRowKey lastKey = null;
boolean nullRoot = false;
+ System.err.println("TreeRendererBase.encodeAjaxChildren()" +
sortedKeys);
+
while (!nullRoot && ajaxKeysItr.hasNext()) {
TreeRowKey key = (TreeRowKey) ajaxKeysItr.next();
@@ -419,8 +461,32 @@
key = null;
}
+
+
+
tree.setRowKey(context, key);
-
+
+ if (key != null) {
+ int d = key.depth();
+ List components = new ArrayList(d);
+
+ for(Iterator iter = key.iterator(); iter.hasNext();
components.add(iter.next()));
+
+ while(!tree.isRowAvailable()) {
+
+ key = new ListRowKey(components.subList(0, d--));
+
+ tree.setRowKey(context, key);
+ }
+ }
+
+
+ //key.getPath().
+
+ //TODO: In case of deleted entry, try to update its parent
+ //ey.getSubPathIterator(fromIndex)
+
+
String treeClientId;
if (key == null) {
treeClientId = tree.getClientId(context);