Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1310 e6f2caa89 -> f78d1cb63


Giraph integration tests are passing now. @spmallette and I chatted tonight and 
came up with some good ideas regarding how to leverage HaltedTraverserStrategy 
for both OLTP and OLAP. In short, 'metadata strategies' might be the new thing.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f78d1cb6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f78d1cb6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f78d1cb6

Branch: refs/heads/TINKERPOP-1310
Commit: f78d1cb631c91fefb46829840e6f4247955a1a5b
Parents: e6f2caa
Author: Marko A. Rodriguez <[email protected]>
Authored: Wed May 25 19:58:28 2016 -0600
Committer: Marko A. Rodriguez <[email protected]>
Committed: Wed May 25 19:58:28 2016 -0600

----------------------------------------------------------------------
 .../traversal/TraversalVertexProgram.java       |  19 ++--
 .../step/map/TraversalVertexProgramStep.java    |  10 +-
 .../HaltedTraverserFactoryStrategy.java         |  67 ------------
 .../decoration/HaltedTraverserStrategy.java     |  54 ++++++++++
 .../HaltedTraverserFactoryStrategyTest.java     |  96 -----------------
 .../decoration/HaltedTraverserStrategyTest.java | 102 +++++++++++++++++++
 6 files changed, 165 insertions(+), 183 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f78d1cb6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index 4479306..07ab98a 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -32,6 +32,7 @@ import 
org.apache.tinkerpop.gremlin.process.computer.VertexComputeKey;
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import 
org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
 import 
org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
+import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.HaltedTraverserStrategy;
 import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
 import 
org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
 import org.apache.tinkerpop.gremlin.process.computer.util.SingleMessenger;
@@ -64,7 +65,6 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory;
 import org.apache.tinkerpop.gremlin.util.function.MutableMetricsSupplier;
 import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -94,7 +94,6 @@ public final class TraversalVertexProgram implements 
VertexProgram<TraverserSet<
     public static final String TRAVERSAL = 
"gremlin.traversalVertexProgram.traversal";
     public static final String HALTED_TRAVERSERS = 
"gremlin.traversalVertexProgram.haltedTraversers";
     public static final String ACTIVE_TRAVERSERS = 
"gremlin.traversalVertexProgram.activeTraversers";
-    public static final String HALTED_TRAVERSER_FACTORY = 
"gremlin.traversalVertexProgram.haltedTraverserFactory";
     protected static final String MUTATED_MEMORY_KEYS = 
"gremlin.traversalVertexProgram.mutatedMemoryKeys";
     private static final String VOTE_TO_HALT = 
"gremlin.traversalVertexProgram.voteToHalt";
     private static final String COMPLETED_BARRIERS = 
"gremlin.traversalVertexProgram.completedBarriers";
@@ -168,7 +167,11 @@ public final class TraversalVertexProgram implements 
VertexProgram<TraverserSet<
                         
(this.traversal.get().getParent().asStep().getNextStep() instanceof ProfileStep 
&& // same as above, but needed for profiling
                                 
this.traversal.get().getParent().asStep().getNextStep().getNextStep() 
instanceof ComputerResultStep));
         // determine how to store halted traversers
-        this.haltedTraverserDetachFactory = 
configuration.containsKey(HALTED_TRAVERSER_FACTORY) ? (Class) 
configuration.getProperty(HALTED_TRAVERSER_FACTORY) : ReferenceFactory.class;
+        this.haltedTraverserDetachFactory = ((HaltedTraverserStrategy) 
this.traversal.get().getStrategies().toList()
+                .stream()
+                .filter(strategy -> strategy instanceof 
HaltedTraverserStrategy)
+                .findAny()
+                
.orElse(HaltedTraverserStrategy.reference())).getHaltedTraverserFactory();
         // register traversal side-effects in memory
         
this.memoryComputeKeys.addAll(MemoryTraversalSideEffects.getMemoryComputeKeys(this.traversal.get()));
         // register MapReducer memory compute keys
@@ -196,7 +199,6 @@ public final class TraversalVertexProgram implements 
VertexProgram<TraverserSet<
     public void storeState(final Configuration configuration) {
         VertexProgram.super.storeState(configuration);
         this.traversal.storeState(configuration, TRAVERSAL);
-        configuration.setProperty(HALTED_TRAVERSER_FACTORY, 
this.haltedTraverserDetachFactory);
         TraversalVertexProgram.storeHaltedTraversers(configuration, 
this.haltedTraversers);
     }
 
@@ -280,9 +282,9 @@ public final class TraversalVertexProgram implements 
VertexProgram<TraverserSet<
                 });
             }
             memory.add(VOTE_TO_HALT, activeTraversers.isEmpty() || 
WorkerExecutor.execute(vertex, new SingleMessenger<>(messenger, 
activeTraversers), this.traversalMatrix, memory, this.returnHaltedTraversers, 
this.haltedTraverserDetachFactory));
-        } else {  // ITERATION 1+
+        } else   // ITERATION 1+
             memory.add(VOTE_TO_HALT, WorkerExecutor.execute(vertex, messenger, 
this.traversalMatrix, memory, this.returnHaltedTraversers, 
this.haltedTraverserDetachFactory));
-        }
+        // save space by not having an empty halted traversers property
         if (this.returnHaltedTraversers || haltedTraversers.isEmpty())
             vertex.<TraverserSet>property(HALTED_TRAVERSERS).remove();
     }
@@ -414,11 +416,6 @@ public final class TraversalVertexProgram implements 
VertexProgram<TraverserSet<
             return this;
         }
 
-        public Builder haltedTraverserFactory(final Class detachFactory) {
-            this.configuration.setProperty(HALTED_TRAVERSER_FACTORY, 
detachFactory);
-            return this;
-        }
-
         public Builder traversal(final TraversalSource traversalSource, final 
String scriptEngine, final String traversalScript, final Object... bindings) {
             return this.traversal(new ScriptTraversal<>(traversalSource, 
scriptEngine, traversalScript, bindings));
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f78d1cb6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
index 2b2498b..58e44a2 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
@@ -30,7 +30,6 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequire
 import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory;
 
 import java.util.Collections;
 import java.util.List;
@@ -42,7 +41,6 @@ import java.util.Set;
 public final class TraversalVertexProgramStep extends VertexProgramStep 
implements TraversalParent {
 
     public PureTraversal<?, ?> computerTraversal;
-    private Class haltedTraverserFactory = ReferenceFactory.class;
 
     public TraversalVertexProgramStep(final Traversal.Admin traversal, final 
Traversal.Admin<?, ?> computerTraversal) {
         super(traversal);
@@ -71,9 +69,7 @@ public final class TraversalVertexProgramStep extends 
VertexProgramStep implemen
         
this.getTraversal().getStrategies().toList().forEach(computerSpecificTraversal.getStrategies()::addStrategies);
         computerSpecificTraversal.setSideEffects(new 
MemoryTraversalSideEffects(this.getTraversal().getSideEffects()));
         computerSpecificTraversal.setParent(this);
-        final TraversalVertexProgram.Builder builder = 
TraversalVertexProgram.build()
-                .traversal(computerSpecificTraversal)
-                .haltedTraverserFactory(this.haltedTraverserFactory);
+        final TraversalVertexProgram.Builder builder = 
TraversalVertexProgram.build().traversal(computerSpecificTraversal);
         if (memory.exists(TraversalVertexProgram.HALTED_TRAVERSERS))
             
builder.haltedTraversers(memory.get(TraversalVertexProgram.HALTED_TRAVERSERS));
         return builder.create(graph);
@@ -100,10 +96,6 @@ public final class TraversalVertexProgramStep extends 
VertexProgramStep implemen
         this.integrateChild(this.computerTraversal.get());
     }
 
-    public void setHaltedTraverserFactory(final Class 
haltedTraverserDetachFactory) {
-        this.haltedTraverserFactory = haltedTraverserDetachFactory;
-    }
-
     /*@Override
     public int hashCode() {
         return super.hashCode() ^ this.computerTraversal.hashCode();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f78d1cb6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategy.java
deleted file mode 100644
index c2f3855..0000000
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategy.java
+++ /dev/null
@@ -1,67 +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 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration;
-
-import 
org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class HaltedTraverserFactoryStrategy extends 
AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements 
TraversalStrategy.DecorationStrategy {
-
-    private final Class haltedTraverserFactory;
-
-    private HaltedTraverserFactoryStrategy(final Class haltedTraverserFactory) 
{
-        this.haltedTraverserFactory = haltedTraverserFactory;
-    }
-
-    public void apply(final Traversal.Admin<?, ?> traversal) {
-        // only the root traversal should be processed
-        if (traversal.getParent() instanceof EmptyStep) {
-            final List<TraversalVertexProgramStep> steps = 
TraversalHelper.getStepsOfAssignableClass(TraversalVertexProgramStep.class, 
traversal);
-            // only the last step (the one returning data) needs to have a 
non-reference traverser factory
-            if (!steps.isEmpty())
-                steps.get(steps.size() - 
1).setHaltedTraverserFactory(this.haltedTraverserFactory);
-        }
-    }
-
-    public static HaltedTraverserFactoryStrategy detached() {
-        return new HaltedTraverserFactoryStrategy(DetachedFactory.class);
-    }
-
-    public static HaltedTraverserFactoryStrategy reference() {
-        return new HaltedTraverserFactoryStrategy(ReferenceFactory.class);
-    }
-
-    public Set<Class<? extends DecorationStrategy>> applyPrior() {
-        return Collections.singleton(VertexProgramStrategy.class);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f78d1cb6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserStrategy.java
new file mode 100644
index 0000000..fd07e23
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserStrategy.java
@@ -0,0 +1,54 @@
+/*
+ * 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 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class HaltedTraverserStrategy extends 
AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements 
TraversalStrategy.DecorationStrategy {
+
+    private final Class haltedTraverserFactory;
+
+    private HaltedTraverserStrategy(final Class haltedTraverserFactory) {
+        this.haltedTraverserFactory = haltedTraverserFactory;
+    }
+
+    public void apply(final Traversal.Admin<?, ?> traversal) {
+        // do nothing as this is simply a metadata strategy
+    }
+
+    public Class getHaltedTraverserFactory() {
+        return this.haltedTraverserFactory;
+    }
+
+    public static HaltedTraverserStrategy detached() {
+        return new HaltedTraverserStrategy(DetachedFactory.class);
+    }
+
+    public static HaltedTraverserStrategy reference() {
+        return new HaltedTraverserStrategy(ReferenceFactory.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f78d1cb6/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategyTest.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategyTest.java
deleted file mode 100644
index 43bc94e..0000000
--- 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserFactoryStrategyTest.java
+++ /dev/null
@@ -1,96 +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 
org.apache.tinkerpop.gremlin.tinkergraph.process.computer.traversal.strategy.decoration;
-
-import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.HaltedTraverserFactoryStrategy;
-import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
-import 
org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
-import 
org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class HaltedTraverserFactoryStrategyTest {
-
-    @Before
-    public void setup() {
-        // necessary as ComputerResult step for testing purposes attaches 
Attachables
-        System.setProperty("is.testing", "false");
-    }
-
-    @After
-    public void shutdown() {
-        System.setProperty("is.testing", "true");
-    }
-
-    @Test
-    public void shouldReturnDetachedElements() {
-        Graph graph = TinkerFactory.createModern();
-        GraphTraversalSource g = 
graph.traversal().withComputer().withStrategies(HaltedTraverserFactoryStrategy.detached());
-        g.V().out().forEachRemaining(vertex -> 
assertEquals(DetachedVertex.class, vertex.getClass()));
-        g.V().out().properties("name").forEachRemaining(vertexProperty -> 
assertEquals(DetachedVertexProperty.class, vertexProperty.getClass()));
-        g.V().out().values("name").forEachRemaining(value -> 
assertEquals(String.class, value.getClass()));
-        g.V().out().outE().forEachRemaining(edge -> 
assertEquals(DetachedEdge.class, edge.getClass()));
-        g.V().out().outE().properties("weight").forEachRemaining(property -> 
assertEquals(DetachedProperty.class, property.getClass()));
-        g.V().out().outE().values("weight").forEachRemaining(value -> 
assertEquals(Double.class, value.getClass()));
-        g.V().out().out().forEachRemaining(vertex -> 
assertEquals(DetachedVertex.class, vertex.getClass()));
-        g.V().out().out().path().forEachRemaining(path -> 
assertEquals(DetachedPath.class, path.getClass()));
-    }
-
-    @Test
-    public void shouldReturnReferenceElements() {
-        Graph graph = TinkerFactory.createModern();
-        GraphTraversalSource g = 
graph.traversal().withComputer().withStrategies(HaltedTraverserFactoryStrategy.reference());
-        g.V().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
-        g.V().out().properties("name").forEachRemaining(vertexProperty -> 
assertEquals(ReferenceVertexProperty.class, vertexProperty.getClass()));
-        g.V().out().values("name").forEachRemaining(value -> 
assertEquals(String.class, value.getClass()));
-        g.V().out().outE().forEachRemaining(edge -> 
assertEquals(ReferenceEdge.class, edge.getClass()));
-        g.V().out().outE().properties("weight").forEachRemaining(property -> 
assertEquals(ReferenceProperty.class, property.getClass()));
-        g.V().out().outE().values("weight").forEachRemaining(value -> 
assertEquals(Double.class, value.getClass()));
-        g.V().out().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
-        g.V().out().out().path().forEachRemaining(path -> 
assertEquals(ReferencePath.class, path.getClass()));
-        // the default should be reference elements
-        g = graph.traversal().withComputer();
-        g.V().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
-        g.V().out().properties("name").forEachRemaining(vertexProperty -> 
assertEquals(ReferenceVertexProperty.class, vertexProperty.getClass()));
-        g.V().out().values("name").forEachRemaining(value -> 
assertEquals(String.class, value.getClass()));
-        g.V().out().outE().forEachRemaining(edge -> 
assertEquals(ReferenceEdge.class, edge.getClass()));
-        g.V().out().outE().properties("weight").forEachRemaining(property -> 
assertEquals(ReferenceProperty.class, property.getClass()));
-        g.V().out().outE().values("weight").forEachRemaining(value -> 
assertEquals(Double.class, value.getClass()));
-        g.V().out().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
-        g.V().out().out().path().forEachRemaining(path -> 
assertEquals(ReferencePath.class, path.getClass()));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f78d1cb6/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserStrategyTest.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserStrategyTest.java
new file mode 100644
index 0000000..9c92efe
--- /dev/null
+++ 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserStrategyTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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 
org.apache.tinkerpop.gremlin.tinkergraph.process.computer.traversal.strategy.decoration;
+
+import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.HaltedTraverserStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import 
org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
+import 
org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class HaltedTraverserStrategyTest {
+
+    @Before
+    public void setup() {
+        // necessary as ComputerResult step for testing purposes attaches 
Attachables
+        System.setProperty("is.testing", "false");
+    }
+
+    @After
+    public void shutdown() {
+        System.setProperty("is.testing", "true");
+    }
+
+    @Test
+    public void shouldReturnDetachedElements() {
+        final Graph graph = TinkerFactory.createModern();
+        final GraphTraversalSource g = 
graph.traversal().withComputer().withStrategies(HaltedTraverserStrategy.detached());
+        g.V().out().forEachRemaining(vertex -> 
assertEquals(DetachedVertex.class, vertex.getClass()));
+        g.V().out().properties("name").forEachRemaining(vertexProperty -> 
assertEquals(DetachedVertexProperty.class, vertexProperty.getClass()));
+        g.V().out().values("name").forEachRemaining(value -> 
assertEquals(String.class, value.getClass()));
+        g.V().out().outE().forEachRemaining(edge -> 
assertEquals(DetachedEdge.class, edge.getClass()));
+        g.V().out().outE().properties("weight").forEachRemaining(property -> 
assertEquals(DetachedProperty.class, property.getClass()));
+        g.V().out().outE().values("weight").forEachRemaining(value -> 
assertEquals(Double.class, value.getClass()));
+        g.V().out().out().forEachRemaining(vertex -> 
assertEquals(DetachedVertex.class, vertex.getClass()));
+        g.V().out().out().path().forEachRemaining(path -> 
assertEquals(DetachedPath.class, path.getClass()));
+        g.V().out().pageRank().forEachRemaining(vertex -> 
assertEquals(DetachedVertex.class, vertex.getClass()));
+        g.V().out().pageRank().out().forEachRemaining(vertex -> 
assertEquals(DetachedVertex.class, vertex.getClass()));
+    }
+
+    @Test
+    public void shouldReturnReferenceElements() {
+        final Graph graph = TinkerFactory.createModern();
+        GraphTraversalSource g = 
graph.traversal().withComputer().withStrategies(HaltedTraverserStrategy.reference());
+        g.V().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+        g.V().out().properties("name").forEachRemaining(vertexProperty -> 
assertEquals(ReferenceVertexProperty.class, vertexProperty.getClass()));
+        g.V().out().values("name").forEachRemaining(value -> 
assertEquals(String.class, value.getClass()));
+        g.V().out().outE().forEachRemaining(edge -> 
assertEquals(ReferenceEdge.class, edge.getClass()));
+        g.V().out().outE().properties("weight").forEachRemaining(property -> 
assertEquals(ReferenceProperty.class, property.getClass()));
+        g.V().out().outE().values("weight").forEachRemaining(value -> 
assertEquals(Double.class, value.getClass()));
+        g.V().out().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+        g.V().out().out().path().forEachRemaining(path -> 
assertEquals(ReferencePath.class, path.getClass()));
+        g.V().out().pageRank().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+        g.V().out().pageRank().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+        // the default should be reference elements
+        g = graph.traversal().withComputer();
+        g.V().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+        g.V().out().properties("name").forEachRemaining(vertexProperty -> 
assertEquals(ReferenceVertexProperty.class, vertexProperty.getClass()));
+        g.V().out().values("name").forEachRemaining(value -> 
assertEquals(String.class, value.getClass()));
+        g.V().out().outE().forEachRemaining(edge -> 
assertEquals(ReferenceEdge.class, edge.getClass()));
+        g.V().out().outE().properties("weight").forEachRemaining(property -> 
assertEquals(ReferenceProperty.class, property.getClass()));
+        g.V().out().outE().values("weight").forEachRemaining(value -> 
assertEquals(Double.class, value.getClass()));
+        g.V().out().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+        g.V().out().out().path().forEachRemaining(path -> 
assertEquals(ReferencePath.class, path.getClass()));
+        g.V().out().pageRank().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+        g.V().out().pageRank().out().forEachRemaining(vertex -> 
assertEquals(ReferenceVertex.class, vertex.getClass()));
+    }
+
+}

Reply via email to