![JAR search and dependency download from the Maven repository](/logo.png)
org.unipop.process.coalesce.UniGraphCoalesceStep Maven / Gradle / Ivy
package org.unipop.process.coalesce;
import com.google.common.collect.Lists;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalSideEffects;
import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
import org.unipop.process.UniBulkStep;
import org.unipop.process.traverser.UniGraphTraverserStep;
import org.unipop.structure.UniGraph;
import java.util.*;
import java.util.function.BinaryOperator;
/**
* Created by sbarzilay on 3/15/16.
*/
public class UniGraphCoalesceStep extends UniBulkStep implements TraversalParent {
private final List> coalesceTraversals;
private Iterator> results = EmptyIterator.instance();
@Override
public Set getSelfAndChildRequirements(TraverserRequirement... selfRequirements) {
return new HashSet() {{
add(TraverserRequirement.SIDE_EFFECTS);
}};
}
@Override
public List> getGlobalChildren() {
return coalesceTraversals;
}
public UniGraphCoalesceStep(Traversal.Admin traversal, UniGraph graph, List> coalesceTraversals) {
super(traversal, graph);
this.coalesceTraversals = coalesceTraversals;
this.coalesceTraversals.forEach(t -> t.addStep(new UniGraphTraverserStep<>(t.asAdmin())));
this.coalesceTraversals.forEach(this::integrateChild);
}
@Override
protected Iterator> process(List> traversers) {
List> coalesce = new ArrayList<>();
List> traversersList = Lists.newArrayList(traversers);
traversersList.forEach(t -> {
t.setSideEffects(new DefaultTraversalSideEffects() {{
register(t.toString(), () -> t, BinaryOperator.maxBy((o1, o2) -> 1));
set(t.toString(), t);
}});
});
coalesceTraversals.forEach(t -> {
traversersList.forEach(t::addStart);
while (t.hasNext()) {
Traverser item = (Traverser) t.next();
((B_O_S_SE_SL_Traverser) item).getSideEffects().forEach((key, value) -> {
if (value != null && value instanceof Traverser)
traversersList.remove(value);
});
coalesce.add((item.asAdmin()));
}
});
return coalesce.iterator();
}
@Override
public Set getRequirements() {
return this.getSelfAndChildRequirements();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy