private static boolean isChildOf(Step<?, ?> currentStep, List<Class<? extends Step>> stepClasses) { Step<?, ?> parent = currentStep.getTraversal().getParent().asStep(); while (!parent.equals(EmptyStep.instance())) { final Step<?, ?> p = parent; if(stepClasses.stream().filter(stepClass -> stepClass.isInstance(p)).findFirst().isPresent()) { return true; } parent = parent.getTraversal().getParent().asStep(); } return false; }
public O_OB_S_SE_SL_Traverser(final T t, final Step<T, ?> step) { super(t); this.sideEffects = step.getTraversal().getSideEffects(); if (null != this.sideEffects.getSackInitialValue()) this.sack = this.sideEffects.getSackInitialValue().get(); }
public B_O_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final long initialBulk) { super(t, initialBulk); this.sideEffects = step.getTraversal().getSideEffects(); if (null != this.sideEffects.getSackInitialValue()) this.sack = this.sideEffects.getSackInitialValue().get(); }
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; } }
public static Traversal.Admin<?, ?> getRootTraversal(Traversal.Admin<?, ?> traversal) { while (!((traversal.getParent()) instanceof EmptyStep)) { traversal = traversal.getParent().asStep().getTraversal(); } return traversal; }
public default <S, E> Traversal.Admin<S, E> integrateChild(final Traversal.Admin<?, ?> childTraversal) { if (null == childTraversal) return null; childTraversal.setParent(this); childTraversal.getSideEffects().mergeInto(this.asStep().getTraversal().getSideEffects()); childTraversal.setSideEffects(this.asStep().getTraversal().getSideEffects()); return (Traversal.Admin<S, E>) childTraversal; }
public static boolean isGlobalChild(Traversal.Admin<?, ?> traversal) { while (!(traversal.getParent() instanceof EmptyStep)) { if (traversal.getParent().getLocalChildren().contains(traversal)) return false; traversal = traversal.getParent().asStep().getTraversal(); } return true; }
public static boolean onGraphComputer(Traversal.Admin<?, ?> traversal) { while (!(traversal.getParent() instanceof EmptyStep)) { if (traversal.getParent() instanceof TraversalVertexProgramStep) return true; traversal = traversal.getParent().asStep().getTraversal(); } return false; }
private boolean doStrategy(final Step step) { if (!(step instanceof CountGlobalStep) || !(step.getNextStep() instanceof IsStep) || step.getPreviousStep() instanceof RangeGlobalStep) // if a RangeStep was provided, assume that the user knows what he's doing return false; final Step parent = step.getTraversal().getParent().asStep(); return (parent instanceof FilterStep || parent.getLabels().isEmpty()) && // if the parent is labeled, then the count matters !(parent.getNextStep() instanceof MatchStep.MatchEndStep && // if this is in a pattern match, then don't do it. ((MatchStep.MatchEndStep) parent.getNextStep()).getMatchKey().isPresent()); } }
/** * Checks whether a given step is optimizable or not. * * @param step the step to check * @return <code>true</code> if the step is optimizable, otherwise <code>false</code> */ private static boolean isOptimizable(final Step step) { return ((step instanceof VertexStep && ((VertexStep) step).returnsVertex()) || (step instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) step).getReturnType()))) && (step.getTraversal().getEndStep().getLabels().isEmpty() || step.getNextStep() instanceof CountGlobalStep); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { final List<Step> steps = traversal.getSteps(); final int size = steps.size() - 1; Step prev = null; for (int i = 0; i <= size; i++) { final Step curr = steps.get(i); if (i == size && isOptimizable(curr)) { final TraversalParent parent = curr.getTraversal().getParent(); if (parent instanceof NotStep || parent instanceof TraversalFilterStep || parent instanceof WhereTraversalStep || parent instanceof ConnectiveStep) { optimizeStep(traversal, curr); } } else if (isOptimizable(prev)) { if (curr instanceof CountGlobalStep) { optimizeStep(traversal, prev); } } if (!(curr instanceof RangeGlobalStep)) { prev = curr; } } }
@Override protected E supply() { if (null == this.sideEffectCapableSteps) { this.sideEffectCapableSteps = new HashMap<>(); Traversal.Admin<?, ?> parentTraversal = this.getTraversal(); while (!(parentTraversal instanceof EmptyTraversal)) { for (final SideEffectCapable<Object, E> capableStep : TraversalHelper.getStepsOfAssignableClassRecursively(SideEffectCapable.class, parentTraversal)) { if (this.sideEffectKeys.contains(capableStep.getSideEffectKey()) && !this.sideEffectCapableSteps.containsKey(capableStep.getSideEffectKey())) this.sideEffectCapableSteps.put(capableStep.getSideEffectKey(), capableStep); } if (this.sideEffectKeys.size() == this.sideEffectCapableSteps.size()) break; parentTraversal = parentTraversal.getParent().asStep().getTraversal(); } } //////////// if (this.sideEffectKeys.size() == 1) { final String sideEffectKey = this.sideEffectKeys.get(0); final E result = this.getTraversal().getSideEffects().<E>get(sideEffectKey); final SideEffectCapable<Object, E> sideEffectCapable = this.sideEffectCapableSteps.get(sideEffectKey); final E finalResult = null == sideEffectCapable ? result : sideEffectCapable.generateFinalResult(result); this.getTraversal().getSideEffects().set(sideEffectKey, finalResult); return finalResult; } else return (E) this.getMapOfSideEffects(); }
current = parent.asStep().getTraversal();
if (currentStep.getTraversal().getParent() instanceof MatchStep) { pathProcessor.setKeepLabels(((MatchStep) currentStep.getTraversal().getParent().asStep()).getMatchStartLabels()); pathProcessor.getKeepLabels().addAll(((MatchStep) currentStep.getTraversal().getParent().asStep()).getMatchEndLabels()); !(currentStep instanceof Barrier) && !(currentStep.getNextStep() instanceof Barrier) && !(currentStep.getTraversal().getParent() instanceof MatchStep) && !(currentStep.getNextStep() instanceof NoneStep) && !(currentStep.getNextStep() instanceof EmptyStep)) parentKeepLabels.addAll(PathUtil.getReferencedLabelsAfterStep(parent)); parentKeeperPairs.add(new Pair<>(parent, parentKeepLabels)); parent = parent.getTraversal().getParent().asStep();
if ((p = traversal.getParent()) instanceof FilterStep && !(p instanceof ConnectiveStep)) { final Step<?, ?> filterStep = parent.asStep(); final Traversal.Admin parentTraversal = filterStep.getTraversal(); final Step notStep = new NotStep<>(parentTraversal, traversal.getSteps().isEmpty() ? __.identity() : traversal); final Step parentStep = traversal.getParent().asStep(); if (!(parentStep instanceof EmptyStep)) { final Traversal.Admin parentTraversal = parentStep.getTraversal();
step.removeLabel(label); if (step instanceof ReducingBarrierStep && step.getTraversal().getParent() instanceof RepeatStep && step.getTraversal().getParent().getGlobalChildren().get(0).getSteps().contains(step)) throw new VerificationException("The parent of a reducing barrier can not be repeat()-step: " + step, 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; } }
public static Traversal.Admin<?, ?> getRootTraversal(Traversal.Admin<?, ?> traversal) { while (!((traversal.getParent()) instanceof EmptyStep)) { traversal = traversal.getParent().asStep().getTraversal(); } return traversal; }
public static boolean isGlobalChild(Traversal.Admin<?, ?> traversal) { while (!(traversal.getParent() instanceof EmptyStep)) { if (traversal.getParent().getLocalChildren().contains(traversal)) return false; traversal = traversal.getParent().asStep().getTraversal(); } return true; }
public default <S, E> Traversal.Admin<S, E> integrateChild(final Traversal.Admin<?, ?> childTraversal) { if (null == childTraversal) return null; childTraversal.setParent(this); childTraversal.getSideEffects().mergeInto(this.asStep().getTraversal().getSideEffects()); childTraversal.setSideEffects(this.asStep().getTraversal().getSideEffects()); return (Traversal.Admin<S, E>) childTraversal; }