package org.codelibs.riverweb.util;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.riverweb.WebRiverConstants;
import org.codelibs.riverweb.app.service.ScriptService;
import org.elasticsearch.script.ScriptService.ScriptType;
import org.lastaflute.di.core.SingletonLaContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ScriptUtils {
public static final Logger logger = LoggerFactory.getLogger(ScriptUtils.class);
private ScriptUtils() {
// nothing
}
public static Object execute(final Map<String, Object> scriptSettings, final String target, final Consumer<Map<String, Object>> vars) {
final String script = SettingsUtils.get(scriptSettings, target);
final String lang = SettingsUtils.get(scriptSettings, "lang", WebRiverConstants.DEFAULT_SCRIPT_LANG);
final String scriptTypeValue = SettingsUtils.get(scriptSettings, "script_type", "inline");
ScriptType scriptType;
if (ScriptType.FILE.toString().equalsIgnoreCase(scriptTypeValue)) {
scriptType = ScriptType.FILE;
} else if (ScriptType.INDEXED.toString().equalsIgnoreCase(scriptTypeValue)) {
scriptType = ScriptType.INDEXED;
} else {
scriptType = ScriptType.INLINE;
}
if (StringUtil.isNotBlank(script)) {
final Map<String, Object> localVars = new HashMap<String, Object>();
vars.accept(localVars);
try {
final ScriptService scriptService = SingletonLaContainer.getComponent(ScriptService.class);
final Object result = scriptService.execute(lang, script, scriptType, localVars);
if (logger.isDebugEnabled()) {
logger.debug("[{}] \"{}\" => {}", target, script, result);
}
return result;
} catch (final Exception e) {
logger.warn("Failed to execute script: " + script, e);
}
}
return null;
}
}