All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tinkerpop.gremlin.process.util.DefaultTraversal Maven / Gradle / Ivy

package com.tinkerpop.gremlin.process.util;

import com.tinkerpop.gremlin.process.Step;
import com.tinkerpop.gremlin.process.Traversal;
import com.tinkerpop.gremlin.process.Traverser;
import com.tinkerpop.gremlin.process.graph.strategy.AsStrategy;
import com.tinkerpop.gremlin.process.graph.strategy.TraverserSourceStrategy;
import com.tinkerpop.gremlin.structure.Graph;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author Marko A. Rodriguez (http://markorodriguez.com)
 */
public class DefaultTraversal implements Traversal {

    protected final List steps = new ArrayList<>();
    protected final Strategies strategies = new DefaultStrategies(this);
    protected final Memory memory = new DefaultMemory();

    public DefaultTraversal() {
        this.strategies.register(TraverserSourceStrategy.instance());
        this.strategies.register(AsStrategy.instance());
    }

    public DefaultTraversal(final Graph graph) {
        this();
        this.memory().set(Graph.Key.hide("g"), graph);
    }

    public List getSteps() {
        return this.steps;
    }

    public Memory memory() {
        return this.memory;
    }

    public Strategies strategies() {
        return this.strategies;
    }

    public void addStarts(final Iterator> starts) {
        ((Step) this.steps.get(0)).addStarts(starts);
    }

    public > T addStep(final Step step) {
        TraversalHelper.insertStep(step, this.getSteps().size(), this);
        return (T) this;
    }

    public boolean hasNext() {
        this.applyStrategies();
        return this.steps.get(this.steps.size() - 1).hasNext();
    }

    public E next() {
        this.applyStrategies();
        return ((Traverser) this.steps.get(this.steps.size() - 1).next()).get();
    }

    public String toString() {
        return this.getSteps().toString();
    }

    public boolean equals(final Object object) {
        return object instanceof Iterator && TraversalHelper.areEqual(this, (Iterator) object);
    }

    private void applyStrategies() {
        if (!this.strategies.complete()) this.strategies.apply();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy