public TraverserIterator(final Traversal.Admin traversal) { this.traversal = traversal; this.barrierSize = traversal.getTraverserRequirements().contains(TraverserRequirement.ONE_BULK) ? 1 : 1000; this.haltedTraverserStrategy = traversal.getStrategies().getStrategy(HaltedTraverserStrategy.class).orElse( Boolean.valueOf(System.getProperty("is.testing", "false")) ? HaltedTraverserStrategy.detached() : HaltedTraverserStrategy.reference()); }
@Test @LoadGraphWith(MODERN) public void shouldNotHaveAnonymousTraversalMixups() throws Exception { if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) { logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test."); return; } final GraphTraversalSource a = g; final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(6l, a.V().out().count().next().longValue()); assertEquals(6l, b.V().out().count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue()); assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); }
/** * Provides a configuration to a traversal in the form of a key value pair. The key of the configuration must be * graph provider specific and therefore a configuration could be supplied that is not known to be valid until * execution. This is a handy shortcut for building an {@link OptionsStrategy} manually and then add with * {@link #withStrategies(TraversalStrategy[])}. * * @param key the key of the configuration to apply to a traversal * @param value the value of the configuration to apply to a traversal * @return a new traversal source with the included configuration * @since 3.4.0 */ public default TraversalSource with(final String key, final Object value) { final OptionsStrategy.Builder builder = OptionsStrategy.build(); getStrategies().getStrategy(OptionsStrategy.class) .ifPresent(optionsStrategy -> optionsStrategy.getOptions().forEach(builder::with)); builder.with(key, value); return withStrategies(builder.create()); }
@Override protected Vertex map(final Traverser.Admin<S> traverser) { final Vertex vertex = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(traverser)); if (this.callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(eventStrategy.detach(vertex)); this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return vertex; }
@Override protected Traverser.Admin<Vertex> processNextStart() { if (this.first) { this.first = false; final TraverserGenerator generator = this.getTraversal().getTraverserGenerator(); final Vertex vertex = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(generator.generate(false, (Step) this, 1L))); if (this.callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(eventStrategy.detach(vertex)); this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return generator.generate(vertex, this, 1L); } else throw FastNoSuchElementException.instance(); }
@Override protected Edge map(final Traverser.Admin<S> traverser) { Vertex toVertex = this.parameters.get(traverser, TO, () -> (Vertex) traverser.get()).get(0); Vertex fromVertex = this.parameters.get(traverser, FROM, () -> (Vertex) traverser.get()).get(0); if (toVertex instanceof Attachable) toVertex = ((Attachable<Vertex>) toVertex) .attach(Attachable.Method.get(this.getTraversal().getGraph().orElse(EmptyGraph.instance()))); if (fromVertex instanceof Attachable) fromVertex = ((Attachable<Vertex>) fromVertex) .attach(Attachable.Method.get(this.getTraversal().getGraph().orElse(EmptyGraph.instance()))); final String edgeLabel = this.parameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL).get(0); final Edge edge = fromVertex.addEdge(edgeLabel, toVertex, this.parameters.getKeyValues(traverser, TO, FROM, T.label)); if (callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(eventStrategy.detach(edge)); callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return edge; }
final Element toRemove = (Element) s; if (callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event removeEvent; if (s instanceof Vertex) final Property toRemove = (Property) s; if (callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.ElementPropertyEvent removeEvent; if (toRemove.element() instanceof Edge)
final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Property currentProperty = traverser.get().property(key); final boolean newProperty = element instanceof Vertex ? currentProperty == VertexProperty.empty() : currentProperty == Property.empty();
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep) || traversal.getStrategies().getStrategy(RemoteStrategy.class).isPresent()) return;
public TraverserIterator(final Traversal.Admin traversal) { this.traversal = traversal; this.barrierSize = traversal.getTraverserRequirements().contains(TraverserRequirement.ONE_BULK) ? 1 : 1000; this.haltedTraverserStrategy = traversal.getStrategies().getStrategy(HaltedTraverserStrategy.class).orElse( Boolean.valueOf(System.getProperty("is.testing", "false")) ? HaltedTraverserStrategy.detached() : HaltedTraverserStrategy.reference()); }
checkResults(Arrays.asList("purcellville", "baltimore", "oakland", "seattle", "aachen"), sg.V().properties("location").value()); checkResults(Arrays.asList("purcellville", "baltimore", "oakland", "seattle", "aachen"), sg.V().values("location")); if (sg.getStrategies().getStrategy(InlineFilterStrategy.class).isPresent()) assertFalse(TraversalHelper.hasStepOfAssignableClassRecursively(TraversalFilterStep.class, sg.V().properties("location").value().iterate().asAdmin())); checkResults(Arrays.asList("purcellville", "baltimore", "oakland", "seattle", "aachen"), sg.V().as("a").properties("location").as("b").select("a").outE().properties().select("b").value().dedup()); checkResults(Arrays.asList("purcellville", "baltimore", "oakland", "seattle", "aachen"), sg.V().as("a").values("location").as("b").select("a").outE().properties().select("b").dedup()); if (sg.getStrategies().getStrategy(InlineFilterStrategy.class).isPresent()) assertFalse(TraversalHelper.hasStepOfAssignableClassRecursively(TraversalFilterStep.class, sg.V().as("a").values("location").as("b").select("a").outE().properties().select("b").dedup().iterate().asAdmin()));
@Test @LoadGraphWith(MODERN) public void shouldNotHaveAnonymousTraversalMixups() throws Exception { if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) { logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test."); return; } final GraphTraversalSource a = g; final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(6l, a.V().out().count().next().longValue()); assertEquals(6l, b.V().out().count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue()); assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); }
/** * Provides a configuration to a traversal in the form of a key value pair. The key of the configuration must be * graph provider specific and therefore a configuration could be supplied that is not known to be valid until * execution. This is a handy shortcut for building an {@link OptionsStrategy} manually and then add with * {@link #withStrategies(TraversalStrategy[])}. * * @param key the key of the configuration to apply to a traversal * @param value the value of the configuration to apply to a traversal * @return a new traversal source with the included configuration * @since 3.4.0 */ public default TraversalSource with(final String key, final Object value) { final OptionsStrategy.Builder builder = OptionsStrategy.build(); getStrategies().getStrategy(OptionsStrategy.class) .ifPresent(optionsStrategy -> optionsStrategy.getOptions().forEach(builder::with)); builder.with(key, value); return withStrategies(builder.create()); }
@Override protected Vertex map(final Traverser.Admin<S> traverser) { final Vertex vertex = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(traverser)); if (this.callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(eventStrategy.detach(vertex)); this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return vertex; }
@Override protected Traverser.Admin<Vertex> processNextStart() { if (this.first) { this.first = false; final SqlgTraverserGenerator generator = SqlgTraverserGenerator.instance(); final Vertex vertex = this.getTraversal().getGraph().get().addVertex( this.parameters.getKeyValues( generator.generate(false, (Step)this, 1L, false, false) )); if (this.callbackRegistry != null && !this.callbackRegistry.getCallbacks().isEmpty()) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(eventStrategy.detach(vertex)); this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return generator.generate(vertex, (Step)this, 1L, false, false); } else throw FastNoSuchElementException.instance(); }
@Override protected Traverser.Admin<Vertex> processNextStart() { if (this.first) { this.first = false; final SqlgTraverserGenerator generator = SqlgTraverserGenerator.instance(); final Vertex vertex = this.getTraversal().getGraph().get().addVertex( this.parameters.getKeyValues( generator.generate(false, (Step)this, 1L, false, false) )); if (this.callbackRegistry != null && !this.callbackRegistry.getCallbacks().isEmpty()) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(eventStrategy.detach(vertex)); this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return generator.generate(vertex, (Step)this, 1L, false, false); } else throw FastNoSuchElementException.instance(); }
@Override protected Edge map(final Traverser.Admin<S> traverser) { Vertex toVertex = this.parameters.get(traverser, TO, () -> (Vertex) traverser.get()).get(0); Vertex fromVertex = this.parameters.get(traverser, FROM, () -> (Vertex) traverser.get()).get(0); if (toVertex instanceof Attachable) toVertex = ((Attachable<Vertex>) toVertex) .attach(Attachable.Method.get(this.getTraversal().getGraph().orElse(EmptyGraph.instance()))); if (fromVertex instanceof Attachable) fromVertex = ((Attachable<Vertex>) fromVertex) .attach(Attachable.Method.get(this.getTraversal().getGraph().orElse(EmptyGraph.instance()))); final String edgeLabel = this.parameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL).get(0); final Edge edge = fromVertex.addEdge(edgeLabel, toVertex, this.parameters.getKeyValues(traverser, TO, FROM, T.label)); if (callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(eventStrategy.detach(edge)); callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return edge; }
@Override protected Traverser.Admin<Vertex> processNextStart() { if (this.first) { this.first = false; final TraverserGenerator generator = this.getTraversal().getTraverserGenerator(); final Vertex vertex = this.getTraversal().getGraph().get().addVertex(this.parameters.getKeyValues(generator.generate(false, (Step) this, 1L))); if (this.callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.VertexAddedEvent vae = new Event.VertexAddedEvent(eventStrategy.detach(vertex)); this.callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return generator.generate(vertex, this, 1L); } else throw FastNoSuchElementException.instance(); }
final Element toRemove = (Element) s; if (callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event removeEvent; if (s instanceof Vertex) final Property toRemove = (Property) s; if (callbackRegistry != null) { final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Event.ElementPropertyEvent removeEvent; if (toRemove.element() instanceof Edge)
final EventStrategy eventStrategy = getTraversal().getStrategies().getStrategy(EventStrategy.class).get(); final Property currentProperty = traverser.get().property(key); final boolean newProperty = element instanceof Vertex ? currentProperty == VertexProperty.empty() : currentProperty == Property.empty();