/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.notification.mail.velocity; import java.io.StringWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.openmrs.notification.Message; import org.openmrs.notification.MessageException; import org.openmrs.notification.MessagePreparator; import org.openmrs.notification.Template; public class VelocityMessagePreparator implements MessagePreparator { /** * Logger */ private static final Log log = LogFactory.getLog(VelocityMessagePreparator.class); /** * Velocity template engine */ private VelocityEngine engine; /** * Public constructor TODO: needs better error handling * * @throws MessageException */ public VelocityMessagePreparator() throws MessageException { try { engine = new VelocityEngine(); engine.init(); } catch (Exception e) { log.error("Failed to create velocity engine " + e.getMessage(), e); throw new MessageException(e); } } // TODO: need better error handling public Message prepare(Template template) throws MessageException { VelocityContext context = new VelocityContext(template.getData()); StringWriter writer = new StringWriter(); try { engine.evaluate(context, writer, "template", // I have no idea what this is used for template.getTemplate()); } catch (Exception e) { // need better error handling log.error("Failed to prepare message using template " + e.getMessage(), e); throw new MessageException(e); } // Prepare the message Message message = new Message(); message.setSubject(template.getSubject()); message.setRecipients(template.getRecipients()); message.setSender(template.getSender()); message.setContent(writer.toString()); return message; } }