@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 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; }
@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 <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 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; }
@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); } }