package com.hbakkum.rundeck.plugins.hipchat; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; /** * @author Hayden Bakkum */ public class HipChatNotificationMessageGenerator { public String generateMessage( final String messageTemplateLocation, final String defaultMessageTemplateName, final String trigger, final Map executionData, final Map config) { final Configuration freeMarkerCfg = new Configuration(); final String templateName = determineTemplateName(messageTemplateLocation, defaultMessageTemplateName, freeMarkerCfg); final Map<String, Object> model = new HashMap(); model.put("trigger", trigger); model.put("execution", executionData); model.put("config", config); final StringWriter sw = new StringWriter(); try { final Template template = freeMarkerCfg.getTemplate(templateName); template.process(model,sw); } catch (IOException ioEx) { throw new HipChatNotificationPluginException("Error loading HipChat notification message template: [" + ioEx.getMessage() + "].", ioEx); } catch (TemplateException templateEx) { throw new HipChatNotificationPluginException("Error merging HipChat notification message template: [" + templateEx.getMessage() + "].", templateEx); } return sw.toString(); } private String determineTemplateName(final String messageTemplateLocation, final String defaultMessageTemplateName, final Configuration freeMarkerCfg) { String templateName; if (messageTemplateLocation != null && messageTemplateLocation.length() > 0) { final File messageTemplateFile = new File(messageTemplateLocation); try { freeMarkerCfg.setDirectoryForTemplateLoading(messageTemplateFile.getParentFile()); } catch (IOException ioEx) { throw new HipChatNotificationPluginException("Error setting FreeMarker template loading directory: [" + ioEx.getMessage() + "].", ioEx); } templateName = messageTemplateFile.getName(); } else { freeMarkerCfg.setClassForTemplateLoading(HipChatNotificationPlugin.class, "/templates"); templateName = defaultMessageTemplateName; } return templateName; } }