You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2017/07/18 13:08:56 UTC
[19/50] [abbrv] tinkerpop git commit: TINKERPOP-1552 Removed the
dotnet generator module
TINKERPOP-1552 Removed the dotnet generator module
Moved GLV generation to the gremlin-dotnet pom and gmaveplus plugin.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d0d9e138
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d0d9e138
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d0d9e138
Branch: refs/heads/master
Commit: d0d9e138c77f5b0916a29b06862f45f8e9ffc860
Parents: 88415ee
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Jun 13 13:07:55 2017 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Jul 13 13:46:48 2017 -0400
----------------------------------------------------------------------
gremlin-dotnet-generator/pom.xml | 75 ----
.../dotnet/AnonymousTraversalGenerator.groovy | 98 -----
.../gremlin/dotnet/CommonContentHelper.groovy | 49 ---
.../gremlin/dotnet/EnumGenerator.groovy | 112 ------
.../gremlin/dotnet/GenerateGremlinDotNet.groovy | 32 --
.../dotnet/GraphTraversalGenerator.groovy | 90 -----
.../dotnet/GraphTraversalSourceGenerator.groovy | 142 -------
.../gremlin/dotnet/PredicateGenerator.groovy | 64 ---
.../gremlin/dotnet/SymbolHelper.groovy | 89 -----
gremlin-dotnet/glv/AnonymousTraversal.template | 45 +++
gremlin-dotnet/glv/Enum.template | 33 ++
gremlin-dotnet/glv/GraphTraversal.template | 64 +++
.../glv/GraphTraversalSource.template | 88 ++++
gremlin-dotnet/glv/NamingConversions.template | 52 +++
gremlin-dotnet/glv/P.template | 39 ++
gremlin-dotnet/pom.xml | 229 ++++++++++-
.../Gremlin.Net/Process/Traversal/Barrier.cs | 5 +-
.../Process/Traversal/Cardinality.cs | 9 +-
.../src/Gremlin.Net/Process/Traversal/Column.cs | 8 +-
.../Gremlin.Net/Process/Traversal/Direction.cs | 9 +-
.../Process/Traversal/GraphSONVersion.cs | 33 ++
.../Process/Traversal/GraphTraversal.cs | 399 ++++++++++---------
.../Process/Traversal/GraphTraversalSource.cs | 34 +-
.../Process/Traversal/GryoVersion.cs | 33 ++
.../Process/Traversal/NamingConversions.cs | 67 ++--
.../Gremlin.Net/Process/Traversal/Operator.cs | 17 +-
.../src/Gremlin.Net/Process/Traversal/Order.cs | 13 +-
.../src/Gremlin.Net/Process/Traversal/P.cs | 8 +-
.../src/Gremlin.Net/Process/Traversal/Pick.cs | 8 +-
.../src/Gremlin.Net/Process/Traversal/Pop.cs | 9 +-
.../src/Gremlin.Net/Process/Traversal/Scope.cs | 8 +-
.../src/Gremlin.Net/Process/Traversal/T.cs | 10 +-
.../src/Gremlin.Net/Process/Traversal/__.cs | 6 +-
gremlin-dotnet/src/pom.xml | 17 +
gremlin-dotnet/test/pom.xml | 16 +
pom.xml | 1 -
36 files changed, 967 insertions(+), 1044 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/pom.xml b/gremlin-dotnet-generator/pom.xml
deleted file mode 100644
index a0a9ff6..0000000
--- a/gremlin-dotnet-generator/pom.xml
+++ /dev/null
@@ -1,75 +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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.tinkerpop</groupId>
- <artifactId>tinkerpop</artifactId>
- <version>3.2.5-SNAPSHOT</version>
- </parent>
- <artifactId>gremlin-dotnet-generator</artifactId>
- <name>Apache TinkerPop :: Gremlin-DotNet Generator</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.tinkerpop</groupId>
- <artifactId>gremlin-core</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.codehaus.groovy</groupId>
- <artifactId>groovy</artifactId>
- <version>${groovy.version}</version>
- <classifier>indy</classifier>
- </dependency>
- </dependencies>
- <build>
- <directory>${basedir}/target</directory>
- <finalName>${project.artifactId}-${project.version}</finalName>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>exec-maven-plugin</artifactId>
- <version>1.2.1</version>
- <executions>
- <execution>
- <id>generate-dotnet</id>
- <phase>generate-test-resources</phase>
- <goals>
- <goal>java</goal>
- </goals>
- <configuration>
- <mainClass>org.apache.tinkerpop.gremlin.dotnet.GenerateGremlinDotNet</mainClass>
- <arguments>
- <argument>${project.parent.basedir}/gremlin-dotnet/src/Gremlin.Net</argument>
- </arguments>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.codehaus.gmavenplus</groupId>
- <artifactId>gmavenplus-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/AnonymousTraversalGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/AnonymousTraversalGenerator.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/AnonymousTraversalGenerator.groovy
deleted file mode 100644
index b65b2b0..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/AnonymousTraversalGenerator.groovy
+++ /dev/null
@@ -1,98 +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.dotnet
-
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
-
-import java.lang.reflect.Modifier
-
-class AnonymousTraversalGenerator {
-
- private static final Map<String, String[]> METHODS_WITH_SPECIFIC_TYPES = new HashMap<>();
-
- static {
- String[] useE2 = ["E2", "E2"];
- METHODS_WITH_SPECIFIC_TYPES.put("constant", useE2);
- METHODS_WITH_SPECIFIC_TYPES.put("limit", useE2);
- METHODS_WITH_SPECIFIC_TYPES.put("mean", useE2);
- METHODS_WITH_SPECIFIC_TYPES.put("optional", useE2);
- METHODS_WITH_SPECIFIC_TYPES.put("range", useE2);
- METHODS_WITH_SPECIFIC_TYPES.put("select", ["IDictionary<string, E2>", "E2"] as String[]);
- METHODS_WITH_SPECIFIC_TYPES.put("sum", useE2);
- METHODS_WITH_SPECIFIC_TYPES.put("tail", useE2);
- METHODS_WITH_SPECIFIC_TYPES.put("tree", ["object"] as String[]);
- METHODS_WITH_SPECIFIC_TYPES.put("unfold", useE2);
- }
-
- public static void create(final String anonymousTraversalFile) {
-
-
- final StringBuilder csharpClass = new StringBuilder()
-
- csharpClass.append(CommonContentHelper.getLicense())
-
- csharpClass.append(
-"""
-using System.Collections.Generic;
-using Gremlin.Net.Structure;
-
-namespace Gremlin.Net.Process.Traversal
-{
- public static class __
- {
- public static GraphTraversal<object, object> Start()
- {
- return new GraphTraversal<object, object>();
- }
-""")
- __.getMethods().
- findAll { GraphTraversal.class.equals(it.returnType) }.
- findAll { Modifier.isStatic(it.getModifiers()) }.
- findAll { !it.name.equals("__") && !it.name.equals("start") }.
- groupBy { it.name }.
- // Select unique by name, with the most amount of parameters
- collect { it.value.sort { a, b -> b.parameterCount <=> a.parameterCount }.first() }.
- sort { it.name }.
- forEach { javaMethod ->
- String sharpMethodName = SymbolHelper.toCSharp(javaMethod.name);
- String[] typeNames = SymbolHelper.getJavaParameterTypeNames(javaMethod);
- def t2 = SymbolHelper.toCSharpType(typeNames[1]);
- def tParam = SymbolHelper.getCSharpGenericTypeParam(t2);
- def specificTypes = METHODS_WITH_SPECIFIC_TYPES.get(javaMethod.name);
- if (specificTypes) {
- t2 = specificTypes[0];
- tParam = specificTypes.length > 1 ? "<" + specificTypes[1] + ">" : "";
- }
- csharpClass.append(
-"""
- public static GraphTraversal<object, $t2> $sharpMethodName$tParam(params object[] args)
- {
- return new GraphTraversal<object, object>().$sharpMethodName$tParam(args);
- }
-""")
- }
- csharpClass.append(" }\n}")
-
- final File file = new File(anonymousTraversalFile);
- file.delete()
- csharpClass.eachLine { file.append(it + "\n") }
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/CommonContentHelper.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/CommonContentHelper.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/CommonContentHelper.groovy
deleted file mode 100644
index 825e230..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/CommonContentHelper.groovy
+++ /dev/null
@@ -1,49 +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.dotnet
-
-public final class CommonContentHelper {
-
- public static String getLicense() {
- return """#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
-"""
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/EnumGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/EnumGenerator.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/EnumGenerator.groovy
deleted file mode 100644
index 840b604..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/EnumGenerator.groovy
+++ /dev/null
@@ -1,112 +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.dotnet
-
-import org.apache.tinkerpop.gremlin.util.CoreImports
-import org.apache.tinkerpop.gremlin.structure.Direction
-
-class EnumGenerator {
-
- public static void create(final String enumDirectory) {
-
- Map<String, String> enumCSharpToJavaNames = new HashMap<String, String>();
- for (final Class<? extends Enum> enumClass : CoreImports.getClassImports()
- .findAll { Enum.class.isAssignableFrom(it) }
- .sort { a, b -> a.getSimpleName() <=> b.getSimpleName() }
- .collect()) {
- createEnum(enumDirectory, enumClass, enumCSharpToJavaNames)
- }
-
- // Write a file containing the equivalence in names between Java and C#
- final String enumCSharpToJavaFile = "$enumDirectory/NamingConversions.cs"
- final File file = new File(enumCSharpToJavaFile);
- file.delete();
- file.append(CommonContentHelper.getLicense());
- file.append("""
-using System.Collections.Generic;
-
-namespace Gremlin.Net.Process.Traversal
-{
- internal static class NamingConversions
- {
- /// <summary>
- /// Gets the Java name equivalent for a given enum value
- /// </summary>
- internal static string GetEnumJavaName(string typeName, string value)
- {
- var key = \$"{typeName}.{value}";
- string javaName;
- if (!CSharpToJavaEnums.TryGetValue(key, out javaName))
- {
- throw new KeyNotFoundException(\$"Java name for {key} not found");
- }
- return javaName;
- }
-
- internal static readonly IDictionary<string, string> CSharpToJavaEnums = new Dictionary<string, string>
- {
-""" );
- def lastIndex = (enumCSharpToJavaNames.size() - 1);
- enumCSharpToJavaNames.eachWithIndex{ node, i ->
- file.append(""" {"$node.key", "$node.value"}${i == lastIndex ? "" : ","}\n""")
- }
- file.append(" };\n }\n}");
-
- }
-
- public static String toCSharpName(final Class<? extends Enum> enumClass, String itemName) {
- if (enumClass.equals(Direction.class)) {
- itemName = itemName.toLowerCase();
- }
- return itemName.substring(0, 1).toUpperCase() + itemName.substring(1);
- }
-
- private static void createEnum(final String enumDirectory, final Class<? extends Enum> enumClass,
- final Map<String, String> csharpToJava) {
- final StringBuilder csharpEnum = new StringBuilder()
-
- csharpEnum.append(CommonContentHelper.getLicense())
-
- csharpEnum.append(
- """
-namespace Gremlin.Net.Process.Traversal
-{
- public enum ${enumClass.getSimpleName()}
- {
-""")
- enumClass.getEnumConstants().
- sort { a, b -> a.name() <=> b.name() }.
- each { value ->
- def csharpName = toCSharpName(enumClass, value.name());
- csharpEnum.append(" $csharpName,\n");
- csharpToJava.put(enumClass.simpleName + "." + csharpName, value.name());
- }
- csharpEnum.deleteCharAt(csharpEnum.length() - 2)
-
- csharpEnum.append(" }\n")
- csharpEnum.append("}")
-
- final String enumFileName = "${enumDirectory}/${enumClass.getSimpleName()}.cs"
- final File file = new File(enumFileName);
- file.delete()
- csharpEnum.eachLine { file.append(it + "\n") }
- }
-}
-
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GenerateGremlinDotNet.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GenerateGremlinDotNet.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GenerateGremlinDotNet.groovy
deleted file mode 100644
index 0d09d5b..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GenerateGremlinDotNet.groovy
+++ /dev/null
@@ -1,32 +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.dotnet
-
-public class GenerateGremlinDotNet {
-
- public static void main(String[] args) {
- final String dotnetDirectory = args[0]
- GraphTraversalSourceGenerator.create(dotnetDirectory + "/Process/Traversal/" + "GraphTraversalSource.cs")
- GraphTraversalGenerator.create(dotnetDirectory + "/Process/Traversal/" + "GraphTraversal.cs")
- AnonymousTraversalGenerator.create(dotnetDirectory + "/Process/Traversal/" + "__.cs")
- EnumGenerator.create(dotnetDirectory + "/Process/Traversal/")
- PredicateGenerator.create(dotnetDirectory + "/Process/Traversal/" + "P.cs")
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalGenerator.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalGenerator.groovy
deleted file mode 100644
index d3bade5..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalGenerator.groovy
+++ /dev/null
@@ -1,90 +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.dotnet
-
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
-
-class GraphTraversalGenerator {
-
- public static void create(final String graphTraversalFile) {
-
- final StringBuilder csharpClass = new StringBuilder()
-
- csharpClass.append(CommonContentHelper.getLicense())
-
- csharpClass.append(
-"""
-using System.Collections.Generic;
-using Gremlin.Net.Structure;
-
-namespace Gremlin.Net.Process.Traversal
-{
- public class GraphTraversal<S, E> : DefaultTraversal<S, E>
- {
- public GraphTraversal()
- : this(new List<ITraversalStrategy>(), new Bytecode())
- {
- }
-
- public GraphTraversal(ICollection<ITraversalStrategy> traversalStrategies, Bytecode bytecode)
- {
- TraversalStrategies = traversalStrategies;
- Bytecode = bytecode;
- }
-
- private static GraphTraversal<S2, E2> Wrap<S2, E2>(GraphTraversal<S, E> traversal)
- {
- if (typeof(S2) == typeof(S) && typeof(E2) == typeof(E))
- {
- return traversal as GraphTraversal<S2, E2>;
- }
- // New wrapper
- return new GraphTraversal<S2, E2>(traversal.TraversalStrategies, traversal.Bytecode);
- }
-
-""")
- GraphTraversal.getMethods().
- findAll { GraphTraversal.class.equals(it.returnType) }.
- findAll { !it.name.equals("clone") && !it.name.equals("iterate") }.
- groupBy { it.name }.
- // Select unique by name, with the most amount of parameters
- collect { it.value.sort { a, b -> b.parameterCount <=> a.parameterCount }.first() }.
- sort { it.name }.
- forEach { javaMethod ->
- String[] typeNames = SymbolHelper.getJavaParameterTypeNames(javaMethod);
- def t1 = SymbolHelper.toCSharpType(typeNames[0]);
- def t2 = SymbolHelper.toCSharpType(typeNames[1]);
- def tParam = SymbolHelper.getCSharpGenericTypeParam(t2);
- csharpClass.append(
-"""
- public GraphTraversal<$t1, $t2> ${SymbolHelper.toCSharp(javaMethod.name)}$tParam(params object[] args)
- {
- Bytecode.AddStep("$javaMethod.name", args);
- return Wrap<$t1, $t2>(this);
- }
-""")
- }
- csharpClass.append(" }\n}")
-
- final File file = new File(graphTraversalFile);
- file.delete()
- csharpClass.eachLine { file.append(it + "\n") }
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalSourceGenerator.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalSourceGenerator.groovy
deleted file mode 100644
index 7cb41da..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/GraphTraversalSourceGenerator.groovy
+++ /dev/null
@@ -1,142 +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.dotnet
-
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource
-import java.lang.reflect.*
-
-class GraphTraversalSourceGenerator {
-
- public static void create(final String graphTraversalSourceFile) {
-
- final StringBuilder csharpClass = new StringBuilder()
-
- csharpClass.append(CommonContentHelper.getLicense())
-
- csharpClass.append(
-"""
-using System.Collections.Generic;
-using Gremlin.Net.Process.Remote;
-using Gremlin.Net.Process.Traversal.Strategy.Decoration;
-using Gremlin.Net.Structure;
-
-namespace Gremlin.Net.Process.Traversal
-{
- public class GraphTraversalSource
- {
- public ICollection<ITraversalStrategy> TraversalStrategies { get; set; }
- public Bytecode Bytecode { get; set; }
-
- public GraphTraversalSource()
- : this(new List<ITraversalStrategy>(), new Bytecode())
- {
- }
-
- public GraphTraversalSource(ICollection<ITraversalStrategy> traversalStrategies, Bytecode bytecode)
- {
- TraversalStrategies = traversalStrategies;
- Bytecode = bytecode;
- }
-"""
- )
-
- GraphTraversalSource.getMethods(). // SOURCE STEPS
- findAll { GraphTraversalSource.class.equals(it.returnType) }.
- findAll {
- !it.name.equals("clone") &&
- // replace by TraversalSource.Symbols.XXX
- !it.name.equals("withBindings") &&
- !it.name.equals("withRemote") &&
- !it.name.equals("withComputer")
- }.
- collect { it.name }.
- unique().
- sort { a, b -> a <=> b }.
- forEach { javaMethodName ->
- String sharpMethodName = SymbolHelper.toCSharp(javaMethodName)
-
- csharpClass.append(
-"""
- public GraphTraversalSource ${sharpMethodName}(params object[] args)
- {
- var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
- new Bytecode(Bytecode));
- source.Bytecode.AddSource("${javaMethodName}\", args);
- return source;
- }
-""")
- }
-
- csharpClass.append(
- """
- public GraphTraversalSource WithBindings(object bindings)
- {
- return this;
- }
-
- public GraphTraversalSource WithRemote(IRemoteConnection remoteConnection)
- {
- var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
- new Bytecode(Bytecode));
- source.TraversalStrategies.Add(new RemoteStrategy(remoteConnection));
- return source;
- }
-
- public GraphTraversalSource WithComputer(string graphComputer = null, int? workers = null, string persist = null,
- string result = null, ITraversal vertices = null, ITraversal edges = null,
- Dictionary<string, dynamic> configuration = null)
- {
- return WithStrategies(new VertexProgramStrategy(graphComputer, workers, persist, result, vertices, edges, configuration));
- }
-""")
-
- GraphTraversalSource.getMethods().
- findAll { GraphTraversal.class.equals(it.returnType) }.
- unique{ a -> a.name }.
- sort { a, b -> a.name <=> b.name }.
- forEach { javaMethod ->
- String sharpMethodName = SymbolHelper.toCSharp(javaMethod.name);
- Type[] typeArguments = ((ParameterizedType)javaMethod.getGenericReturnType()).actualTypeArguments;
- if (typeArguments.length != 2 || !(typeArguments[0] instanceof Class)) {
- return;
- }
- def returnType = """GraphTraversal<${
- ((Class)typeArguments[0]).getSimpleName()}, ${((Class)typeArguments[1]).getSimpleName()}>""";
-
-
- csharpClass.append(
- """
- public ${returnType} ${sharpMethodName}(params object[] args)
- {
- var traversal = new ${returnType}(TraversalStrategies, new Bytecode(Bytecode));
- traversal.Bytecode.AddStep("${javaMethod.name}\", args);
- return traversal;
- }
-""")
- }
-
- csharpClass.append(" }\n}")
-
- final File file = new File(graphTraversalSourceFile);
- file.delete()
- csharpClass.eachLine { file.append(it + "\n") }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/PredicateGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/PredicateGenerator.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/PredicateGenerator.groovy
deleted file mode 100644
index c5c9c10..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/PredicateGenerator.groovy
+++ /dev/null
@@ -1,64 +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.dotnet
-
-import org.apache.tinkerpop.gremlin.process.traversal.P
-
-import java.lang.reflect.Modifier
-
-class PredicateGenerator {
-
- public static void create(final String predicateFile) {
-
- final StringBuilder csharpClass = new StringBuilder()
-
- csharpClass.append(CommonContentHelper.getLicense())
-
- csharpClass.append(
-"""
-
-namespace Gremlin.Net.Process.Traversal
-{
- public class P
- {""")
- P.class.getMethods().
- findAll { Modifier.isStatic(it.getModifiers()) }.
- findAll { P.class.isAssignableFrom(it.returnType) }.
- collect { it.name }.
- unique().
- sort { a, b -> a <=> b }.
- each { javaMethodName ->
- String sharpMethodName = SymbolHelper.toCSharp(javaMethodName)
- csharpClass.append(
-"""
- public static TraversalPredicate ${sharpMethodName}(params object[] args)
- {
- var value = args.Length == 1 ? args[0] : args;
- return new TraversalPredicate("${javaMethodName}", value);
- }
-""")
- }
- csharpClass.append(" }\n}")
-
- final File file = new File(predicateFile)
- file.delete()
- csharpClass.eachLine { file.append(it + "\n") }
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/SymbolHelper.groovy
----------------------------------------------------------------------
diff --git a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/SymbolHelper.groovy b/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/SymbolHelper.groovy
deleted file mode 100644
index c041062..0000000
--- a/gremlin-dotnet-generator/src/main/groovy/org/apache/tinkerpop/gremlin/dotnet/SymbolHelper.groovy
+++ /dev/null
@@ -1,89 +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.dotnet
-
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-
-public final class SymbolHelper {
-
- private static final Map<String, String> TO_CSHARP_TYPE_MAP = new HashMap<>();
-
- static {
- TO_CSHARP_TYPE_MAP.put("Long", "long");
- TO_CSHARP_TYPE_MAP.put("Integer", "int");
- TO_CSHARP_TYPE_MAP.put("String", "string");
- TO_CSHARP_TYPE_MAP.put("Object", "object");
- TO_CSHARP_TYPE_MAP.put("java.util.Map<java.lang.String, E2>", "IDictionary<string, E2>");
- TO_CSHARP_TYPE_MAP.put("java.util.Map<java.lang.String, B>", "IDictionary<string, E2>")
- TO_CSHARP_TYPE_MAP.put("java.util.List<E>", "IList<E>");
- TO_CSHARP_TYPE_MAP.put("java.util.List<A>", "IList<object>");
- TO_CSHARP_TYPE_MAP.put("java.util.Map<K, V>", "IDictionary<K, V>");
- TO_CSHARP_TYPE_MAP.put("java.util.Collection<E2>", "ICollection<E2>");
- TO_CSHARP_TYPE_MAP.put("java.util.Collection<B>", "ICollection<E2>")
- TO_CSHARP_TYPE_MAP.put("java.util.Map<K, java.lang.Long>", "IDictionary<K, long>");
- TO_CSHARP_TYPE_MAP.put("TraversalMetrics", "E2");
- }
-
- public static String toCSharp(final String symbol) {
- return (String) Character.toUpperCase(symbol.charAt(0)) + symbol.substring(1)
- }
-
- public static String toJava(final String symbol) {
- return (String) Character.toLowerCase(symbol.charAt(0)) + symbol.substring(1)
- }
-
- public static String toCSharpType(final String name) {
- String typeName = TO_CSHARP_TYPE_MAP.getOrDefault(name, name);
- if (typeName.equals(name) && (typeName.contains("? extends") || typeName.equals("Tree"))) {
- typeName = "E2";
- }
- return typeName;
- }
-
- public static String[] getJavaParameterTypeNames(final Method method) {
- def typeArguments = ((ParameterizedType)method.genericReturnType).actualTypeArguments;
- return typeArguments.
- collect { (it instanceof Class) ? ((Class)it).simpleName : it.typeName }.
- collect { name ->
- if (name.equals("A")) {
- name = "object";
- }
- else if (name.equals("B")) {
- name = "E2";
- }
- name;
- };
- }
-
- public static String getCSharpGenericTypeParam(String typeName) {
- def tParam = "";
- if (typeName.contains("E2")) {
- tParam = "<E2>";
- }
- else if (typeName.contains("<K, V>")) {
- tParam = "<K, V>";
- }
- else if (typeName.contains("<K, ")) {
- tParam = "<K>";
- }
- return tParam;
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/glv/AnonymousTraversal.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/AnonymousTraversal.template b/gremlin-dotnet/glv/AnonymousTraversal.template
new file mode 100644
index 0000000..33002bf
--- /dev/null
+++ b/gremlin-dotnet/glv/AnonymousTraversal.template
@@ -0,0 +1,45 @@
+#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.Collections.Generic;
+using Gremlin.Net.Structure;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
+ public static class __
+ {
+ public static GraphTraversal<object, object> Start()
+ {
+ return new GraphTraversal<object, object>();
+ }
+<% anonStepMethods.each { method -> %>
+ public static GraphTraversal<object, <%= method.t2 %>> <%= toCSharpMethodName.call(method.methodName) %><%= method.tParam %>(params object[] args)
+ {
+ return new GraphTraversal<object, object>().<%= toCSharpMethodName.call(method.methodName) %><%= method.tParam %>(args);
+ }
+<% } %>
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/glv/Enum.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/Enum.template b/gremlin-dotnet/glv/Enum.template
new file mode 100644
index 0000000..664db45
--- /dev/null
+++ b/gremlin-dotnet/glv/Enum.template
@@ -0,0 +1,33 @@
+#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
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
+ public enum <%= enumClass.simpleName %>
+ {
+ <%= constants %>
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/glv/GraphTraversal.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/GraphTraversal.template b/gremlin-dotnet/glv/GraphTraversal.template
new file mode 100644
index 0000000..b782ffa
--- /dev/null
+++ b/gremlin-dotnet/glv/GraphTraversal.template
@@ -0,0 +1,64 @@
+#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.Collections.Generic;
+using Gremlin.Net.Structure;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
+ public class GraphTraversal<S, E> : DefaultTraversal<S, E>
+ {
+ public GraphTraversal()
+ : this(new List<ITraversalStrategy>(), new Bytecode())
+ {
+ }
+
+ public GraphTraversal(ICollection<ITraversalStrategy> traversalStrategies, Bytecode bytecode)
+ {
+ TraversalStrategies = traversalStrategies;
+ Bytecode = bytecode;
+ }
+
+ private static GraphTraversal<S2, E2> Wrap<S2, E2>(GraphTraversal<S, E> traversal)
+ {
+ if (typeof(S2) == typeof(S) && typeof(E2) == typeof(E))
+ {
+ return traversal as GraphTraversal<S2, E2>;
+ }
+ // New wrapper
+ return new GraphTraversal<S2, E2>(traversal.TraversalStrategies, traversal.Bytecode);
+ }
+
+<% graphStepMethods.each { method -> %>
+ public GraphTraversal< <%= method.t1 %> , <%= method.t2 %> > <%= toCSharpMethodName.call(method.methodName) %><%= method.tParam %> (params object[] args)
+ {
+ Bytecode.AddStep("<%= method.methodName %>", args);
+ return Wrap< <%= method.t1 %> , <%= method.t2 %> >(this);
+ }
+<% } %>
+
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/glv/GraphTraversalSource.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/GraphTraversalSource.template b/gremlin-dotnet/glv/GraphTraversalSource.template
new file mode 100644
index 0000000..880f793
--- /dev/null
+++ b/gremlin-dotnet/glv/GraphTraversalSource.template
@@ -0,0 +1,88 @@
+#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.Collections.Generic;
+using Gremlin.Net.Process.Remote;
+using Gremlin.Net.Process.Traversal.Strategy.Decoration;
+using Gremlin.Net.Structure;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
+ public class GraphTraversalSource
+ {
+ public ICollection<ITraversalStrategy> TraversalStrategies { get; set; }
+ public Bytecode Bytecode { get; set; }
+
+ public GraphTraversalSource()
+ : this(new List<ITraversalStrategy>(), new Bytecode())
+ {
+ }
+
+ public GraphTraversalSource(ICollection<ITraversalStrategy> traversalStrategies, Bytecode bytecode)
+ {
+ TraversalStrategies = traversalStrategies;
+ Bytecode = bytecode;
+ }
+
+<% sourceStepMethods.each{ method -> %>
+ public GraphTraversalSource <%= toCSharpMethodName.call(method) %>(params object[] args)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.Bytecode.AddSource("<%= method %>", args);
+ return source;
+ }
+<% } %>
+ public GraphTraversalSource WithBindings(object bindings)
+ {
+ return this;
+ }
+
+ public GraphTraversalSource WithRemote(IRemoteConnection remoteConnection)
+ {
+ var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies),
+ new Bytecode(Bytecode));
+ source.TraversalStrategies.Add(new RemoteStrategy(remoteConnection));
+ return source;
+ }
+
+ public GraphTraversalSource WithComputer(string graphComputer = null, int? workers = null, string persist = null,
+ string result = null, ITraversal vertices = null, ITraversal edges = null,
+ Dictionary<string, dynamic> configuration = null)
+ {
+ return WithStrategies(new VertexProgramStrategy(graphComputer, workers, persist, result, vertices, edges, configuration));
+ }
+
+<% sourceSpawnMethods.each { method -> %>
+ public GraphTraversal< <%= method.typeArguments.join(",") %> > <%= toCSharpMethodName.call(method.methodName) %>(params object[] args)
+ {
+ var traversal = new GraphTraversal< <%= method.typeArguments.join(",") %> >(TraversalStrategies, new Bytecode(Bytecode));
+ traversal.Bytecode.AddStep("<%= method.methodName %>", args);
+ return traversal;
+ }
+<% } %>
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/glv/NamingConversions.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/NamingConversions.template b/gremlin-dotnet/glv/NamingConversions.template
new file mode 100644
index 0000000..b997dee
--- /dev/null
+++ b/gremlin-dotnet/glv/NamingConversions.template
@@ -0,0 +1,52 @@
+#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.Collections.Generic;
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
+ internal static class NamingConversions
+ {
+ /// <summary>
+ /// Gets the Java name equivalent for a given enum value
+ /// </summary>
+ internal static string GetEnumJavaName(string typeName, string value)
+ {
+ var key = \$"{typeName}.{value}";
+ string javaName;
+ if (!CSharpToJavaEnums.TryGetValue(key, out javaName))
+ {
+ throw new KeyNotFoundException(\$"Java name for {key} not found");
+ }
+ return javaName;
+ }
+
+ internal static readonly IDictionary<string, string> CSharpToJavaEnums = new Dictionary<string, string>
+ {
+ <%= body %>
+ };
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/glv/P.template
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/glv/P.template b/gremlin-dotnet/glv/P.template
new file mode 100644
index 0000000..5be695d
--- /dev/null
+++ b/gremlin-dotnet/glv/P.template
@@ -0,0 +1,39 @@
+#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
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
+ public class P
+ {
+<% pmethods.each { method -> %>
+ public static TraversalPredicate <%= toCSharpMethodName.call(method) %>(params object[] args)
+ {
+ var value = args.Length == 1 ? args[0] : args;
+ return new TraversalPredicate("<%= method %>", value);
+ }
+<% } %>
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/pom.xml b/gremlin-dotnet/pom.xml
index ea3ae12..4bdf1e3 100644
--- a/gremlin-dotnet/pom.xml
+++ b/gremlin-dotnet/pom.xml
@@ -28,8 +28,8 @@ limitations under the License.
<packaging>pom</packaging>
<modules>
- <module>test</module>
<module>src</module>
+ <module>test</module>
</modules>
<build>
@@ -40,6 +40,233 @@ limitations under the License.
<extensions>true</extensions>
<version>0.14</version>
</plugin>
+ <plugin>
+ <groupId>org.codehaus.gmavenplus</groupId>
+ <artifactId>gmavenplus-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tinkerpop</groupId>
+ <artifactId>gremlin-core</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-all</artifactId>
+ <version>${groovy.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.17</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>generate-dsl</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <scripts>
+ <script><![CDATA[
+import org.apache.tinkerpop.gremlin.jsr223.CoreImports
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource
+import org.apache.tinkerpop.gremlin.process.traversal.P
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.structure.Direction
+import java.lang.reflect.Modifier
+
+def toCSharpTypeMap = ["Long": "long",
+ "Integer": "int",
+ "String": "string",
+ "Object": "object",
+ "java.util.Map<java.lang.String, E2>": "IDictionary<string, E2>",
+ "java.util.Map<java.lang.String, B>": "IDictionary<string, E2>",
+ "java.util.List<E>": "IList<E>",
+ "java.util.Map<K, V>": "IDictionary<K, V>",
+ "java.util.Collection<E2>": "ICollection<E2>",
+ "java.util.Collection<B>": "ICollection<E2>",
+ "java.util.Map<K, java.lang.Long>": "IDictionary<K, long>",
+ "TraversalMetrics": "E2"]
+
+def useE2 = ["E2", "E2"];
+def methodsWithSpecificTypes = ["constant": useE2,
+ "limit": useE2,
+ "mean": useE2,
+ "optional": useE2,
+ "range": useE2,
+ "select": ["IDictionary<string, E2>", "E2"],
+ "sum": useE2,
+ "tail": useE2,
+ "tree": ["object"],
+ "unfold": useE2]
+
+def getCSharpGenericTypeParam = { typeName ->
+ def tParam = ""
+ if (typeName.contains("E2")) {
+ tParam = "<E2>"
+ }
+ else if (typeName.contains("<K, V>")) {
+ tParam = "<K, V>"
+ }
+ else if (typeName.contains("<K, ")) {
+ tParam = "<K>"
+ }
+ return tParam
+}
+
+def toCSharpType = { name ->
+ String typeName = toCSharpTypeMap.getOrDefault(name, name);
+ if (typeName.equals(name) && (typeName.contains("? extends") || typeName.equals("Tree"))) {
+ typeName = "E2"
+ }
+ return typeName;
+}
+
+def toCSharpMethodName = { symbol -> (String) Character.toUpperCase(symbol.charAt(0)) + symbol.substring(1) }
+
+def getJavaParameterTypeNames = { method ->
+ def typeArguments = method.genericReturnType.actualTypeArguments;
+ return typeArguments.
+ collect { (it instanceof Class) ? ((Class)it).simpleName : it.typeName }.
+ collect { name ->
+ if (name.equals("A")) {
+ name = "object"
+ }
+ else if (name.equals("B")) {
+ name = "E2";
+ }
+ name
+ }
+}
+
+def binding = ["pmethods": P.class.getMethods().
+ findAll { Modifier.isStatic(it.getModifiers()) }.
+ findAll { P.class.isAssignableFrom(it.returnType) }.
+ collect { it.name }.
+ unique().
+ sort { a, b -> a <=> b },
+ "sourceStepMethods": GraphTraversalSource.getMethods(). // SOURCE STEPS
+ findAll { GraphTraversalSource.class.equals(it.returnType) }.
+ findAll {
+ !it.name.equals("clone") &&
+ !it.name.equals(TraversalSource.Symbols.withBindings) &&
+ !it.name.equals(TraversalSource.Symbols.withRemote) &&
+ !it.name.equals(TraversalSource.Symbols.withComputer)
+ }.
+ collect { it.name }.
+ unique().
+ sort { a, b -> a <=> b },
+ "sourceSpawnMethods": GraphTraversalSource.getMethods(). // SPAWN STEPS
+ findAll { GraphTraversal.class.equals(it.returnType) && !it.name.equals('inject')}.
+ collect { [methodName: it.name, typeArguments: it.genericReturnType.actualTypeArguments.collect{t -> ((java.lang.Class)t).simpleName}] }.
+ unique().
+ sort { a, b -> a.methodName <=> b.methodName },
+ "graphStepMethods": GraphTraversal.getMethods().
+ findAll { GraphTraversal.class.equals(it.returnType) }.
+ findAll { !it.name.equals("clone") && !it.name.equals("iterate") }.
+ groupBy { it.name }.
+ // Select unique by name, with the most amount of parameters
+ collect { it.value.sort { a, b -> b.parameterCount <=> a.parameterCount }.first() }.
+ sort { a, b -> a.name <=> b.name }.
+ collect { javaMethod ->
+ def typeNames = getJavaParameterTypeNames(javaMethod)
+ def t1 = toCSharpType(typeNames[0])
+ def t2 = toCSharpType(typeNames[1])
+ def tParam = getCSharpGenericTypeParam(t2)
+ return ["methodName": javaMethod.name, "t1":t1, "t2":t2, "tParam":tParam]
+ },
+ "anonStepMethods": __.class.getMethods().
+ findAll { GraphTraversal.class.equals(it.returnType) }.
+ findAll { Modifier.isStatic(it.getModifiers()) }.
+ findAll { !it.name.equals("__") && !it.name.equals("start") }.
+ groupBy { it.name }.
+ // Select unique by name, with the most amount of parameters
+ collect { it.value.sort { a, b -> b.parameterCount <=> a.parameterCount }.first() }.
+ sort { it.name }.
+ collect { javaMethod ->
+ def typeNames = getJavaParameterTypeNames(javaMethod)
+ def t2 = toCSharpType(typeNames[1])
+ def tParam = getCSharpGenericTypeParam(t2)
+ def specificTypes = methodsWithSpecificTypes.get(javaMethod.name)
+ if (specificTypes) {
+ t2 = specificTypes[0]
+ tParam = specificTypes.size() > 1 ? "<" + specificTypes[1] + ">" : ""
+ }
+ return ["methodName": javaMethod.name, "t2":t2, "tParam":tParam]
+ },
+ "toCSharpMethodName": toCSharpMethodName]
+
+def engine = new groovy.text.GStringTemplateEngine()
+def traversalTemplate = engine.createTemplate(new File('${project.basedir}/glv/GraphTraversal.template')).make(binding)
+def traversalFile = new File('${project.basedir}/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs')
+traversalFile.newWriter().withWriter{ it << traversalTemplate }
+
+def graphTraversalTemplate = engine.createTemplate(new File('${project.basedir}/glv/GraphTraversalSource.template')).make(binding)
+def graphTraversalFile = new File('${project.basedir}/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs')
+graphTraversalFile.newWriter().withWriter{ it << graphTraversalTemplate }
+
+def anonymousTraversalTemplate = engine.createTemplate(new File('${project.basedir}/glv/AnonymousTraversal.template')).make(binding)
+def anonymousTraversalFile = new File('${project.basedir}/src/Gremlin.Net/Process/Traversal/__.cs')
+anonymousTraversalFile.newWriter().withWriter{ it << anonymousTraversalTemplate }
+
+def pTemplate = engine.createTemplate(new File('${project.basedir}/glv/P.template')).make(binding)
+def pFile = new File('${project.basedir}/src/Gremlin.Net/Process/Traversal/P.cs')
+pFile.newWriter().withWriter{ it << pTemplate }
+
+// Process enums
+def toCSharpName = { enumClass, itemName ->
+ if (enumClass.equals(Direction.class)) {
+ itemName = itemName.toLowerCase()
+ }
+
+ return itemName.substring(0, 1).toUpperCase() + itemName.substring(1)
+}
+
+def createEnum = { enumClass, csharpToJava ->
+ def b = ["enumClass": enumClass,
+ "constants": enumClass.getEnumConstants().
+ sort { a, b -> a.name() <=> b.name() }.
+ collect { value ->
+ def csharpName = toCSharpName(enumClass, value.name())
+ csharpToJava.put(enumClass.simpleName + "." + csharpName, value.name())
+ return csharpName
+ }.join(",")]
+
+ def enumTemplate = engine.createTemplate(new File('${project.basedir}/glv/Enum.template')).make(b)
+ def enumFile = new File('${project.basedir}/src/Gremlin.Net/Process/Traversal/' + enumClass.getSimpleName() + '.cs')
+ enumFile.newWriter().withWriter{ it << enumTemplate }
+}
+
+def enumCSharpToJavaNames = [:]
+CoreImports.getClassImports().findAll { Enum.class.isAssignableFrom(it) }.
+ sort { a, b -> a.getSimpleName() <=> b.getSimpleName() }.
+ each { createEnum(it, enumCSharpToJavaNames) }
+
+def lastIndex = (enumCSharpToJavaNames.size() - 1);
+def body = new StringBuilder()
+enumCSharpToJavaNames.eachWithIndex{ node, i ->
+ body.append("""{"$node.key", "$node.value"}""")
+ body.append(i == lastIndex ? "\n" : ",\n ")
+}
+
+def namingConversionsTemplate = engine.createTemplate(new File('${project.basedir}/glv/NamingConversions.template')).make(["body":body])
+def namingConversionsFile = new File('${project.basedir}/src/Gremlin.Net/Process/Traversal/NamingConversions.cs')
+namingConversionsFile.newWriter().withWriter{ it << namingConversionsTemplate }
+
+]]>
+ </script>
+ </scripts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs
index 6ef1d4f..543fda6 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs
@@ -23,8 +23,11 @@
namespace Gremlin.Net.Process.Traversal
{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
public enum Barrier
{
NormSack
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs
index b158d09..b47dd32 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs
@@ -23,10 +23,11 @@
namespace Gremlin.Net.Process.Traversal
{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
public enum Cardinality
{
- List,
- Set,
- Single
+ List,Set,Single
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs
index 0f3556c..063c26e 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs
@@ -23,9 +23,11 @@
namespace Gremlin.Net.Process.Traversal
{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
public enum Column
{
- Keys,
- Values
+ Keys,Values
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs
index 100296c..5f6717e 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs
@@ -23,10 +23,11 @@
namespace Gremlin.Net.Process.Traversal
{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
public enum Direction
{
- Both,
- In,
- Out
+ Both,In,Out
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0d9e138/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs
new file mode 100644
index 0000000..c72ae8e
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs
@@ -0,0 +1,33 @@
+#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
+
+namespace Gremlin.Net.Process.Traversal
+{
+ /// <summary>
+ /// THIS IS A GENERATED CLASS - DO NOT MODIFY THIS CLASS DIRECTLY - see pom.xml
+ /// </summary>
+ public enum GraphSONVersion
+ {
+ V1_0,V2_0
+ }
+}
\ No newline at end of file