diff --git a/core/src/main/java/dev/vml/es/acm/core/code/Executor.java b/core/src/main/java/dev/vml/es/acm/core/code/Executor.java index e818aedb..9b20204a 100644 --- a/core/src/main/java/dev/vml/es/acm/core/code/Executor.java +++ b/core/src/main/java/dev/vml/es/acm/core/code/Executor.java @@ -33,6 +33,8 @@ import org.osgi.service.metatype.annotations.AttributeDefinition; import org.osgi.service.metatype.annotations.Designate; import org.osgi.service.metatype.annotations.ObjectClassDefinition; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Component( immediate = true, @@ -43,6 +45,8 @@ public class Executor implements EventListener { public static final String LOCK_DIR = "executor"; + private static final Logger LOG = LoggerFactory.getLogger(Executor.class); + @ObjectClassDefinition(name = "AEM Content Manager - Code Executor") public @interface Config { @@ -278,10 +282,8 @@ private void handleNotifications(ContextualExecution execution) { ? "✅" : (execution.getStatus() == ExecutionStatus.FAILED ? "❌" : "⚠️")); templateVars.put("statusHere", execution.getStatus() == ExecutionStatus.SUCCEEDED ? "" : "@here"); - TemplateFormatter templateFormatter = - execution.getContext().getCodeContext().getFormatter().getTemplate(); - String title = StringUtils.trim(templateFormatter.renderString(config.notificationTitle(), templateVars)); - String text = StringUtils.trim(templateFormatter.renderString(config.notificationText(), templateVars)); + String title = StringUtils.trim(formatTemplate(config.notificationTitle(), templateVars)); + String text = StringUtils.trim(formatTemplate(config.notificationText(), templateVars)); Map fields = new LinkedHashMap<>(); fields.put("Status", execution.getStatus().name().toLowerCase()); @@ -372,4 +374,13 @@ private void useLocker(ResourceResolverFactory resolverFactory, Consumer private void useHistory(ResourceResolverFactory resolverFactory, Consumer consumer) { ResolverUtils.useContentResolver(resolverFactory, null, r -> consumer.accept(new ExecutionHistory(r))); } + + private String formatTemplate(String template, Map vars) { + try { + return new TemplateFormatter().renderString(template, vars); + } catch (Exception e) { + LOG.warn("Cannot format template '{}'!", template, e); + return template; + } + } } diff --git a/core/src/main/java/dev/vml/es/acm/core/format/TemplateFormatter.java b/core/src/main/java/dev/vml/es/acm/core/format/TemplateFormatter.java index 999ddaca..482e9248 100644 --- a/core/src/main/java/dev/vml/es/acm/core/format/TemplateFormatter.java +++ b/core/src/main/java/dev/vml/es/acm/core/format/TemplateFormatter.java @@ -6,16 +6,10 @@ public class TemplateFormatter { - private final GStringTemplateEngine engine; - - public TemplateFormatter() { - this.engine = new GStringTemplateEngine(); - } - public String renderString(String template, Map vars) { try { Writer writer = new StringWriter(); - engine.createTemplate(template).make(vars).writeTo(writer); + getEngine().createTemplate(template).make(vars).writeTo(writer); return writer.toString(); } catch (Exception e) { throw new FormatException("Cannot render template from & to string!", e); @@ -24,7 +18,7 @@ public String renderString(String template, Map vars) { public void renderFromString(String template, Map vars, Writer writer) { try { - engine.createTemplate(template).make(vars).writeTo(writer); + getEngine().createTemplate(template).make(vars).writeTo(writer); } catch (Exception e) { throw new FormatException("Cannot render template from string!", e); } @@ -33,7 +27,7 @@ public void renderFromString(String template, Map vars, Writer writer) { public String renderToString(Reader reader, Map vars) { try { Writer writer = new StringWriter(); - engine.createTemplate(reader).make(vars).writeTo(writer); + getEngine().createTemplate(reader).make(vars).writeTo(writer); return writer.toString(); } catch (Exception e) { throw new FormatException("Cannot render template to string!", e); @@ -43,7 +37,7 @@ public String renderToString(Reader reader, Map vars) { public void render(InputStream inputStream, Map vars, OutputStream outputStream) { try (Reader reader = new InputStreamReader(inputStream); Writer writer = new OutputStreamWriter(outputStream)) { - engine.createTemplate(reader).make(vars).writeTo(writer); + getEngine().createTemplate(reader).make(vars).writeTo(writer); } catch (Exception e) { throw new FormatException("Cannot render template!", e); } @@ -51,9 +45,13 @@ public void render(InputStream inputStream, Map vars, OutputStream outputS public void render(Reader reader, Map vars, Writer writer) { try { - engine.createTemplate(reader).make(vars).writeTo(writer); + getEngine().createTemplate(reader).make(vars).writeTo(writer); } catch (Exception e) { throw new FormatException("Cannot render template!", e); } } + + private GStringTemplateEngine getEngine() { + return new GStringTemplateEngine(); + } }