1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kew.mail;
17
18 import org.kuali.rice.core.api.mail.EmailContent;
19 import org.kuali.rice.core.api.util.xml.XmlJotter;
20 import org.kuali.rice.kew.api.WorkflowRuntimeException;
21 import org.w3c.dom.Document;
22 import org.w3c.dom.Node;
23
24 import javax.xml.transform.Templates;
25 import javax.xml.transform.TransformerException;
26 import javax.xml.transform.dom.DOMResult;
27 import javax.xml.transform.dom.DOMSource;
28 import javax.xml.xpath.XPath;
29 import javax.xml.xpath.XPathConstants;
30 import javax.xml.xpath.XPathExpressionException;
31 import javax.xml.xpath.XPathFactory;
32
33
34
35
36
37
38
39
40 public class EmailStyleHelper {
41
42 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EmailStyleHelper.class);
43
44 public EmailContent generateEmailContent(Templates style, Document document) {
45 DOMResult result = new DOMResult();
46 if (LOG.isDebugEnabled()) {
47 LOG.debug("Input document: " + XmlJotter.jotNode(document.getDocumentElement(), true));
48 }
49 try {
50 style.newTransformer().transform(new DOMSource(document), result);
51 } catch (TransformerException te) {
52 String message = "Error transforming immediate reminder DOM";
53 LOG.error(message, te);
54 throw new WorkflowRuntimeException(message, te);
55 }
56
57 Node node = result.getNode();
58
59 if (LOG.isDebugEnabled()) {
60 LOG.debug("Email document: " + XmlJotter.jotNode(document));
61 }
62 XPathFactory xpf = XPathFactory.newInstance();
63 XPath xpath = xpf.newXPath();
64 try {
65 String subject = (String) xpath.evaluate("/email/subject", node, XPathConstants.STRING);
66 String body = (String) xpath.evaluate("/email/body", node, XPathConstants.STRING);
67
68 return new EmailContent(subject, body, body.matches("(?msi).*<(\\w+:)?html.*"));
69 } catch (XPathExpressionException xpee) {
70 throw new WorkflowRuntimeException("Error evaluating generated email content", xpee);
71 }
72 }
73
74 }