View Javadoc

1   /*
2    * Copyright 2007-2008 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kew.mail;
17  
18  import javax.xml.transform.Templates;
19  import javax.xml.transform.TransformerException;
20  import javax.xml.transform.dom.DOMResult;
21  import javax.xml.transform.dom.DOMSource;
22  import javax.xml.xpath.XPath;
23  import javax.xml.xpath.XPathConstants;
24  import javax.xml.xpath.XPathExpressionException;
25  import javax.xml.xpath.XPathFactory;
26  
27  import org.kuali.rice.kew.exception.WorkflowRuntimeException;
28  import org.kuali.rice.kew.util.XmlHelper;
29  import org.w3c.dom.Document;
30  import org.w3c.dom.Node;
31  
32  
33  /**
34   * A class which has some convenience methods for handling Emails and stylesheets. 
35   * 
36   * @author Kuali Rice Team (rice.collab@kuali.org)
37   *
38   */
39  public class EmailStyleHelper {
40  
41      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EmailStyleHelper.class);
42      
43      public EmailContent generateEmailContent(Templates style, Document document) {
44  	DOMResult result = new DOMResult();
45          if (LOG.isDebugEnabled()) {
46              LOG.debug("Input document: " + XmlHelper.jotNode(document.getDocumentElement(), true));
47          }
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: " + XmlHelper.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              // simple heuristic to determine whether content is HTML
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  }