Skip to content

Commit d7cca7e

Browse files
Merge pull request #253 from wttech/lazy-tpl-engine
Lazy template engine
2 parents 82ed02c + 79a58ba commit d7cca7e

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

core/src/main/java/dev/vml/es/acm/core/code/Executor.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.osgi.service.metatype.annotations.AttributeDefinition;
3434
import org.osgi.service.metatype.annotations.Designate;
3535
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
36+
import org.slf4j.Logger;
37+
import org.slf4j.LoggerFactory;
3638

3739
@Component(
3840
immediate = true,
@@ -43,6 +45,8 @@ public class Executor implements EventListener {
4345

4446
public static final String LOCK_DIR = "executor";
4547

48+
private static final Logger LOG = LoggerFactory.getLogger(Executor.class);
49+
4650
@ObjectClassDefinition(name = "AEM Content Manager - Code Executor")
4751
public @interface Config {
4852

@@ -278,10 +282,8 @@ private void handleNotifications(ContextualExecution execution) {
278282
? "✅"
279283
: (execution.getStatus() == ExecutionStatus.FAILED ? "❌" : "⚠️"));
280284
templateVars.put("statusHere", execution.getStatus() == ExecutionStatus.SUCCEEDED ? "" : "@here");
281-
TemplateFormatter templateFormatter =
282-
execution.getContext().getCodeContext().getFormatter().getTemplate();
283-
String title = StringUtils.trim(templateFormatter.renderString(config.notificationTitle(), templateVars));
284-
String text = StringUtils.trim(templateFormatter.renderString(config.notificationText(), templateVars));
285+
String title = StringUtils.trim(formatTemplate(config.notificationTitle(), templateVars));
286+
String text = StringUtils.trim(formatTemplate(config.notificationText(), templateVars));
285287

286288
Map<String, Object> fields = new LinkedHashMap<>();
287289
fields.put("Status", execution.getStatus().name().toLowerCase());
@@ -372,4 +374,13 @@ private void useLocker(ResourceResolverFactory resolverFactory, Consumer<Locker>
372374
private void useHistory(ResourceResolverFactory resolverFactory, Consumer<ExecutionHistory> consumer) {
373375
ResolverUtils.useContentResolver(resolverFactory, null, r -> consumer.accept(new ExecutionHistory(r)));
374376
}
377+
378+
private String formatTemplate(String template, Map<String, Object> vars) {
379+
try {
380+
return new TemplateFormatter().renderString(template, vars);
381+
} catch (Exception e) {
382+
LOG.warn("Cannot format template '{}'!", template, e);
383+
return template;
384+
}
385+
}
375386
}

core/src/main/java/dev/vml/es/acm/core/format/TemplateFormatter.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,10 @@
66

77
public class TemplateFormatter {
88

9-
private final GStringTemplateEngine engine;
10-
11-
public TemplateFormatter() {
12-
this.engine = new GStringTemplateEngine();
13-
}
14-
159
public String renderString(String template, Map<?, ?> vars) {
1610
try {
1711
Writer writer = new StringWriter();
18-
engine.createTemplate(template).make(vars).writeTo(writer);
12+
getEngine().createTemplate(template).make(vars).writeTo(writer);
1913
return writer.toString();
2014
} catch (Exception e) {
2115
throw new FormatException("Cannot render template from & to string!", e);
@@ -24,7 +18,7 @@ public String renderString(String template, Map<?, ?> vars) {
2418

2519
public void renderFromString(String template, Map<?, ?> vars, Writer writer) {
2620
try {
27-
engine.createTemplate(template).make(vars).writeTo(writer);
21+
getEngine().createTemplate(template).make(vars).writeTo(writer);
2822
} catch (Exception e) {
2923
throw new FormatException("Cannot render template from string!", e);
3024
}
@@ -33,7 +27,7 @@ public void renderFromString(String template, Map<?, ?> vars, Writer writer) {
3327
public String renderToString(Reader reader, Map<?, ?> vars) {
3428
try {
3529
Writer writer = new StringWriter();
36-
engine.createTemplate(reader).make(vars).writeTo(writer);
30+
getEngine().createTemplate(reader).make(vars).writeTo(writer);
3731
return writer.toString();
3832
} catch (Exception e) {
3933
throw new FormatException("Cannot render template to string!", e);
@@ -43,17 +37,21 @@ public String renderToString(Reader reader, Map<?, ?> vars) {
4337
public void render(InputStream inputStream, Map<?, ?> vars, OutputStream outputStream) {
4438
try (Reader reader = new InputStreamReader(inputStream);
4539
Writer writer = new OutputStreamWriter(outputStream)) {
46-
engine.createTemplate(reader).make(vars).writeTo(writer);
40+
getEngine().createTemplate(reader).make(vars).writeTo(writer);
4741
} catch (Exception e) {
4842
throw new FormatException("Cannot render template!", e);
4943
}
5044
}
5145

5246
public void render(Reader reader, Map<?, ?> vars, Writer writer) {
5347
try {
54-
engine.createTemplate(reader).make(vars).writeTo(writer);
48+
getEngine().createTemplate(reader).make(vars).writeTo(writer);
5549
} catch (Exception e) {
5650
throw new FormatException("Cannot render template!", e);
5751
}
5852
}
53+
54+
private GStringTemplateEngine getEngine() {
55+
return new GStringTemplateEngine();
56+
}
5957
}

0 commit comments

Comments
 (0)