Repository: incubator-tinkerpop Updated Branches: refs/heads/TINKERPOP-1310 56c43ea7b -> 8be75a92a
moved HaltedTraverserStrategy to the general strategy package as it can now be used with OLTP. Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/8be75a92 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/8be75a92 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/8be75a92 Branch: refs/heads/TINKERPOP-1310 Commit: 8be75a92aab1f647db966458fd77fa33eedb7c60 Parents: 56c43ea Author: Marko A. Rodriguez <[email protected]> Authored: Thu May 26 12:52:04 2016 -0600 Committer: Marko A. Rodriguez <[email protected]> Committed: Thu May 26 12:52:04 2016 -0600 ---------------------------------------------------------------------- .../computer/traversal/MasterExecutor.java | 5 +- .../traversal/TraversalVertexProgram.java | 2 +- .../computer/traversal/WorkerExecutor.java | 2 +- .../decoration/HaltedTraverserStrategy.java | 69 ------------- .../decoration/HaltedTraverserStrategy.java | 69 +++++++++++++ .../decoration/HaltedTraverserStrategyTest.java | 102 ------------------- .../decoration/HaltedTraverserStrategyTest.java | 102 +++++++++++++++++++ 7 files changed, 175 insertions(+), 176 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8be75a92/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java index 0462950..b83b6d6 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java @@ -20,7 +20,7 @@ package org.apache.tinkerpop.gremlin.process.computer.traversal; import org.apache.tinkerpop.gremlin.process.computer.Memory; -import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.HaltedTraverserStrategy; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy; import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.apache.tinkerpop.gremlin.process.traversal.Step; import org.apache.tinkerpop.gremlin.process.traversal.Traverser; @@ -43,7 +43,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal; import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMatrix; import org.apache.tinkerpop.gremlin.structure.util.Attachable; import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory; -import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory; import java.util.HashSet; import java.util.Iterator; @@ -107,7 +106,7 @@ final class MasterExecutor { while (previousStep.hasNext()) { final Traverser.Admin<Object> result = previousStep.next(); if (result.isHalted()) - haltedTraversers.add(haltedTraverserStrategy.halt(traverser)); + haltedTraversers.add(haltedTraverserStrategy.halt(result)); else if (isRemoteTraverser(result, traversalMatrix)) remoteActiveTraversers.add(result.detach()); else http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8be75a92/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 c9dc053..1a54721 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,7 +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.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; http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8be75a92/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java index 7181992..0a3aad2 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java @@ -21,7 +21,7 @@ package org.apache.tinkerpop.gremlin.process.computer.traversal; import org.apache.tinkerpop.gremlin.process.computer.Memory; import org.apache.tinkerpop.gremlin.process.computer.MessageScope; import org.apache.tinkerpop.gremlin.process.computer.Messenger; -import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.HaltedTraverserStrategy; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy; import org.apache.tinkerpop.gremlin.process.traversal.Step; import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects; import org.apache.tinkerpop.gremlin.process.traversal.Traverser; http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8be75a92/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 deleted file mode 100644 index 968e167..0000000 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/HaltedTraverserStrategy.java +++ /dev/null @@ -1,69 +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.traversal.Traversal; -import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy; -import org.apache.tinkerpop.gremlin.process.traversal.Traverser; -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) { - if (haltedTraverserFactory.equals(DetachedFactory.class) || haltedTraverserFactory.equals(ReferenceFactory.class)) - this.haltedTraverserFactory = haltedTraverserFactory; - else - throw new IllegalArgumentException("The provided traverser detachment factory is unknown: " + haltedTraverserFactory); - } - - public void apply(final Traversal.Admin<?, ?> traversal) { - // do nothing as this is simply a metadata strategy - } - - public Class getHaltedTraverserFactory() { - return this.haltedTraverserFactory; - } - - public <R> Traverser.Admin<R> halt(final Traverser.Admin<R> traverser) { - if (ReferenceFactory.class.equals(this.haltedTraverserFactory)) - traverser.set(ReferenceFactory.detach(traverser.get())); - else - traverser.set(DetachedFactory.detach(traverser.get(), true)); - return traverser; - } - - //////////// - - 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/8be75a92/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/HaltedTraverserStrategy.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/HaltedTraverserStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/HaltedTraverserStrategy.java new file mode 100644 index 0000000..45966f0 --- /dev/null +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/HaltedTraverserStrategy.java @@ -0,0 +1,69 @@ +/* + * 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.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.Traverser; +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) { + if (haltedTraverserFactory.equals(DetachedFactory.class) || haltedTraverserFactory.equals(ReferenceFactory.class)) + this.haltedTraverserFactory = haltedTraverserFactory; + else + throw new IllegalArgumentException("The provided traverser detachment factory is unknown: " + haltedTraverserFactory); + } + + public void apply(final Traversal.Admin<?, ?> traversal) { + // do nothing as this is simply a metadata strategy + } + + public Class getHaltedTraverserFactory() { + return this.haltedTraverserFactory; + } + + public <R> Traverser.Admin<R> halt(final Traverser.Admin<R> traverser) { + if (ReferenceFactory.class.equals(this.haltedTraverserFactory)) + traverser.set(ReferenceFactory.detach(traverser.get())); + else + traverser.set(DetachedFactory.detach(traverser.get(), true)); + return traverser; + } + + //////////// + + 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/8be75a92/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 deleted file mode 100644 index 9c92efe..0000000 --- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/traversal/strategy/decoration/HaltedTraverserStrategyTest.java +++ /dev/null @@ -1,102 +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.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())); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8be75a92/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/decoration/HaltedTraverserStrategyTest.java ---------------------------------------------------------------------- diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/decoration/HaltedTraverserStrategyTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/decoration/HaltedTraverserStrategyTest.java new file mode 100644 index 0000000..0943391 --- /dev/null +++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/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.traversal.strategy.decoration; + +import org.apache.tinkerpop.gremlin.process.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())); + } + +}
