@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (traversal.getParent() == EmptyStep.instance()) { final Optional<ProfileSideEffectStep> profileStep = TraversalHelper.getFirstStepOfAssignableClass(ProfileSideEffectStep.class, traversal); final int index = profileStep.map(step -> traversal.getSteps().indexOf(step)) .orElseGet(() -> traversal.getSteps().size()); traversal.addStep(index, new ReferenceElementStep<>(traversal)); } }
/** * Add a {@link Step} to the end of the traversal. This method should link the step to its next and previous step accordingly. * * @param step the step to add * @param <E2> the output of the step * @return the updated traversal * @throws IllegalStateException if the {@link TraversalStrategies} have already been applied */ public default <E2> Traversal.Admin<S, E2> addStep(final Step<?, E2> step) throws IllegalStateException { return this.addStep(this.getSteps().size(), step); }
private static Traversal.Admin<?,?> connectiveTraversal(final Traversal.Admin<?, ?> connectiveTraversal, final ConnectiveStep connectiveStep) { final Traversal.Admin<?, ?> traversal = __.start().asAdmin(); final Set<String> conjunctionLabels = connectiveStep.getLabels(); if (!conjunctionLabels.isEmpty()) { final StartStep<?> startStep = new StartStep<>(connectiveTraversal); conjunctionLabels.forEach(startStep::addLabel); traversal.addStep(startStep); } return traversal; }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep)) return; // remote step wraps the traversal and emits the results from the remote connection. final RemoteStep<?, ?> remoteStep = new RemoteStep<>(traversal, remoteConnection); TraversalHelper.removeAllSteps(traversal); traversal.addStep(remoteStep); // validations assert traversal.getStartStep().equals(remoteStep); assert traversal.getSteps().size() == 1; assert traversal.getEndStep() == remoteStep; } }
/** * Insert a step after a specified step instance. * * @param insertStep the step to insert * @param beforeStep the step to insert the new step after * @param traversal the traversal on which the action should occur */ public static <S, E> void insertAfterStep(final Step<S, E> insertStep, final Step<?, S> beforeStep, final Traversal.Admin<?, ?> traversal) { traversal.addStep(stepIndex(beforeStep, traversal) + 1, insertStep); }
public ChooseStep(final Traversal.Admin traversal, final Traversal.Admin<S, ?> predicateTraversal, final Traversal.Admin<S, E> trueChoice, final Traversal.Admin<S, E> falseChoice) { this(traversal, (Traversal.Admin<S, M>) predicateTraversal.addStep(new HasNextStep<>(predicateTraversal))); this.addGlobalChildOption((M) Boolean.TRUE, trueChoice); this.addGlobalChildOption((M) Boolean.FALSE, falseChoice); }
@Test @LoadGraphWith(MODERN) public void testProfileStrategyCallbackSideEffect() { final Traversal<Vertex, Vertex> t = get_g_V_out_out_profileXmetricsX(); MockStep mockStep = new MockStep(t.asAdmin()); t.asAdmin().addStep(3, mockStep); t.iterate(); assertTrue(mockStep.callbackCalled); if (!onGraphComputer(t.asAdmin())) { final TraversalMetrics traversalMetrics = t.asAdmin().getSideEffects().get(METRICS_KEY); assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue()); } }
@Override public default <E2> GraphTraversal.Admin<S, E2> addStep(final Step<?, E2> step) { return (GraphTraversal.Admin<S, E2>) Traversal.Admin.super.addStep((Step) step); }
@Override public <S2, E2> Traversal.Admin<S2, E2> addStep(final int index, final Step<?, ?> step) throws IllegalStateException { return null == this.bypassTraversal ? (Traversal.Admin<S2, E2>) this : this.bypassTraversal.addStep(index, step); }
@Test @LoadGraphWith(MODERN) public void testProfileStrategyCallback() { final Traversal<Vertex, TraversalMetrics> t = get_g_V_out_out_profile(); MockStep mockStep = new MockStep(t.asAdmin()); t.asAdmin().addStep(3, mockStep); TraversalMetrics traversalMetrics = t.next(); assertTrue(mockStep.callbackCalled); if (!onGraphComputer(t.asAdmin())) { assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue()); } }
/** * Filter all traversers in the traversal. * * @return the updated traversal with respective {@link NoneStep}. */ public default Traversal<S, E> none() { this.asAdmin().getBytecode().addStep(Symbols.none); return this.asAdmin().addStep(new NoneStep<>(this.asAdmin())); }
public static <A, B, C extends Traversal<A, B>> C addUntilToTraversal(final C traversal, final Traversal.Admin<B, ?> untilPredicate) { final Step<?, B> step = traversal.asAdmin().getEndStep(); if (step instanceof RepeatStep && null == ((RepeatStep) step).untilTraversal) { ((RepeatStep<B>) step).setUntilTraversal(untilPredicate); } else { final RepeatStep<B> repeatStep = new RepeatStep<>(traversal.asAdmin()); repeatStep.setUntilTraversal(untilPredicate); traversal.asAdmin().addStep(repeatStep); } return traversal; }
public static <S, E> void removeToTraversal(final Step<S, ?> startStep, final Step<?, E> endStep, final Traversal.Admin<S, E> newTraversal) { final Traversal.Admin<?, ?> originalTraversal = startStep.getTraversal(); Step<?, ?> currentStep = startStep; while (currentStep != endStep && !(currentStep instanceof EmptyStep)) { final Step<?, ?> temp = currentStep.getNextStep(); originalTraversal.removeStep(currentStep); newTraversal.addStep(currentStep); currentStep = temp; } }
/** * Profile the traversal. * * @return the updated traversal with respective {@link ProfileSideEffectStep}. */ public default Traversal<S, TraversalMetrics> profile() { this.asAdmin().getBytecode().addStep(Symbols.profile); return this.asAdmin() .addStep(new ProfileSideEffectStep<>(this.asAdmin(), ProfileSideEffectStep.DEFAULT_METRICS_KEY)) .addStep(new SideEffectCapStep<Object, TraversalMetrics>(this.asAdmin(), ProfileSideEffectStep.DEFAULT_METRICS_KEY)); }
public static <A, B, C extends Traversal<A, B>> C addRepeatToTraversal(final C traversal, final Traversal.Admin<B, B> repeatTraversal) { final Step<?, B> step = traversal.asAdmin().getEndStep(); if (step instanceof RepeatStep && null == ((RepeatStep) step).repeatTraversal) { ((RepeatStep<B>) step).setRepeatTraversal(repeatTraversal); } else { final RepeatStep<B> repeatStep = new RepeatStep<>(traversal.asAdmin()); repeatStep.setRepeatTraversal(repeatTraversal); traversal.asAdmin().addStep(repeatStep); } return traversal; }
/** * Replace a step with a new step. * * @param removeStep the step to remove * @param insertStep the step to insert * @param traversal the traversal on which the action will occur */ public static <S, E> void replaceStep(final Step<S, E> removeStep, final Step<S, E> insertStep, final Traversal.Admin<?, ?> traversal) { final int i; traversal.removeStep(i = stepIndex(removeStep, traversal)); traversal.addStep(i, insertStep); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (traversal.getParent() instanceof EmptyStep && !this.requirements.isEmpty()) traversal.addStep(new RequirementsStep<>(traversal, this.requirements)); }
@SuppressWarnings("unchecked") public void setRepeatTraversal(final Traversal.Admin<S, S> repeatTraversal) { if (null != this.repeatTraversal) throw new IllegalStateException("The repeat()-step already has its loop section declared: " + this); this.repeatTraversal = repeatTraversal; // .clone(); this.repeatTraversal.addStep(new RepeatEndStep(this.repeatTraversal)); this.integrateChild(this.repeatTraversal); }
public static <A, B, C extends Traversal<A, B>> C addEmitToTraversal(final C traversal, final Traversal.Admin<B, ?> emitPredicate) { final Step<?, B> step = traversal.asAdmin().getEndStep(); if (step instanceof RepeatStep && null == ((RepeatStep) step).emitTraversal) { ((RepeatStep<B>) step).setEmitTraversal(emitPredicate); } else { final RepeatStep<B> repeatStep = new RepeatStep<>(traversal.asAdmin()); repeatStep.setEmitTraversal(emitPredicate); traversal.asAdmin().addStep(repeatStep); } return traversal; }
/** * Insert a step before a specified step instance. * * @param insertStep the step to insert * @param afterStep the step to insert the new step before * @param traversal the traversal on which the action should occur */ public static <S, E> void insertBeforeStep(final Step<S, E> insertStep, final Step<E, ?> afterStep, final Traversal.Admin<?, ?> traversal) { traversal.addStep(stepIndex(afterStep, traversal), insertStep); }