com.tinkerpop.pipes.transform.PathPipe Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes Show documentation
Show all versions of pipes Show documentation
Pipes is a dataflow framework written in Java that enables the splitting, merging, filtering, and
transformation of data from input to output.
Computations are expressed using a combinator model and are evaluated in a memory-efficient, lazy fashion.
package com.tinkerpop.pipes.transform;
import com.tinkerpop.pipes.AbstractPipe;
import com.tinkerpop.pipes.Pipe;
import com.tinkerpop.pipes.PipeFunction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
/**
* PathPipe emits the path that the traverser has taken up to this object.
* If provided, the path functions are applied in a round robin fashion.
* As such, the number of functions need not equal the number of objects in the path.
* This pipe requires that path calculations be enabled. As such, when the start is set, enablePath(true) is invoked.
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class PathPipe extends AbstractPipe implements TransformPipe {
private final PipeFunction[] pathFunctions;
public PathPipe(final PipeFunction... pathFunctions) {
if (pathFunctions.length == 0) {
this.pathFunctions = null;
} else {
this.pathFunctions = pathFunctions;
}
}
public void setStarts(final Iterator starts) {
super.setStarts(starts);
this.enablePath(true);
}
public List processNextStart() {
if (this.starts instanceof Pipe) {
this.starts.next();
final List path = ((Pipe) this.starts).getCurrentPath();
if (null == this.pathFunctions) {
return path;
} else {
final List closedPath = new ArrayList();
int nextFunction = 0;
for (final Object object : path) {
closedPath.add(this.pathFunctions[nextFunction].compute(object));
nextFunction = (nextFunction + 1) % this.pathFunctions.length;
}
return closedPath;
}
} else {
throw new NoSuchElementException("The start of this pipe was not a pipe");
}
}
}