/** * Get both the {@link TraversalSource} and {@link Traversal} instructions of this bytecode. * The traversal source instructions are provided prior to the traversal instructions. * * @return an interable of all the instructions in this bytecode */ public Iterable<Instruction> getInstructions() { return () -> IteratorUtils.concat(this.sourceInstructions.iterator(), this.stepInstructions.iterator()); }
@Override public Iterator<Edge> edges(final Direction direction, final String... edgeLabels) { if (direction.equals(Direction.OUT)) { return null == this.outEdges ? Collections.emptyIterator() : edgeLabels.length == 0 ? IteratorUtils.flatMap(this.outEdges.values().iterator(), List::iterator) : this.outEdges.entrySet().stream() .filter(entry -> ElementHelper.keyExists(entry.getKey(), edgeLabels)) .map(Map.Entry::getValue) .flatMap(List::stream) .iterator(); } else if (direction.equals(Direction.IN)) { return null == this.inEdges ? Collections.emptyIterator() : edgeLabels.length == 0 ? IteratorUtils.flatMap(this.inEdges.values().iterator(), List::iterator) : this.inEdges.entrySet().stream() .filter(entry -> ElementHelper.keyExists(entry.getKey(), edgeLabels)) .map(Map.Entry::getValue) .flatMap(List::stream) .iterator(); } else return IteratorUtils.concat(this.edges(Direction.IN, edgeLabels), this.edges(Direction.OUT, edgeLabels)); }
@Override public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) { this.graph.tx().readWrite(); return new Iterator<Vertex>() { final Iterator<Neo4jRelationship> relationshipIterator = IteratorUtils.filter(0 == edgeLabels.length ? BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() : BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT), (edgeLabels)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN), (edgeLabels)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), graph.trait.getRelationshipPredicate()); @Override public boolean hasNext() { return this.relationshipIterator.hasNext(); } @Override public Neo4jVertex next() { return new Neo4jVertex(this.relationshipIterator.next().other(getBaseVertex()), graph); } }; }
@Override public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) { return TinkerHelper.inComputerMode(this.graph) ? direction.equals(Direction.BOTH) ? IteratorUtils.concat( IteratorUtils.map(this.edges(Direction.OUT, edgeLabels), Edge::inVertex), IteratorUtils.map(this.edges(Direction.IN, edgeLabels), Edge::outVertex)) : IteratorUtils.map(this.edges(direction, edgeLabels), edge -> edge.vertices(direction.opposite()).next()) : (Iterator) TinkerHelper.getVertices(this, direction, edgeLabels); }
@Override public Iterator<Edge> edges(final Direction direction, final String... edgeLabels) { this.graph.tx().readWrite(); return new Iterator<Edge>() { final Iterator<Neo4jRelationship> relationshipIterator = IteratorUtils.filter(0 == edgeLabels.length ? BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() : BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT), (edgeLabels)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN), (edgeLabels)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), graph.trait.getRelationshipPredicate()); @Override public boolean hasNext() { return this.relationshipIterator.hasNext(); } @Override public Neo4jEdge next() { return new Neo4jEdge(this.relationshipIterator.next(), graph); } }; }
@Override public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) { if (direction.equals(Direction.OUT)) return IteratorUtils.map(this.edges(direction, edgeLabels), Edge::inVertex); else if (direction.equals(Direction.IN)) return IteratorUtils.map(this.edges(direction, edgeLabels), Edge::outVertex); else return IteratorUtils.concat(this.vertices(Direction.IN, edgeLabels), this.vertices(Direction.OUT, edgeLabels)); }
/** * Get both the {@link TraversalSource} and {@link Traversal} instructions of this bytecode. * The traversal source instructions are provided prior to the traversal instructions. * * @return an interable of all the instructions in this bytecode */ public Iterable<Instruction> getInstructions() { return () -> IteratorUtils.concat(this.sourceInstructions.iterator(), this.stepInstructions.iterator()); }
tuple -> IteratorUtils.concat( IteratorUtils.of(new Tuple2<>(tuple._1(), tuple._2().getView())), // emit the view payload IteratorUtils.map(tuple._2().getOutgoingMessages().iterator(), message -> new Tuple2<>(message._1(), new MessagePayload<>(message._2()))));
@Override public Iterator<Edge> edges(final Direction direction, final String... edgeLabels) { if (direction.equals(Direction.OUT)) { return null == this.outEdges ? Collections.emptyIterator() : edgeLabels.length == 0 ? IteratorUtils.flatMap(this.outEdges.values().iterator(), List::iterator) : this.outEdges.entrySet().stream() .filter(entry -> ElementHelper.keyExists(entry.getKey(), edgeLabels)) .map(Map.Entry::getValue) .flatMap(List::stream) .iterator(); } else if (direction.equals(Direction.IN)) { return null == this.inEdges ? Collections.emptyIterator() : edgeLabels.length == 0 ? IteratorUtils.flatMap(this.inEdges.values().iterator(), List::iterator) : this.inEdges.entrySet().stream() .filter(entry -> ElementHelper.keyExists(entry.getKey(), edgeLabels)) .map(Map.Entry::getValue) .flatMap(List::stream) .iterator(); } else return IteratorUtils.concat(this.edges(Direction.IN, edgeLabels), this.edges(Direction.OUT, edgeLabels)); }
@Override public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) { this.graph.tx().readWrite(); return new Iterator<Vertex>() { final Iterator<Neo4jRelationship> relationshipIterator = IteratorUtils.filter(0 == edgeLabels.length ? BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() : BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT), (edgeLabels)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN), (edgeLabels)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), graph.trait.getRelationshipPredicate()); @Override public boolean hasNext() { return this.relationshipIterator.hasNext(); } @Override public Neo4jVertex next() { return new Neo4jVertex(this.relationshipIterator.next().other(getBaseVertex()), graph); } }; }
@Override public Iterator<Edge> edges(final Direction direction, final String... edgeLabels) { this.graph.tx().readWrite(); return new Iterator<Edge>() { final Iterator<Neo4jRelationship> relationshipIterator = IteratorUtils.filter(0 == edgeLabels.length ? BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() : BOTH == direction ? IteratorUtils.concat(getBaseVertex().relationships(Neo4jHelper.mapDirection(OUT), (edgeLabels)).iterator(), getBaseVertex().relationships(Neo4jHelper.mapDirection(IN), (edgeLabels)).iterator()) : getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), graph.trait.getRelationshipPredicate()); @Override public boolean hasNext() { return this.relationshipIterator.hasNext(); } @Override public Neo4jEdge next() { return new Neo4jEdge(this.relationshipIterator.next(), graph); } }; }
@Override public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) { return TinkerHelper.inComputerMode(this.graph) ? direction.equals(Direction.BOTH) ? IteratorUtils.concat( IteratorUtils.map(this.edges(Direction.OUT, edgeLabels), Edge::inVertex), IteratorUtils.map(this.edges(Direction.IN, edgeLabels), Edge::outVertex)) : IteratorUtils.map(this.edges(direction, edgeLabels), edge -> edge.vertices(direction.opposite()).next()) : (Iterator) TinkerHelper.getVertices(this, direction, edgeLabels); }
@Override public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) { return TinkerHelper.inComputerMode(this.graph) ? direction.equals(Direction.BOTH) ? IteratorUtils.concat( IteratorUtils.map(this.edges(Direction.OUT, edgeLabels), Edge::inVertex), IteratorUtils.map(this.edges(Direction.IN, edgeLabels), Edge::outVertex)) : IteratorUtils.map(this.edges(direction, edgeLabels), edge -> edge.vertices(direction.opposite()).next()) : (Iterator) TinkerHelper.getVertices(this, direction, edgeLabels); }
@Override public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) { if (direction.equals(Direction.OUT)) return IteratorUtils.map(this.edges(direction, edgeLabels), Edge::inVertex); else if (direction.equals(Direction.IN)) return IteratorUtils.map(this.edges(direction, edgeLabels), Edge::outVertex); else return IteratorUtils.concat(this.vertices(Direction.IN, edgeLabels), this.vertices(Direction.OUT, edgeLabels)); }
tuple -> IteratorUtils.concat( IteratorUtils.of(new Tuple2<>(tuple._1(), tuple._2().getView())), // emit the view payload IteratorUtils.map(tuple._2().getOutgoingMessages().iterator(), message -> new Tuple2<>(message._1(), new MessagePayload<>(message._2()))));
tuple -> IteratorUtils.concat( IteratorUtils.of(new Tuple2<>(tuple._1(), tuple._2().getView())), // emit the view payload IteratorUtils.map(tuple._2().getOutgoingMessages().iterator(), message -> new Tuple2<>(message._1(), new MessagePayload<>(message._2()))));