/** * Get the object associated with the specified step-label in the traverser's path history. * * @param stepLabel the step-label in the path to access * @param <A> the type of the object * @return the object associated with that path label (if more than one object occurs at that step, a list is returned) */ public default <A> A path(final String stepLabel) { return this.path().get(stepLabel); }
private Map<String, E> getBindings(final Traverser<S> traverser) { final Map<String, E> bindings = new HashMap<>(); traverser.path().forEach((object, labels) -> { for (final String label : labels) { if (this.matchStartLabels.contains(label) || this.matchEndLabels.contains(label)) bindings.put(label, (E) object); } }); return bindings; }
public default <A> A path(final Pop pop, final String stepLabel) { return this.path().get(pop, stepLabel); }
private boolean isDuplicate(final Traverser<S> traverser) { if (null == this.dedups) return false; final Path path = traverser.path(); for (final String label : this.dedupLabels) { if (!path.hasLabel(label)) return false; } final List<Object> objects = new ArrayList<>(this.dedupLabels.size()); for (final String label : this.dedupLabels) { objects.add(path.get(Pop.last, label)); } return this.dedups.contains(objects); }
@Override public void execute(final Vertex vertex, final Messenger messenger, final Memory memory) { if (memory.isInitialIteration()) { final Property<TraverserSet> haltedTraversers = vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS); if (!haltedTraversers.isPresent()) return; final Iterator iterator = haltedTraversers.value().iterator(); if (iterator.hasNext()) { while (iterator.hasNext()) { final Traverser t = (Traverser) iterator.next(); if (!(t.path() instanceof EmptyPath)) { final int pathLength = t.path().size(); final List<Pair<Vertex, Integer>> memoryValue = new LinkedList<>(); memoryValue.add(Pair.with(vertex, pathLength)); memory.add(LENGTHS_KEY, memoryValue); } } } } else { if (memory.exists(LENGTHS_KEY)) { final List<Pair<Vertex, Integer>> lengths = memory.get(LENGTHS_KEY); for (final Pair<Vertex, Integer> pair : lengths) { if (pair.getValue0().equals(vertex)) { vertex.property(VertexProperty.Cardinality.list, propertyKey, pair.getValue1()); } } } } }
@Override public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_mapXa_nameX() { return g.withPath().V().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name")); }
@Override public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_out_mapXa_name_it_nameX() { return g.withPath().V().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name")); }
private Map<String, E> getBindings(final Traverser<S> traverser) { final Map<String, E> bindings = new HashMap<>(); traverser.path().forEach((object, labels) -> { for (final String label : labels) { if (this.matchStartLabels.contains(label) || this.matchEndLabels.contains(label)) bindings.put(label, (E) object); } }); return bindings; }
/** * Get the object associated with the specified step-label in the traverser's path history. * * @param stepLabel the step-label in the path to access * @param <A> the type of the object * @return the object associated with that path label (if more than one object occurs at that step, a list is returned) */ public default <A> A path(final String stepLabel) { return this.path().get(stepLabel); }
public default <A> A path(final Pop pop, final String stepLabel) { return this.path().get(pop, stepLabel); }
private boolean isDuplicate(final Traverser<S> traverser) { if (null == this.dedups) return false; final Path path = traverser.path(); for (final String label : this.dedupLabels) { if (!path.hasLabel(label)) return false; } final List<Object> objects = new ArrayList<>(this.dedupLabels.size()); for (final String label : this.dedupLabels) { objects.add(path.get(Pop.last, label)); } return this.dedups.contains(objects); }
@Override public void execute(final Vertex vertex, final Messenger messenger, final Memory memory) { if (memory.isInitialIteration()) { final Property<TraverserSet> haltedTraversers = vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS); if (!haltedTraversers.isPresent()) return; final Iterator iterator = haltedTraversers.value().iterator(); if (iterator.hasNext()) { while (iterator.hasNext()) { final Traverser t = (Traverser) iterator.next(); if (!(t.path() instanceof EmptyPath)) { final int pathLength = t.path().size(); final List<Pair<Vertex, Integer>> memoryValue = new LinkedList<>(); memoryValue.add(Pair.with(vertex, pathLength)); memory.add(LENGTHS_KEY, memoryValue); } } } } else { if (memory.exists(LENGTHS_KEY)) { final List<Pair<Vertex, Integer>> lengths = memory.get(LENGTHS_KEY); for (final Pair<Vertex, Integer> pair : lengths) { if (pair.getValue0().equals(vertex)) { vertex.property(VertexProperty.Cardinality.list, propertyKey, pair.getValue1()); } } } } }
@Override public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_mapXa_nameX() { return g.withPath().V().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name")); }
@Override public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_out_mapXa_name_it_nameX() { return g.withPath().V().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name")); }
protected void createMissingFiles() { GraphTraversalSource g = traversal(); // Loop until we can't find anymore missing files long implicitCreation = 1; while (implicitCreation > 0) { implicitCreation = g.V().hasLabel(Bdio.Class.File.name()) .as("f").values(Bdio.DataProperty.path.name()).dedup().aggregate("paths") .select("f").values(options().fileParentKey().get()).where(without("paths")) .dedup().as("path") .addV(Bdio.Class.File.name()) .property(Bdio.DataProperty.path.name(), select("path")) .property(Bdio.DataProperty.fileSystemType.name(), Bdio.FileSystemType.DIRECTORY.toString()) .sideEffect(t -> { HID.from(t.path("path")).tryParent().map(HID::toUriString).ifPresent(v -> t.get().property(options().fileParentKey().get(), v)); options().identifierKey().ifPresent(key -> t.get().property(key, BdioObject.randomId())); }) .count().next(); } }