package com.tinkerpop.pipes.transform;
import com.tinkerpop.pipes.AbstractPipe;
import com.tinkerpop.pipes.util.PipeHelper;
import java.util.Iterator;
import java.util.Map;
/**
* ScatterPipe will unroll any iterator/iterable/map that is provided to it.
* This will only occur for one level deep. In other words, it will not unroll an iterator within an iterator.
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class ScatterPipe<S, E> extends AbstractPipe<S, E> implements TransformPipe<S, E> {
private Iterator<E> tempIterator = PipeHelper.emptyIterator();
public E processNextStart() {
while (true) {
if (this.tempIterator.hasNext()) {
return this.tempIterator.next();
} else {
final Object object = this.starts.next();
if (object instanceof Iterator)
this.tempIterator = (Iterator<E>) object;
else if (object instanceof Iterable)
this.tempIterator = ((Iterable<E>) object).iterator();
else if (object instanceof Map)
this.tempIterator = (Iterator<E>) ((Map) object).entrySet().iterator();
else
return (E) object;
}
}
}
public void reset() {
this.tempIterator = PipeHelper.emptyIterator();
super.reset();
}
}