+/**
+ * Copyright (c) 2005 UPS_SCS NL
+ *
+ */
+package org.wamblee.crawler.kiss;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Date;
+
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.xml.transform.TransformerException;
+
+import org.apache.commons.mail.EmailException;
+import org.apache.commons.mail.HtmlEmail;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
+import org.dom4j.Element;
+import org.w3c.dom.Document;
+import org.wamblee.io.FileResource;
+import org.wamblee.io.InputResource;
+import org.wamblee.xml.XSLT;
+
+public class MailNotifier implements Notifier {
+
+ private String _from;
+ private String _to;
+ private String _subject;
+ private String _htmlXslt;
+ private String _textXslt;
+ private MailServer _server;
+
+ public MailNotifier( String aFrom, String aTo, String aSubject,
+ String aHtmlXslt, String aTextXslt, MailServer aServer) {
+ _from = aFrom;
+ _to = aTo;
+ _subject = aSubject;
+ _htmlXslt = aHtmlXslt;
+ _textXslt = aTextXslt;
+ _server = aServer;
+ }
+
+ public void send( Element aReport ) throws NotificationException {
+ HtmlEmail mail = new HtmlEmail();
+ try {
+ mail.setFrom(_from);
+ mail.setTo(Arrays.asList(new InternetAddress[] { new InternetAddress(_to) }));
+ mail.setSentDate(new Date());
+ mail.setSubject(_subject);
+
+ String htmlText = transformReport( aReport, new FileResource(new File(_htmlXslt)) );
+ String plainText = transformReport( aReport, new FileResource(new File(_textXslt)) );
+
+ mail.setHtmlMsg(htmlText);
+ mail.setTextMsg(plainText);
+
+ _server.send(mail);
+ }
+ catch (EmailException e) {
+ throw new NotificationException(e.getMessage(), e);
+ } catch (TransformerException e) {
+ throw new NotificationException(e.getMessage(), e);
+ } catch (IOException e) {
+ throw new NotificationException(e.getMessage(), e);
+ } catch (AddressException e) {
+ throw new NotificationException(e.getMessage(), e);
+ }
+ }
+
+ /**
+ * @param aReport
+ * @return
+ * @throws IOException
+ * @throws TransformerException
+ */
+ private String transformReport( Element aReport, InputResource aXslt ) throws IOException, TransformerException {
+ String reportXmlText = aReport.asXML();
+ Document document = new XSLT().transform(reportXmlText.getBytes(), aXslt);
+ ByteArrayOutputStream transformed = new ByteArrayOutputStream();
+ XMLSerializer serializer = new XMLSerializer(transformed, new OutputFormat());
+ serializer.serialize(document);
+ return transformed.toString();
+ }
+
+ /**
+ * @param args
+ */
+ public static void main( String[] args ) {
+ // TODO Auto-generated method stub
+
+ }
+
+}