gremlin-javascript/build/generate.groovy (97 lines of code) (raw):

/* * 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. */ import org.apache.tinkerpop.gremlin.language.translator.GremlinTranslator import org.apache.tinkerpop.gremlin.language.translator.Translator import org.apache.tinkerpop.gremlin.language.corpus.FeatureReader import java.nio.file.Paths // file is overwritten on each generation radishGremlinFile = new File("${projectBaseDir}/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js") // assumes globally unique scenario names for keys with list of Gremlin traversals as they appear gremlins = FeatureReader.parseGrouped(Paths.get("${projectBaseDir}", "gremlin-test", "src", "main", "resources", "org", "apache", "tinkerpop", "gremlin", "test", "features").toString()) radishGremlinFile.withWriter('UTF-8') { Writer writer -> writer.writeLine('/*\n' + '* Licensed to the Apache Software Foundation (ASF) under one\n' + '* or more contributor license agreements. See the NOTICE file\n' + '* distributed with this work for additional information\n' + '* regarding copyright ownership. The ASF licenses this file\n' + '* to you under the Apache License, Version 2.0 (the\n' + '* "License"); you may not use this file except in compliance\n' + '* with the License. You may obtain a copy of the License at\n' + '* \n' + '* http://www.apache.org/licenses/LICENSE-2.0\n' + '* \n' + '* Unless required by applicable law or agreed to in writing,\n' + '* software distributed under the License is distributed on an\n' + '* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n' + '* KIND, either express or implied. See the License for the\n' + '* specific language governing permissions and limitations\n' + '* under the License.\n' + '*/\n') writer.writeLine("\n\n//********************************************************************************") writer.writeLine("//* Do NOT edit this file directly - generated by build/generate.groovy") writer.writeLine("//********************************************************************************\n\n") writer.writeLine( 'import * as graphTraversalModule from \'../../lib/process/graph-traversal.js\';\n' + 'import * as traversalModule from \'../../lib/process/traversal.js\';\n' + 'import * as uuid from \'uuid\';\n' + 'import { TraversalStrategies, VertexProgramStrategy, OptionsStrategy, PartitionStrategy, \n' + ' ReadOnlyStrategy, GraphFilterStrategy, SeedStrategy, SubgraphStrategy, ProductiveByStrategy, \n' + ' LambdaRestrictionStrategy, StandardVerificationStrategy, VertexProgramRestrictionStrategy, \n' + ' ComputerVerificationStrategy, MessagePassingReductionStrategy, ProfileStrategy, InlineFilterStrategy, \n' + ' ComputerFinalizationStrategy, ReferenceElementStrategy, ElementIdStrategy, MatchAlgorithmStrategy, \n' + ' EdgeLabelVerificationStrategy, CountStrategy, ConnectiveStrategy, ByModulatorOptimizationStrategy, \n' + ' AdjacentToIncidentStrategy, ReservedKeysVerificationStrategy, RepeatUnrollStrategy, \n' + ' PathRetractionStrategy, PathProcessorStrategy, OrderLimitStrategy, MatchPredicateStrategy, \n' + ' LazyBarrierStrategy, EarlyLimitStrategy, IncidentToAdjacentStrategy, IdentityRemovalStrategy, \n' + ' HaltedTraverserStrategy, FilterRankingStrategy } from \'../../lib/process/traversal-strategy.js\';\n' + 'const __ = graphTraversalModule.statics;\n' + 'const Barrier = traversalModule.barrier\n' + 'const Cardinality = traversalModule.cardinality\n' + 'const CardinalityValue = graphTraversalModule.CardinalityValue;\n' + 'const Column = traversalModule.column\n' + 'const Direction = {\n' + ' BOTH: traversalModule.direction.both,\n' + ' IN: traversalModule.direction.in,\n' + ' OUT: traversalModule.direction.out,\n' + ' from_: traversalModule.direction.out,\n' + ' to: traversalModule.direction.in\n' + '};\n' + 'const IO = traversalModule.IO;\n' + 'const DT = traversalModule.dt;\n' + 'const Merge = traversalModule.merge;\n' + 'const P = traversalModule.P;\n' + 'const Pick = traversalModule.pick\n' + 'const Pop = traversalModule.pop\n' + 'const Order = traversalModule.order\n' + 'const Operator = traversalModule.operator\n' + 'const Scope = traversalModule.scope\n' + 'const T = traversalModule.t\n' + 'const TextP = traversalModule.TextP\n' + 'const WithOptions = traversalModule.withOptions\n' ) // some traversals may require a static translation if the translator can't handle them for some reason def staticTranslate = [:] // SAMPLE: g_injectXnull_nullX: " g_injectXnull_nullX: [function({g}) { return g.inject(null,null) }], ", writer.writeLine('const gremlins = {') gremlins.each { k,v -> if (staticTranslate.containsKey(k)) { writer.writeLine(staticTranslate[k]) } else { writer.write(" ") writer.write(k) writer.write(": [") def collected = v.collect { GremlinTranslator.translate(it, Translator.JAVASCRIPT) } def uniqueBindings = collected.collect { it.getParameters() }.flatten().unique() def gremlinItty = collected.iterator() while (gremlinItty.hasNext()) { def t = gremlinItty.next() writer.write("function({g") if (!uniqueBindings.isEmpty()) { writer.write(", ") writer.write(uniqueBindings.join(", ")) } writer.write("}) { return ") writer.write(t.getTranslated()) writer.write(" }") if (gremlinItty.hasNext()) writer.write(', ') } writer.writeLine('], ') } } writer.writeLine('}\n') writer.writeLine('export const gremlin = gremlins') }