/** * Creates a Map containing "original", "intermediate" and "final" keys. */ @Override public Object transform(final TraversalExplanation value) { final Map<String, Object> result = new HashMap<>(); result.put(ORIGINAL, getTraversalSteps(value.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = value.getStrategyTraversals(); result.put(INTERMEDIATE, strategyTraversals.stream().map(pair -> { final Map<String, Object> item = new HashMap<>(); item.put(STRATEGY, pair.getValue0().toString()); item.put(CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); item.put(TRAVERSAL, getTraversalSteps(pair.getValue1())); return item; }).collect(Collectors.toList())); result.put(FINAL, getTraversalSteps(strategyTraversals.isEmpty() ? value.getOriginalTraversal() : strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); return result; }
@Override public String toString() { return this.prettyPrint(Integer.MAX_VALUE); }
/** * Return a {@link TraversalExplanation} that shows how this traversal will mutate with each applied {@link TraversalStrategy}. * * @return a traversal explanation */ public default TraversalExplanation explain() { if (this.asAdmin().isLocked()) throw new IllegalStateException("The traversal is locked and can not be explained on a strategy-by-strategy basis"); return new TraversalExplanation(this.asAdmin()); }
.map(Pair::getValue1) .map(Object::toString) .map(s -> wordWrap(s, maxTraversalColumn, newLineIndent)) .flatMap(s -> Stream.of(s.split("\n"))) .map(String::trim) builder.append(" "); builder.append(wordWrap(this.traversal.toString(), maxTraversalColumn, newLineIndent)); builder.append("\n\n"); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pairs : this.strategyTraversals) { builder.append(" "); builder.append(wordWrap(pairs.getValue1().toString(), maxTraversalColumn, newLineIndent)).append("\n"); builder.append(" "); builder.append(wordWrap((this.strategyTraversals.size() > 0 ? this.strategyTraversals.get(this.strategyTraversals.size() - 1).getValue1().toString() : this.traversal.toString()), maxTraversalColumn, newLineIndent));
.map(Pair::getValue1) .map(Object::toString) .map(s -> wordWrap(s, maxTraversalColumn, newLineIndent)) .flatMap(s -> Stream.of(s.split("\n"))) .map(String::trim) builder.append(" "); builder.append(wordWrap(this.traversal.toString(), maxTraversalColumn, newLineIndent)); builder.append("\n\n"); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pairs : this.strategyTraversals) { builder.append(" "); builder.append(wordWrap(pairs.getValue1().toString(), maxTraversalColumn, newLineIndent)).append("\n"); builder.append(" "); builder.append(wordWrap((this.strategyTraversals.size() > 0 ? this.strategyTraversals.get(this.strategyTraversals.size() - 1).getValue1().toString() : this.traversal.toString()), maxTraversalColumn, newLineIndent));
@Override public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException { final Map<String, Object> m = new HashMap<>(); m.put(GraphSONTokens.ORIGINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = traversalExplanation.getStrategyTraversals(); final List<Map<String, Object>> intermediates = new ArrayList<>(); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) { final Map<String, Object> intermediate = new HashMap<>(); intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString()); intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1())); intermediates.add(intermediate); } m.put(GraphSONTokens.INTERMEDIATE, intermediates); if (strategyTraversals.isEmpty()) m.put(GraphSONTokens.FINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); else m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); jsonGenerator.writeObject(m); }
public String prettyPrint() { return this.prettyPrint(100); }
/** * Return a {@link TraversalExplanation} that shows how this traversal will mutate with each applied {@link TraversalStrategy}. * * @return a traversal explanation */ public default TraversalExplanation explain() { if (this.asAdmin().isLocked()) throw new IllegalStateException("The traversal is locked and can not be explained on a strategy-by-strategy basis"); return new TraversalExplanation(this.asAdmin()); }
public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException { final Map<String, Object> m = new HashMap<>(); m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals(); final List<Map<String,Object>> intermediates = new ArrayList<>(); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) { final Map<String,Object> intermediate = new HashMap<>(); intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString()); intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1())); intermediates.add(intermediate); } m.put(GraphSONTokens.INTERMEDIATE, intermediates); if (strategyTraversals.isEmpty()) m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal())); else m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); jsonGenerator.writeObject(m); }
@Override public String toString() { return this.prettyPrint(Integer.MAX_VALUE); }
@Override public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException { final Map<String, Object> m = new HashMap<>(); m.put(GraphSONTokens.ORIGINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = traversalExplanation.getStrategyTraversals(); final List<Map<String, Object>> intermediates = new ArrayList<>(); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) { final Map<String, Object> intermediate = new HashMap<>(); intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString()); intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1())); intermediates.add(intermediate); } m.put(GraphSONTokens.INTERMEDIATE, intermediates); if (strategyTraversals.isEmpty()) m.put(GraphSONTokens.FINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); else m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); jsonGenerator.writeObject(m); }
public String prettyPrint() { return this.prettyPrint(100); }
@Test @LoadGraphWith(MODERN) @IgnoreEngine(TraversalEngine.Type.COMPUTER) public void g_V_outE_identity_inV_explain() { final TraversalExplanation explanation = get_g_V_outE_identity_inV_explain(); if (explanation.getStrategyTraversals().stream().map(Pair::getValue0).filter(s -> s instanceof IdentityRemovalStrategy || s instanceof IncidentToAdjacentStrategy).count() == 2) { printTraversalForm(explanation.getOriginalTraversal()); boolean beforeIncident = true; boolean beforeIdentity = true; for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : explanation.getStrategyTraversals()) { if (pair.getValue0().getClass().equals(IncidentToAdjacentStrategy.class)) beforeIncident = false; if (pair.getValue0().getClass().equals(IdentityRemovalStrategy.class)) beforeIdentity = false; if (beforeIdentity) assertEquals(1, TraversalHelper.getStepsOfClass(IdentityStep.class, pair.getValue1()).size()); if (beforeIncident) assertEquals(1, TraversalHelper.getStepsOfClass(EdgeVertexStep.class, pair.getValue1()).size()); if (!beforeIdentity) assertEquals(0, TraversalHelper.getStepsOfClass(IdentityStep.class, pair.getValue1()).size()); if (!beforeIncident) assertEquals(0, TraversalHelper.getStepsOfClass(EdgeVertexStep.class, pair.getValue1()).size()); } assertFalse(beforeIncident); } }
@Override public String prettyPrint(int depth, int indent) { return explanation.prettyPrint(); }
/** * Creates a Map containing "original", "intermediate" and "final" keys. */ @Override public Object transform(final TraversalExplanation value) { final Map<String, Object> result = new HashMap<>(); result.put(ORIGINAL, getTraversalSteps(value.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = value.getStrategyTraversals(); result.put(INTERMEDIATE, strategyTraversals.stream().map(pair -> { final Map<String, Object> item = new HashMap<>(); item.put(STRATEGY, pair.getValue0().toString()); item.put(CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); item.put(TRAVERSAL, getTraversalSteps(pair.getValue1())); return item; }).collect(Collectors.toList())); result.put(FINAL, getTraversalSteps(strategyTraversals.isEmpty() ? value.getOriginalTraversal() : strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); return result; }
resultSet.setPlan(new OGremlinExecutionPlan((TraversalExplanation) eval)); OResultInternal item = new OResultInternal(); item.setProperty("executionPlan", ((TraversalExplanation) eval).prettyPrint()); resultSet.add(item); return resultSet;
@Override public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException { final Map<String, Object> m = new HashMap<>(); m.put(GraphSONTokens.ORIGINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = traversalExplanation.getStrategyTraversals(); final List<Map<String, Object>> intermediates = new ArrayList<>(); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) { final Map<String, Object> intermediate = new HashMap<>(); intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString()); intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1())); intermediates.add(intermediate); } m.put(GraphSONTokens.INTERMEDIATE, intermediates); if (strategyTraversals.isEmpty()) m.put(GraphSONTokens.FINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); else m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); jsonGenerator.writeObject(m); }
public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException { final Map<String, Object> m = new HashMap<>(); m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals(); final List<Map<String,Object>> intermediates = new ArrayList<>(); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) { final Map<String,Object> intermediate = new HashMap<>(); intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString()); intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1())); intermediates.add(intermediate); } m.put(GraphSONTokens.INTERMEDIATE, intermediates); if (strategyTraversals.isEmpty()) m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal())); else m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); jsonGenerator.writeObject(m); }
@Override public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException { final Map<String, Object> m = new HashMap<>(); m.put(GraphSONTokens.ORIGINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = traversalExplanation.getStrategyTraversals(); final List<Map<String, Object>> intermediates = new ArrayList<>(); for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) { final Map<String, Object> intermediate = new HashMap<>(); intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString()); intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName()); intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1())); intermediates.add(intermediate); } m.put(GraphSONTokens.INTERMEDIATE, intermediates); if (strategyTraversals.isEmpty()) m.put(GraphSONTokens.FINAL, getStepsAsList(traversalExplanation.getOriginalTraversal())); else m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1())); jsonGenerator.writeObject(m); }
@Test @LoadGraphWith(MODERN) @IgnoreEngine(TraversalEngine.Type.COMPUTER) public void g_V_outE_identity_inV_explain() { final TraversalExplanation explanation = get_g_V_outE_identity_inV_explain(); if (explanation.getStrategyTraversals().stream().map(Pair::getValue0).filter(s -> s instanceof IdentityRemovalStrategy || s instanceof IncidentToAdjacentStrategy).count() == 2) { printTraversalForm(explanation.getOriginalTraversal()); boolean beforeIncident = true; boolean beforeIdentity = true; for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : explanation.getStrategyTraversals()) { if (pair.getValue0().getClass().equals(IncidentToAdjacentStrategy.class)) beforeIncident = false; if (pair.getValue0().getClass().equals(IdentityRemovalStrategy.class)) beforeIdentity = false; if (beforeIdentity) assertEquals(1, TraversalHelper.getStepsOfClass(IdentityStep.class, pair.getValue1()).size()); if (beforeIncident) assertEquals(1, TraversalHelper.getStepsOfClass(EdgeVertexStep.class, pair.getValue1()).size()); if (!beforeIdentity) assertEquals(0, TraversalHelper.getStepsOfClass(IdentityStep.class, pair.getValue1()).size()); if (!beforeIncident) assertEquals(0, TraversalHelper.getStepsOfClass(EdgeVertexStep.class, pair.getValue1()).size()); } assertFalse(beforeIncident); } }