*/
public static DOMQueryResult evaluateOn(final DOMQuery query, final NormalizedNode<?, ?> queryRoot) {
final YangInstanceIdentifier path = query.getSelect();
- return path.isEmpty() ? evalSingle(queryRoot, query)
- : evalPath(new ArrayDeque<>(path.getPathArguments()), queryRoot, query);
+ return path.isEmpty() ? evalSingle(queryRoot, query) : evalPath(queryRoot, query);
}
/**
return evaluateOn(query, evalRoot);
}
- private static DOMQueryResult evalPath(final ArrayDeque<PathArgument> remaining, final NormalizedNode<?, ?> data,
- final DOMQuery query) {
+ private static DOMQueryResult evalSingle(final NormalizedNode<?, ?> data, final DOMQuery query) {
+ return matches(data, query) ? DOMQueryResult.of()
+ : DOMQueryResult.of(new SimpleImmutableEntry<>(query.getRoot(), data));
+ }
+
+ private static DOMQueryResult evalPath(final NormalizedNode<?, ?> queryRoot, final DOMQuery query) {
// FIXME: this is eager evaluation, we should be doing lazy traversal
final List<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> result = new ArrayList<>();
- evalPath(result, new ArrayDeque<>(query.getRoot().getPathArguments()), remaining, data, query);
+ evalPath(result, new ArrayDeque<>(query.getRoot().getPathArguments()),
+ new ArrayDeque<>(query.getSelect().getPathArguments()), queryRoot, query);
return DOMQueryResult.of(result);
}
path.removeLast();
}
- private static DOMQueryResult evalSingle(final NormalizedNode<?, ?> data, final DOMQuery query) {
- return matches(data, query) ? DOMQueryResult.of()
- : DOMQueryResult.of(new SimpleImmutableEntry<>(query.getRoot(), data));
- }
-
private static boolean matches(final NormalizedNode<?, ?> data, final DOMQuery query) {
for (DOMQueryPredicate pred : query.getPredicates()) {
// Okay, now we need to deal with predicates, but do it in a smart fashion, so we do not end up iterating