/* * Copyright LGPL3 * YES Technology Association * http://yestech.org * * http://www.opensource.org/licenses/lgpl-3.0.html */ package org.yestech.notify.template; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.XMLOutputter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yestech.notify.objectmodel.IMessage; import org.yestech.lib.xml.XslUtils; import javax.xml.transform.stream.StreamSource; import java.io.File; import java.io.Reader; import java.io.StringReader; import java.util.Iterator; import java.util.Map; import java.util.HashMap; import com.thoughtworks.xstream.annotations.XStreamAlias; /** * A {@link java.util.Map} based Template. * */ @XStreamAlias("xslMapTemplate") public class XslMapTemplateLanguage implements ITemplateLanguage<XslTemplateLanguagePersistence> { final private static Logger logger = LoggerFactory.getLogger(XslMapTemplateLanguage.class); private XslTemplateLanguagePersistence templateData; public XslMapTemplateLanguage() { super(); } public XslMapTemplateLanguage(XslTemplateLanguagePersistence templateData) { super(); this.templateData = templateData; } /** * <b>ONLY</b> used for Deserialization!!!!!!! * * @param data Template Data to use. */ public void setPersistence(XslTemplateLanguagePersistence data) { templateData = data; } /** * <b>ONLY</b> used for Serialization!!!!!!! * * @return The Template Data to use. */ public XslTemplateLanguagePersistence getPersistence() { return templateData; } /** * Applies the Customization to the Message and returns the Custom Message. * * @param message Message to Customize * @return The custom message result */ public String apply(IMessage message) { String templateMessage = message.getText(); Map nameValues = (Map) templateData.getData(); String xslPath = templateData.getFilePath(); File xslFile = XslUtils.locateFileInApp(xslPath); Element element = new Element("email"); for (Iterator i = nameValues.keySet().iterator(); i.hasNext();) { String key = (String) i.next(); String value = (String) nameValues.get(key); element = element.setAttribute(key, (value == null) ? "" : value); } //add the element to a document Document doc = new Document(element); //need to convert the jdom document into something usuable XMLOutputter xmlOut = new XMLOutputter(); String document = xmlOut.outputString(doc); //output the document to a string Reader docReader = new StringReader(document); //create a reader for that string templateMessage = XslUtils.transformMessage(new StreamSource(docReader), new StreamSource(xslFile)); return templateMessage; } }