package org.jactr.scripting; /* * default logging */ import java.util.ArrayList; import java.util.Collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.core.model.IModel; import org.jactr.core.production.IInstantiation; import org.jactr.core.production.VariableBindings; import org.jactr.scripting.javascript.JavascriptFactory; /** * not thread safe. * * @author harrison */ public class ScriptingManager { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(ScriptingManager.class); static private final Collection<IScriptableFactory> _factories = new ArrayList<IScriptableFactory>(); static private final Collection<IScriptConfigurator> _configurators = new ArrayList<IScriptConfigurator>(); static { install(new JavascriptFactory()); } static public void install(IScriptableFactory factory) { for (IScriptableFactory existing : _factories) if (existing.getClass() == factory.getClass()) return; _factories.add(factory); } static public void uninstall(IScriptableFactory factory) { _factories.remove(factory); } static public void install(IScriptConfigurator config) { for (IScriptConfigurator conf : _configurators) if (conf == config) return; _configurators.add(config); } static public void uninstall(IScriptConfigurator config) { _configurators.remove(config); } static public IScriptableFactory getFactory(String languageName) { for (IScriptableFactory factory : _factories) if (factory.supports(languageName)) return factory; return null; } /** * create a new instance of the script support class. A new instance is used * for every invokation of scriptable actions/conditions * * @return */ static public ScriptSupport newScriptSupport(IScriptableFactory factory, IModel model, VariableBindings bindings) { ScriptSupport ss = new ScriptSupport(factory, model, bindings); return ss; } static public ScriptSupport newScriptSupport(IScriptableFactory factory, IInstantiation instantiation) { ScriptSupport ss = new ScriptSupport(factory, instantiation); return ss; } /** * called by actual script execution code before execution, but after * ScriptSupport has been installed * * @param factory * @param model * @param support */ static public void configureScripting(IScriptableFactory factory, IModel model, ScriptSupport support, Object scope) { for (IScriptConfigurator conf : _configurators) conf.configure(factory, model, support, scope); } }