PathFilterStep now support by() modulation. Removed unneeded CyclicPathStepTest 
and SimplePathStepTest.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/8ec49c43
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/8ec49c43
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/8ec49c43

Branch: refs/heads/TINKERPOP-1625
Commit: 8ec49c433ae472116853df12247fa903e41f958d
Parents: 936344f
Author: Marko A. Rodriguez <okramma...@gmail.com>
Authored: Thu Mar 16 09:34:25 2017 -0600
Committer: Marko A. Rodriguez <okramma...@gmail.com>
Committed: Thu Mar 16 09:34:25 2017 -0600

----------------------------------------------------------------------
 .../traversal/step/filter/PathFilterStep.java   | 71 +++++++++++++++++++-
 .../step/filter/CyclicPathStepTest.java         | 37 ----------
 .../step/filter/PathFilterStepTest.java         |  8 ++-
 .../step/filter/SimplePathStepTest.java         | 37 ----------
 4 files changed, 75 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8ec49c43/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
index bbc8168..e8e0607 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
@@ -19,32 +19,52 @@
 
 package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
 import org.apache.tinkerpop.gremlin.process.traversal.step.FromToModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.MutablePath;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
+import java.util.List;
 import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class PathFilterStep<S> extends FilterStep<S> implements 
FromToModulating {
+public final class PathFilterStep<S> extends FilterStep<S> implements 
FromToModulating, ByModulating, TraversalParent, PathProcessor {
 
     protected String fromLabel;
     protected String toLabel;
     private boolean isSimple;
+    private TraversalRing<Object, Object> traversalRing;
+    private Set<String> keepLabels;
 
     public PathFilterStep(final Traversal.Admin traversal, final boolean 
isSimple) {
         super(traversal);
+        this.traversalRing = new TraversalRing<>();
         this.isSimple = isSimple;
     }
 
     @Override
     protected boolean filter(final Traverser.Admin<S> traverser) {
-        return traverser.path().getSubPath(this.fromLabel, 
this.toLabel).isSimple() == this.isSimple;
+        final Path path = traverser.path().getSubPath(this.fromLabel, 
this.toLabel);
+        this.traversalRing.reset();
+        if (this.traversalRing.isEmpty())
+            return path.isSimple() == this.isSimple;
+        else {
+            final Path byPath = MutablePath.make();
+            path.forEach((object, labels) -> 
byPath.extend(TraversalUtil.applyNullable(object, this.traversalRing.next()), 
labels));
+            return byPath.isSimple() == this.isSimple;
+
+        }
     }
 
     @Override
@@ -62,14 +82,59 @@ public final class PathFilterStep<S> extends FilterStep<S> 
implements FromToModu
 
     @Override
     public String toString() {
-        return StringFactory.stepString(this, this.isSimple ? "simple" : 
"cyclic", this.fromLabel, this.toLabel);
+        return StringFactory.stepString(this, this.isSimple ? "simple" : 
"cyclic", this.fromLabel, this.toLabel, this.traversalRing);
+    }
+
+    @Override
+    public PathFilterStep<S> clone() {
+        final PathFilterStep<S> clone = (PathFilterStep<S>) super.clone();
+        clone.traversalRing = this.traversalRing.clone();
+        return clone;
+    }
+
+    @Override
+    public void setTraversal(final Traversal.Admin<?, ?> parentTraversal) {
+        super.setTraversal(parentTraversal);
+        this.traversalRing.getTraversals().forEach(this::integrateChild);
+    }
+
+    @Override
+    public List<Traversal.Admin<Object, Object>> getLocalChildren() {
+        return this.traversalRing.getTraversals();
+    }
+
+    @Override
+    public void modulateBy(final Traversal.Admin<?, ?> pathTraversal) {
+        this.traversalRing.addTraversal(this.integrateChild(pathTraversal));
+    }
+
+    @Override
+    public void reset() {
+        super.reset();
+        this.traversalRing.reset();
     }
 
     @Override
     public int hashCode() {
         return super.hashCode() ^
+                this.traversalRing.hashCode() ^
                 Boolean.hashCode(this.isSimple) ^
                 (null == this.fromLabel ? "null".hashCode() : 
this.fromLabel.hashCode()) ^
                 (null == this.toLabel ? "null".hashCode() : 
this.toLabel.hashCode());
     }
+
+    @Override
+    public void setKeepLabels(final Set<String> labels) {
+        this.keepLabels = labels;
+    }
+
+    @Override
+    protected Traverser.Admin<S> processNextStart() {
+        return 
PathProcessor.processTraverserPathLabels(super.processNextStart(), 
this.keepLabels);
+    }
+
+    @Override
+    public Set<String> getKeepLabels() {
+        return this.keepLabels;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8ec49c43/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CyclicPathStepTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CyclicPathStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CyclicPathStepTest.java
deleted file mode 100644
index c187d3f..0000000
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CyclicPathStepTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.StepTest;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * @author Daniel Kuppitz (http://gremlin.guru)
- */
-public class CyclicPathStepTest extends StepTest {
-
-    @Override
-    protected List<Traversal> getTraversals() {
-        return Collections.singletonList(__.cyclicPath());
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8ec49c43/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStepTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStepTest.java
index ff994e8..531cfed 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStepTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStepTest.java
@@ -38,10 +38,16 @@ public class PathFilterStepTest extends StepTest {
                 __.simplePath().from("a").to("b"),
                 __.simplePath().from("a"),
                 __.simplePath().to("b"),
+                __.simplePath().from("a").by("name").by("age"),
+                __.simplePath().from("a").to("b").by("name").by("age"),
+                __.simplePath().by("name").by("age"),
                 __.cyclicPath().from("a"),
                 __.cyclicPath().to("b"),
                 __.cyclicPath().from("a").to("b"),
-                __.cyclicPath()
+                __.cyclicPath(),
+                __.cyclicPath().from("a").by("name").by("age"),
+                __.cyclicPath().from("a").to("b").by("name").by("age"),
+                __.cyclicPath().by("name").by("age")
         );
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8ec49c43/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathStepTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathStepTest.java
deleted file mode 100644
index 170ad47..0000000
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathStepTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.StepTest;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * @author Daniel Kuppitz (http://gremlin.guru)
- */
-public class SimplePathStepTest extends StepTest {
-
-    @Override
-    protected List<Traversal> getTraversals() {
-        return Collections.singletonList(__.simplePath());
-    }
-}

Reply via email to