Callable cmpKey = callbackKey.toCallable(env);
if (! cmpKey.isValid(env))
return NullValue.NULL;
ArrayValue interArray = new ArrayValueImpl();
boolean isFound = true;
for (Value entryKey : array.keySet()) {
Value entryValue = array.get(entryKey);
for (int k = 1; k < arrays.length - 2 && isFound; k++) {
if (! (arrays[k] instanceof ArrayValue)) {
env.warning("Argument #" + (k + 1) + " is not an array");
return NullValue.NULL;
}
ArrayValue checkArray = (ArrayValue) arrays[k];
for (Map.Entry<Value, Value> entry : checkArray.entrySet()) {
try {
boolean valueFound =
cmpValue.call(env, entryValue, entry.getValue()).toLong() == 0;
boolean keyFound = false;
if (valueFound)
keyFound = cmpKey.call(env, entryKey, entry.getKey()).toLong()
== 0;
isFound = valueFound && keyFound;
}
catch (Throwable t) {
log.log(Level.WARNING, t.toString(), t);
env.warning("An error occurred while invoking the filter callback");
return NullValue.NULL;
}
if (isFound)
break;
}
}
if (isFound)
interArray.put(entryKey, entryValue);
}
return interArray;
}