package com.qianwen.core.tool.utils;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.function.Function;
|
import java.util.regex.Pattern;
|
import org.apache.commons.beanutils.BeanUtilsBean2;
|
import org.apache.commons.codec.digest.DigestUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.qianwen.core.tool.script.engine.DynamicScriptEngine;
|
import com.qianwen.core.tool.script.engine.DynamicScriptEngineFactory;
|
import org.springframework.util.StringUtils;
|
|
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/utils/ExpressionUtils.class */
|
public class ExpressionUtils {
|
private static final Logger log = LoggerFactory.getLogger(ExpressionUtils.class);
|
private static final Pattern PATTERN = Pattern.compile("(?<=\\$\\{)(.+?)(?=})");
|
|
public static Map<String, Object> getDefaultVar() {
|
return new HashMap();
|
}
|
|
public static Map<String, Object> getDefaultVar(Map<String, Object> var) {
|
Map<String, Object> vars = getDefaultVar();
|
vars.putAll(var);
|
return vars;
|
}
|
|
public static String analytical(String expression, String language) throws Exception {
|
return analytical(expression, new HashMap(), language);
|
}
|
|
public static String analytical(String expression, Map<String, Object> vars, String language) {
|
if (!expression.contains("${")) {
|
return expression;
|
}
|
DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine(language);
|
if (engine == null) {
|
return expression;
|
}
|
return TemplateParser.parse(expression, (Function<String, String>) var -> {
|
if (StringUtils.isEmpty(var)) {
|
return StringPool.EMPTY;
|
}
|
if ("spel".equalsIgnoreCase(language) && !var.contains(StringPool.HASH)) {
|
try {
|
Object fast = BeanUtilsBean2.getInstance().getPropertyUtils().getProperty(vars, var);
|
if (fast != null) {
|
return fast.toString();
|
}
|
} catch (Exception e) {
|
return StringPool.EMPTY;
|
}
|
}
|
String id = DigestUtils.md5Hex(var);
|
try {
|
if (!engine.compiled(id)) {
|
engine.compile(id, var);
|
}
|
try {
|
return String.valueOf(engine.execute(id, vars).getIfSuccess());
|
} catch (Exception e2) {
|
log.error(e2.getMessage(), e2);
|
return StringPool.EMPTY;
|
}
|
} catch (RuntimeException e3) {
|
throw e3;
|
} catch (Exception e4) {
|
throw new RuntimeException(e4);
|
}
|
});
|
}
|
}
|