diff --git a/magnolia-core/src/main/java/info/magnolia/jcr/util/NodeUtil.java b/magnolia-core/src/main/java/info/magnolia/jcr/util/NodeUtil.java
index 2565216..7235fd3 100644
--- a/magnolia-core/src/main/java/info/magnolia/jcr/util/NodeUtil.java
+++ b/magnolia-core/src/main/java/info/magnolia/jcr/util/NodeUtil.java
@@ -48,6 +48,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.NoSuchElementException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
@@ -57,10 +58,13 @@ import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.query.Row;
+import javax.jcr.query.RowIterator;
import org.apache.commons.lang.StringUtils;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.commons.iterator.FilteringNodeIterator;
+import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
import org.apache.jackrabbit.commons.predicate.NodeTypePredicate;
import org.apache.jackrabbit.commons.predicate.Predicate;
import org.slf4j.Logger;
@@ -760,6 +764,30 @@ public class NodeUtil {
};
}
+ /**
+ * Filters rows of result set from query by provided selector and returns such nodes in the NodeIterator. Example of such query would be
+ * SELECT page.* FROM [mgnl:page] AS page WHERE page.title like 'something%'. Selector in this query is page
+ *
+ * @param iterator RowIterator from the result set of executed query
+ * @param selector Selector used in the query to identify nodes
+ * @return NodeIterator containing only nodes identified by the selector
+ */
+ public static NodeIterator filterParentNodeType(RowIterator iterator, final String selector) throws RepositoryException {
+ return new NodeIteratorAdapter(iterator) {
+ @Override
+ public Node nextNode() throws NoSuchElementException {
+ Row row = (Row) next();
+ try {
+ return row.getNode(selector);
+ } catch (RepositoryException e) {
+ // no way to pass a root cause to NSEE
+ log.debug(e.getMessage(), e);
+ throw new NoSuchElementException(e.getMessage());
+ }
+ }
+ };
+ }
+
public static Collection getCollectionFromNodeIterator(NodeIterator iterator){
Collection nodeCollection = new LinkedHashSet(150);
while(iterator.hasNext()){