|
6 | 6 |
|
7 | 7 | package modelengine.fit.jade.aipp.template.render; |
8 | 8 |
|
| 9 | +import static modelengine.fitframework.util.ObjectUtils.nullIf; |
| 10 | + |
9 | 11 | import modelengine.fitframework.annotation.Component; |
| 12 | +import modelengine.fitframework.parameterization.ParameterizationMode; |
| 13 | +import modelengine.fitframework.parameterization.ParameterizedString; |
| 14 | +import modelengine.fitframework.parameterization.ParameterizedStringResolver; |
10 | 15 |
|
| 16 | +import java.util.Collections; |
11 | 17 | import java.util.Map; |
12 | | -import java.util.regex.Matcher; |
13 | | -import java.util.regex.Pattern; |
14 | 18 |
|
15 | 19 | /** |
16 | 20 | * {@link TemplateService} 的实现类。 |
|
20 | 24 | */ |
21 | 25 | @Component |
22 | 26 | public class TemplateServiceImpl implements TemplateService { |
23 | | - private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("\\{\\{\\s*(\\w+)\\s*}}"); |
24 | | - |
25 | 27 | @Override |
26 | 28 | public String renderTemplate(String template, Map<String, Object> args) { |
27 | 29 | if (template == null) { |
28 | 30 | return null; |
29 | 31 | } |
30 | | - |
31 | 32 | if (args == null) { |
32 | 33 | args = Map.of(); |
33 | 34 | } |
34 | | - |
35 | | - Matcher matcher = PLACEHOLDER_PATTERN.matcher(template); |
36 | | - StringBuilder sb = new StringBuilder(); |
37 | | - |
38 | | - while (matcher.find()) { |
39 | | - String key = matcher.group(1); |
40 | | - Object value = args.getOrDefault(key, ""); |
41 | | - matcher.appendReplacement(sb, Matcher.quoteReplacement(String.valueOf(value))); |
42 | | - } |
43 | | - matcher.appendTail(sb); |
44 | | - |
45 | | - return sb.toString(); |
| 35 | + Map<String, Object> params = nullIf(args, Collections.emptyMap()); |
| 36 | + ParameterizedStringResolver resolver = |
| 37 | + ParameterizedStringResolver.create("{{", "}}", '/', ParameterizationMode.LENIENT_EMPTY); |
| 38 | + ParameterizedString parameterizedString = resolver.resolve(template); |
| 39 | + return parameterizedString.format(params, null); |
46 | 40 | } |
47 | 41 | } |
0 commit comments