List<Step> steps = filterTraversal.getSteps(); if (steps.size()==2 && (steps.get(0) instanceof EdgeVertexStep || steps.get(0) instanceof EdgeOtherVertexStep) &&
private static void unfoldLocalTraversal(final Traversal.Admin<?, ?> traversal, LocalStep<?,?> localStep, Traversal.Admin localTraversal, MultiQueriable vstep, boolean useMultiQuery) { assert localTraversal.asAdmin().getSteps().size() > 0; if (localTraversal.asAdmin().getSteps().size() == 1) { //Can replace the entire localStep by the vertex step in the outer traversal assert localTraversal.getStartStep() == vstep; vstep.setTraversal(traversal); TraversalHelper.replaceStep(localStep, vstep, traversal); if (useMultiQuery) { vstep.setUseMultiQuery(true); } } }
List<Step> steps = filterTraversal.getSteps(); if (steps.size() == 2 && (steps.get(0) instanceof EdgeVertexStep || steps.get(0) instanceof EdgeOtherVertexStep) &&
public static boolean hasStepOfClass(final Traversal.Admin<?, ?> traversal, final Class<?>... classesToCheck) { for (final Step<?, ?> step : traversal.getSteps()) { for (final Class<?> classToCheck : classesToCheck) { if (classToCheck.isInstance(step)) return true; } } return false; }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final Step<?, ?> step : traversal.getSteps()) { if (step instanceof MatchStep) { ((MatchStep) step).setMatchAlgorithm(this.matchAlgorithmClass); } } }
private List<String> getStepsAsList(final Traversal.Admin<?, ?> t) { final List<String> steps = new ArrayList<>(); t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString())); return steps; } }
public static void removeAllSteps(final Traversal.Admin<?, ?> traversal) { final int size = traversal.getSteps().size(); for (int i = 0; i < size; i++) { traversal.removeStep(0); } }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final Step step : traversal.getSteps()) { if (step instanceof Mutating) throw new VerificationException("The provided traversal has a mutating step and thus is not read only: " + step, traversal); } }
@Override public int hashCode() { int index = 0; int result = this.getClass().hashCode(); for (final Step step : this.asAdmin().getSteps()) { result ^= Integer.rotateLeft(step.hashCode(), index++); } return result; } }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final Step<?, ?> step : traversal.getSteps()) { if ((step instanceof LambdaHolder || step instanceof ComparatorHolder) && step.toString().contains("lambda")) throw new VerificationException("The provided traversal contains a lambda step: " + step, 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); }
public static <S> Optional<S> getFirstStepOfAssignableClass(final Class<S> stepClass, final Traversal.Admin<?, ?> traversal) { for (final Step step : traversal.getSteps()) { if (stepClass.isAssignableFrom(step.getClass())) return Optional.of((S) step); } return Optional.empty(); }
@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)); } }
private static int getMaxStepRank(final TraversalParent parent, final int startRank) { int maxStepRank = startRank; // no filter steps are global parents (yet) for (final Traversal.Admin<?, ?> traversal : parent.getLocalChildren()) { for (final Step<?, ?> step : traversal.getSteps()) { final int stepRank = getStepRank(step); if (stepRank > maxStepRank) maxStepRank = stepRank; } } return maxStepRank; }
private void addLabels(final Traversal.Admin traversal, final Set<String> keepLabels) { for (final Object s : traversal.getSteps()) { if (s instanceof PathProcessor) addLabels((PathProcessor) s, keepLabels); } }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (traversal.getSteps().size() <= 1) return; for (final IdentityStep<?> identityStep : TraversalHelper.getStepsOfClass(IdentityStep.class, traversal)) { if (identityStep.getLabels().isEmpty() || !(identityStep.getPreviousStep() instanceof EmptyStep)) { TraversalHelper.copyLabels(identityStep, identityStep.getPreviousStep(), false); traversal.removeStep(identityStep); } } }
private List<String> getStepsAsList(final Traversal.Admin<?, ?> t) { final List<String> steps = new ArrayList<>(); t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString())); return steps; } }
private static void unfoldLocalTraversal(final Traversal.Admin<?, ?> traversal, LocalStep<?,?> localStep, Traversal.Admin localTraversal, MultiQueriable vertexStep, boolean useMultiQuery) { assert localTraversal.asAdmin().getSteps().size() > 0; if (localTraversal.asAdmin().getSteps().size() == 1) { //Can replace the entire localStep by the vertex step in the outer traversal assert localTraversal.getStartStep() == vertexStep; vertexStep.setTraversal(traversal); TraversalHelper.replaceStep(localStep, vertexStep, traversal); if (useMultiQuery && !(isChildOf(vertexStep, MULTIQUERY_INCOMPATIBLE_STEPS))) { vertexStep.setUseMultiQuery(true); } } }
private static FulgoraElementTraversal<Vertex,Edge> getReverseTraversal(final MessageScope.Local<?> scope, final JanusGraphTransaction graph, @Nullable final Vertex start) { Traversal.Admin<Vertex,Edge> incident = scope.getIncidentTraversal().get().asAdmin(); FulgoraElementTraversal<Vertex,Edge> result = FulgoraElementTraversal.of(graph); for (Step step : incident.getSteps()) result.addStep(step); Step<Vertex,?> startStep = result.getStartStep(); assert startStep instanceof VertexStep; ((VertexStep) startStep).reverseDirection(); if (start!=null) result.addStep(0, new StartStep<>(incident, start)); result.asAdmin().setStrategies(FULGORA_STRATEGIES); return result; }
private static FulgoraElementTraversal<Vertex,Edge> getReverseTraversal(final MessageScope.Local<?> scope, final TitanTransaction graph, @Nullable final Vertex start) { Traversal.Admin<Vertex,Edge> incident = scope.getIncidentTraversal().get().asAdmin(); FulgoraElementTraversal<Vertex,Edge> result = FulgoraElementTraversal.of(graph); for (Step step : incident.getSteps()) result.addStep(step); Step<Vertex,?> startStep = result.getStartStep(); assert startStep instanceof VertexStep; ((VertexStep) startStep).reverseDirection(); if (start!=null) result.addStep(0, new StartStep<>(incident, start)); result.asAdmin().setStrategies(FULGORA_STRATEGIES); return result; }