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

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

package com.tinkerpop.gremlin.process.util;

import com.tinkerpop.gremlin.process.Traversal;
import com.tinkerpop.gremlin.process.TraversalStrategy;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

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

    private final List traversalStrategies = new ArrayList<>();
    private final Traversal traversal;
    private boolean complete = false;

    public DefaultStrategies(final Traversal traversal) {
        this.traversal = traversal;
    }

    public void register(final TraversalStrategy traversalStrategy) {
        this.traversalStrategies.add(traversalStrategy);
        // TODO: make this a LinkedHashSet so repeats are not allowed? Or check for repeats first?
    }

    public void unregister(final Class optimizerClass) {
        this.traversalStrategies.stream().filter(c -> optimizerClass.isAssignableFrom(c.getClass()))
                .collect(Collectors.toList())
                .forEach(this.traversalStrategies::remove);
    }

    public void apply() {
        if (!this.complete) {
            this.complete = true;
            Collections.sort(this.traversalStrategies);
            this.traversalStrategies.forEach(ts -> ts.apply(this.traversal));
        }
    }

    public void clear() {
        this.traversalStrategies.clear();
    }

    public boolean complete() {
        return this.complete;
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy