package net.ion.craken.node.crud.util; import java.util.Iterator; import java.util.List; import java.util.Set; import net.ion.craken.node.IteratorList; import net.ion.craken.node.ReadNode; import net.ion.craken.node.convert.Functions; import net.ion.craken.node.crud.ReadChildrenEach; import net.ion.craken.node.crud.ReadChildrenIterator; import net.ion.craken.node.crud.tree.impl.PropertyValue; import net.ion.framework.util.ListUtil; import net.ion.framework.util.SetUtil; public class ReadChildrenEachs { public static final ReadChildrenEach<List<ReadNode>> LIST = new ReadChildrenEach<List<ReadNode>>() { @Override public List<ReadNode> handle(ReadChildrenIterator citer) { List<ReadNode> result = ListUtil.newList() ; while(citer.hasNext()){ result.add(citer.next()) ; } return result; } }; public static final ReadChildrenEach<Void> DEBUG = new ReadChildrenEach<Void>(){ @Override public Void handle(ReadChildrenIterator citer) { while(citer.hasNext()){ ReadNode next = citer.next(); citer.session().credential().tracer().println(next.fqn() + "," + next.transformer(Functions.READ_TOFLATMAP)) ; } return null; } }; public static final ReadChildrenEach<Set<String>> CHILDREN_NAME = new ReadChildrenEach<Set<String>>(){ @Override public Set<String> handle(ReadChildrenIterator citer) { Set result = SetUtil.newSet() ; while(citer.hasNext()){ result.add(citer.next().fqn().name()) ; } return result; } }; public static final ReadChildrenEach<Integer> COUNT = new ReadChildrenEach<Integer>(){ @Override public Integer handle(ReadChildrenIterator citer) { return citer.count(); } }; public static final ReadChildrenEach<ReadNode> FIRSTNODE = new ReadChildrenEach<ReadNode>() { @Override public ReadNode handle(ReadChildrenIterator citer) { return citer.hasNext() ? citer.next() : null; } }; public static ReadChildrenEach<IteratorList<ReadNode>> ITERATOR = new ReadChildrenEach<IteratorList<ReadNode>>() { @Override public IteratorList<ReadNode> handle(final ReadChildrenIterator citer) { return new IteratorList<ReadNode>() { @Override public Iterator<ReadNode> iterator() { return citer; } @Override public ReadNode next() { return citer.next(); } @Override public boolean hasNext() { return citer.hasNext(); } @Override public List<ReadNode> toList() { return citer.list() ; } public int count(){ return citer.count() ; } }; } }; }