* Fix list index checks in list() and prefetch().
This commit is contained in:
parent
d47c1f1643
commit
1186a277ae
1 changed files with 10 additions and 19 deletions
|
@ -17,15 +17,12 @@ package helma.scripting.rhino;
|
||||||
|
|
||||||
import helma.objectmodel.INode;
|
import helma.objectmodel.INode;
|
||||||
import helma.objectmodel.db.Key;
|
import helma.objectmodel.db.Key;
|
||||||
import helma.objectmodel.db.Node;
|
|
||||||
import helma.objectmodel.db.NodeHandle;
|
import helma.objectmodel.db.NodeHandle;
|
||||||
import helma.objectmodel.db.OrderedSubnodeList;
|
import helma.objectmodel.db.OrderedSubnodeList;
|
||||||
import helma.objectmodel.db.UpdateableSubnodeList;
|
|
||||||
import helma.objectmodel.db.WrappedNodeManager;
|
import helma.objectmodel.db.WrappedNodeManager;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -106,7 +103,6 @@ public class ListViewWrapper extends ScriptableObject implements Wrapper, Script
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object jsFunction_get(Object idxObj) {
|
public Object jsFunction_get(Object idxObj) {
|
||||||
int idx;
|
|
||||||
if (idxObj instanceof Number)
|
if (idxObj instanceof Number)
|
||||||
return jsFunction_get(((Number) idxObj).intValue());
|
return jsFunction_get(((Number) idxObj).intValue());
|
||||||
else // fallback to this View's HopObject's get-function
|
else // fallback to this View's HopObject's get-function
|
||||||
|
@ -159,28 +155,21 @@ public class ListViewWrapper extends ScriptableObject implements Wrapper, Script
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prefetchChildren(int start, int length) {
|
private void prefetchChildren(int start, int length) {
|
||||||
if (list.size() < 1)
|
|
||||||
return;
|
|
||||||
if (!(node instanceof helma.objectmodel.db.Node))
|
if (!(node instanceof helma.objectmodel.db.Node))
|
||||||
return;
|
return;
|
||||||
|
checkNode();
|
||||||
|
start = Math.max(start, 0);
|
||||||
|
length = Math.min(list.size() - start, length);
|
||||||
if (length < 1)
|
if (length < 1)
|
||||||
return;
|
return;
|
||||||
if (start < 0)
|
Key[] keys = new Key[length];
|
||||||
return;
|
for (int i = start; i < start+length; i++) {
|
||||||
if (start >= list.size())
|
keys[i - start] = ((NodeHandle) list.get(i)).getKey();
|
||||||
return;
|
|
||||||
checkNode();
|
|
||||||
int l = Math.min(list.size() - start, length);
|
|
||||||
if (l < 1)
|
|
||||||
return;
|
|
||||||
Key[] keys = new Key[l];
|
|
||||||
for (int i = start; i<start+l; i++) {
|
|
||||||
keys[i] = ((NodeHandle) list.get(i)).getKey();
|
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
((helma.objectmodel.db.Node) node).prefetchChildren(keys);
|
((helma.objectmodel.db.Node) node).prefetchChildren(keys);
|
||||||
} catch (Exception ignore) {
|
} catch (Exception x) {
|
||||||
System.err.println("Error in HopObject.prefetchChildren(): "+ignore);
|
System.err.println("Error in HopObject.prefetchChildren(): " + x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,6 +225,8 @@ public class ListViewWrapper extends ScriptableObject implements Wrapper, Script
|
||||||
}
|
}
|
||||||
|
|
||||||
checkNode();
|
checkNode();
|
||||||
|
start = Math.max(start, 0);
|
||||||
|
length = Math.min(list.size() - start, length);
|
||||||
|
|
||||||
prefetchChildren(start, length);
|
prefetchChildren(start, length);
|
||||||
ArrayList a = new ArrayList();
|
ArrayList a = new ArrayList();
|
||||||
|
|
Loading…
Add table
Reference in a new issue