@Override public Map<K, V> projectTraverser(final Traverser.Admin<S> traverser) { final Map<K, V> map = new HashMap<>(1); this.valueTraversal.reset(); this.valueTraversal.addStart(traverser); if (null == this.barrierStep) { if (this.valueTraversal.hasNext()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.valueTraversal.next()); } else if (this.barrierStep.hasNextBarrier()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.barrierStep.nextBarrier()); return map; }
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final Map<K, V> map = new HashMap<>(1); this.valueTraversal.reset(); this.valueTraversal.addStart(traverser); if (null == this.barrierStep) { if (this.valueTraversal.hasNext()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.valueTraversal.next()); } else if (this.barrierStep.hasNextBarrier()) map.put(TraversalUtil.applyNullable(traverser, this.keyTraversal), (V) this.barrierStep.nextBarrier()); if (!map.isEmpty()) this.getTraversal().getSideEffects().add(this.sideEffectKey, map); }
@Override public Object submit(final List<String> args) throws RemoteException { try { String script = getScript(String.join(SPACE, args), this.shellEnvironment); if (this.useSugar) script = SugarLoader.class.getCanonicalName() + ".load()\n" + script; final TraversalVertexProgram program = TraversalVertexProgram.build().traversal(this.traversalSource, "gremlin-groovy", script).create(this.hadoopGraph); final ComputerResult computerResult = VertexProgramStrategy.getComputer(this.traversalSource.getStrategies()).get().apply(this.hadoopGraph).program(program).submit().get(); this.shellEnvironment.setVariable(RESULT, computerResult); /// final Traversal.Admin<ComputerResult, ?> traversal = new DefaultTraversal<>(computerResult.graph()); traversal.addStep(new ComputerResultStep<>(traversal)); traversal.addStart(traversal.getTraverserGenerator().generate(computerResult, EmptyStep.instance(), 1l)); return traversal; } catch (final Exception e) { throw new RemoteException(e); } }
@Override protected Traverser.Admin<E> processNextStart() throws NoSuchElementException { if (this.first) { this.first = false; this.localTraversal.addStart(this.starts.next()); } while (true) { if (this.localTraversal.hasNext()) return this.localTraversal.nextTraverser(); else if (this.starts.hasNext()) { this.localTraversal.reset(); this.localTraversal.addStart(this.starts.next()); } else { throw FastNoSuchElementException.instance(); } } }
public static final <S, E> boolean test(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal, E end) { if (null == end) return TraversalUtil.test(traverser, traversal); final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); final Step<?, E> endStep = traversal.getEndStep(); while (traversal.hasNext()) { if (endStep.next().get().equals(end)) return true; } return false; }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { if (this.optionalTraversal.hasNext()) return this.optionalTraversal.nextTraverser(); else { final Traverser.Admin<S> traverser = this.starts.next(); this.optionalTraversal.addStart(traverser.split()); if (this.optionalTraversal.hasNext()) return this.optionalTraversal.nextTraverser(); else return traverser; } }
private static <T extends Traversal.Admin<Vertex, Edge>> T setVertexStart(final Traversal.Admin<Vertex, Edge> incidentTraversal, final Vertex vertex) { incidentTraversal.addStart(incidentTraversal.getTraverserGenerator().generate(vertex,incidentTraversal.getStartStep(),1l)); return (T) incidentTraversal; }
private static <T extends Traversal.Admin<Vertex, Edge>> T setVertexStart(final Traversal.Admin<Vertex, Edge> incidentTraversal, final Vertex vertex) { incidentTraversal.asAdmin().addStart(incidentTraversal.getTraverserGenerator().generate(vertex, incidentTraversal.asAdmin().getStartStep(), 1l)); return (T) incidentTraversal; }
private boolean isEndVertex(final Vertex vertex) { final Traversal.Admin<Vertex, ?> filterTraversal = this.targetVertexFilterTraversal.getPure(); //noinspection unchecked final Step<Vertex, Vertex> startStep = (Step<Vertex, Vertex>) filterTraversal.getStartStep(); filterTraversal.addStart(filterTraversal.getTraverserGenerator().generate(vertex, startStep, 1)); return filterTraversal.hasNext(); }
public static final <S, E> Iterator<E> applyAll(final S start, final Traversal.Admin<S, E> traversal) { traversal.reset(); traversal.addStart(traversal.getTraverserGenerator().generate(start, traversal.getStartStep(), 1l)); return traversal; // flatMap }
public static final <S, E> E apply(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); try { return traversal.next(); // map } catch (final NoSuchElementException e) { throw new IllegalArgumentException("The provided traverser does not map to a value: " + split + "->" + traversal); } }
@Override public void addStart(final Traverser.Admin<S> start) { if (null != this.bypassTraversal) this.bypassTraversal.addStart(start); }
public static final <S, E> boolean test(final S start, final Traversal.Admin<S, E> traversal, final E end) { if (null == end) return TraversalUtil.test(start, traversal); traversal.reset(); traversal.addStart(traversal.getTraverserGenerator().generate(start, traversal.getStartStep(), 1l)); final Step<?, E> endStep = traversal.getEndStep(); while (traversal.hasNext()) { if (endStep.next().get().equals(end)) return true; } return false; }
private boolean isStartVertex(final Vertex vertex) { // use the sourceVertexFilterTraversal if the VP is running in standalone mode (not part of a traversal) if (this.standalone) { final Traversal.Admin<Vertex, ?> filterTraversal = this.sourceVertexFilterTraversal.getPure(); filterTraversal.addStart(filterTraversal.getTraverserGenerator().generate(vertex, filterTraversal.getStartStep(), 1)); return filterTraversal.hasNext(); } // ...otherwise use halted traversers to determine whether this is a start vertex return vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS).isPresent(); }
public static final <S, E> Iterator<E> applyAll(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); return traversal; // flatmap }
private Number getDistance(final Edge edge) { if (this.distanceEqualsNumberOfHops) return 1; final Traversal.Admin<Edge, Number> traversal = this.distanceTraversal.getPure(); traversal.addStart(traversal.getTraverserGenerator().generate(edge, traversal.getStartStep(), 1)); return traversal.tryNext().orElse(0); }
public static final <S, E> boolean test(final S start, final Traversal.Admin<S, E> traversal) { traversal.reset(); traversal.addStart(traversal.getTraverserGenerator().generate(start, traversal.getStartStep(), 1l)); return traversal.hasNext(); // filter } }
public static final <S, E> E apply(final S start, final Traversal.Admin<S, E> traversal) { traversal.reset(); traversal.addStart(traversal.getTraverserGenerator().generate(start, traversal.getStartStep(), 1l)); try { return traversal.next(); // map } catch (final NoSuchElementException e) { throw new IllegalArgumentException("The provided start does not map to a value: " + start + "->" + traversal); } }
public static final <S, E> boolean test(final Traverser.Admin<S> traverser, final Traversal.Admin<S, E> traversal) { final Traverser.Admin<S> split = traverser.split(); split.setSideEffects(traversal.getSideEffects()); split.setBulk(1l); traversal.reset(); traversal.addStart(split); return traversal.hasNext(); // filter }
@Override protected Iterator<E> flatMap(final Traverser.Admin<S> traverser) { final Traverser.Admin<S> innerTraverser = traverser.clone().asAdmin(); innerTraverser.setBulk(1L); for (final Traversal.Admin<S, E> coalesceTraversal : this.coalesceTraversals) { coalesceTraversal.reset(); coalesceTraversal.addStart(innerTraverser.split()); if (coalesceTraversal.hasNext()) return coalesceTraversal; } return EmptyIterator.instance(); }