![JAR search and dependency download from the Maven repository](/logo.png)
org.jxls.expression.ExpressionEvaluator4JSR223Impl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jxls-core Show documentation
Show all versions of jxls-core Show documentation
Small library for Excel generation based on XLS templates
The newest version!
package org.jxls.expression;
import java.util.Map;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import javax.script.SimpleBindings;
/**
* JSR 223 based implementation of the {@link ExpressionEvaluator} interface
*/
public class ExpressionEvaluator4JSR223Impl implements ExpressionEvaluator {
private final String expression;
private final ScriptEngine scriptEngine;
public ExpressionEvaluator4JSR223Impl(ScriptEngine scriptEngine, String expression) {
this.scriptEngine = scriptEngine;
this.expression = expression;
}
private static class BindingCacheHolder {
Bindings binding;
Map context;
}
private static final ThreadLocal threadLocalCache = new ThreadLocal() {
@Override
protected BindingCacheHolder initialValue() {
return new BindingCacheHolder();
}
};
@Override
public Object evaluate(final String expression, final Map context) {
if (expression == null || context == null) {
return null;
}
final BindingCacheHolder holder = threadLocalCache.get();
if (holder.binding == null) {
holder.binding = new SimpleBindings(context);
}
if (holder.context == null || holder.context != context) {
holder.context = context;
holder.binding.putAll(context);
}
try {
return scriptEngine.eval(expression, holder.binding);
} catch (ScriptException e) {
throw new EvaluationException("Evaluate error on: " + expression, e);
}
}
@Override
public Object evaluate(Map context) {
return evaluate(expression,context);
}
@Override
public String getExpression() {
return expression;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy