package com.psddev.cms.db; import com.psddev.dari.util.PullThroughCache; import java.util.List; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; /** * @deprecated No replacement. */ @Deprecated public abstract class ScriptUtils { private static final ScriptEngineManager MANAGER = new ScriptEngineManager(); private static final List<ScriptEngineFactory> FACTORIES = MANAGER.getEngineFactories(); private static final PullThroughCache<ScriptEngineFactory, ScriptEngine> THREAD_SAFE_ENGINES = new PullThroughCache<ScriptEngineFactory, ScriptEngine>() { @Override protected ScriptEngine produce(ScriptEngineFactory factory) { return factory.getScriptEngine(); } }; private static final PullThroughCache<ScriptEngineFactory, ThreadLocal<ScriptEngine>> THREAD_LOCAL_ENGINES = new PullThroughCache<ScriptEngineFactory, ThreadLocal<ScriptEngine>>() { @Override protected ThreadLocal<ScriptEngine> produce(final ScriptEngineFactory factory) { return new ThreadLocal<ScriptEngine>() { @Override protected ScriptEngine initialValue() { return factory.getScriptEngine(); } }; } }; public static ScriptEngine getEngine(String name) { for (ScriptEngineFactory factory : FACTORIES) { if (factory.getNames().contains(name)) { if (factory.getParameter("THREADING") != null) { return THREAD_SAFE_ENGINES.get(factory); } else { return THREAD_LOCAL_ENGINES.get(factory).get(); } } } throw new IllegalArgumentException(String.format( "[%s] is not a valid script engine name!", name)); } }