@Override public Boolean project(Path p, QueryEvaluationContext ctx) { nestedProjector = null; decidingProjector=null; ListIterator<Projector> itemsItr=items.listIterator(items.size()); while (itemsItr.hasPrevious()) { Projector projector = itemsItr.previous(); Boolean projectionResult = projector.project(p, ctx); if (projectionResult != null) { nestedProjector = projector.getNestedProjector(); decidingProjector = projector.getDecidingProjector(); return projectionResult; } } return null; } }
Projector deciding=projector.getDecidingProjector(); ArrayNode newNode = factory.arrayNode(); if (cursor.firstChild()) {
@Override public Boolean project(Path p, QueryEvaluationContext ctx) { decidingProjector=null; lastMatch = false; if (p.matchingPrefix(arrayFieldPattern)) { decidingProjector=this; return include ? Boolean.TRUE : Boolean.FALSE; } // Is this field pointing to an element of the array // It is so if 'p' has one more element than 'arrayFieldPattern', and // if it is a matching descendant if (p.numSegments() == arrayFieldPattern.numSegments() + 1 && p.matchingDescendant(arrayFieldPattern)) { Boolean ret=projectArray(p, ctx); if(ret!=null&&nestedProjector!=null) { decidingProjector=nestedProjector.getDecidingProjector(); } return ret; } return null; }