/*
* 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.groovy.jsr223;
import org.apache.tinkerpop.gremlin.groovy.ImportCustomizerProvider;
import org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPlugin;
import org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPluginException;
import org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor;
import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Provides a way to dynamically consume dependencies into the ScriptEngine classloader. With Groovy this is
* somewhat easily accomplished with Grape, but other ScriptEngine implementations might have ways to do it too,
* so this interface makes that possible to expose.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
* @deprecated As of release 3.2.4, not replaced - no longer needed under the new {@link GremlinScriptEngine} model.
*/
@Deprecated
public interface DependencyManager {
/**
* Take maven coordinates and load the classes into the classloader used by the ScriptEngine. Those ScriptEngines
* that can support script engine plugins should check if there are any new {@link GremlinPlugin}
* implementations in the classloader. The {@link GremlinGroovyScriptEngine}
* implementation uses ServiceLoader to figure out if there are such classes to return.
* <p/>
* It is up to the caller to execute the
* {@link GremlinPlugin#pluginTo(org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor)} method. The reason for
* this has to do with conflicts that can occur with mapper imports that are added via the
* {@link ImportCustomizerProvider} and scripts executed through the
* {@link PluginAcceptor}. Generally speaking, all calls to this "use" method
* should be complete prior to calling
* {@link GremlinPlugin#pluginTo(PluginAcceptor)}.
*/
List<GremlinPlugin> use(final String group, final String artifact, final String version);
/**
* Load a list of {@link GremlinPlugin} instances. These plugins are typically returned from calls to
* {@link #use(String, String, String)}.
*
* @throws GremlinPluginException if there is a problem loading the plugin itself.
*/
void loadPlugins(final List<GremlinPlugin> plugins) throws GremlinPluginException;
/**
* Perform class imports for the ScriptEngine.
*/
void addImports(final Set<String> importStatements);
/**
* List the dependencies in the ScriptEngine classloader.
*/
Map[] dependencies();
/**
* List the imports in the ScriptEngine;
*/
Map<String, Set<String>> imports();
/**
* Reset the ScriptEngine. Clear caches and kill the classloader.
*/
void reset();
}