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/26 22:07:30 UTC
incubator-tinkerpop git commit: Added Scope.getScopeValuesByKey() as
a way to ensure all steps have the same behavior around path/map/sideEffect
selection.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 88180acf9 -> bdd23a8eb
Added Scope.getScopeValuesByKey() as a way to ensure all steps have the same behavior around path/map/sideEffect selection.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/bdd23a8e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/bdd23a8e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/bdd23a8e
Branch: refs/heads/master
Commit: bdd23a8eb732075c43f7bb21336ff55d82dd9512
Parents: 88180ac
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue May 26 14:07:42 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue May 26 14:07:42 2015 -0600
----------------------------------------------------------------------
.../gremlin/process/traversal/Scope.java | 14 +++++
.../traversal/step/filter/WhereStep.java | 58 +++++++-------------
2 files changed, 35 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/bdd23a8e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Scope.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Scope.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Scope.java
index 367ec4c..d3cdbf1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Scope.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Scope.java
@@ -18,6 +18,8 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal;
+import java.util.Map;
+
/**
* Many {@link Step} instance can have a variable scope.
* {@link Scope#global}: the step operates on the entire traversal.
@@ -32,4 +34,16 @@ public enum Scope {
public Scope opposite() {
return global.equals(this) ? local : global;
}
+
+ public static <S> S getScopeValueByKey(final Scope scope, final String key, final Traverser<?> traverser) {
+ if (local == scope) {
+ final S s = ((Map<String, S>) traverser.get()).get(key);
+ if (null == s)
+ throw new IllegalArgumentException("The provided map does not have a " + key + "-key: " + traverser);
+ return s;
+ } else {
+ final Path path = traverser.path();
+ return path.hasLabel(key) ? path.get(key) : traverser.sideEffects(key);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/bdd23a8e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index 011d2cd..2fbe5e5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -18,7 +18,10 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
-import org.apache.tinkerpop.gremlin.process.traversal.*;
+import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
@@ -26,7 +29,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalP;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -126,18 +134,9 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
if (this.noStartAndEndKeys()) {
return this.predicate.getBiPredicate().test(getStartObject(traverser), null);
} else {
- final Object startObject;
- final Object endObject;
- if (Scope.local == this.scope) {
- final Map<String, Object> map = (Map<String, Object>) traverser.get();
- startObject = null == this.startKey ? getStartObject(traverser) : map.get(this.startKey);
- endObject = null == this.endKey ? null : map.get(this.endKey);
- } else {
- final Path path = traverser.path();
- startObject = null == this.startKey ? getStartObject(traverser) : path.hasLabel(this.startKey) ? path.get(this.startKey) : traverser.sideEffects(this.startKey);
- endObject = null == this.endKey ? null : path.hasLabel(this.endKey) ? path.get(this.endKey) : traverser.sideEffects(this.endKey);
- }
- return this.predicate.getBiPredicate().test(startObject, endObject);
+ return this.predicate.getBiPredicate().test(
+ null == this.startKey ? getStartObject(traverser) : Scope.getScopeValueByKey(this.scope, this.startKey, traverser),
+ null == this.endKey ? null : Scope.getScopeValueByKey(this.scope, this.endKey, traverser));
}
}
@@ -145,31 +144,16 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
final List<Object> startObjects = new ArrayList<>();
final List<Object> endObjects = new ArrayList<>();
- if (Scope.local == this.scope) {
- final Map<String, Object> map = (Map<String, Object>) traverser.get();
- if (startKeys.isEmpty())
- startObjects.add(traverser.get());
- else {
- for (final String startKey : this.startKeys) {
- startObjects.add(map.get(startKey));
- }
- }
- for (final String endKey : this.endKeys) {
- endObjects.add(map.get(endKey));
- }
- } else {
- final Path path = traverser.path();
- if (startKeys.isEmpty())
- startObjects.add(traverser.get());
- else {
- for (final String startKey : this.startKeys) {
- startObjects.add(path.hasLabel(startKey) ? path.get(startKey) : traverser.sideEffects(startKey));
- }
- }
- for (final String endKey : this.endKeys) {
- endObjects.add(path.hasLabel(endKey) ? path.get(endKey) : traverser.sideEffects(endKey));
+ if (this.startKeys.isEmpty())
+ startObjects.add(traverser.get());
+ else {
+ for (final String startKey : this.startKeys) {
+ startObjects.add(Scope.getScopeValueByKey(this.scope, startKey, traverser));
}
}
+ for (final String endKey : this.endKeys) {
+ endObjects.add(Scope.getScopeValueByKey(this.scope, endKey, traverser));
+ }
return this.predicate.getBiPredicate().test(new TraversalUtil.Multiple<>(startObjects), endObjects.isEmpty() ? null : new TraversalUtil.Multiple<>(endObjects));
}