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 to be sent: " + XmlJotter.jotNode(node));
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  }