blob: 97cd68358b7eb426c4dbc710d9733e5cc0dd4ec4 [file] [log] [blame]
# 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.
#
# @author Daniel Kuppitz (http://gremlin.guru)
#
function capitalize(string) {
return toupper(substr(string, 1, 1)) substr(string, 2)
}
BEGIN {
delimiter = 0
}
/^pb\([0-9]*\); '\[gremlin-/ {
delimiter = 1
split($0, a, "-")
b = gensub(/]'/, "", "g", a[2])
split(b, c, ",")
split(a[1], d, ";")
lang = c[1]
graph = c[2]
print d[1] "; '[source," lang "]'"
print "'+EVALUATED'"
print "'+IGNORE'"
if (graph != "existing") {
if (graph) {
print "graph = TinkerFactory.create" capitalize(graph) "()"
} else {
print "graph = TinkerGraph.open()"
}
print "g = graph.traversal()"
print "marko = g.V().has('name', 'marko').tryNext().orElse(null)"
print "f = new File('/tmp/neo4j')"
print "if (f.exists()) f.deleteDir()"
print "f = new File('/tmp/tinkergraph.kryo')"
print "if (f.exists()) f.deleteDir()"
print ":set max-iteration 100"
if (lang == "python") {
print "import static javax.script.ScriptContext.*"
print "import org.apache.tinkerpop.gremlin.python.jsr223.JythonTranslator"
print "jython = new org.apache.tinkerpop.gremlin.python.jsr223.GremlinJythonScriptEngine()"
print "jython.eval('import os')"
print "jython.eval('os.chdir(\"" TP_HOME "\")')"
print "jython.eval('import sys')"
print "jython.eval('sys.path.append(\"" PYTHONPATH "\")')"
print "jython.eval('sys.path.append(\"" TP_HOME "/gremlin-python/target/python2/env/lib/python2.7/site-packages\")')"
print "jython.eval('from gremlin_python import statics')"
print "jython.eval('from gremlin_python.process.traversal import *')"
print "jython.eval('from gremlin_python.process.strategies import *')"
print "jython.eval('from gremlin_python.structure.graph import Graph')"
print "jython.eval('from gremlin_python.structure.io.graphsonV3d0 import GraphSONWriter')"
print "jython.eval('from gremlin_python.structure.io.graphsonV3d0 import GraphSONReader')"
# print "jython.eval('from gremlin_python.structure.io.graphson import serializers')"
# print "jython.eval('from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection')"
print "jython.eval('statics.load_statics(globals())')"
print "jythonBindings = jython.createBindings()"
print "jythonBindings.put('g', jython.eval('Graph().traversal()'))"
print "jythonBindings.put('h', g)"
print "jython.getContext().setBindings(jythonBindings, GLOBAL_SCOPE)"
print "groovy = new org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine()"
print "groovyBindings = groovy.createBindings()"
print "groovyBindings.put('g', g)"
print "groovyBindings.put('TinkerGraphComputer', TinkerGraphComputer)"
print "groovy.getContext().setBindings(groovyBindings, GLOBAL_SCOPE)"
print "def processTraversal(t, jython, groovy) {"
print " jython.getContext().getBindings(GLOBAL_SCOPE).put('j', jython.eval(t.replace('.toList()','')))"
print " if(jython.eval('isinstance(j, Traversal)')) {"
print " mapper = GraphSONMapper.build().version(GraphSONVersion.V2_0).create().createMapper()"
print " bytecode = mapper.readValue(jython.eval('GraphSONWriter().writeObject(j)').toString(), Bytecode.class)"
print " language = BytecodeHelper.getLambdaLanguage(bytecode).orElse('gremlin-groovy')"
print " result = language.equals('gremlin-groovy') ? groovy.eval(org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslator.of(\"g\").translate(bytecode) + '.toList()').toString() : jython.eval(JythonTranslator.of(\"h\").translate(bytecode) + '.toList()').toString()"
print " jython.getContext().getBindings(GLOBAL_SCOPE).put('json', mapper.writeValueAsString(result))"
print " return jython.eval('GraphSONReader().readObject(json)').toString()"
print " } else {"
print " j = jython.getContext().getBindings(GLOBAL_SCOPE).get('j')"
print " return null == j ? 'null' : j.toString()"
print " }"
print "}"
}
}
print "'-IGNORE'"
}
!/^pb\([0-9]*\); '\[gremlin-/ {
if (delimiter == 2 && !($0 ~ /^pb\([0-9]*\); '----'/)) {
switch (lang) {
case "python":
print "processTraversal(\"\"\"" gensub("\\('id',([0-9]+)\\)", "\\1", "g") "\"\"\", jython, groovy)"
break
default:
print
break
}
} else print
}
/^pb\([0-9]*\); '----'/ {
if (delimiter == 1) delimiter = 2
else if (delimiter == 2) {
print "'-EVALUATED'"
delimiter = 0
}
}