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; }
@Override public TraversalParent getParent() { return EmptyStep.instance(); }
@Override public Step<S, ?> getStartStep() { return this.steps.isEmpty() ? EmptyStep.instance() : this.steps.get(0); }
@Override public Step<?, E> getEndStep() { return this.steps.isEmpty() ? EmptyStep.instance() : this.steps.get(this.steps.size() - 1); }
private static Step<?, ?> getFirstLegalOLAPStep(Step<?, ?> currentStep) { while (!(currentStep instanceof EmptyStep)) { if (!(currentStep instanceof VertexComputing)) return currentStep; currentStep = currentStep.getNextStep(); } return EmptyStep.instance(); }
/** * Get the start/head of the traversal. If the traversal is empty, then an {@link EmptyStep} instance is returned. * * @return the start step of the traversal */ public default Step<S, ?> getStartStep() { final List<Step> steps = this.getSteps(); return steps.isEmpty() ? EmptyStep.instance() : steps.get(0); }
/** * Get the end/tail of the traversal. If the traversal is empty, then an {@link EmptyStep} instance is returned. * * @return the end step of the traversal */ public default Step<?, E> getEndStep() { final List<Step> steps = this.getSteps(); return steps.isEmpty() ? EmptyStep.instance() : steps.get(steps.size() - 1); }
@Override public TraversalParent getParent() { return null == this.bypassTraversal ? EmptyStep.instance() : this.bypassTraversal.getParent(); }
@Override public <S2, E2> Traversal.Admin<S2, E2> removeStep(final int index) throws IllegalStateException { if (this.locked) throw Exceptions.traversalIsLocked(); final Step previousStep = this.steps.size() > 0 && index != 0 ? steps.get(index - 1) : null; final Step nextStep = this.steps.size() > index + 1 ? steps.get(index + 1) : null; //this.steps.get(index).setTraversal(EmptyTraversal.instance()); this.steps.remove(index); if (null != previousStep) previousStep.setNextStep(null == nextStep ? EmptyStep.instance() : nextStep); if (null != nextStep) nextStep.setPreviousStep(null == previousStep ? EmptyStep.instance() : previousStep); return (Traversal.Admin<S2, E2>) this; }
@Override @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException") public AbstractStep<S, E> clone() { try { final AbstractStep<S, E> clone = (AbstractStep<S, E>) super.clone(); clone.starts = new ExpandableStepIterator<>(clone); clone.previousStep = EmptyStep.instance(); clone.nextStep = EmptyStep.instance(); clone.nextEnd = null; clone.traversal = EmptyTraversal.instance(); clone.labels = new LinkedHashSet<>(this.labels); clone.reset(); return clone; } catch (final CloneNotSupportedException e) { throw new IllegalStateException(e.getMessage(), e); } }
@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)); } }
@Override public <S2, E2> Traversal.Admin<S2, E2> addStep(final int index, final Step<?, ?> step) throws IllegalStateException { if (this.locked) throw Exceptions.traversalIsLocked(); step.setId(this.stepPosition.nextXId()); this.steps.add(index, step); final Step previousStep = this.steps.size() > 0 && index != 0 ? steps.get(index - 1) : null; final Step nextStep = this.steps.size() > index + 1 ? steps.get(index + 1) : null; step.setPreviousStep(null != previousStep ? previousStep : EmptyStep.instance()); step.setNextStep(null != nextStep ? nextStep : EmptyStep.instance()); if (null != previousStep) previousStep.setNextStep(step); if (null != nextStep) nextStep.setPreviousStep(step); step.setTraversal(this); return (Traversal.Admin<S2, E2>) this; }
private static Step<?, ?> getLastLegalOLAPStep(Step<?, ?> currentStep) { while (currentStep instanceof VertexComputing) currentStep = currentStep.getNextStep(); while (!(currentStep instanceof EmptyStep)) { if (currentStep instanceof VertexComputing) return currentStep.getPreviousStep(); currentStep = currentStep.getNextStep(); } return EmptyStep.instance(); }
@Override public DefaultTraversal<S, E> clone() { try { final DefaultTraversal<S, E> clone = (DefaultTraversal<S, E>) super.clone(); clone.lastTraverser = EmptyTraverser.instance(); clone.steps = new ArrayList<>(); clone.unmodifiableSteps = Collections.unmodifiableList(clone.steps); clone.sideEffects = this.sideEffects.clone(); clone.strategies = this.strategies; clone.bytecode = this.bytecode.clone(); for (final Step<?, ?> step : this.steps) { final Step<?, ?> clonedStep = step.clone(); clonedStep.setTraversal(clone); final Step previousStep = clone.steps.isEmpty() ? EmptyStep.instance() : clone.steps.get(clone.steps.size() - 1); clonedStep.setPreviousStep(previousStep); previousStep.setNextStep(clonedStep); clone.steps.add(clonedStep); } clone.finalEndStep = clone.getEndStep(); return clone; } catch (final CloneNotSupportedException e) { throw new IllegalStateException(e.getMessage(), e); } }
@Override public void setup(final Memory memory) { MemoryTraversalSideEffects.setMemorySideEffects(this.traversal.get(), memory, ProgramPhase.SETUP); final Map<Vertex, Long> map = (Map<Vertex, Long>) this.haltedTraversers.iterator().next().get(); assertEquals(2, map.size()); assertTrue(map.values().contains(3l)); assertTrue(map.values().contains(1l)); final IndexedTraverserSet<Object,Vertex> activeTraversers = new IndexedTraverserSet.VertexIndexedTraverserSet(); map.keySet().forEach(vertex -> activeTraversers.add(this.haltedTraversers.peek().split(vertex, EmptyStep.instance()))); this.haltedTraversers.clear(); this.checkSideEffects(); memory.set(TraversalVertexProgram.ACTIVE_TRAVERSERS, activeTraversers); }
public static <S, E> Step<?, E> insertTraversal(final int insertIndex, final Traversal.Admin<S, E> insertTraversal, final Traversal.Admin<?, ?> traversal) { if (0 == traversal.getSteps().size()) { Step currentStep = EmptyStep.instance(); for (final Step insertStep : insertTraversal.getSteps()) { currentStep = insertStep; traversal.addStep(insertStep); } return currentStep; } else { Step currentStep = traversal.getSteps().get(insertIndex); for (final Step insertStep : insertTraversal.getSteps()) { TraversalHelper.insertAfterStep(insertStep, currentStep, traversal); currentStep = insertStep; } return currentStep; } }
@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); } }
traversal.setSideEffects(translatedTraversal.getSideEffects()); TraversalHelper.removeAllSteps(traversal); TraversalHelper.removeToTraversal((Step) translatedTraversal.getStartStep(), EmptyStep.instance(), traversal);
computerTraversal.getStartStep().getNextStep() : (Step) computerTraversal.getStartStep(), null == barrier ? EmptyStep.instance() : barrier, newChildTraversal); newChildTraversal = newChildTraversal.getSteps().size() > 1 ? (Traversal.Admin) __.local(newChildTraversal) : newChildTraversal;