Java Code Examples for org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper#getStepsOfClass()
The following examples show how to use
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper#getStepsOfClass() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: HugeGraphStepStrategy.java From hugegraph with Apache License 2.0 | 6 votes |
@Override @SuppressWarnings({ "rawtypes", "unchecked" }) public void apply(Traversal.Admin<?, ?> traversal) { TraversalUtil.convAllHasSteps(traversal); // Extract conditions in GraphStep List<GraphStep> steps = TraversalHelper.getStepsOfClass( GraphStep.class, traversal); for (GraphStep originStep : steps) { HugeGraphStep<?, ?> newStep = new HugeGraphStep<>(originStep); TraversalHelper.replaceStep(originStep, newStep, traversal); TraversalUtil.extractHasContainer(newStep, traversal); // TODO: support order-by optimize // TraversalUtil.extractOrder(newStep, traversal); TraversalUtil.extractRange(newStep, traversal, false); TraversalUtil.extractCount(newStep, traversal); } }
Example 2
Source File: HugeVertexStepStrategy.java From hugegraph with Apache License 2.0 | 6 votes |
@Override @SuppressWarnings({ "rawtypes", "unchecked" }) public void apply(final Traversal.Admin<?, ?> traversal) { TraversalUtil.convAllHasSteps(traversal); List<VertexStep> steps = TraversalHelper.getStepsOfClass( VertexStep.class, traversal); for (VertexStep originStep : steps) { HugeVertexStep<?> newStep = new HugeVertexStep<>(originStep); TraversalHelper.replaceStep(originStep, newStep, traversal); TraversalUtil.extractHasContainer(newStep, traversal); // TODO: support order-by optimize // TraversalUtil.extractOrder(newStep, traversal); TraversalUtil.extractRange(newStep, traversal, true); TraversalUtil.extractCount(newStep, traversal); } }
Example 3
Source File: TinkerGraphStepStrategy.java From tinkergraph-gremlin with Apache License 2.0 | 6 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (TraversalHelper.onGraphComputer(traversal)) return; for (final GraphStep originalGraphStep : TraversalHelper.getStepsOfClass(GraphStep.class, traversal)) { final TinkerGraphStep<?, ?> tinkerGraphStep = new TinkerGraphStep<>(originalGraphStep); TraversalHelper.replaceStep(originalGraphStep, tinkerGraphStep, traversal); Step<?, ?> currentStep = tinkerGraphStep.getNextStep(); while (currentStep instanceof HasStep || currentStep instanceof NoOpBarrierStep) { if (currentStep instanceof HasStep) { for (final HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) { if (!GraphStep.processHasContainerIds(tinkerGraphStep, hasContainer)) tinkerGraphStep.addHasContainer(hasContainer); } TraversalHelper.copyLabels(currentStep, currentStep.getPreviousStep(), false); traversal.removeStep(currentStep); } currentStep = currentStep.getNextStep(); } } }
Example 4
Source File: BitsyTraversalStrategy.java From bitsy with Apache License 2.0 | 6 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final GraphStep originalGraphStep : TraversalHelper.getStepsOfClass(GraphStep.class, traversal)) { final BitsyGraphStep<?, ?> bitsyGraphStep = new BitsyGraphStep<>(originalGraphStep); TraversalHelper.replaceStep(originalGraphStep, bitsyGraphStep, traversal); Step<?, ?> currentStep = bitsyGraphStep.getNextStep(); while (currentStep instanceof HasStep || currentStep instanceof NoOpBarrierStep) { if (currentStep instanceof HasStep) { for (final HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) { if (!GraphStep.processHasContainerIds(bitsyGraphStep, hasContainer)) bitsyGraphStep.addHasContainer(hasContainer); } TraversalHelper.copyLabels(currentStep, currentStep.getPreviousStep(), false); traversal.removeStep(currentStep); } currentStep = currentStep.getNextStep(); } } }
Example 5
Source File: JanusGraphTraversalUtil.java From grakn with GNU Affero General Public License v3.0 | 6 votes |
/** * This method searches the traversal for traversal parents which are multiQuery compatible. * Being multiQuery compatible is not solely determined by the class of the parent step, it * must also have a vertex step as the first step in one of its local or global children. * * @param traversal The traversal in which to search for multiQuery compatible steps * @return A list of traversal parents which were multiQuery compatible */ public static List<Step> getMultiQueryCompatibleSteps(Traversal.Admin<?, ?> traversal) { final Set<Step> multiQueryCompatibleSteps = new HashSet<>(); for (Step step : traversal.getSteps()) { if (isMultiQueryCompatibleStep(step)) { Step parentStep = step; ((TraversalParent) parentStep).getGlobalChildren().forEach(childTraversal -> getMultiQueryCompatibleStepsFromChildTraversal(childTraversal, parentStep, multiQueryCompatibleSteps)); ((TraversalParent) parentStep).getLocalChildren().forEach(childTraversal -> getMultiQueryCompatibleStepsFromChildTraversal(childTraversal, parentStep, multiQueryCompatibleSteps)); if (parentStep instanceof RepeatStep && multiQueryCompatibleSteps.contains(parentStep)) { RepeatStep repeatStep = (RepeatStep) parentStep; List<RepeatEndStep> repeatEndSteps = TraversalHelper.getStepsOfClass(RepeatEndStep.class, repeatStep.getRepeatTraversal()); if (repeatEndSteps.size() == 1) { // Want the RepeatEndStep so the start of one iteration can feed into the next multiQueryCompatibleSteps.remove(parentStep); multiQueryCompatibleSteps.add(repeatEndSteps.get(0)); } } } } return Lists.newArrayList(multiQueryCompatibleSteps); }
Example 6
Source File: HBaseVertexStepStrategy.java From hgraphdb with Apache License 2.0 | 6 votes |
@SuppressWarnings("unchecked") @Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final VertexStep originalVertexStep : TraversalHelper.getStepsOfClass(VertexStep.class, traversal)) { final HBaseVertexStep<?> hbaseVertexStep = new HBaseVertexStep<>(originalVertexStep); TraversalHelper.replaceStep(originalVertexStep, hbaseVertexStep, traversal); Step<?, ?> currentStep = hbaseVertexStep.getNextStep(); while (currentStep instanceof HasStep || currentStep instanceof NoOpBarrierStep) { if (currentStep instanceof HasStep) { for (final HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) { hbaseVertexStep.addHasContainer(hasContainer); } TraversalHelper.copyLabels(currentStep, currentStep.getPreviousStep(), false); traversal.removeStep(currentStep); } currentStep = currentStep.getNextStep(); } } }
Example 7
Source File: HBaseGraphStepStrategy.java From hgraphdb with Apache License 2.0 | 6 votes |
@SuppressWarnings("unchecked") @Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final GraphStep originalGraphStep : TraversalHelper.getStepsOfClass(GraphStep.class, traversal)) { final HBaseGraphStep<?, ?> hbaseGraphStep = new HBaseGraphStep<>(originalGraphStep); TraversalHelper.replaceStep(originalGraphStep, hbaseGraphStep, traversal); Step<?, ?> currentStep = hbaseGraphStep.getNextStep(); while (currentStep instanceof HasStep || currentStep instanceof NoOpBarrierStep) { if (currentStep instanceof HasStep) { for (final HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) { if (!GraphStep.processHasContainerIds(hbaseGraphStep, hasContainer)) hbaseGraphStep.addHasContainer(hasContainer); } TraversalHelper.copyLabels(currentStep, currentStep.getPreviousStep(), false); traversal.removeStep(currentStep); } currentStep = currentStep.getNextStep(); } } }
Example 8
Source File: GraphFilterStrategy.java From tinkerpop with Apache License 2.0 | 6 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (TraversalHelper.getStepsOfAssignableClass(VertexProgramStep.class, traversal).size() > 1) // do not do if there is an OLAP chain return; final Graph graph = traversal.getGraph().orElse(EmptyGraph.instance()); // given that this strategy only works for single OLAP jobs, the graph is the traversal graph for (final TraversalVertexProgramStep step : TraversalHelper.getStepsOfClass(TraversalVertexProgramStep.class, traversal)) { // will be zero or one step final Traversal.Admin<?, ?> computerTraversal = step.generateProgram(graph, EmptyMemory.instance()).getTraversal().get().clone(); if (!computerTraversal.isLocked()) computerTraversal.applyStrategies(); final Computer computer = step.getComputer(); if (null == computer.getEdges() && !GraphComputer.Persist.EDGES.equals(computer.getPersist())) { // if edges() already set, use it final Traversal.Admin<Vertex, Edge> edgeFilter = getEdgeFilter(computerTraversal); if (null != edgeFilter) // if no edges can be filtered, then don't set edges() step.setComputer(computer.edges(edgeFilter)); } } }
Example 9
Source File: TinkerGraphStepStrategy.java From tinkerpop with Apache License 2.0 | 6 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (TraversalHelper.onGraphComputer(traversal)) return; for (final GraphStep originalGraphStep : TraversalHelper.getStepsOfClass(GraphStep.class, traversal)) { final TinkerGraphStep<?, ?> tinkerGraphStep = new TinkerGraphStep<>(originalGraphStep); TraversalHelper.replaceStep(originalGraphStep, tinkerGraphStep, traversal); Step<?, ?> currentStep = tinkerGraphStep.getNextStep(); while (currentStep instanceof HasStep || currentStep instanceof NoOpBarrierStep) { if (currentStep instanceof HasStep) { for (final HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) { if (!GraphStep.processHasContainerIds(tinkerGraphStep, hasContainer)) tinkerGraphStep.addHasContainer(hasContainer); } TraversalHelper.copyLabels(currentStep, currentStep.getPreviousStep(), false); traversal.removeStep(currentStep); } currentStep = currentStep.getNextStep(); } } }
Example 10
Source File: Neo4jGraphStepStrategy.java From tinkerpop with Apache License 2.0 | 6 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final GraphStep originalGraphStep : TraversalHelper.getStepsOfClass(GraphStep.class, traversal)) { final Neo4jGraphStep<?, ?> neo4jGraphStep = new Neo4jGraphStep<>(originalGraphStep); TraversalHelper.replaceStep(originalGraphStep, neo4jGraphStep, traversal); Step<?, ?> currentStep = neo4jGraphStep.getNextStep(); while (currentStep instanceof HasStep || currentStep instanceof NoOpBarrierStep) { if (currentStep instanceof HasStep) { for (final HasContainer hasContainer : ((HasContainerHolder) currentStep).getHasContainers()) { if (!GraphStep.processHasContainerIds(neo4jGraphStep, hasContainer)) neo4jGraphStep.addHasContainer(hasContainer); } TraversalHelper.copyLabels(currentStep, currentStep.getPreviousStep(), false); traversal.removeStep(currentStep); } currentStep = currentStep.getNextStep(); } } }
Example 11
Source File: JanusGraphVertexStep.java From grakn with GNU Affero General Public License v3.0 | 5 votes |
/** * Many parent traversals drip feed their start vertices in one at a time. To best exploit * the multiQuery we need to load all possible starts in one go so this method will attempt * to find a JanusGraphMultiQueryStep with the starts of the parent, and if found cache it. */ private void setParentMultiQueryStep() { Step firstStep = traversal.getStartStep(); while (firstStep instanceof StartStep || firstStep instanceof SideEffectStep) { // Want the next step if this is a side effect firstStep = firstStep.getNextStep(); } if (this.equals(firstStep)) { Step<?, ?> parentStep = traversal.getParent().asStep(); if (JanusGraphTraversalUtil.isMultiQueryCompatibleStep(parentStep)) { Step<?, ?> parentPreviousStep = parentStep.getPreviousStep(); if (parentStep instanceof RepeatStep) { RepeatStep repeatStep = (RepeatStep) parentStep; List<RepeatEndStep> repeatEndSteps = TraversalHelper.getStepsOfClass(RepeatEndStep.class, repeatStep.getRepeatTraversal()); if (repeatEndSteps.size() == 1) { parentPreviousStep = repeatEndSteps.get(0).getPreviousStep(); } } if (parentPreviousStep instanceof ProfileStep) { parentPreviousStep = parentPreviousStep.getPreviousStep(); } if (parentPreviousStep instanceof JanusGraphMultiQueryStep) { parentMultiQueryStep = (JanusGraphMultiQueryStep) parentPreviousStep; } } } }
Example 12
Source File: IdentityRemovalStrategy.java From tinkerpop with Apache License 2.0 | 5 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (traversal.getSteps().size() <= 1) return; for (final IdentityStep<?> identityStep : TraversalHelper.getStepsOfClass(IdentityStep.class, traversal)) { if (identityStep.getLabels().isEmpty() || !(identityStep.getPreviousStep() instanceof EmptyStep)) { TraversalHelper.copyLabels(identityStep, identityStep.getPreviousStep(), false); traversal.removeStep(identityStep); } } }
Example 13
Source File: SubgraphStrategyTraverseTest.java From tinkerpop with Apache License 2.0 | 5 votes |
@Test public void shouldSubgraph() { final SubgraphStrategy strategy = SubgraphStrategy.build().edges(__.identity()).vertices(__.identity()).create(); strategy.apply(traversal.asAdmin()); final List<TraversalFilterStep> steps = TraversalHelper.getStepsOfClass(TraversalFilterStep.class, traversal.asAdmin()); assertEquals(expectedInsertedSteps, steps.size()); }
Example 14
Source File: SparkSingleIterationStrategy.java From tinkerpop with Apache License 2.0 | 5 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { final Graph graph = traversal.getGraph().orElse(EmptyGraph.instance()); // best guess at what the graph will be as its dynamically determined for (final TraversalVertexProgramStep step : TraversalHelper.getStepsOfClass(TraversalVertexProgramStep.class, traversal)) { final Traversal.Admin<?, ?> computerTraversal = step.generateProgram(graph, EmptyMemory.instance()).getTraversal().get().clone(); if (!computerTraversal.isLocked()) computerTraversal.applyStrategies(); /// boolean doesMessagePass = TraversalHelper.hasStepOfAssignableClassRecursively(Scope.global, MULTI_ITERATION_CLASSES, computerTraversal); if (!doesMessagePass) { for (final VertexStep vertexStep : TraversalHelper.getStepsOfAssignableClassRecursively(Scope.global, VertexStep.class, computerTraversal)) { if (vertexStep.returnsVertex() || !vertexStep.getDirection().equals(Direction.OUT)) { // in-edges require message pass in OLAP doesMessagePass = true; break; } } } if (!doesMessagePass && !MessagePassingReductionStrategy.endsWithElement(computerTraversal.getEndStep()) && !(computerTraversal.getTraverserRequirements().contains(TraverserRequirement.LABELED_PATH) || // TODO: remove this when dynamic detachment is available in 3.3.0 computerTraversal.getTraverserRequirements().contains(TraverserRequirement.PATH))) { // TODO: remove this when dynamic detachment is available in 3.3.0 step.setComputer(step.getComputer() // if no message passing, don't partition the loaded graph .configure(Constants.GREMLIN_SPARK_SKIP_PARTITIONER, true) // if no message passing, don't cache the loaded graph .configure(Constants.GREMLIN_SPARK_SKIP_GRAPH_CACHE, true)); } } }
Example 15
Source File: SparkInterceptorStrategy.java From tinkerpop with Apache License 2.0 | 5 votes |
@Override public void apply(final Traversal.Admin<?, ?> traversal) { final Graph graph = traversal.getGraph().orElse(EmptyGraph.instance()); // best guess at what the graph will be as its dynamically determined for (final TraversalVertexProgramStep step : TraversalHelper.getStepsOfClass(TraversalVertexProgramStep.class, traversal)) { final Traversal.Admin<?, ?> computerTraversal = step.generateProgram(graph, EmptyMemory.instance()).getTraversal().get().clone(); if (!computerTraversal.isLocked()) computerTraversal.applyStrategies(); if (SparkStarBarrierInterceptor.isLegal(computerTraversal)) { step.setComputer(step.getComputer() .configure(Constants.GREMLIN_SPARK_SKIP_PARTITIONER, true) .configure(Constants.GREMLIN_SPARK_SKIP_GRAPH_CACHE, true) .configure(Constants.GREMLIN_HADOOP_VERTEX_PROGRAM_INTERCEPTOR, SparkStarBarrierInterceptor.class.getCanonicalName())); } } }
Example 16
Source File: HugeCountStepStrategy.java From hugegraph with Apache License 2.0 | 4 votes |
@Override @SuppressWarnings({ "rawtypes", "unchecked" }) public void apply(Traversal.Admin<?, ?> traversal) { TraversalUtil.convAllHasSteps(traversal); // Extract CountGlobalStep List<CountGlobalStep> steps = TraversalHelper.getStepsOfClass( CountGlobalStep.class, traversal); if (steps.isEmpty()) { return; } // Find HugeGraphStep before count() CountGlobalStep<?> originStep = steps.get(0); List<Step<?, ?>> originSteps = new ArrayList<>(); HugeGraphStep<?, ? extends Element> graphStep = null; Step<?, ?> step = originStep; do { if (!(step instanceof CountGlobalStep || step instanceof GraphStep || step instanceof IdentityStep || step instanceof NoOpBarrierStep || step instanceof CollectingBarrierStep) || (step instanceof TraversalParent && TraversalHelper.anyStepRecursively(s -> { return s instanceof SideEffectStep || s instanceof AggregateStep; }, (TraversalParent) step))) { return; } originSteps.add(step); if (step instanceof HugeGraphStep) { graphStep = (HugeGraphStep<?, ? extends Element>) step; break; } step = step.getPreviousStep(); } while (step != null); if (graphStep == null) { return; } // Replace with HugeCountStep graphStep.queryInfo().aggregate(AggregateFunc.COUNT, null); HugeCountStep<?> countStep = new HugeCountStep<>(traversal, graphStep); for (Step<?, ?> origin : originSteps) { traversal.removeStep(origin); } traversal.addStep(0, countStep); }