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/03/23 17:12:58 UTC

incubator-tinkerpop git commit: Added DropStep for element and property removal.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 8024accd0 -> 416cc914f


Added DropStep for element and property removal.


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

Branch: refs/heads/master
Commit: 416cc914f3dc2f199d7999110da03da5e2964916
Parents: 8024acc
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Mar 23 10:12:53 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Mar 23 10:12:53 2015 -0600

----------------------------------------------------------------------
 .../traversal/dsl/graph/GraphTraversal.java     |  26 +----
 .../gremlin/process/traversal/dsl/graph/__.java |   4 +
 .../process/traversal/step/map/DropStep.java    |  49 +++++++++
 .../step/util/SupplyingBarrierStep.java         |   2 -
 .../traversal/step/map/GroovyDropTest.groovy    |  52 ++++++++++
 .../process/GroovyProcessStandardSuite.java     |   4 +-
 .../gremlin/process/ProcessStandardSuite.java   |   2 +
 .../process/traversal/step/map/DropTest.java    | 102 +++++++++++++++++++
 .../gremlin/structure/VertexPropertyTest.java   |  32 +++---
 .../gremlin/hadoop/structure/HadoopGraph.java   |  25 +++++
 10 files changed, 258 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index c43677e..a595277 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -106,6 +106,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentitySt
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.LambdaSideEffectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.DropStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackElementValueStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackObjectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
@@ -139,7 +140,6 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.NoSuchElementException;
 import java.util.Optional;
 import java.util.function.BiFunction;
 import java.util.function.BiPredicate;
@@ -643,6 +643,10 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         return this.asAdmin().addStep(new ProfileStep<>(this.asAdmin()));
     }
 
+    public default GraphTraversal<S, E> drop() {
+        return this.asAdmin().addStep(new DropStep<>(this.asAdmin()));
+    }
+
     ///////////////////// BRANCH STEPS /////////////////////
 
     public default <M, E2> GraphTraversal<S, E2> branch(final Traversal<?, M> branchTraversal) {
@@ -826,26 +830,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     ////
 
     @Override
-    public default void remove() {
-        try {
-            this.asAdmin().applyStrategies();
-            final Step<?, E> endStep = this.asAdmin().getEndStep();
-            while (true) {
-                final Object object = endStep.next().get();
-                if (object instanceof Element)
-                    ((Element) object).remove();
-                else if (object instanceof Property)
-                    ((Property) object).remove();
-                else {
-                    throw new IllegalStateException("The following object does not have a remove() method: " + object);
-                }
-            }
-        } catch (final NoSuchElementException ignored) {
-
-        }
-    }
-
-    @Override
     public default GraphTraversal<S, E> iterate() {
         Traversal.super.iterate();
         return this;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 67ade05..c477d39 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -493,6 +493,10 @@ public class __ {
         return __.<A>start().store(sideEffectKey);
     }
 
+    public static <A> GraphTraversal<A, A> drop() {
+        return __.<A>start().drop();
+    }
+
     ///////////////////// BRANCH STEPS /////////////////////
 
     public static <A, M, E2> GraphTraversal<A, E2> branch(final Function<Traverser<A>, M> function) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropStep.java
new file mode 100644
index 0000000..08c5d81
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropStep.java
@@ -0,0 +1,49 @@
+/*
+ * 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.map;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.EmptyTraverser;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Property;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class DropStep<S> extends AbstractStep<S, S> implements Mutating {
+
+    public DropStep(final Traversal.Admin traversal) {
+        super(traversal);
+    }
+
+    @Override
+    public Traverser<S> processNextStart() {
+        final S s = this.starts.next().get();
+        if (s instanceof Element)
+            ((Element) s).remove();
+        else if (s instanceof Property)
+            ((Property) s).remove();
+        else
+            throw new IllegalStateException("The incoming object is not removable: " + s);
+        return EmptyTraverser.instance();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SupplyingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SupplyingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SupplyingBarrierStep.java
index 42f4394..2ea26ca 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SupplyingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SupplyingBarrierStep.java
@@ -58,6 +58,4 @@ public abstract class SupplyingBarrierStep<S, E> extends AbstractStep<S, E> {
         clone.done = false;
         return clone;
     }
-
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyDropTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyDropTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyDropTest.groovy
new file mode 100644
index 0000000..42b1d59
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyDropTest.groovy
@@ -0,0 +1,52 @@
+/*
+ * 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.map
+
+import org.apache.tinkerpop.gremlin.process.UseEngine
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine
+import org.apache.tinkerpop.gremlin.structure.Edge
+import org.apache.tinkerpop.gremlin.structure.Vertex
+import org.apache.tinkerpop.gremlin.structure.VertexProperty
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyDropTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends DropTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_drop() {
+            g.V.drop
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_V_outE_drop() {
+            g.V.outE.drop
+        }
+
+        @Override
+        public Traversal<Vertex, VertexProperty> get_g_V_properties_drop() {
+            g.V.properties().drop
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
index 56fbf6a..0cfd32f 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
 import org.apache.tinkerpop.gremlin.GraphManager;
 import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader;
 import org.apache.tinkerpop.gremlin.groovy.util.SugarTestHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.GroovyBranchTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.GroovyChooseTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.GroovyLocalTest;
@@ -47,6 +48,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyAddVertexTe
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyBackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyCoalesceTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyCountTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyDropTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyFoldTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyMapTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyMatchTest;
@@ -72,7 +74,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroovySide
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroovyStoreTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroovySubgraphTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroovyTreeTest;
-import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
 import org.junit.runners.model.InitializationError;
 import org.junit.runners.model.RunnerBuilder;
 
@@ -116,6 +117,7 @@ public class GroovyProcessStandardSuite extends ProcessStandardSuite {
             GroovyBackTest.StandardTraversals.class,
             GroovyCoalesceTest.StandardTraversals.class,
             GroovyCountTest.StandardTraversals.class,
+            GroovyDropTest.StandardTraversals.class,
             GroovyFoldTest.StandardTraversals.class,
             GroovyMapTest.StandardTraversals.class,
             GroovyMatchTest.StandardTraversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
index 82696b2..2bdad9f 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
@@ -46,6 +46,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.BackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.DropTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.MapTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchTest;
@@ -147,6 +148,7 @@ public class ProcessStandardSuite extends AbstractGremlinSuite {
             BackTest.Traversals.class,
             CoalesceTest.Traversals.class,
             CountTest.Traversals.class,
+            DropTest.Traversals.class,
             FoldTest.Traversals.class,
             MapTest.Traversals.class,
             MatchTest.Traversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropTest.java
new file mode 100644
index 0000000..4aba963
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DropTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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.map;
+
+import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+import org.apache.tinkerpop.gremlin.FeatureRequirement;
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+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.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class DropTest extends AbstractGremlinTest {
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_drop();
+
+    public abstract Traversal<Vertex, Edge> get_g_V_outE_drop();
+
+    public abstract Traversal<Vertex, VertexProperty> get_g_V_properties_drop();
+
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_REMOVE_VERTICES)
+    public void g_V_drop() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_drop();
+        printTraversalForm(traversal);
+        assertFalse(traversal.hasNext());
+        assertEquals(0, IteratorUtils.count(graph.vertices()));
+        assertEquals(0, IteratorUtils.count(graph.edges()));
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_REMOVE_EDGES)
+    public void g_V_outE_drop() {
+        final Traversal<Vertex, Edge> traversal = get_g_V_outE_drop();
+        printTraversalForm(traversal);
+        assertFalse(traversal.hasNext());
+        assertEquals(6, IteratorUtils.count(graph.vertices()));
+        assertEquals(0, IteratorUtils.count(graph.edges()));
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_REMOVE_PROPERTY)
+    public void g_V_properties_drop() {
+        final Traversal<Vertex, VertexProperty> traversal = get_g_V_properties_drop();
+        printTraversalForm(traversal);
+        assertFalse(traversal.hasNext());
+        assertEquals(6, IteratorUtils.count(graph.vertices()));
+        assertEquals(6, IteratorUtils.count(graph.edges()));
+        graph.vertices().forEachRemaining(vertex -> assertEquals(0, IteratorUtils.count(vertex.properties())));
+    }
+
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class Traversals extends DropTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_drop() {
+            return g.V().drop();
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_V_outE_drop() {
+            return g.V().outE().drop();
+        }
+
+        @Override
+        public Traversal<Vertex, VertexProperty> get_g_V_properties_drop() {
+            return (Traversal) g.V().properties().drop();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/VertexPropertyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/VertexPropertyTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/VertexPropertyTest.java
index 719a174..c6c3ec5 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/VertexPropertyTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/VertexPropertyTest.java
@@ -174,7 +174,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
                 assertEquals(1, IteratorUtils.count(v.properties("name")));
                 assertEquals(1, IteratorUtils.count(v.properties()));
                 assertEquals(2, IteratorUtils.count(v.properties("name").next().properties()));
-                final Map<String,Object> valueMap = IteratorUtils.collectMap(v.property("name").properties(), Property::key, Property::value);
+                final Map<String, Object> valueMap = IteratorUtils.collectMap(v.property("name").properties(), Property::key, Property::value);
                 assertEquals("private", valueMap.get("acl"));
                 assertEquals(2014, valueMap.get("date"));
             });
@@ -192,7 +192,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
                 assertEquals(1, IteratorUtils.count(u.properties("name")));
                 assertEquals(1, IteratorUtils.count(u.properties()));
                 assertEquals(2, IteratorUtils.count(u.properties("name").next().properties()));
-                final Map<String,Object> valueMap = IteratorUtils.collectMap(u.property("name").properties(), Property::key, Property::value);
+                final Map<String, Object> valueMap = IteratorUtils.collectMap(u.property("name").properties(), Property::key, Property::value);
                 assertEquals("private", valueMap.get("acl"));
                 assertEquals(2014, valueMap.get("date"));
             });
@@ -207,7 +207,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
         @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_REMOVE_VERTICES)
         public void shouldHandleSetVertexProperties() {
             final Vertex v = graph.addVertex("name", "marko", "name", "marko a. rodriguez");
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertEquals(2, IteratorUtils.count(v.properties()));
                 assertEquals(2, IteratorUtils.count(v.properties("name")));
                 final List<String> values = IteratorUtils.list(v.values("name"));
@@ -215,7 +215,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
                 assertTrue(values.contains("marko a. rodriguez"));
             });
             v.property(VertexProperty.Cardinality.set, "name", "marko rodriguez", "acl", "private");
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertEquals(3, IteratorUtils.count(v.properties()));
                 assertEquals(3, IteratorUtils.count(v.properties("name")));
                 final List<String> values = IteratorUtils.list(v.values("name"));
@@ -236,7 +236,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
             });
             ///
             v.property(VertexProperty.Cardinality.set, "name", "marko rodriguez", "acl", "public", "creator", "stephen");
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertEquals(3, IteratorUtils.count(v.properties()));
                 assertEquals(3, IteratorUtils.count(v.properties("name")));
                 final List<String> values = IteratorUtils.list(v.values("name"));
@@ -326,7 +326,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
         @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_REMOVE_PROPERTY)
         public void shouldAllowIteratingAndRemovingVertexPropertyProperties() {
             final Vertex daniel = graph.addVertex("name", "daniel", "name", "kuppitz", "name", "big d", "name", "the german");
-            daniel.properties("name").forEachRemaining(vp ->  {
+            daniel.properties("name").forEachRemaining(vp -> {
                 vp.<Object>property("aKey", UUID.randomUUID().toString());
                 vp.<Object>property("bKey", UUID.randomUUID().toString());
                 vp.<Object>property("cKey", UUID.randomUUID().toString());
@@ -356,7 +356,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
             tryCommit(graph);
             v.property("name", "marko rodriguez");
             v.property("name", "marko");
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertEquals(5, IteratorUtils.count(v.properties()));
                 assertEquals(4, IteratorUtils.count(v.properties("name")));
                 final List<String> values = IteratorUtils.list(v.values("name"));
@@ -367,21 +367,21 @@ public class VertexPropertyTest extends AbstractGremlinTest {
             });
 
             IteratorUtils.filter(v.properties(), p -> p.value().equals("marko")).forEachRemaining(VertexProperty::remove);
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertEquals(3, IteratorUtils.count(v.properties()));
                 assertEquals(2, IteratorUtils.count(v.properties("name")));
                 assertVertexEdgeCounts(1, 0);
             });
 
             v.property("age").remove();
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertEquals(2, IteratorUtils.count(v.properties()));
                 assertEquals(2, IteratorUtils.count(v.properties("name")));
                 assertVertexEdgeCounts(1, 0);
             });
 
             IteratorUtils.filter(v.properties("name"), p -> p.key().equals("name")).forEachRemaining(VertexProperty::remove);
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertEquals(0, IteratorUtils.count(v.properties()));
                 assertEquals(0, IteratorUtils.count(v.properties("name")));
                 assertVertexEdgeCounts(1, 0);
@@ -396,7 +396,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
         public void shouldRemoveMultiPropertiesWhenVerticesAreRemoved() {
             final Vertex marko = graph.addVertex("name", "marko", "name", "okram");
             final Vertex stephen = graph.addVertex("name", "stephen", "name", "spmallette");
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertVertexEdgeCounts(2, 0);
                 assertEquals(2, IteratorUtils.count(marko.properties("name")));
                 assertEquals(2, IteratorUtils.count(stephen.properties("name")));
@@ -407,7 +407,7 @@ public class VertexPropertyTest extends AbstractGremlinTest {
             });
 
             stephen.remove();
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertVertexEdgeCounts(1, 0);
                 assertEquals(2, IteratorUtils.count(marko.properties("name")));
                 assertEquals(2, IteratorUtils.count(marko.properties()));
@@ -417,22 +417,22 @@ public class VertexPropertyTest extends AbstractGremlinTest {
             for (int i = 0; i < 100; i++) {
                 marko.property("name", i);
             }
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertVertexEdgeCounts(1, 0);
                 assertEquals(102, IteratorUtils.count(marko.properties("name")));
                 assertEquals(102, IteratorUtils.count(marko.properties()));
                 assertEquals(0, IteratorUtils.count(marko.properties("blah")));
             });
 
-            g.V().properties("name").has(T.value, (a, b) -> ((Class) b).isAssignableFrom(a.getClass()), Integer.class).remove();
-            tryCommit(graph, g -> {
+            g.V().properties("name").has(T.value, (a, b) -> ((Class) b).isAssignableFrom(a.getClass()), Integer.class).forEachRemaining(Property::remove);
+            tryCommit(graph, graph -> {
                 assertVertexEdgeCounts(1, 0);
                 assertEquals(2, IteratorUtils.count(marko.properties("name")));
                 assertEquals(2, IteratorUtils.count(marko.properties()));
                 assertEquals(0, IteratorUtils.count(marko.properties("blah")));
             });
             marko.remove();
-            tryCommit(graph, g -> {
+            tryCommit(graph, graph -> {
                 assertVertexEdgeCounts(0, 0);
             });
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/416cc914/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
index 306d9aa..5413f2b 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
@@ -347,11 +347,21 @@ public class HadoopGraph implements Graph {
                 }
 
                 @Override
+                public boolean supportsRemoveEdges() {
+                    return false;
+                }
+
+                @Override
                 public boolean supportsAddProperty() {
                     return false;
                 }
 
                 @Override
+                public boolean supportsRemoveProperty() {
+                    return false;
+                }
+
+                @Override
                 public boolean supportsCustomIds() {
                     return false;
                 }
@@ -367,11 +377,21 @@ public class HadoopGraph implements Graph {
                 }
 
                 @Override
+                public boolean supportsRemoveVertices() {
+                    return false;
+                }
+
+                @Override
                 public boolean supportsAddProperty() {
                     return false;
                 }
 
                 @Override
+                public boolean supportsRemoveProperty() {
+                    return false;
+                }
+
+                @Override
                 public boolean supportsCustomIds() {
                     return false;
                 }
@@ -383,6 +403,11 @@ public class HadoopGraph implements Graph {
                         public boolean supportsAddProperty() {
                             return false;
                         }
+
+                        @Override
+                        public boolean supportsRemoveProperty() {
+                            return false;
+                        }
                     };
                 }
             };