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));
     }