You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/02/12 14:02:12 UTC

[46/77] [partial] incubator-tinkerpop git commit: moved com/tinkerpop directories to org/apache/tinkerpop

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Step.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Step.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Step.java
deleted file mode 100644
index b197790..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Step.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import com.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Optional;
-import java.util.Set;
-
-/**
- * A {@link Step} denotes a unit of computation within a {@link Traversal}.
- * A step takes an incoming object and yields an outgoing object.
- * Steps are chained together in a {@link Traversal} to yield a lazy function chain of computation.
- * <p/>
- * In the constructor of a Step, never store explicit sideEffect objects in {@link TraversalSideEffects}.
- * If a sideEffect needs to be registered with the {@link Traversal}, use SideEffects.registerSupplier().
- *
- * @param <S> The incoming object type of the step
- * @param <E> The outgoing object type of the step
- */
-public interface Step<S, E> extends Iterator<Traverser<E>>, Serializable, Cloneable {
-
-    /**
-     * Add a iterator of {@link Traverser} objects of type S to the step.
-     *
-     * @param starts The iterator of objects to add
-     */
-    public void addStarts(final Iterator<Traverser<S>> starts);
-
-    /**
-     * Add a single {@link Traverser} to the step.
-     *
-     * @param start The traverser to add
-     */
-    public void addStart(final Traverser<S> start);
-
-    /**
-     * Set the step that is previous to the current step.
-     * Used for linking steps together to form a function chain.
-     *
-     * @param step the previous step of this step
-     */
-    public void setPreviousStep(final Step<?, S> step);
-
-    /**
-     * Get the step prior to the current step.
-     *
-     * @return The previous step
-     */
-    public Step<?, S> getPreviousStep();
-
-    /**
-     * Set the step that is next to the current step.
-     * Used for linking steps together to form a function chain.
-     *
-     * @param step the next step of this step
-     */
-    public void setNextStep(final Step<E, ?> step);
-
-    /**
-     * Get the next step to the current step.
-     *
-     * @return The next step
-     */
-    public Step<E, ?> getNextStep();
-
-    /**
-     * Get the {@link Traversal.Admin} that this step is contained within.
-     *
-     * @param <A> The incoming object type of the traversal
-     * @param <B> The outgoing object type of the traversal
-     * @return The traversal of this step
-     */
-    public <A, B> Traversal.Admin<A, B> getTraversal();
-
-    /**
-     * Set the {@link Traversal} that this step is contained within.
-     *
-     * @param traversal the new traversal for this step
-     */
-    public void setTraversal(final Traversal.Admin<?, ?> traversal);
-
-    /**
-     * Reset the state of the step such that it has no incoming starts.
-     * Internal states are to be reset, but any sideEffect data structures are not to be recreated.
-     */
-    public void reset();
-
-    /**
-     * Cloning is used to duplicate steps for the purpose of traversal optimization and OLTP replication.
-     * When cloning a step, it is important that the steps, the cloned step is equivalent to the state of the step when reset() is called.
-     * Moreover, the previous and next steps should be set to {@link com.tinkerpop.gremlin.process.traversal.step.EmptyStep}.
-     *
-     * @return The cloned step
-     * @throws CloneNotSupportedException
-     */
-    public Step<S, E> clone() throws CloneNotSupportedException;
-
-    /**
-     * Get the label of this step.
-     * If the step is  not labeled, then an {@link Optional#empty} is returned.
-     *
-     * @return the optional label of the step
-     */
-    public Optional<String> getLabel();
-
-    /**
-     * Set the label of this step.
-     *
-     * @param label the label for this step
-     */
-    public void setLabel(final String label);
-
-    /**
-     * Get the unique id of the step.
-     * These ids can change when strategies are applied and anonymous traversals are embedded in the parent traversal.
-     * A developer should typically not need to call this method.
-     *
-     * @param id the unique id of the step
-     */
-    public void setId(final String id);
-
-    /**
-     * Get the unique id of this step.
-     *
-     * @return the unique id of the step
-     */
-    public String getId();
-
-    /**
-     * Provide the necessary {@link com.tinkerpop.gremlin.process.traverser.TraverserRequirement} that must be met by the traverser in order for the step to function properly.
-     * The provided default implements returns an empty set.
-     *
-     * @return the set of requirements
-     */
-    public default Set<TraverserRequirement> getRequirements() {
-        return Collections.emptySet();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/T.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/T.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/T.java
deleted file mode 100644
index 9039300..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/T.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import com.tinkerpop.gremlin.structure.Element;
-import com.tinkerpop.gremlin.structure.Graph;
-import com.tinkerpop.gremlin.structure.VertexProperty;
-
-import java.util.function.Function;
-
-/**
- * A collection of (T)okens which allows for more concise Traversal definitions.
- * T implements {@link Function} can be used to map an element to its token value.
- * For example, <code>T.id.apply(element)</code>.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public enum T implements Function<Element, Object> {
-    /**
-     * Label (representing Element.label())
-     */
-    label {
-        @Override
-        public String getAccessor() {
-            return LABEL;
-        }
-
-        @Override
-        public String apply(final Element element) {
-            return element.label();
-        }
-    },
-    /**
-     * Id (representing Element.id())
-     */
-    id {
-        @Override
-        public String getAccessor() {
-            return ID;
-        }
-
-        @Override
-        public Object apply(final Element element) {
-            return element.id();
-        }
-    },
-    /**
-     * Key (representing Property.key())
-     */
-    key {
-        @Override
-        public String getAccessor() {
-            return KEY;
-        }
-
-        @Override
-        public String apply(final Element element) {
-            return ((VertexProperty) element).key();
-        }
-    },
-    /**
-     * Value (representing Property.value())
-     */
-    value {
-        @Override
-        public String getAccessor() {
-            return VALUE;
-        }
-
-        @Override
-        public Object apply(final Element element) {
-            return ((VertexProperty) element).value();
-        }
-    };
-
-    private static final String LABEL = Graph.Hidden.hide("label");
-    private static final String ID = Graph.Hidden.hide("id");
-    private static final String KEY = Graph.Hidden.hide("key");
-    private static final String VALUE = Graph.Hidden.hide("value");
-
-    public abstract String getAccessor();
-
-    @Override
-    public abstract Object apply(final Element element);
-
-    public static T fromString(final String accessor) {
-        if (accessor.equals(LABEL))
-            return label;
-        else if (accessor.equals(ID))
-            return id;
-        else if (accessor.equals(KEY))
-            return key;
-        else if (accessor.equals(VALUE))
-            return value;
-        else
-            throw new IllegalArgumentException("The following token string is unknown: " + accessor);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traversal.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traversal.java
deleted file mode 100644
index 870c155..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traversal.java
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import com.tinkerpop.gremlin.process.computer.ComputerResult;
-import com.tinkerpop.gremlin.process.computer.GraphComputer;
-import com.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
-import com.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
-import com.tinkerpop.gremlin.process.graph.traversal.GraphTraversal;
-import com.tinkerpop.gremlin.process.traversal.DefaultTraversal;
-import com.tinkerpop.gremlin.process.traversal.step.EmptyStep;
-import com.tinkerpop.gremlin.process.traversal.step.Reversible;
-import com.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import com.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-import com.tinkerpop.gremlin.process.util.BulkSet;
-import com.tinkerpop.gremlin.structure.Graph;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
-
-/**
- * A {@link Traversal} represents a directed walk over a {@link Graph}.
- * This is the base interface for all traversal's, where each extending interface is seen as a domain specific language.
- * For example, {@link GraphTraversal} is a domain specific language for traversing a graph using "graph concepts" (e.g. vertices, edges).
- * Another example may represent the graph using "social concepts" (e.g. people, cities, artifacts).
- * A {@link Traversal} is evaluated in one of two ways: {@link TraversalEngine#STANDARD} (OLTP) and {@link TraversalEngine#COMPUTER} (OLAP).
- * OLTP traversals leverage an iterator and are executed within a single JVM (with data access allowed to be remote).
- * OLAP traversals leverage {@link GraphComputer} and are executed between multiple JVMs (and/or cores).
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
-
-    /**
-     * Used for reflection based access to the static "of" method of a Traversal.
-     */
-    public static final String OF = "of";
-
-    /**
-     * Get access to administrative methods of the traversal via its accompanying {@link Traversal.Admin}.
-     *
-     * @return the admin of this traversal
-     */
-    public default Traversal.Admin<S, E> asAdmin() {
-        return (Traversal.Admin<S, E>) this;
-    }
-
-    /**
-     * Submit the traversal to a {@link GraphComputer} for OLAP execution.
-     * This method should execute the traversal via {@link TraversalVertexProgram}.
-     * It should then wrap the {@link com.tinkerpop.gremlin.process.computer.util.DefaultComputerResult} in a new {@link Traversal} containing a {@link ComputerResultStep}.
-     *
-     * @param computer the GraphComputer to execute the traversal on
-     * @return a new traversal with the starts being the results of the TraversalVertexProgram
-     */
-    public default Traversal<S, E> submit(final GraphComputer computer) {
-        try {
-            final TraversalVertexProgram vertexProgram = TraversalVertexProgram.build().traversal(this.asAdmin()).create();
-            final ComputerResult result = computer.program(vertexProgram).submit().get();
-            final Traversal.Admin<S, S> traversal = new DefaultTraversal<>(result.graph().getClass());
-            return traversal.asAdmin().addStep(new ComputerResultStep<>(traversal, result, vertexProgram, true));
-        } catch (final Exception e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Return an {@link Optional} of the next E object in the traversal.
-     * If the traversal is empty, then an {@link Optional#empty()} is returned.
-     *
-     * @return an optional of the next object in the traversal
-     */
-    public default Optional<E> tryNext() {
-        return this.hasNext() ? Optional.of(this.next()) : Optional.empty();
-    }
-
-    /**
-     * Get the next n-number of results from the traversal.
-     * If the traversal has less than n-results, then only that number of results are returned.
-     *
-     * @param amount the number of results to get
-     * @return the n-results in a {@link List}
-     */
-    public default List<E> next(final int amount) {
-        final List<E> result = new ArrayList<>();
-        int counter = 0;
-        while (counter++ < amount && this.hasNext()) {
-            result.add(this.next());
-        }
-        return result;
-    }
-
-    /**
-     * Put all the results into an {@link ArrayList}.
-     *
-     * @return the results in a list
-     */
-    public default List<E> toList() {
-        return this.fill(new ArrayList<>());
-    }
-
-    /**
-     * Put all the results into a {@link HashSet}.
-     *
-     * @return the results in a set
-     */
-    public default Set<E> toSet() {
-        return this.fill(new HashSet<>());
-    }
-
-    /**
-     * Put all the results into a {@link BulkSet}.
-     * This can reduce both time and space when aggregating results by ensuring a weighted set.
-     *
-     * @return the results in a bulk set
-     */
-    public default BulkSet<E> toBulkSet() {
-        return this.fill(new BulkSet<>());
-    }
-
-    /**
-     * Add all the results of the traversal to the provided collection.
-     *
-     * @param collection the collection to fill
-     * @return the collection now filled
-     */
-    public default <C extends Collection<E>> C fill(final C collection) {
-        try {
-            if (!this.asAdmin().getEngine().isPresent())
-                this.asAdmin().applyStrategies(TraversalEngine.STANDARD);
-            // use the end step so the results are bulked
-            final Step<?, E> endStep = this.asAdmin().getEndStep();
-            while (true) {
-                final Traverser<E> traverser = endStep.next();
-                TraversalHelper.addToCollection(collection, traverser.get(), traverser.bulk());
-            }
-        } catch (final NoSuchElementException ignored) {
-        }
-        return collection;
-    }
-
-    /**
-     * Iterate all the {@link Traverser} instances in the traversal.
-     * What is returned is the empty traversal.
-     * It is assumed that what is desired from the computation is are the sideEffects yielded by the traversal.
-     *
-     * @return the fully drained traversal
-     */
-    public default <A, B> Traversal<A, B> iterate() {
-        try {
-            if (!this.asAdmin().getEngine().isPresent())
-                this.asAdmin().applyStrategies(TraversalEngine.STANDARD);
-            // use the end step so the results are bulked
-            final Step<?, E> endStep = this.asAdmin().getEndStep();
-            while (true) {
-                endStep.next();
-            }
-        } catch (final NoSuchElementException ignored) {
-        }
-        return (Traversal<A, B>) this;
-    }
-
-    /**
-     * A traversal can be rewritten such that its defined end type E may yield objects of a different type.
-     * This helper method allows for the casting of the output to the known the type.
-     *
-     * @param endType  the true output type of the traversal
-     * @param consumer a {@link Consumer} to process each output
-     * @param <E2>     the known output type of the traversal
-     */
-    public default <E2> void forEachRemaining(final Class<E2> endType, final Consumer<E2> consumer) {
-        try {
-            while (true) {
-                consumer.accept((E2) next());
-            }
-        } catch (final NoSuchElementException ignore) {
-
-        }
-    }
-
-    /**
-     * A collection of {@link Exception} types associated with Traversal execution.
-     */
-    public static class Exceptions {
-
-        public static IllegalStateException traversalIsLocked() {
-            return new IllegalStateException("The traversal strategies are complete and the traversal can no longer be modulated");
-        }
-
-        public static IllegalStateException traversalIsNotReversible() {
-            return new IllegalStateException("The traversal is not reversible as it contains steps that are not reversible");
-        }
-    }
-
-    public interface Admin<S, E> extends Traversal<S, E> {
-
-        /**
-         * Add an iterator of {@link Traverser} objects to the head/start of the traversal.
-         * Users should typically not need to call this method. For dynamic inject of data, they should use {@link com.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.InjectStep}.
-         *
-         * @param starts an iterators of traversers
-         */
-        public default void addStarts(final Iterator<Traverser<S>> starts) {
-            if(!this.getEngine().isPresent()) this.applyStrategies(TraversalEngine.STANDARD);
-            this.getStartStep().addStarts(starts);
-        }
-
-        /**
-         * Add a single {@link Traverser} object to the head of the traversal.
-         * Users should typically not need to call this method. For dynamic inject of data, they should use {@link com.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.InjectStep}.
-         *
-         * @param start a traverser to add to the traversal
-         */
-        public default void addStart(final Traverser<S> start) {
-            if(!this.getEngine().isPresent()) this.applyStrategies(TraversalEngine.STANDARD);
-            this.getStartStep().addStart(start);
-        }
-
-        /**
-         * Get the {@link Step} instances associated with this traversal.
-         * The steps are ordered according to their linked list structure as defined by {@link Step#getPreviousStep()} and {@link Step#getNextStep()}.
-         *
-         * @return the ordered steps of the traversal
-         */
-        public List<Step> getSteps();
-
-        /**
-         * Add a {@link Step} to the end of the traversal. This method should link the step to its next and previous step accordingly.
-         *
-         * @param step the step to add
-         * @param <E2> the output of the step
-         * @return the updated traversal
-         * @throws IllegalStateException if the {@link TraversalStrategies} have already been applied
-         */
-        public default <E2> Traversal.Admin<S, E2> addStep(final Step<?, E2> step) throws IllegalStateException {
-            return this.addStep(this.getSteps().size(), step);
-        }
-
-        /**
-         * Add a {@link Step} to an arbitrary point in the traversal.
-         *
-         * @param index the location in the traversal to insert the step
-         * @param step  the step to add
-         * @param <S2>  the new start type of the traversal (if the added step was a start step)
-         * @param <E2>  the new end type of the traversal (if the added step was an end step)
-         * @return the newly modulated traversal
-         * @throws IllegalStateException if the {@link TraversalStrategies} have already been applied
-         */
-        public <S2, E2> Traversal.Admin<S2, E2> addStep(final int index, final Step<?, ?> step) throws IllegalStateException;
-
-        /**
-         * Remove a {@link Step} from the traversal.
-         *
-         * @param step the step to remove
-         * @param <S2> the new start type of the traversal (if the removed step was a start step)
-         * @param <E2> the new end type of the traversal (if the removed step was an end step)
-         * @return the newly modulated traversal
-         * @throws IllegalStateException if the {@link TraversalStrategies} have already been applied
-         */
-        public default <S2, E2> Traversal.Admin<S2, E2> removeStep(final Step<?, ?> step) throws IllegalStateException {
-            return this.removeStep(this.getSteps().indexOf(step));
-        }
-
-        /**
-         * Remove a {@link Step} from the traversal.
-         *
-         * @param index the location in the traversal of the step to be evicted
-         * @param <S2>  the new start type of the traversal (if the removed step was a start step)
-         * @param <E2>  the new end type of the traversal (if the removed step was an end step)
-         * @return the newly modulated traversal
-         * @throws IllegalStateException if the {@link TraversalStrategies} have already been applied
-         */
-        public <S2, E2> Traversal.Admin<S2, E2> removeStep(final int index) throws IllegalStateException;
-
-        /**
-         * 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);
-        }
-
-        /**
-         * Apply the registered {@link TraversalStrategies} to the traversal.
-         * Once the strategies are applied, the traversal is "locked" and can no longer have steps added to it.
-         * The order of operations for strategy applications should be: globally id steps, apply strategies to root traversal, then to nested traversals.
-         *
-         * @param engine the engine that will ultimately execute the traversal.
-         * @throws IllegalStateException if the {@link TraversalStrategies} have already been applied
-         */
-        public void applyStrategies(final TraversalEngine engine) throws IllegalStateException;
-
-        /**
-         * When the {@link TraversalStrategies} have been applied, the destined {@link TraversalEngine} has been declared.
-         * Once a traversal engine has been declared, the traversal can no longer be extended, only executed.
-         *
-         * @return whether the traversal engine has been defined or not.
-         */
-        public Optional<TraversalEngine> getEngine();
-
-        /**
-         * Get the {@link TraverserGenerator} associated with this traversal.
-         * The traversal generator creates {@link Traverser} instances that are respective of the traversal's {@link com.tinkerpop.gremlin.process.traverser.TraverserRequirement}.
-         *
-         * @return the generator of traversers
-         */
-        public default TraverserGenerator getTraverserGenerator() {
-            return this.getStrategies().getTraverserGeneratorFactory().getTraverserGenerator(this);
-        }
-
-        /**
-         * Get the set of all {@link TraverserRequirement}s for this traversal.
-         *
-         * @return the features of a traverser that are required to execute properly in this traversal
-         */
-        public default Set<TraverserRequirement> getTraverserRequirements() {
-            final Set<TraverserRequirement> requirements = this.getSteps().stream()
-                    .flatMap(step -> ((Step<?, ?>) step).getRequirements().stream())
-                    .collect(Collectors.toSet());
-            if (this.getSideEffects().keys().size() > 0)
-                requirements.add(TraverserRequirement.SIDE_EFFECTS);
-            if (this.getSideEffects().getSackInitialValue().isPresent())
-                requirements.add(TraverserRequirement.SACK);
-            if (this.getEngine().isPresent() && this.getEngine().get().equals(TraversalEngine.COMPUTER))
-                requirements.add(TraverserRequirement.BULK);
-            return requirements;
-        }
-
-        /**
-         * Call the {@link Step#reset} method on every step in the traversal.
-         */
-        public default void reset() {
-            this.getSteps().forEach(Step::reset);
-        }
-
-        /**
-         * Assume the every {@link Step} implements {@link Reversible} and call {@link Reversible#reverse()} for each.
-         *
-         * @return the traversal with its steps reversed
-         */
-        public default Traversal.Admin<S, E> reverse() throws IllegalStateException {
-            if (!TraversalHelper.isReversible(this)) throw Exceptions.traversalIsNotReversible();
-            this.getSteps().stream().forEach(step -> ((Reversible) step).reverse());
-            return this;
-        }
-
-        /**
-         * Set the {@link TraversalSideEffects} of this traversal.
-         *
-         * @param sideEffects the sideEffects to set for this traversal.
-         */
-        public void setSideEffects(final TraversalSideEffects sideEffects);
-
-        /**
-         * Get the {@link TraversalSideEffects} associated with the traversal.
-         *
-         * @return The traversal sideEffects
-         */
-        public TraversalSideEffects getSideEffects();
-
-        /**
-         * Set the {@link TraversalStrategies} to be used by this traversal at evaluation time.
-         *
-         * @param strategies the strategies to use on this traversal
-         */
-        public void setStrategies(final TraversalStrategies strategies);
-
-        /**
-         * Get the {@link TraversalStrategies} associated with this traversal.
-         *
-         * @return the strategies associated with this traversal
-         */
-        public TraversalStrategies getStrategies();
-
-        /**
-         * Set the {@link com.tinkerpop.gremlin.process.traversal.step.TraversalParent} {@link Step} that is the parent of this traversal.
-         * Traversals can be nested and this is the means by which the traversal tree is connected.
-         *
-         * @param step the traversal holder parent step
-         */
-        public void setParent(final TraversalParent step);
-
-        /**
-         * Get the {@link com.tinkerpop.gremlin.process.traversal.step.TraversalParent} {@link Step} that is the parent of this traversal.
-         * Traversals can be nested and this is the means by which the traversal tree is walked.
-         *
-         * @return the traversal holder parent step
-         */
-        public TraversalParent getParent();
-
-        /**
-         * Cloning is used to duplicate the traversal typically in OLAP environments.
-         *
-         * @return The cloned traversal
-         */
-        public Traversal.Admin<S, E> clone() throws CloneNotSupportedException;
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalEngine.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalEngine.java
deleted file mode 100644
index ad14db6..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalEngine.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public enum TraversalEngine {
-
-    STANDARD, COMPUTER
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalSideEffects.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalSideEffects.java
deleted file mode 100644
index f44e287..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalSideEffects.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import com.tinkerpop.gremlin.structure.Vertex;
-
-import java.io.Serializable;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface TraversalSideEffects extends Cloneable, Serializable {
-
-    public static final String SIDE_EFFECTS = "gremlin.traversal.sideEffects";
-
-    /**
-     * Determines if the {@link TraversalSideEffects} contains the respective key.
-     * If the key references a stored {@link java.util.function.Supplier}, then it should return true as it will be dynamically created on get().
-     *
-     * @param key the key to check for
-     * @return whether the key exists in the sideEffects
-     */
-    public default boolean exists(final String key) {
-        return this.keys().contains(key);
-    }
-
-    /**
-     * Set the specified key to the specified value.
-     * If a {@link java.util.function.Supplier} is provided, it is NOT assumed to be a supplier as set by registerSupplier().
-     *
-     * @param key   the key
-     * @param value the value
-     */
-    public void set(final String key, final Object value);
-
-    /**
-     * Get the sideEffect associated with the provided key.
-     * If the sideEffect contains an object for the key, return it.
-     * Else if the sideEffect has a registered {@link java.util.function.Supplier} for that key, generate the object, store the object in the sideEffects, and return it.
-     *
-     * @param key the key to get the value for
-     * @param <V> the type of the value to retrieve
-     * @return the value associated with key
-     * @throws IllegalArgumentException if the key does not reference an object or a registered supplier.
-     */
-    public <V> V get(final String key) throws IllegalArgumentException;
-
-    /**
-     * Return the value associated with the key or return the provided otherValue.
-     * The otherValue will not be stored in the sideEffect.
-     *
-     * @param key        the key to get the value for
-     * @param otherValue if not value is associated with key, return the other value.
-     * @param <V>        the type of the value to get
-     * @return the value associated with the key or the otherValue
-     */
-    public default <V> V orElse(final String key, final V otherValue) {
-        return this.exists(key) ? this.get(key) : otherValue;
-    }
-
-    /**
-     * If a value or registered {@link java.util.function.Supplier} exists for the provided key, consume it with the provided consumer.
-     *
-     * @param key      the key to the value
-     * @param consumer the consumer to process the value
-     * @param <V>      the type of the value to consume
-     */
-    public default <V> void ifPresent(final String key, final Consumer<V> consumer) {
-        if (this.exists(key)) consumer.accept(this.get(key));
-    }
-
-    /**
-     * Remove both the value and registered {@link java.util.function.Supplier} associated with provided key.
-     *
-     * @param key the key of the value and registered supplier to remove
-     */
-    public void remove(final String key);
-
-    /**
-     * The keys of the sideEffect which includes registered {@link java.util.function.Supplier} keys.
-     * In essence, that which is possible to get().
-     *
-     * @return the keys of the sideEffect
-     */
-    public Set<String> keys();
-
-    ////////////
-
-    /**
-     * Register a {@link java.util.function.Supplier} with the provided key.
-     * When sideEffects get() are called, if no object exists and there exists a registered supplier for the key, the object is generated.
-     * Registered suppliers are used for the lazy generation of sideEffect data.
-     *
-     * @param key      the key to register the supplier with
-     * @param supplier the supplier that will generate an object when get() is called if it hasn't already been created
-     */
-    public void registerSupplier(final String key, final Supplier supplier);
-
-    /**
-     * Get the registered {@link java.util.function.Supplier} associated with the specified key.
-     *
-     * @param key the key associated with the supplier
-     * @param <V> The object type of the supplier
-     * @return A non-empty optional if the supplier exists
-     */
-    public <V> Optional<Supplier<V>> getRegisteredSupplier(final String key);
-
-    /**
-     * A helper method to register a {@link java.util.function.Supplier} if it has not already been registered.
-     *
-     * @param key      the key of the supplier to register
-     * @param supplier the supplier to register if the key has not already been registered
-     */
-    public default void registerSupplierIfAbsent(final String key, final Supplier supplier) {
-        if (!this.getRegisteredSupplier(key).isPresent())
-            this.registerSupplier(key, supplier);
-    }
-
-    public <S> void setSack(final Supplier<S> initialValue, final Optional<UnaryOperator<S>> splitOperator);
-
-    public <S> Optional<Supplier<S>> getSackInitialValue();
-
-    public <S> Optional<UnaryOperator<S>> getSackSplitOperator();
-
-    /**
-     * If the sideEffect contains an object associated with the key, return it.
-     * Else if a "with" supplier exists for the key, generate the object, store it in the sideEffects and return the object.
-     * Else use the provided supplier to generate the object, store it in the sideEffects and return the object.
-     * Note that if the orCreate supplier is used, it is NOT registered as a {@link java.util.function.Supplier}.
-     *
-     * @param key      the key of the object to get
-     * @param orCreate if the object doesn't exist as an object or suppliable object, then generate it with the specified supplier
-     * @param <V>      the return type of the object
-     * @return the object that is either retrieved, generated, or supplier via orCreate
-     */
-    public default <V> V getOrCreate(final String key, final Supplier<V> orCreate) {
-        if (this.exists(key))
-            return this.<V>get(key);
-        final Optional<Supplier<V>> with = this.getRegisteredSupplier(key);
-        if (with.isPresent()) {
-            final V v = with.get().get();
-            this.set(key, v);
-            return v;
-        } else {
-            final V v = orCreate.get();
-            this.set(key, v);
-            return v;
-        }
-    }
-
-    ////////////
-
-    public default <V> void forEach(final BiConsumer<String, V> biConsumer) {
-        this.keys().forEach(key -> biConsumer.accept(key, this.get(key)));
-    }
-
-    /**
-     * In a distributed {@link com.tinkerpop.gremlin.process.computer.GraphComputer} traversal, the sideEffects of the traversal are not a single object within a single JVM.
-     * Instead, the sideEffects are distributed across the graph and the pieces are stored on the computing vertices.
-     * This method is necessary to call when the {@link com.tinkerpop.gremlin.process.Traversal} is processing the {@link com.tinkerpop.gremlin.process.Traverser}s at a particular {@link com.tinkerpop.gremlin.structure.Vertex}.
-     *
-     * @param vertex the vertex where the traversal is currently executing.
-     */
-    public void setLocalVertex(final Vertex vertex);
-
-    /**
-     * Cloning is used to duplicate the sideEffects typically in OLAP environments.
-     *
-     * @return The cloned sideEffects
-     */
-    public TraversalSideEffects clone() throws CloneNotSupportedException;
-
-    /**
-     * Add the current {@link TraversalSideEffects} data and suppliers to the provided {@link TraversalSideEffects}.
-     *
-     * @param sideEffects the sideEffects to add this traversal's sideEffect data to.
-     */
-    public void mergeInto(final TraversalSideEffects sideEffects);
-
-    public static class Exceptions {
-
-        public static IllegalArgumentException sideEffectKeyCanNotBeEmpty() {
-            return new IllegalArgumentException("Side effect key can not be the empty string");
-        }
-
-        public static IllegalArgumentException sideEffectKeyCanNotBeNull() {
-            return new IllegalArgumentException("Side effect key can not be null");
-        }
-
-        public static IllegalArgumentException sideEffectValueCanNotBeNull() {
-            return new IllegalArgumentException("Side effect value can not be null");
-        }
-
-        public static IllegalArgumentException sideEffectDoesNotExist(final String key) {
-            return new IllegalArgumentException("Side effects do not have a value for provided key: " + key);
-        }
-
-        public static UnsupportedOperationException dataTypeOfSideEffectValueNotSupported(final Object val) {
-            return new UnsupportedOperationException(String.format("Side effect value [%s] is of type %s is not supported", val, val.getClass()));
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
deleted file mode 100644
index c5cf221..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import com.tinkerpop.gremlin.process.graph.traversal.__;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.*;
-import com.tinkerpop.gremlin.process.traversal.DefaultTraversalStrategies;
-import com.tinkerpop.gremlin.process.traverser.TraverserGeneratorFactory;
-import com.tinkerpop.gremlin.structure.Edge;
-import com.tinkerpop.gremlin.structure.Graph;
-import com.tinkerpop.gremlin.structure.Vertex;
-import com.tinkerpop.gremlin.structure.VertexProperty;
-import com.tinkerpop.gremlin.util.tools.MultiMap;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Matthias Broecheler (me@matthiasb.com)
- */
-public interface TraversalStrategies extends Serializable, Cloneable {
-
-    /**
-     * Return all the {@link TraversalStrategy} singleton instances associated with this {@link TraversalStrategies}.
-     */
-    public List<TraversalStrategy> toList();
-
-    /**
-     * Apply all the {@link TraversalStrategy} optimizers to the {@link Traversal} for the stated {@link TraversalEngine}.
-     * This method must ensure that the strategies are sorted prior to application.
-     *
-     * @param traversal the traversal to apply the strategies to
-     * @param engine    the engine that the traversal is going to be executed on
-     */
-    public void applyStrategies(final Traversal.Admin<?, ?> traversal, final TraversalEngine engine);
-
-    /**
-     * Add all the provided {@link TraversalStrategy} instances to the current collection.
-     * When all the provided strategies have been added, the collection is resorted.
-     *
-     * @param strategies the traversal strategies to add
-     * @return the newly updated/sorted traversal strategies collection
-     */
-    public TraversalStrategies addStrategies(final TraversalStrategy... strategies);
-
-    /**
-     * Remove all the provided {@link TraversalStrategy} classes from the current collection.
-     * When all the provided strategies have been removed, the collection is resorted.
-     *
-     * @param strategyClasses the traversal strategies to remove by their class
-     * @return the newly updated/sorted traversal strategies collection
-     */
-    @SuppressWarnings("unchecked")
-    public TraversalStrategies removeStrategies(final Class<? extends TraversalStrategy>... strategyClasses);
-
-    /**
-     * {@inheritDoc}
-     */
-    public TraversalStrategies clone() throws CloneNotSupportedException;
-
-    /**
-     * Get the {@link TraverserGeneratorFactory} to use to generate traversers.
-     */
-    public TraverserGeneratorFactory getTraverserGeneratorFactory();
-
-    /**
-     * Set the {@link TraverserGeneratorFactory} to use for determining which {@link Traverser} type to generate for the {@link Traversal}.
-     *
-     * @param traverserGeneratorFactory the factory to use
-     */
-    public void setTraverserGeneratorFactory(final TraverserGeneratorFactory traverserGeneratorFactory);
-
-    /**
-     * Sorts the list of provided strategies such that the {@link com.tinkerpop.gremlin.process.TraversalStrategy#applyPost()}
-     * and {@link TraversalStrategy#applyPrior()} dependencies are respected.
-     * <p/>
-     * Note, that the order may not be unique.
-     *
-     * @param strategies the traversal strategies to sort
-     */
-    public static void sortStrategies(final List<? extends TraversalStrategy> strategies) {
-        final Map<Class<? extends TraversalStrategy>, Set<Class<? extends TraversalStrategy>>> dependencyMap = new HashMap<>();
-        final Set<Class<? extends TraversalStrategy>> strategyClass = new HashSet<>(strategies.size());
-        //Initialize data structure
-        strategies.forEach(s -> strategyClass.add(s.getClass()));
-
-        //Initialize all the dependencies
-        strategies.forEach(strategy -> {
-            strategy.applyPrior().forEach(s -> {
-                if (strategyClass.contains(s)) MultiMap.put(dependencyMap, s, strategy.getClass());
-            });
-            strategy.applyPost().forEach(s -> {
-                if (strategyClass.contains(s)) MultiMap.put(dependencyMap, strategy.getClass(), s);
-            });
-        });
-        //Now, compute transitive closure until convergence
-        boolean updated;
-        do {
-            updated = false;
-            for (final Class<? extends TraversalStrategy> sc : strategyClass) {
-                List<Class<? extends TraversalStrategy>> toAdd = null;
-                for (Class<? extends TraversalStrategy> before : MultiMap.get(dependencyMap, sc)) {
-                    final Set<Class<? extends TraversalStrategy>> beforeDep = MultiMap.get(dependencyMap, before);
-                    if (!beforeDep.isEmpty()) {
-                        if (toAdd == null) toAdd = new ArrayList<>(beforeDep.size());
-                        toAdd.addAll(beforeDep);
-                    }
-                }
-                if (toAdd != null && MultiMap.putAll(dependencyMap, sc, toAdd)) updated = true;
-            }
-        } while (updated);
-        Collections.sort(strategies, new Comparator<TraversalStrategy>() {
-            @Override
-            public int compare(final TraversalStrategy s1, final TraversalStrategy s2) {
-                boolean s1Before = MultiMap.containsEntry(dependencyMap, s1.getClass(), s2.getClass());
-                boolean s2Before = MultiMap.containsEntry(dependencyMap, s2.getClass(), s1.getClass());
-                if (s1Before && s2Before)
-                    throw new IllegalStateException("Cyclic dependency between traversal strategies: ["
-                            + s1.getClass().getName() + ", " + s2.getClass().getName() + ']');
-                if (s1Before) return -1;
-                else if (s2Before) return 1;
-                else return 0;
-            }
-        });
-    }
-
-    public static final class GlobalCache {
-
-        private static final Map<Class, TraversalStrategies> CACHE = new HashMap<>();
-
-        static {
-            final TraversalStrategies coreStrategies = new DefaultTraversalStrategies();
-            coreStrategies.addStrategies(
-                    DedupOptimizerStrategy.instance(),
-                    RangeByIsCountStrategy.instance(),
-                    IdentityRemovalStrategy.instance(),
-                    SideEffectCapStrategy.instance(),
-                    MatchWhereStrategy.instance(),
-                    ComparatorHolderRemovalStrategy.instance(),
-                    ReducingStrategy.instance(),
-                    LabeledEndStepStrategy.instance(),
-                    EngineDependentStrategy.instance(),
-                    ProfileStrategy.instance(),
-                    SideEffectRegistrationStrategy.instance(),
-                    TraversalVerificationStrategy.instance(),
-                    ConjunctionStrategy.instance());
-            try {
-                CACHE.put(Graph.class, coreStrategies.clone());
-                CACHE.put(Vertex.class, coreStrategies.clone());
-                CACHE.put(Edge.class, coreStrategies.clone());
-                CACHE.put(VertexProperty.class, coreStrategies.clone());
-                CACHE.put(__.class, new DefaultTraversalStrategies());
-            } catch (final CloneNotSupportedException e) {
-                throw new IllegalStateException(e.getMessage(), e);
-            }
-        }
-
-        public static void registerStrategies(final Class emanatingClass, final TraversalStrategies traversalStrategies) {
-            CACHE.put(emanatingClass, traversalStrategies);
-        }
-
-        public static TraversalStrategies getStrategies(final Class emanatingClass) {
-            final TraversalStrategies traversalStrategies = CACHE.get(emanatingClass);
-            if (null == traversalStrategies) {
-                if (__.class.isAssignableFrom(emanatingClass))
-                    return CACHE.get(__.class);
-                else if (Graph.class.isAssignableFrom(emanatingClass))
-                    return CACHE.get(Graph.class);
-                else if (Vertex.class.isAssignableFrom(emanatingClass))
-                    return CACHE.get(Vertex.class);
-                else if (Edge.class.isAssignableFrom(emanatingClass))
-                    return CACHE.get(Edge.class);
-                else if (VertexProperty.class.isAssignableFrom(emanatingClass))
-                    return CACHE.get(VertexProperty.class);
-                else
-                    return new DefaultTraversalStrategies();
-                // throw new IllegalStateException("The provided class has no registered traversal strategies: " + emanatingClass);
-            }
-            return traversalStrategies;
-        }
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategy.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategy.java
deleted file mode 100644
index 1ed0245..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategy.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * A {@link TraversalStrategy} defines a particular atomic operation for mutating a {@link Traversal} prior to its evaluation.
- * Traversal strategies are typically used for optimizing a traversal for the particular underlying graph engine.
- * Traversal strategies implement {@link Comparable} and thus are sorted to determine their evaluation order.
- * A TraversalStrategy should not have a public constructor as they should not maintain state between applications.
- * Make use of a singleton instance() object to reduce object creation on the JVM.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Matthias Broecheler (me@matthiasb.com)
- */
-public interface TraversalStrategy extends Serializable{
-
-    // A TraversalStrategy should not have a public constructor
-    // Make use of a singleton instance() object to reduce object creation on the JVM
-    // Moreover they are stateless objects.
-
-    public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine traversalEngine);
-
-    public default Set<Class<? extends TraversalStrategy>> applyPrior() {
-        return Collections.emptySet();
-    }
-
-    public default Set<Class<? extends TraversalStrategy>> applyPost() {
-        return Collections.emptySet();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traverser.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traverser.java
deleted file mode 100644
index dfa2ae9..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/Traverser.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import com.tinkerpop.gremlin.structure.Graph;
-import com.tinkerpop.gremlin.structure.Vertex;
-import com.tinkerpop.gremlin.structure.util.detached.Attachable;
-
-import java.io.Serializable;
-
-/**
- * A {@link Traverser} represents the current state of an object flowing through a {@link Traversal}.
- * A traverser maintains a reference to the current object, a traverser-local "sack", a traversal-global sideEffect, a bulk count, and a path history.
- * <p/>
- * Different types of traverser can exist depending on the semantics of the traversal and the desire for
- * space/time optimizations of the developer.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface Traverser<T> extends Serializable, Comparable<Traverser<T>>, Cloneable {
-
-    /**
-     * Get the object that the traverser is current at.
-     *
-     * @return The current object of the traverser
-     */
-    public T get();
-
-    /**
-     * Get the sack local sack object of this traverser.
-     *
-     * @param <S> the type of the sack object
-     * @return the sack object
-     */
-    public <S> S sack();
-
-    /**
-     * Set the traversers sack object to the provided value ("sack the value").
-     *
-     * @param object the new value of the traverser's sack
-     * @param <S>    the type of the object
-     */
-    public <S> void sack(final S object);
-
-    /**
-     * Get the current path of the traverser.
-     *
-     * @return The path of the traverser
-     */
-    public Path path();
-
-    /**
-     * Get the object associated with the specified step-label in the traverser's path history.
-     *
-     * @param stepLabel the step-label in the path to access
-     * @param <A>       the type of the object
-     * @return the object associated with that path label (if more than one object occurs at that step, a list is returned)
-     */
-    public default <A> A path(final String stepLabel) {
-        return this.path().get(stepLabel);
-    }
-
-    /**
-     * Return the number of times the traverser has gone through a looping section of a traversal.
-     *
-     * @return The number of times the traverser has gone through a loop
-     */
-    public int loops();
-
-    /**
-     * A traverser may represent a grouping of traversers to allow for more efficient data propagation.
-     *
-     * @return the number of traversers represented in this traverser.
-     */
-    public long bulk();
-
-    /**
-     * Get a particular value from the sideEffects of the traverser.
-     *
-     * @param sideEffectKey the key of the value to get from the sideEffects
-     * @param <A>           the type of the returned object
-     * @return the object in the sideEffects of the respective key
-     */
-    public default <A> A sideEffects(final String sideEffectKey) {
-        return this.asAdmin().getSideEffects().get(sideEffectKey);
-    }
-
-    /**
-     * Set a particular value in the sideEffects of the traverser.
-     *
-     * @param sideEffectKey   the key of the value to set int the sideEffects
-     * @param sideEffectValue the value to set for the sideEffect key
-     */
-    public default void sideEffects(final String sideEffectKey, final Object sideEffectValue) {
-        this.asAdmin().getSideEffects().set(sideEffectKey, sideEffectValue);
-    }
-
-    /**
-     * If the underlying object of the traverser is comparable, compare it with the other traverser.
-     *
-     * @param other the other traverser that presumably has a comparable internal object
-     * @return the comparison of the two objects of the traversers
-     * @throws ClassCastException if the object of the traverser is not comparable
-     */
-    @Override
-    public default int compareTo(final Traverser<T> other) throws ClassCastException {
-        return ((Comparable) this.get()).compareTo(other.get());
-    }
-
-    /**
-     * Typecast the traverser to a "system traverser" so {@link Traverser.Admin} methods can be accessed.
-     * This is used as a helper method to avoid the awkwardness of <code>((Traverser.Administrative)traverser)</code>.
-     * The default implementation simply returns "this" type casted to {@link Traverser.Admin}.
-     *
-     * @return The type-casted traverser
-     */
-    public default Admin<T> asAdmin() {
-        return (Admin<T>) this;
-    }
-
-    /**
-     * Traverser cloning is important when splitting a traverser at a bifurcation point in a traversal.
-     */
-    public Traverser<T> clone() throws CloneNotSupportedException;
-
-    /**
-     * The methods in System.Traverser are useful to underlying Step and Traversal implementations.
-     * They should not be accessed by the user during lambda-based manipulations.
-     */
-    public interface Admin<T> extends Traverser<T>, Attachable<Admin<T>> {
-
-        public static final String HALT = "halt";
-
-        /**
-         * When two traversers are {@link Traverser#equals} to each other, then they can be merged.
-         * This method is used to merge the traversers into a single traverser.
-         * This is used for optimization where instead of enumerating all traversers, they can be counted.
-         *
-         * @param other the other traverser to merge into this traverser. Once merged, the other can be garbage collected.
-         */
-        public void merge(final Admin<?> other);
-
-        /**
-         * Generate a child traverser of the current traverser for current as step and new object location.
-         * The child has the path history, future, and loop information of the parent.
-         * The child extends that path history with the current as and provided R-object.
-         *
-         * @param r    The current object of the child
-         * @param step The step yielding the split
-         * @param <R>  The current object type of the child
-         * @return The split traverser
-         */
-        public <R> Admin<R> split(final R r, final Step<T, R> step);
-
-        /**
-         * Generate a sibling traverser of the current traverser with a full copy of all state within the sibling.
-         *
-         * @return The split traverser
-         */
-        public Admin<T> split();
-
-        /**
-         * Set the current object location of the traverser.
-         *
-         * @param t The current object of the traverser
-         */
-        public void set(final T t);
-
-        /**
-         * Increment the number of times the traverser has gone through a looping section of traversal.
-         * The step label is important to create a stack of loop counters when within a nested context.
-         * If the provided label is not the same as the current label on the stack, add a new loop counter.
-         * If the provided label is the same as the current label on the stack, increment the loop counter.
-         *
-         * @param stepLabel the label of the step that is doing the incrementing
-         */
-        public void incrLoops(final String stepLabel);
-
-        /**
-         * Set the number of times the traverser has gone through a loop back to 0.
-         * When a traverser exits a looping construct, this method should be called.
-         * In a nested loop context, the highest stack loop counter should be removed.
-         */
-        public void resetLoops();
-
-        /**
-         * Get the step id of where the traverser is located.
-         * This is typically used in multi-machine systems that require the movement of
-         * traversers between different traversal instances.
-         *
-         * @return The future step for the traverser
-         */
-        public String getStepId();
-
-        /**
-         * Set the step id of where the traverser is located.
-         * If the future is {@link Traverser.Admin#HALT}, then {@link Traverser.Admin#isHalted()} is true.
-         *
-         * @param stepId The future step of the traverser
-         */
-        public void setStepId(final String stepId);
-
-        /**
-         * If the traverser has "no future" then it is done with its lifecycle.
-         * This does not mean that the traverser is "dead," only that it has successfully passed through a {@link Traversal}.
-         *
-         * @return Whether the traverser is done executing or not
-         */
-        public default boolean isHalted() {
-            return getStepId().equals(HALT);
-        }
-
-        /**
-         * Set the number of traversers represented by this traverser.
-         *
-         * @param count the number of traversers
-         */
-        public void setBulk(final long count);
-
-        /**
-         * Prepare the traverser for migration across a JVM boundary.
-         *
-         * @return The deflated traverser
-         */
-        public Admin<T> detach();
-
-        /**
-         * Regenerate the detached traverser given its location at a particular vertex.
-         *
-         * @param hostVertex The vertex that is hosting the traverser
-         * @return The inflated traverser
-         */
-        @Override
-        public Admin<T> attach(final Vertex hostVertex);
-
-        /**
-         * Traversers can not attach to graphs and thus, an {@link UnsupportedOperationException} is thrown.
-         *
-         * @param graph the graph to attach the traverser to, which it can't.
-         * @return nothing as an exception is thrown
-         * @throws UnsupportedOperationException is always thrown as it makes no sense to attach a traverser to a graph
-         */
-        @Override
-        public default Admin<T> attach(final Graph graph) throws UnsupportedOperationException {
-            throw new UnsupportedOperationException("A traverser can only exist at the vertices of the graph, not the graph itself");
-        }
-
-        /**
-         * Set the sideEffects of the {@link Traversal}. Given that traversers can move between machines,
-         * it may be important to re-set this when the traverser crosses machine boundaries.
-         *
-         * @param sideEffects the sideEffects of the traversal.
-         */
-        public void setSideEffects(final TraversalSideEffects sideEffects);
-
-        /**
-         * Get the sideEffects associated with the traversal of the traverser.
-         *
-         * @return the traversal sideEffects of the traverser
-         */
-        public TraversalSideEffects getSideEffects();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraverserGenerator.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraverserGenerator.java
deleted file mode 100644
index e0ca217..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraverserGenerator.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process;
-
-import com.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface TraverserGenerator {
-
-    public Set<TraverserRequirement> getProvidedRequirements();
-
-    public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk);
-
-    public default <S> Iterator<Traverser.Admin<S>> generateIterator(final Iterator<S> starts, final Step<S, ?> startStep, final long initialBulk) {
-        return new Iterator<Traverser.Admin<S>>() {
-            @Override
-            public boolean hasNext() {
-                return starts.hasNext();
-            }
-
-            @Override
-            public Traverser.Admin<S> next() {
-                return generate(starts.next(), startStep, initialBulk);
-            }
-        };
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/ComputerResult.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/ComputerResult.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/ComputerResult.java
deleted file mode 100644
index d7bfb90..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/ComputerResult.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process.computer;
-
-import com.tinkerpop.gremlin.structure.Graph;
-
-/**
- * The result of the {@link GraphComputer}'s computation. This is returned in a {@link java.util.concurrent.Future} by {@link GraphComputer#submit}.
- * A GraphComputer computation yields two things: an updated view of the computed on {@link Graph} and any computational sideEffects called {@link Memory}.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface ComputerResult extends AutoCloseable {
-
-    /**
-     * Get the view of the original {@link Graph} computed on by the GraphComputer.
-     *
-     * @return The computed graph
-     */
-    public Graph graph();
-
-    /**
-     * Get the computational sideEffects called {@link Memory} of the GraphComputer.
-     *
-     * @return the computed memory
-     */
-    public Memory memory();
-
-    /**
-     * Close the computed {@link GraphComputer} result. The semantics of "close" differ depending on the underlying implementation.
-     * In general, when a {@link ComputerResult} is closed, the computed values are no longer available to the user.
-     *
-     * @throws Exception
-     */
-    @Override
-    public void close() throws Exception;
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/GraphComputer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/GraphComputer.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/GraphComputer.java
deleted file mode 100644
index 2ad3e6d..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/GraphComputer.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process.computer;
-
-import java.util.concurrent.Future;
-
-/**
- * The {@link GraphComputer} is responsible for the execution of a {@link VertexProgram} and then a set of {@link MapReduce} jobs
- * over the vertices in the {@link com.tinkerpop.gremlin.structure.Graph}. It is up to the {@link GraphComputer} implementation to determine the
- * appropriate memory structures given the computing substrate. {@link GraphComputer} implementations also
- * maintains levels of memory {@link Isolation}: Bulk Synchronous and Dirty Bulk Synchronous.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Matthias Broecheler (me@matthiasb.com)
- */
-public interface GraphComputer {
-
-    public enum Isolation {
-        /**
-         * Computations are carried out in a bulk synchronous manner.
-         * The results of a vertex property update are only visible after the round is complete.
-         */
-        BSP,
-        /**
-         * Computations are carried out in an bulk asynchronous manner.
-         * The results of a vertex property update are visible before the end of the round.
-         */
-        DIRTY_BSP
-    }
-
-    /**
-     * Set the {@link Isolation} of the computation.
-     *
-     * @param isolation the isolation of the computation
-     * @return the updated GraphComputer with newly set isolation
-     */
-    public GraphComputer isolation(final Isolation isolation);
-
-    /**
-     * Set the {@link VertexProgram} to be executed by the {@link GraphComputer}.
-     * There can only be one VertexProgram for the GraphComputer.
-     *
-     * @param vertexProgram the VertexProgram to be executed
-     * @return the updated GraphComputer with newly set VertexProgram
-     */
-    public GraphComputer program(final VertexProgram vertexProgram);
-
-    /**
-     * Add a {@link MapReduce} job to the set of MapReduce jobs to be executed by the {@link GraphComputer}.
-     * There can be any number of MapReduce jobs.
-     *
-     * @param mapReduce the MapReduce job to add to the computation
-     * @return the updated GraphComputer with newly added MapReduce job
-     */
-    public GraphComputer mapReduce(final MapReduce mapReduce);
-
-    /**
-     * Submit the {@link VertexProgram} and the set of {@link MapReduce} jobs for execution by the {@link GraphComputer}.
-     *
-     * @return a {@link Future} denoting a reference to the asynchronous computation and where to get the {@link com.tinkerpop.gremlin.process.computer.util.DefaultComputerResult} when its is complete.
-     */
-    public Future<ComputerResult> submit();
-
-    public default Features features() {
-        return new Features() {
-        };
-    }
-
-    public interface Features {
-        public default boolean supportsWorkerPersistenceBetweenIterations() {
-            return true;
-        }
-
-        public default boolean supportsGlobalMessageScopes() {
-            return true;
-        }
-
-        public default boolean supportsLocalMessageScopes() {
-            return true;
-        }
-
-        public default boolean supportsVertexAddition() {
-            return true;
-        }
-
-        public default boolean supportsVertexRemoval() {
-            return true;
-        }
-
-        public default boolean supportsVertexPropertyAddition() {
-            return true;
-        }
-
-        public default boolean supportsVertexPropertyRemoval() {
-            return true;
-        }
-
-        public default boolean supportsEdgeAddition() {
-            return true;
-        }
-
-        public default boolean supportsEdgeRemoval() {
-            return true;
-        }
-
-        public default boolean supportsEdgePropertyAddition() {
-            return true;
-        }
-
-        public default boolean supportsEdgePropertyRemoval() {
-            return true;
-        }
-
-        public default boolean supportsIsolation(final Isolation isolation) {
-            return true;
-        }
-    }
-
-    public static class Exceptions {
-        public static IllegalStateException adjacentElementPropertiesCanNotBeRead() {
-            return new IllegalStateException("The properties of an adjacent element can not be read, only its id");
-        }
-
-        public static IllegalStateException adjacentElementPropertiesCanNotBeWritten() {
-            return new IllegalStateException("The properties of an adjacent element can not be written");
-        }
-
-        public static IllegalArgumentException providedKeyIsNotAnElementComputeKey(final String key) {
-            return new IllegalArgumentException("The provided key is not an element compute key: " + key);
-        }
-
-        public static IllegalArgumentException providedKeyIsNotAMemoryComputeKey(final String key) {
-            return new IllegalArgumentException("The provided key is not a memory compute key: " + key);
-        }
-
-        public static IllegalStateException adjacentVerticesCanNotBeQueried() {
-            return new IllegalStateException("It is not possible to query an adjacent vertex in a vertex program");
-        }
-
-        public static IllegalArgumentException isolationNotSupported(final Isolation isolation) {
-            return new IllegalArgumentException("The provided isolation is not supported by this graph computer: " + isolation);
-        }
-
-        public static IllegalStateException computerHasAlreadyBeenSubmittedAVertexProgram() {
-            return new IllegalStateException("This computer has already had a vertex program submitted to it");
-        }
-
-        public static IllegalStateException computerHasNoVertexProgramNorMapReducers() {
-            return new IllegalStateException("The computer has no vertex program or map reducers to execute");
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1545201f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/KeyValue.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/KeyValue.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/KeyValue.java
deleted file mode 100644
index ca2af61..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/KeyValue.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.tinkerpop.gremlin.process.computer;
-
-import java.io.Serializable;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class KeyValue<K, V> implements Serializable {
-
-    private final K key;
-    private final V value;
-    private static final String EMPTY_STRING = "";
-    private static final String TAB = "\t";
-    private static final String NULL = "null";
-
-    public KeyValue(final K key, final V value) {
-        this.key = key;
-        this.value = value;
-    }
-
-    public K getKey() {
-        return this.key;
-    }
-
-    public V getValue() {
-        return this.value;
-    }
-
-    public String toString() {
-        if (this.key instanceof MapReduce.NullObject && this.value instanceof MapReduce.NullObject) {
-            return EMPTY_STRING;
-        } else if (this.key instanceof MapReduce.NullObject) {
-            return makeString(this.value);
-        } else if (this.value instanceof MapReduce.NullObject) {
-            return makeString(this.key);
-        } else {
-            return makeString(this.key) + TAB + makeString(this.value);
-        }
-    }
-
-    private static final String makeString(final Object object) {
-        return null == object ? NULL : object.toString();
-    }
-}