[14/50] tinkerpop git commit: added ClassFilterStep which checks the class type of a traverser object. this is an internal utility class not exposed at the GraphTraversal level.

2016-09-29 Thread spmallette
added ClassFilterStep which checks the class type of a traverser object. this 
is an internal utility class not exposed at the GraphTraversal level.


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

Branch: refs/heads/TINKERPOP-1458
Commit: 81e92c0aa3c21a54ee255317ae9a0f662a2cb897
Parents: 4f727b8
Author: Marko A. Rodriguez 
Authored: Wed Sep 21 11:48:33 2016 -0600
Committer: Marko A. Rodriguez 
Committed: Tue Sep 27 12:45:49 2016 -0600

--
 CHANGELOG.asciidoc  |  1 +
 .../traversal/step/filter/ClassFilterStep.java  | 54 
 .../strategy/decoration/SubgraphStrategy.java   |  5 +-
 3 files changed, 57 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/CHANGELOG.asciidoc
--
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 1ff27b2..0c7ab91 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,6 +29,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * Fixed a bug in `TraversalVertexProgram` (OLAP) around ordering and 
connectives (i.e. `and()` and `or()`).
 * Added `AbstractGremlinProcessTest.checkOrderedResults()` to make testing 
ordered results easier.
 * `AbstractLambdaTraversal` now supports a `bypassTraversal` and thus, it is 
possible for strategies to redefine such lambda traversals.
+* Added an internal utility `ClassFilterStep` which determines if the 
traverser object's class is an instance of the provided class.
 * `SubgraphStrategy` no longer `filter()`-wraps if the criteria is a chain of 
filters or connectives.
 * `SubgraphStrategy` now supports vertex property filtering.
 * Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the 
predicates.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
--
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
new file mode 100644
index 000..1652005
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
@@ -0,0 +1,54 @@
+/*
+ *  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.Traverser;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ClassFilterStep extends FilterStep {
+
+private final Class classFilter;
+private final boolean isInstanceCheck;
+
+public ClassFilterStep(final Traversal.Admin traversal, final Class 
classFilter, final boolean isInstanceCheck) {
+super(traversal);
+this.classFilter = classFilter;
+this.isInstanceCheck = isInstanceCheck;
+}
+
+public boolean filter(final Traverser.Admin traverser) {
+return !(this.isInstanceCheck ?
+this.classFilter.isInstance(traverser.get()) :
+this.classFilter.equals(traverser.get().getClass()));
+
+}
+
+public int hashCode() {
+return super.hashCode() ^ this.classFilter.hashCode() + 
Boolean.valueOf(this.isInstanceCheck).hashCode();
+}
+
+public String toString() {
+return StringFactory.stepString(this, this.classFilter);
+}
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/

[11/41] tinkerpop git commit: added ClassFilterStep which checks the class type of a traverser object. this is an internal utility class not exposed at the GraphTraversal level.

2016-09-28 Thread spmallette
added ClassFilterStep which checks the class type of a traverser object. this 
is an internal utility class not exposed at the GraphTraversal level.


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

Branch: refs/heads/TINKERPOP-790
Commit: 81e92c0aa3c21a54ee255317ae9a0f662a2cb897
Parents: 4f727b8
Author: Marko A. Rodriguez 
Authored: Wed Sep 21 11:48:33 2016 -0600
Committer: Marko A. Rodriguez 
Committed: Tue Sep 27 12:45:49 2016 -0600

--
 CHANGELOG.asciidoc  |  1 +
 .../traversal/step/filter/ClassFilterStep.java  | 54 
 .../strategy/decoration/SubgraphStrategy.java   |  5 +-
 3 files changed, 57 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/CHANGELOG.asciidoc
--
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 1ff27b2..0c7ab91 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,6 +29,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * Fixed a bug in `TraversalVertexProgram` (OLAP) around ordering and 
connectives (i.e. `and()` and `or()`).
 * Added `AbstractGremlinProcessTest.checkOrderedResults()` to make testing 
ordered results easier.
 * `AbstractLambdaTraversal` now supports a `bypassTraversal` and thus, it is 
possible for strategies to redefine such lambda traversals.
+* Added an internal utility `ClassFilterStep` which determines if the 
traverser object's class is an instance of the provided class.
 * `SubgraphStrategy` no longer `filter()`-wraps if the criteria is a chain of 
filters or connectives.
 * `SubgraphStrategy` now supports vertex property filtering.
 * Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the 
predicates.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
--
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
new file mode 100644
index 000..1652005
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
@@ -0,0 +1,54 @@
+/*
+ *  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.Traverser;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ClassFilterStep extends FilterStep {
+
+private final Class classFilter;
+private final boolean isInstanceCheck;
+
+public ClassFilterStep(final Traversal.Admin traversal, final Class 
classFilter, final boolean isInstanceCheck) {
+super(traversal);
+this.classFilter = classFilter;
+this.isInstanceCheck = isInstanceCheck;
+}
+
+public boolean filter(final Traverser.Admin traverser) {
+return !(this.isInstanceCheck ?
+this.classFilter.isInstance(traverser.get()) :
+this.classFilter.equals(traverser.get().getClass()));
+
+}
+
+public int hashCode() {
+return super.hashCode() ^ this.classFilter.hashCode() + 
Boolean.valueOf(this.isInstanceCheck).hashCode();
+}
+
+public String toString() {
+return StringFactory.stepString(this, this.classFilter);
+}
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/a

[16/44] tinkerpop git commit: added ClassFilterStep which checks the class type of a traverser object. this is an internal utility class not exposed at the GraphTraversal level.

2016-09-28 Thread spmallette
added ClassFilterStep which checks the class type of a traverser object. this 
is an internal utility class not exposed at the GraphTraversal level.


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

Branch: refs/heads/TINKERPOP-944
Commit: 81e92c0aa3c21a54ee255317ae9a0f662a2cb897
Parents: 4f727b8
Author: Marko A. Rodriguez 
Authored: Wed Sep 21 11:48:33 2016 -0600
Committer: Marko A. Rodriguez 
Committed: Tue Sep 27 12:45:49 2016 -0600

--
 CHANGELOG.asciidoc  |  1 +
 .../traversal/step/filter/ClassFilterStep.java  | 54 
 .../strategy/decoration/SubgraphStrategy.java   |  5 +-
 3 files changed, 57 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/CHANGELOG.asciidoc
--
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 1ff27b2..0c7ab91 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,6 +29,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * Fixed a bug in `TraversalVertexProgram` (OLAP) around ordering and 
connectives (i.e. `and()` and `or()`).
 * Added `AbstractGremlinProcessTest.checkOrderedResults()` to make testing 
ordered results easier.
 * `AbstractLambdaTraversal` now supports a `bypassTraversal` and thus, it is 
possible for strategies to redefine such lambda traversals.
+* Added an internal utility `ClassFilterStep` which determines if the 
traverser object's class is an instance of the provided class.
 * `SubgraphStrategy` no longer `filter()`-wraps if the criteria is a chain of 
filters or connectives.
 * `SubgraphStrategy` now supports vertex property filtering.
 * Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the 
predicates.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
--
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
new file mode 100644
index 000..1652005
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
@@ -0,0 +1,54 @@
+/*
+ *  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.Traverser;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ClassFilterStep extends FilterStep {
+
+private final Class classFilter;
+private final boolean isInstanceCheck;
+
+public ClassFilterStep(final Traversal.Admin traversal, final Class 
classFilter, final boolean isInstanceCheck) {
+super(traversal);
+this.classFilter = classFilter;
+this.isInstanceCheck = isInstanceCheck;
+}
+
+public boolean filter(final Traverser.Admin traverser) {
+return !(this.isInstanceCheck ?
+this.classFilter.isInstance(traverser.get()) :
+this.classFilter.equals(traverser.get().getClass()));
+
+}
+
+public int hashCode() {
+return super.hashCode() ^ this.classFilter.hashCode() + 
Boolean.valueOf(this.isInstanceCheck).hashCode();
+}
+
+public String toString() {
+return StringFactory.stepString(this, this.classFilter);
+}
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/a

[08/23] tinkerpop git commit: added ClassFilterStep which checks the class type of a traverser object. this is an internal utility class not exposed at the GraphTraversal level.

2016-09-27 Thread okram
added ClassFilterStep which checks the class type of a traverser object. this 
is an internal utility class not exposed at the GraphTraversal level.


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

Branch: refs/heads/master
Commit: 81e92c0aa3c21a54ee255317ae9a0f662a2cb897
Parents: 4f727b8
Author: Marko A. Rodriguez 
Authored: Wed Sep 21 11:48:33 2016 -0600
Committer: Marko A. Rodriguez 
Committed: Tue Sep 27 12:45:49 2016 -0600

--
 CHANGELOG.asciidoc  |  1 +
 .../traversal/step/filter/ClassFilterStep.java  | 54 
 .../strategy/decoration/SubgraphStrategy.java   |  5 +-
 3 files changed, 57 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/CHANGELOG.asciidoc
--
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 1ff27b2..0c7ab91 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,6 +29,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * Fixed a bug in `TraversalVertexProgram` (OLAP) around ordering and 
connectives (i.e. `and()` and `or()`).
 * Added `AbstractGremlinProcessTest.checkOrderedResults()` to make testing 
ordered results easier.
 * `AbstractLambdaTraversal` now supports a `bypassTraversal` and thus, it is 
possible for strategies to redefine such lambda traversals.
+* Added an internal utility `ClassFilterStep` which determines if the 
traverser object's class is an instance of the provided class.
 * `SubgraphStrategy` no longer `filter()`-wraps if the criteria is a chain of 
filters or connectives.
 * `SubgraphStrategy` now supports vertex property filtering.
 * Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the 
predicates.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
--
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
new file mode 100644
index 000..1652005
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
@@ -0,0 +1,54 @@
+/*
+ *  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.Traverser;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ClassFilterStep extends FilterStep {
+
+private final Class classFilter;
+private final boolean isInstanceCheck;
+
+public ClassFilterStep(final Traversal.Admin traversal, final Class 
classFilter, final boolean isInstanceCheck) {
+super(traversal);
+this.classFilter = classFilter;
+this.isInstanceCheck = isInstanceCheck;
+}
+
+public boolean filter(final Traverser.Admin traverser) {
+return !(this.isInstanceCheck ?
+this.classFilter.isInstance(traverser.get()) :
+this.classFilter.equals(traverser.get().getClass()));
+
+}
+
+public int hashCode() {
+return super.hashCode() ^ this.classFilter.hashCode() + 
Boolean.valueOf(this.isInstanceCheck).hashCode();
+}
+
+public String toString() {
+return StringFactory.stepString(this, this.classFilter);
+}
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/81e92c0a/gremlin-core/src/main/java/org/apache/t

tinkerpop git commit: added ClassFilterStep which checks the class type of a traverser object. this is an internal utility class not exposed at the GraphTraversal level.

2016-09-21 Thread okram
Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1456 5fc2163df -> beaf5208d


added ClassFilterStep which checks the class type of a traverser object. this 
is an internal utility class not exposed at the GraphTraversal level.


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

Branch: refs/heads/TINKERPOP-1456
Commit: beaf5208ddafd90277e9c5b0f28074cf0b8cb6d4
Parents: 5fc2163
Author: Marko A. Rodriguez 
Authored: Wed Sep 21 11:48:33 2016 -0600
Committer: Marko A. Rodriguez 
Committed: Wed Sep 21 11:48:33 2016 -0600

--
 CHANGELOG.asciidoc  |  1 +
 .../traversal/step/filter/ClassFilterStep.java  | 54 
 .../strategy/decoration/SubgraphStrategy.java   |  5 +-
 3 files changed, 57 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/beaf5208/CHANGELOG.asciidoc
--
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 4c94aad..edc479f 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,6 +29,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * Fixed a bug in `TraversalVertexProgram` (OLAP) around ordering and 
connectives (i.e. `and()` and `or()`).
 * Added `AbstractGremlinProcessTest.checkOrderedResults()` to make testing 
ordered results easier.
 * `AbstractLambdaTraversal` now supports a `bypassTraversal` and thus, it is 
possible for strategies to redefine such lambda traversals.
+* Added an internal utility `ClassFilterStep` which determines if the 
traverser object's class is an instance of the provided class.
 * `SubgraphStrategy` no longer `filter()`-wraps if the criteria is a chain of 
filters or connectives.
 * `SubgraphStrategy` now supports vertex property filtering.
 * Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the 
predicates.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/beaf5208/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
--
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
new file mode 100644
index 000..1652005
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ClassFilterStep.java
@@ -0,0 +1,54 @@
+/*
+ *  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.Traverser;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ClassFilterStep extends FilterStep {
+
+private final Class classFilter;
+private final boolean isInstanceCheck;
+
+public ClassFilterStep(final Traversal.Admin traversal, final Class 
classFilter, final boolean isInstanceCheck) {
+super(traversal);
+this.classFilter = classFilter;
+this.isInstanceCheck = isInstanceCheck;
+}
+
+public boolean filter(final Traverser.Admin traverser) {
+return !(this.isInstanceCheck ?
+this.classFilter.isInstance(traverser.get()) :
+this.classFilter.equals(traverser.get().getClass()));
+
+}
+
+public int hashCode() {
+return super.hashCode() ^ this.classFilter.hashCode() + 
Boolean.valueOf(this.isInstanceCheck).hashCode();
+}
+
+public String toString() {
+return StringFactory.stepString(this, this.classFilter);
+}
+}

h