package com.tinkerpop.pipes.transform; import com.tinkerpop.pipes.Pipe; import com.tinkerpop.pipes.util.AbstractMetaPipe; import com.tinkerpop.pipes.util.MetaPipe; import com.tinkerpop.pipes.util.PipeHelper; import com.tinkerpop.pipes.util.iterators.SingleExpandableIterator; import java.util.Arrays; import java.util.List; /** * @author Marko A. Rodriguez (http://markorodriguez.com) * @author Darrick Wiebe (http://ofallpossibleworlds.wordpress.com) */ public class HasNextPipe<S> extends AbstractMetaPipe<S, Boolean> implements MetaPipe, TransformPipe<S, Boolean> { private Pipe<S, ?> pipe; private final SingleExpandableIterator<S> expando = new SingleExpandableIterator<S>(); /** * Initialize this pipe to apply its conditions to the given pipe. * Each object in the source pipe is fed into the given pipe individually. * * @param pipe The pipe to determine if objects exist after input processed */ public HasNextPipe(final Pipe<S, ?> pipe) { this.pipe = pipe; this.pipe.setStarts(this.expando); } public Boolean processNextStart() { final S s = this.starts.next(); this.pipe.reset(); this.expando.add(s); return this.pipe.hasNext(); } public List<Pipe> getPipes() { return (List) Arrays.asList(this.pipe); } public String toString() { return PipeHelper.makePipeString(this, this.pipe); } }