private Predicates getPredicates(Step step, Traversal.Admin traversal) {
    Predicates predicates = new Predicates();
    Step<?, ?> nextStep = step.getNextStep();

    while (true) {
      if (nextStep instanceof HasContainerHolder) {
        HasContainerHolder hasContainerHolder = (HasContainerHolder) nextStep;
        boolean skip = false;
        for (HasContainer has : hasContainerHolder.getHasContainers())
          if (has.getPredicate().getTraversals().size() > 0) skip = true;

        if (!skip) {
          hasContainerHolder.getHasContainers().forEach((has) -> predicates.hasContainers.add(has));
          nextStep.getLabels().forEach(label -> predicates.labels.add(label.toString()));
          traversal.removeStep(nextStep);
        }
      } else if (nextStep instanceof RangeGlobalStep) {
        RangeGlobalStep rangeGlobalStep = (RangeGlobalStep) nextStep;
        predicates.limitLow = rangeGlobalStep.getLowRange();
        predicates.limitHigh = rangeGlobalStep.getHighRange();
        traversal.removeStep(nextStep);
      } else return predicates;

      nextStep = nextStep.getNextStep();
    }
  }
 /**
  * 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) {
   traversal.addStep(stepIndex(removeStep, traversal), insertStep);
   traversal.removeStep(removeStep);
 }
 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;
   }
 }