You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/05/29 00:44:04 UTC
incubator-tinkerpop git commit: Neo4jGraph is smart about ids given
new designs in TP3. ElementHelper has a mixedId validator.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/neo4j-gremlin-apache dffcc033b -> 47f513070
Neo4jGraph is smart about ids given new designs in TP3. ElementHelper has a mixedId validator.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/47f51307
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/47f51307
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/47f51307
Branch: refs/heads/neo4j-gremlin-apache
Commit: 47f5130703098d0ab578b7fecbad122262f788e2
Parents: dffcc03
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu May 28 16:44:16 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu May 28 16:44:16 2015 -0600
----------------------------------------------------------------------
.../gremlin/structure/util/ElementHelper.java | 19 ++++-
.../gremlin/neo4j/structure/Neo4jGraph.java | 79 ++++++++++++++++++++
.../gremlin/neo4j/structure/Neo4jVertex.java | 45 +++++++++++
.../neo4j/structure/full/FullNeo4jGraph.java | 50 ++-----------
.../neo4j/structure/full/FullNeo4jVertex.java | 40 ----------
.../structure/simple/SimpleNeo4jGraph.java | 41 ++--------
.../structure/simple/SimpleNeo4jVertex.java | 60 ---------------
7 files changed, 150 insertions(+), 184 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47f51307/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
index c77b82d..f5b4f68 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
@@ -18,11 +18,11 @@
*/
package org.apache.tinkerpop.gremlin.structure.util;
-import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.javatuples.Pair;
@@ -85,6 +85,19 @@ public final class ElementHelper {
return iterator.hasNext() ? iterator.next() : graph.addVertex(T.id, id, T.label, label);
}
+ public static void validateMixedElementIds(final Class<? extends Element> clazz, final Object... ids) {
+ if (ids.length > 1) {
+ final boolean element = clazz.isAssignableFrom(ids[0].getClass());
+ for (int i = 1; i < ids.length; i++) {
+ final boolean assignable = clazz.isAssignableFrom(ids[i].getClass());
+ if (assignable && !element)
+ throw Graph.Exceptions.idArgsMustBeEitherIdOrElement();
+ else if (!assignable && element)
+ throw Graph.Exceptions.idArgsMustBeEitherIdOrElement();
+ }
+ }
+ }
+
/**
* Determines whether the property key/value for the specified thing can be legally set. This is typically used as
* a pre-condition check prior to setting a property.
@@ -269,7 +282,7 @@ public final class ElementHelper {
* Assign key/value pairs as properties to an {@link org.apache.tinkerpop.gremlin.structure.Vertex}. If the value of {@link T#id} or
* {@link T#label} is in the set of pairs, then they are ignored. The {@link org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality} of the key is determined from the {@link org.apache.tinkerpop.gremlin.structure.Graph.Features.VertexFeatures}.
*
- * @param vertex the graph vertex to assign the {@code propertyKeyValues}
+ * @param vertex the graph vertex to assign the {@code propertyKeyValues}
* @param propertyKeyValues the key/value pairs to assign to the {@code element}
* @throws ClassCastException if the value of the key is not a {@link String}
* @throws IllegalArgumentException if the value of {@code element} is null
@@ -280,7 +293,7 @@ public final class ElementHelper {
for (int i = 0; i < propertyKeyValues.length; i = i + 2) {
if (!propertyKeyValues[i].equals(T.id) && !propertyKeyValues[i].equals(T.label))
- vertex.property(vertex.graph().features().vertex().getCardinality((String) propertyKeyValues[i]), (String) propertyKeyValues[i], propertyKeyValues[i + 1]);
+ vertex.property(vertex.graph().features().vertex().getCardinality((String) propertyKeyValues[i]), (String) propertyKeyValues[i], propertyKeyValues[i + 1]);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47f51307/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
index 5697543..1e4c6da 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
@@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.neo4j.structure.simple.SimpleNeo4jGraph;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Transaction;
import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -35,6 +36,7 @@ import org.apache.tinkerpop.gremlin.structure.util.AbstractTransaction;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.structure.util.wrapped.WrappedGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.neo4j.tinkerpop.api.Neo4jFactory;
import org.neo4j.tinkerpop.api.Neo4jGraphAPI;
import org.neo4j.tinkerpop.api.Neo4jNode;
@@ -44,6 +46,8 @@ import org.neo4j.tinkerpop.api.Neo4jTx;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
@@ -158,6 +162,10 @@ public abstract class Neo4jGraph implements Graph, WrappedGraph<Neo4jGraphAPI> {
public abstract Neo4jEdge createEdge(final Neo4jRelationship relationship);
+ public abstract Predicate<Neo4jNode> getNodePredicate();
+
+ public abstract Predicate<Neo4jRelationship> getRelationshipPredicate();
+
@Override
public Vertex addVertex(final Object... keyValues) {
ElementHelper.legalPropertyKeyValueArray(keyValues);
@@ -172,6 +180,72 @@ public abstract class Neo4jGraph implements Graph, WrappedGraph<Neo4jGraphAPI> {
return vertex;
}
+ @Override
+ public Iterator<Vertex> vertices(final Object... vertexIds) {
+ this.tx().readWrite();
+ if (0 == vertexIds.length) {
+ final Predicate<Neo4jNode> nodePredicate = this.getNodePredicate();
+ return IteratorUtils.stream(this.getBaseGraph().allNodes())
+ .filter(node -> !this.checkElementsInTransaction || !Neo4jHelper.isDeleted(node))
+ .filter(nodePredicate)
+ .map(node -> (Vertex) this.createVertex(node)).iterator();
+ } else {
+ ElementHelper.validateMixedElementIds(Vertex.class, vertexIds);
+ return Stream.of(vertexIds)
+ .map(id -> {
+ if (id instanceof Number)
+ return ((Number) id).longValue();
+ else if (id instanceof String)
+ return Long.valueOf(id.toString());
+ else if (id instanceof Neo4jVertex) {
+ return (Long) ((Neo4jVertex) id).id();
+ } else
+ throw new IllegalArgumentException("Unknown vertex id type: " + id);
+ })
+ .flatMap(id -> {
+ try {
+ return Stream.of((Vertex) this.createVertex(this.getBaseGraph().getNodeById(id)));
+ } catch (final RuntimeException e) {
+ if (Neo4jHelper.isNotFound(e)) return Stream.empty();
+ throw e;
+ }
+ }).iterator();
+ }
+ }
+
+ @Override
+ public Iterator<Edge> edges(final Object... edgeIds) {
+ this.tx().readWrite();
+ if (0 == edgeIds.length) {
+ final Predicate<Neo4jRelationship> relationshipPredicate = this.getRelationshipPredicate();
+ return IteratorUtils.stream(this.getBaseGraph().allRelationships())
+ .filter(relationship -> !this.checkElementsInTransaction || !Neo4jHelper.isDeleted(relationship))
+ .filter(relationshipPredicate)
+ .map(relationship -> (Edge) this.createEdge(relationship)).iterator();
+ } else {
+ ElementHelper.validateMixedElementIds(Edge.class, edgeIds);
+ return Stream.of(edgeIds)
+ .map(id -> {
+ if (id instanceof Number)
+ return ((Number) id).longValue();
+ else if (id instanceof String)
+ return Long.valueOf(id.toString());
+ else if (id instanceof Neo4jEdge) {
+ return (Long) ((Neo4jEdge) id).id();
+ } else
+ throw new IllegalArgumentException("Unknown vertex id type: " + id);
+ })
+ .flatMap(id -> {
+ try {
+ return Stream.of((Edge) this.createEdge(this.getBaseGraph().getRelationshipById(id)));
+ } catch (final RuntimeException e) {
+ if (Neo4jHelper.isNotFound(e)) return Stream.empty();
+ throw e;
+ }
+ }).iterator();
+ }
+ }
+
/**
* Construct a Neo4jGraph instance using an existing Neo4j raw instance.
@@ -469,6 +543,11 @@ public abstract class Neo4jGraph implements Graph, WrappedGraph<Neo4jGraphAPI> {
public boolean supportsUserSuppliedIds() {
return false;
}
+
+ @Override
+ public boolean supportsAnyIds() {
+ return false;
+ }
}
public class Neo4jEdgePropertyFeatures implements EdgePropertyFeatures {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47f51307/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jVertex.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jVertex.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jVertex.java
index 97ee84d..b9c216e 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jVertex.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jVertex.java
@@ -18,6 +18,8 @@
*/
package org.apache.tinkerpop.gremlin.neo4j.structure;
+import org.apache.tinkerpop.gremlin.neo4j.structure.full.FullNeo4jVertexProperty;
+import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -26,12 +28,15 @@ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.structure.util.wrapped.WrappedVertex;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.neo4j.tinkerpop.api.Neo4jNode;
+import org.neo4j.tinkerpop.api.Neo4jRelationship;
import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
+import java.util.function.Predicate;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
@@ -87,6 +92,46 @@ public abstract class Neo4jVertex extends Neo4jElement implements Vertex, Wrappe
return String.join(LABEL_DELIMINATOR, this.labels());
}
+ @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 ?
+ getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() :
+ getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), graph.getRelationshipPredicate());
+
+ @Override
+ public boolean hasNext() {
+ return this.relationshipIterator.hasNext();
+ }
+
+ @Override
+ public Neo4jVertex next() {
+ return graph.createVertex(this.relationshipIterator.next().other(getBaseVertex()));
+ }
+ };
+ }
+
+ @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 ?
+ getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() :
+ getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), graph.getRelationshipPredicate());
+
+ @Override
+ public boolean hasNext() {
+ return this.relationshipIterator.hasNext();
+ }
+
+ @Override
+ public Neo4jEdge next() {
+ return graph.createEdge(this.relationshipIterator.next());
+ }
+ };
+ }
+
/////////////// Neo4jVertex Specific Methods for Multi-Label Support ///////////////
public Set<String> labels() {
this.graph.tx().readWrite();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47f51307/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jGraph.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jGraph.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jGraph.java
index a2e0b2c..c959ddd 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jGraph.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jGraph.java
@@ -26,19 +26,14 @@ import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.neo4j.process.traversal.strategy.optimization.Neo4jGraphStepStrategy;
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jEdge;
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph;
-import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jHelper;
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jVertex;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
-import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.neo4j.tinkerpop.api.Neo4jGraphAPI;
import org.neo4j.tinkerpop.api.Neo4jNode;
import org.neo4j.tinkerpop.api.Neo4jRelationship;
-import java.util.Iterator;
-import java.util.stream.Stream;
+import java.util.function.Predicate;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -74,47 +69,12 @@ public final class FullNeo4jGraph extends Neo4jGraph {
}
@Override
- public Iterator<Vertex> vertices(final Object... vertexIds) {
- this.tx().readWrite();
- if (0 == vertexIds.length) {
- return IteratorUtils.stream(this.getBaseGraph().allNodes())
- .filter(node -> !this.checkElementsInTransaction || !Neo4jHelper.isDeleted(node))
- .filter(node -> !node.hasLabel(FullNeo4jVertexProperty.VERTEX_PROPERTY_LABEL))
- .map(node -> (Vertex) this.createVertex(node)).iterator();
- } else {
- return Stream.of(vertexIds)
- .filter(id -> id instanceof Number)
- .flatMap(id -> {
- try {
- return Stream.of((Vertex) this.createVertex(this.getBaseGraph().getNodeById(((Number) id).longValue())));
- } catch (final RuntimeException e) {
- if (Neo4jHelper.isNotFound(e)) return Stream.empty();
- throw e;
- }
- }).iterator();
- }
+ public Predicate<Neo4jNode> getNodePredicate() {
+ return node -> !node.hasLabel(FullNeo4jVertexProperty.VERTEX_PROPERTY_LABEL);
}
@Override
- public Iterator<Edge> edges(final Object... edgeIds) {
- this.tx().readWrite();
- if (0 == edgeIds.length) {
- return IteratorUtils.stream(this.getBaseGraph().allRelationships())
- .filter(relationship -> !this.checkElementsInTransaction || !Neo4jHelper.isDeleted(relationship))
- .filter(relationship -> !relationship.type().startsWith(FullNeo4jVertexProperty.VERTEX_PROPERTY_PREFIX))
- .map(relationship -> (Edge) this.createEdge(relationship)).iterator();
- } else {
- return Stream.of(edgeIds)
- .filter(id -> id instanceof Number)
- .flatMap(id -> {
- try {
- return Stream.of((Edge) this.createEdge(this.getBaseGraph().getRelationshipById(((Number) id).longValue())));
- } catch (final RuntimeException e) {
- if (Neo4jHelper.isNotFound(e)) return Stream.empty();
- throw e;
- }
- }).iterator();
- }
-
+ public Predicate<Neo4jRelationship> getRelationshipPredicate() {
+ return relationship -> !relationship.type().startsWith(FullNeo4jVertexProperty.VERTEX_PROPERTY_PREFIX);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47f51307/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jVertex.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jVertex.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jVertex.java
index bc9d409..07d24ad 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jVertex.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/full/FullNeo4jVertex.java
@@ -123,46 +123,6 @@ final class FullNeo4jVertex extends Neo4jVertex {
}
@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 ?
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() :
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), r -> !r.type().startsWith(FullNeo4jVertexProperty.VERTEX_PROPERTY_PREFIX));
-
- @Override
- public boolean hasNext() {
- return this.relationshipIterator.hasNext();
- }
-
- @Override
- public Neo4jVertex next() {
- return graph.createVertex(this.relationshipIterator.next().other(getBaseVertex()));
- }
- };
- }
-
- @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 ?
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() :
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator(), r -> !r.type().startsWith(FullNeo4jVertexProperty.VERTEX_PROPERTY_PREFIX));
-
- @Override
- public boolean hasNext() {
- return this.relationshipIterator.hasNext();
- }
-
- @Override
- public Neo4jEdge next() {
- return graph.createEdge(this.relationshipIterator.next());
- }
- };
- }
-
- @Override
public <V> Iterator<VertexProperty<V>> properties(final String... propertyKeys) {
this.graph.tx().readWrite();
return IteratorUtils.stream(getBaseVertex().getKeys())
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47f51307/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jGraph.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jGraph.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jGraph.java
index 9f3dec9..50d14cc 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jGraph.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jGraph.java
@@ -39,6 +39,7 @@ import org.neo4j.tinkerpop.api.Neo4jNode;
import org.neo4j.tinkerpop.api.Neo4jRelationship;
import java.util.Iterator;
+import java.util.function.Predicate;
import java.util.stream.Stream;
/**
@@ -77,45 +78,13 @@ public final class SimpleNeo4jGraph extends Neo4jGraph {
}
@Override
- public Iterator<Vertex> vertices(final Object... vertexIds) {
- this.tx().readWrite();
- if (0 == vertexIds.length) {
- return IteratorUtils.stream(this.getBaseGraph().allNodes())
- .filter(node -> !this.checkElementsInTransaction || !Neo4jHelper.isDeleted(node))
- .map(node -> (Vertex) new SimpleNeo4jVertex(node, this)).iterator();
- } else {
- return Stream.of(vertexIds)
- .filter(id -> id instanceof Number)
- .flatMap(id -> {
- try {
- return Stream.of((Vertex) new SimpleNeo4jVertex(this.getBaseGraph().getNodeById(((Number) id).longValue()), this));
- } catch (final RuntimeException e) {
- if (Neo4jHelper.isNotFound(e)) return Stream.empty();
- throw e;
- }
- }).iterator();
- }
+ public Predicate<Neo4jNode> getNodePredicate() {
+ return node -> true;
}
@Override
- public Iterator<Edge> edges(final Object... edgeIds) {
- this.tx().readWrite();
- if (0 == edgeIds.length) {
- return IteratorUtils.stream(this.getBaseGraph().allRelationships())
- .filter(relationship -> !this.checkElementsInTransaction || !Neo4jHelper.isDeleted(relationship))
- .map(relationship -> (Edge) this.createEdge(relationship)).iterator();
- } else {
- return Stream.of(edgeIds)
- .filter(id -> id instanceof Number)
- .flatMap(id -> {
- try {
- return Stream.of((Edge) this.createEdge(this.getBaseGraph().getRelationshipById(((Number) id).longValue())));
- } catch (final RuntimeException e) {
- if (Neo4jHelper.isNotFound(e)) return Stream.empty();
- throw e;
- }
- }).iterator();
- }
+ public Predicate<Neo4jRelationship> getRelationshipPredicate() {
+ return relationship -> true;
}
////////////////////////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47f51307/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jVertex.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jVertex.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jVertex.java
index df73a8d..b4cb95f 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jVertex.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/simple/SimpleNeo4jVertex.java
@@ -21,14 +21,10 @@
package org.apache.tinkerpop.gremlin.neo4j.structure.simple;
-import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jEdge;
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph;
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jHelper;
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jVertex;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
@@ -50,22 +46,6 @@ final class SimpleNeo4jVertex extends Neo4jVertex {
}
@Override
- public Edge addEdge(final String label, final Vertex inVertex, final Object... keyValues) {
- if (null == inVertex) throw Graph.Exceptions.argumentCanNotBeNull("inVertex");
- if (this.removed) throw Element.Exceptions.elementAlreadyRemoved(Vertex.class, this.getBaseVertex().getId());
- ElementHelper.validateLabel(label);
- ElementHelper.legalPropertyKeyValueArray(keyValues);
- if (ElementHelper.getIdValue(keyValues).isPresent())
- throw Edge.Exceptions.userSuppliedIdsNotSupported();
-
- this.graph.tx().readWrite();
- final Neo4jNode node = (Neo4jNode) this.baseElement;
- final Neo4jEdge edge = this.graph.createEdge(node.connectTo(((Neo4jVertex) inVertex).getBaseVertex(), label));
- ElementHelper.attachProperties(edge, keyValues);
- return edge;
- }
-
- @Override
public <V> VertexProperty<V> property(final String key) {
if (this.removed) throw Element.Exceptions.elementAlreadyRemoved(Vertex.class, this.getBaseVertex().getId());
this.graph.tx().readWrite();
@@ -93,46 +73,6 @@ final class SimpleNeo4jVertex extends Neo4jVertex {
}
@Override
- public Iterator<Vertex> vertices(final Direction direction, final String... edgeLabels) {
- this.graph.tx().readWrite();
- return new Iterator<Vertex>() {
- final Iterator<Neo4jRelationship> relationshipIterator = 0 == edgeLabels.length ?
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() :
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator();
-
- @Override
- public boolean hasNext() {
- return this.relationshipIterator.hasNext();
- }
-
- @Override
- public Neo4jVertex next() {
- return graph.createVertex(this.relationshipIterator.next().other(getBaseVertex()));
- }
- };
- }
-
- @Override
- public Iterator<Edge> edges(final Direction direction, final String... edgeLabels) {
- this.graph.tx().readWrite();
- return new Iterator<Edge>() {
- final Iterator<Neo4jRelationship> relationshipIterator = 0 == edgeLabels.length ?
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction)).iterator() :
- getBaseVertex().relationships(Neo4jHelper.mapDirection(direction), (edgeLabels)).iterator();
-
- @Override
- public boolean hasNext() {
- return this.relationshipIterator.hasNext();
- }
-
- @Override
- public Neo4jEdge next() {
- return graph.createEdge(this.relationshipIterator.next());
- }
- };
- }
-
- @Override
public <V> Iterator<VertexProperty<V>> properties(final String... propertyKeys) {
this.graph.tx().readWrite();
return (Iterator) IteratorUtils.stream(getBaseVertex().getKeys())