protected List<IoRegistry> detectRegistries() { final List<Object> k = parameters.get(IO.registry, null); return k.stream().map(cn -> { try { if (cn instanceof IoRegistry) return (IoRegistry) cn; else { final Class<?> clazz = Class.forName(cn.toString()); return (IoRegistry) clazz.getMethod("instance").invoke(null); } } catch (Exception ex) { throw new IllegalStateException(ex); } }).collect(Collectors.toList()); }
public AddPropertyStep(final Traversal.Admin traversal, final VertexProperty.Cardinality cardinality, final Object keyObject, final Object valueObject) { super(traversal); this.parameters.set(this, T.key, keyObject, T.value, valueObject); this.cardinality = cardinality; }
@Override public AddEdgeStartStep clone() { final AddEdgeStartStep clone = (AddEdgeStartStep) super.clone(); clone.parameters = this.parameters.clone(); return clone; }
@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 public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() { return this.parameters.getTraversals(); }
@Override public int hashCode() { final int hash = super.hashCode() ^ this.parameters.hashCode(); return (null != this.file) ? (hash ^ file.hashCode()) : hash; }
@Override public Set<String> getScopeKeys() { return this.parameters.getReferencedLabels(); }
@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; }
/** * Overwrites all configurations from values passed using {@link GraphTraversal#with(String, Object)}. */ private void addParametersToConfiguration(final Graph graph) { parameters.getRaw(IO.writer, IO.writer, IO.registry).entrySet().forEach(kv -> { if (kv.getValue().size() == 1) graph.configuration().setProperty(kv.getKey().toString(), kv.getValue().get(0)); else { // reset the default configuration with the first option then add to that for List options for (int ix = 0; ix < kv.getValue().size(); ix++) { if (ix == 0) graph.configuration().setProperty(kv.getKey().toString(), kv.getValue().get(ix)); else graph.configuration().addProperty(kv.getKey().toString(), kv.getValue().get(ix)); } } }); }
/** * Remove a key from the parameter set. * * @param key the key to remove * @return the value of the removed key */ public Object remove(final Object key) { final List<Object> o = parameters.remove(key); // once a key is removed, it's possible that the traversal/label cache will need to be regenerated if (IteratorUtils.anyMatch(o.iterator(), p -> p instanceof Traversal.Admin)) { traversals.clear(); traversals = new ArrayList<>(); for (final List<Object> list : this.parameters.values()) { for (final Object object : list) { if (object instanceof Traversal.Admin) { final Traversal.Admin t = (Traversal.Admin) object; addTraversal(t); } } } } return o; }
@Override protected Traverser.Admin<Edge> processNextStart() { if (this.first) { this.first = false; final TraverserGenerator generator = this.getTraversal().getTraverserGenerator(); final Traverser.Admin traverser = generator.generate(1, (Step) this, 1); // a dead traverser to trigger the traversal Vertex toVertex = (Vertex) this.parameters.get(traverser, TO, Collections::emptyList).get(0); Vertex fromVertex = (Vertex) this.parameters.get(traverser, FROM, Collections::emptyList).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 = (String) 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 Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true)); callbackRegistry.getCallbacks().forEach(c -> c.accept(vae)); } return generator.generate(edge, this, 1L); } else throw FastNoSuchElementException.instance(); }
@Override public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() { return this.parameters.getTraversals(); }
@Override public int hashCode() { return super.hashCode() ^ this.parameters.hashCode(); }
@Override public Set<String> getScopeKeys() { return this.parameters.getReferencedLabels(); }
@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 public void apply(final Traversal.Admin<?, ?> traversal) { // since hadoopgraph can't be modified we can't try to use the existing IoStep for standard processing // without graphcomputer if (traversal.getStartStep() instanceof IoStep) throw new VerificationException("HadoopGraph requires a GraphComputer for io() step", traversal); // VertexProgramStrategy should wrap up the IoStep in a TraversalVertexProgramStep. use that to grab the // GraphComputer that was injected in there and push that in to the HadoopIoStep. this step pattern match // is fairly specific and since you really can't chain together steps after io() this approach should work if (traversal.getStartStep() instanceof TraversalVertexProgramStep) { final TraversalVertexProgramStep tvp = (TraversalVertexProgramStep) traversal.getStartStep(); if (tvp.computerTraversal.get().getStartStep() instanceof ReadWriting) { final ReadWriting readWriting = (ReadWriting) tvp.computerTraversal.get().getStartStep(); final HadoopIoStep hadoopIoStep = new HadoopIoStep(traversal, readWriting.getFile()); hadoopIoStep.setMode(readWriting.getMode()); hadoopIoStep.setComputer(tvp.getComputer()); readWriting.getParameters().getRaw().forEach((key, value) -> value.forEach(v -> hadoopIoStep.configure(key, v))); TraversalHelper.replaceStep(tvp, hadoopIoStep, traversal); } } }
if (keyValues[ix + iy] instanceof Traversal.Admin) { final Traversal.Admin t = (Traversal.Admin) keyValues[ix + iy]; addTraversal(t); if (parent != null) parent.integrateChild(t);
@Override protected void sideEffect(final Traverser.Admin<S> traverser) { final String key = (String) this.parameters.get(traverser, T.key, () -> { throw new IllegalStateException("The AddPropertyStep does not have a provided key: " + this); }).get(0); final Object value = this.parameters.get(traverser, T.value, () -> { throw new IllegalStateException("The AddPropertyStep does not have a provided value: " + this); }).get(0); final Object[] vertexPropertyKeyValues = this.parameters.getKeyValues(traverser, T.key, T.value);