package com.thinkaurelius.faunus.tinkerpop.gremlin; import com.tinkerpop.gremlin.groovy.jsr223.DefaultImportCustomizerProvider; import com.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine; import groovy.lang.GroovyClassLoader; import org.codehaus.groovy.control.CompilerConfiguration; import org.codehaus.groovy.control.customizers.ImportCustomizer; import javax.script.ScriptContext; import java.io.IOException; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public class FaunusGremlinScriptEngine extends GremlinGroovyScriptEngine { private static final String DOT_STAR = ".*"; private static final String EMPTY_STRING = ""; public FaunusGremlinScriptEngine() { super(); FaunusGremlin.load(); final CompilerConfiguration conf = new CompilerConfiguration(); conf.addCompilationCustomizers(FaunusGremlinScriptEngine.getImportCustomizer()); this.loader = new GroovyClassLoader(getParentLoader(), conf); try { this.setBindings(Imports.getEvaluateBindings(), ScriptContext.GLOBAL_SCOPE); } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } } public static ImportCustomizer getImportCustomizer() { final ImportCustomizer ic = new DefaultImportCustomizerProvider().getImportCustomizer(); for (final String imp : Imports.getImports()) { ic.addStarImports(imp.replace(DOT_STAR, EMPTY_STRING)); } return ic; } }