blob: 0a775260d22b2f1555f68a55e23d7bd67028a37d [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.
*/
package org.apache.tinkerpop.gremlin.python.jsr223;
import org.apache.commons.configuration.ConfigurationConverter;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
import org.apache.tinkerpop.gremlin.util.function.Lambda;
/**
* @deprecated As of release 3.3.10, not replaced - see TINKERPOP-2317
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
@Deprecated
public final class JythonTranslator extends PythonTranslator {
private JythonTranslator(final String traversalSource, final boolean importStatics) {
super(traversalSource, importStatics);
}
public static JythonTranslator of(final String traversalSource) {
return new JythonTranslator(traversalSource, false);
}
@Override
public String getTargetLanguage() {
return "gremlin-jython";
}
@Override
protected String convertLambdaToString(final Lambda lambda) {
String lambdaString = lambda.getLambdaScript().trim();
lambdaString = lambdaString.startsWith("lambda") ?
lambdaString :
"lambda " + lambdaString;
if (0 == lambda.getLambdaArguments())
return "JythonZeroArgLambda(" + lambdaString + ")";
else if (1 == lambda.getLambdaArguments())
return "JythonOneArgLambda(" + lambdaString + ")";
else if (2 == lambda.getLambdaArguments())
return "JythonTwoArgLambda(" + lambdaString + ")";
else
return "JythonUnknownArgLambda(" + lambdaString + ")";
}
@Override
protected String resolveSymbol(final String methodName) {
// since this is Jython we should expect the Gremlin to conform to the java classes to which the engine is
// bound - therefore, unlike the python engine which converts java names to python friendly ones, this
// jython one can just pass them through.
return methodName;
}
@Override
protected String resolveTraversalStrategyProxy(final TraversalStrategyProxy proxy) {
// since this is jython we don't need a traversal proxy here - we need the actual JVM version of the strategy
// since this script will be executed in Jython.
if (proxy.getConfiguration().isEmpty())
return proxy.getStrategyClass().getCanonicalName() + ".instance()";
else
return proxy.getStrategyClass().getCanonicalName() + ".create(org.apache.commons.configuration.MapConfiguration(" + convertToString(ConfigurationConverter.getMap(proxy.getConfiguration())) + "))";
}
}