You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by fl...@apache.org on 2018/03/20 14:45:34 UTC

[2/2] tinkerpop git commit: TINKERPOP-1866 Add a deserializer for g:T to Gremlin.Net

TINKERPOP-1866 Add a deserializer for g:T to Gremlin.Net


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

Branch: refs/heads/TINKERPOP-1866
Commit: 8c23ffe79b800792a78282ec7b49a4830a915840
Parents: f1e8430
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Tue Mar 20 15:45:11 2018 +0100
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Tue Mar 20 15:45:11 2018 +0100

----------------------------------------------------------------------
 .../Process/Traversal/EnumWrapper.cs            | 31 ++++++++++++++-
 .../Structure/IO/GraphSON/GraphSONReader.cs     |  1 +
 .../Structure/IO/GraphSON/TDeserializer.cs      | 42 ++++++++++++++++++++
 .../Gherkin/CommonSteps.cs                      |  4 +-
 .../Gherkin/GherkinTestRunner.cs                |  4 --
 .../IO/GraphSON/GraphSONReaderTests.cs          | 12 ++++++
 6 files changed, 88 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8c23ffe7/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/EnumWrapper.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/EnumWrapper.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/EnumWrapper.cs
index 66b8c5a..20a0348 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/EnumWrapper.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/EnumWrapper.cs
@@ -21,12 +21,14 @@
 
 #endregion
 
+using System;
+
 namespace Gremlin.Net.Process.Traversal
 {
     /// <summary>
     ///     Represents an enum.
     /// </summary>
-    public abstract class EnumWrapper
+    public abstract class EnumWrapper : IEquatable<EnumWrapper>
     {
         /// <summary>
         ///     Gets the name of the enum.
@@ -48,5 +50,32 @@ namespace Gremlin.Net.Process.Traversal
             EnumName = enumName;
             EnumValue = enumValue;
         }
+
+        /// <inheritdoc />
+        public bool Equals(EnumWrapper other)
+        {
+            if (ReferenceEquals(null, other)) return false;
+            if (ReferenceEquals(this, other)) return true;
+            return string.Equals(EnumName, other.EnumName) && string.Equals(EnumValue, other.EnumValue);
+        }
+
+        /// <inheritdoc />
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(null, obj)) return false;
+            if (ReferenceEquals(this, obj)) return true;
+            if (obj.GetType() != this.GetType()) return false;
+            return Equals((EnumWrapper) obj);
+        }
+
+        /// <inheritdoc />
+        public override int GetHashCode()
+        {
+            unchecked
+            {
+                return ((EnumName != null ? EnumName.GetHashCode() : 0) * 397) ^
+                       (EnumValue != null ? EnumValue.GetHashCode() : 0);
+            }
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8c23ffe7/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONReader.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONReader.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONReader.cs
index fbec67d..94fcd8d 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONReader.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONReader.cs
@@ -52,6 +52,7 @@ namespace Gremlin.Net.Structure.IO.GraphSON
                 {"g:Property", new PropertyDeserializer()},
                 {"g:VertexProperty", new VertexPropertyDeserializer()},
                 {"g:Path", new PathDeserializer()},
+                {"g:T", new TDeserializer()},
                 {"gx:BigDecimal", new DecimalConverter()}
             };
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8c23ffe7/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs
new file mode 100644
index 0000000..e79783c
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs
@@ -0,0 +1,42 @@
+#region License
+
+/*
+ * 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.
+ */
+
+#endregion
+
+using System;
+using System.Linq;
+using System.Reflection;
+using Gremlin.Net.Process.Traversal;
+using Newtonsoft.Json.Linq;
+
+namespace Gremlin.Net.Structure.IO.GraphSON
+{
+    internal class TDeserializer : IGraphSONDeserializer
+    {
+        public dynamic Objectify(JToken graphsonObject, GraphSONReader reader)
+        {
+            var tValue = graphsonObject.ToString();
+            return typeof(T).GetProperties()
+                .First(p => string.Equals(p.Name, tValue, StringComparison.OrdinalIgnoreCase))
+                .GetValue(null);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8c23ffe7/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
index 9322da3..31948f4 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
@@ -26,6 +26,7 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Globalization;
 using System.Linq;
+using System.Reflection;
 using System.Text.RegularExpressions;
 using Gherkin.Ast;
 using Gremlin.Net.IntegrationTest.Gherkin.Attributes;
@@ -239,7 +240,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
 
         private static object ToT(string enumName, string graphName)
         {
-            return Enum.Parse(typeof(T), TraversalParser.GetCsharpName(enumName));
+            return typeof(T).GetProperties()
+                .First(p => string.Equals(p.Name, enumName, StringComparison.OrdinalIgnoreCase)).GetValue(null);
         }
 
         private static object ToNumber(string stringNumber, string graphName)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8c23ffe7/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
index 52646a7..68d10fe 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
@@ -40,10 +40,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
         private static readonly IDictionary<string, IgnoreReason> IgnoredScenarios =
             new Dictionary<string, IgnoreReason>
             {
-                { "g_V_valueMapXtrueX", IgnoreReason.TraversalTDeserializationNotSupported },   // TINKERPOP-1866
-                { "g_V_valueMapXtrue_name_ageX", IgnoreReason.TraversalTDeserializationNotSupported }, // TINKERPOP-1866
-                { "g_V_hasLabelXpersonX_filterXoutEXcreatedXX_valueMapXtrueX", IgnoreReason.TraversalTDeserializationNotSupported }, // TINKERPOP-1866
-                {"g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX", IgnoreReason.TraversalTDeserializationNotSupported},
                 {"g_V_storeXaX_byXoutEXcreatedX_countX_out_out_storeXaX_byXinEXcreatedX_weight_sumX", IgnoreReason.ReceivedDataDoesntMatchExpected}
             };
         

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8c23ffe7/gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSONReaderTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSONReaderTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSONReaderTests.cs
index ae4392b..c93630f 100644
--- a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSONReaderTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSONReaderTests.cs
@@ -23,6 +23,7 @@
 
 using System;
 using System.Collections.Generic;
+using Gremlin.Net.Process.Traversal;
 using Gremlin.Net.Structure;
 using Gremlin.Net.Structure.IO.GraphSON;
 using Moq;
@@ -220,6 +221,17 @@ namespace Gremlin.Net.UnitTest.Structure.IO.GraphSON
             Assert.Equal(new List<object> {5, 6}, deserializedValue);
         }
 
+        [Theory, MemberData(nameof(Versions))]
+        public void ShouldDeserializeT(int version)
+        {
+            var graphSon = "{\"@type\":\"g:T\",\"@value\":\"label\"}";
+            var reader = CreateStandardGraphSONReader(version);
+
+            T readT = reader.ToObject(JObject.Parse(graphSon));
+
+            Assert.Equal(T.Label, readT);
+        }
+
         [Fact]
         public void ShouldDeserializePathFromGraphSON2()
         {