/* * 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.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 com.thoughtworks.xstream.annotations.XStreamAlias; /** * An XSL based Template. * */ @XStreamAlias("xslXmlTemplate") public class XslXmlTemplateLanguage implements ITemplateLanguage<XslTemplateLanguagePersistence> { final private static Logger logger = LoggerFactory.getLogger(XslXmlTemplateLanguage.class); private XslTemplateLanguagePersistence templateData; public XslXmlTemplateLanguage() { super(); } public XslXmlTemplateLanguage(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(); Document doc = (Document) templateData.getData(); String xslPath = templateData.getFilePath(); File xslFile = XslUtils.locateFileInApp(xslPath); XMLOutputter xmlOut = new XMLOutputter(); String document = xmlOut.outputString(doc); //output the document to a string if (logger.isDebugEnabled()) { logger.debug("email xml content-->" + document); } Reader docReader = new StringReader(document); //create a reader for that string //need to convert the jdom document into something usuable templateMessage = XslUtils.transformMessage(new StreamSource(docReader), new StreamSource(xslFile)); return templateMessage; } }