package com.github.vbauer.jconditions.util;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import java.util.List;
/**
* @author Vladislav Bauer
*/
public final class ScriptUtils {
private ScriptUtils() {
throw new UnsupportedOperationException();
}
public static ScriptEngine findScriptEngine(final String engine) {
final ScriptEngineManager engineManager = new ScriptEngineManager();
final List<ScriptEngineFactory> engineFactories = engineManager.getEngineFactories();
for (final ScriptEngineFactory engineFactory : engineFactories) {
if (isSameEngine(engineFactory, engine)) {
return engineFactory.getScriptEngine();
}
}
return null;
}
public static void addAttribute(
final ScriptContext context, final String key, final Object value
) {
context.setAttribute(key, value, ScriptContext.ENGINE_SCOPE);
}
private static boolean isSameEngine(final ScriptEngineFactory factory, final String engine) {
return sameName(factory, engine)
|| sameLanguage(factory, engine)
|| sameNames(factory, engine)
|| sameMimeTypes(factory, engine);
}
private static boolean sameMimeTypes(final ScriptEngineFactory factory, final String engine) {
final List<String> mimeTypes = factory.getMimeTypes();
if (mimeTypes != null) {
for (final String mimeType : mimeTypes) {
if (TextUtils.containsIgnoreCase(mimeType, engine)) {
return true;
}
}
}
return false;
}
private static boolean sameNames(final ScriptEngineFactory factory, final String engine) {
final List<String> names = factory.getNames();
if (names != null) {
for (final String name : names) {
if (TextUtils.containsIgnoreCase(name, engine)) {
return true;
}
}
}
return false;
}
private static boolean sameLanguage(final ScriptEngineFactory factory, final String engine) {
final String languageName = factory.getLanguageName();
return TextUtils.containsIgnoreCase(languageName, engine);
}
private static boolean sameName(final ScriptEngineFactory factory, final String engine) {
final String engineName = factory.getEngineName();
return TextUtils.containsIgnoreCase(engineName, engine);
}
}