Author: nbelaevski
Date: 2011-04-18 11:24:27 -0400 (Mon, 18 Apr 2011)
New Revision: 22430
Modified:
trunk/ui/iteration/api/src/main/java/org/richfaces/model/SwingTreeNodeImpl.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/DeclarativeTreeDataModelWalker.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/NodesTreeSequenceKeyModel.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/SwingTreeNodeDataModelImpl.java
Log:
https://issues.jboss.org/browse/RF-10869
Modified: trunk/ui/iteration/api/src/main/java/org/richfaces/model/SwingTreeNodeImpl.java
===================================================================
---
trunk/ui/iteration/api/src/main/java/org/richfaces/model/SwingTreeNodeImpl.java 2011-04-18
12:09:35 UTC (rev 22429)
+++
trunk/ui/iteration/api/src/main/java/org/richfaces/model/SwingTreeNodeImpl.java 2011-04-18
15:24:27 UTC (rev 22430)
@@ -67,7 +67,11 @@
}
public TreeNode getChildAt(int childIndex) {
- return Iterables.get(children, childIndex);
+ if (childIndex < getChildCount()) {
+ return Iterables.get(children, childIndex);
+ }
+
+ return null;
}
public int getChildCount() {
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/DeclarativeTreeDataModelWalker.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/DeclarativeTreeDataModelWalker.java 2011-04-18
12:09:35 UTC (rev 22429)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/DeclarativeTreeDataModelWalker.java 2011-04-18
15:24:27 UTC (rev 22430)
@@ -83,12 +83,23 @@
private void setupDataModelContext(Object key) {
if (modelData instanceof Iterable<?>) {
Iterable<?> iterable = (Iterable<?>) modelData;
- data = Iterables.get(iterable, (Integer) key);
+ Integer index = (Integer) key;
+
+ if (index < Iterables.size(iterable)) {
+ data = Iterables.get(iterable, index);
+ } else {
+ data = null;
+ }
} else {
data = ((Map<?, ?>) modelData).get(key);
}
}
+ private void resetForDataNotAvailable() {
+ data = null;
+ currentComponent = rootComponent;
+ }
+
protected FacesContext getFacesContext() {
return facesContext;
}
@@ -120,7 +131,18 @@
}
setupModelComponentContext(declarativeKey.getModelId());
+
+ if (modelData == null) {
+ resetForDataNotAvailable();
+ break;
+ }
+
setupDataModelContext(declarativeKey.getModelKey());
+
+ if (data == null) {
+ resetForDataNotAvailable();
+ break;
+ }
}
} finally {
if (var != null) {
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/NodesTreeSequenceKeyModel.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/NodesTreeSequenceKeyModel.java 2011-04-18
12:09:35 UTC (rev 22429)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/NodesTreeSequenceKeyModel.java 2011-04-18
15:24:27 UTC (rev 22430)
@@ -45,6 +45,11 @@
for (Object simpleKey: key.getSimpleKeys()) {
data = setupChildContext(simpleKey);
+
+ if (data == null) {
+ break;
+ }
+
setData(data);
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/SwingTreeNodeDataModelImpl.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/SwingTreeNodeDataModelImpl.java 2011-04-18
12:09:35 UTC (rev 22429)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/model/SwingTreeNodeDataModelImpl.java 2011-04-18
15:24:27 UTC (rev 22430)
@@ -74,7 +74,13 @@
}
protected TreeNode findChild(TreeNode parent, Integer simpleKey) {
- return parent.getChildAt(simpleKey.intValue());
+ int childIdx = simpleKey.intValue();
+
+ if (childIdx < parent.getChildCount()) {
+ return parent.getChildAt(childIdx);
+ }
+
+ return null;
}
public Iterator<TreeDataModelTuple> children() {