X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=crawler%2Fkiss%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fcrawler%2Fkiss%2Fnotification%2FMailNotifier.java;fp=crawler%2Fkiss%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fcrawler%2Fkiss%2Fnotification%2FMailNotifier.java;h=e464657214c2560b1dba226445853d82acbaaa09;hb=62f165891f08ae532b5a794af11d7338a93f9a43;hp=0000000000000000000000000000000000000000;hpb=07cedd3f0730646ea35a7f668b3e1e872a4605d9;p=utils diff --git a/crawler/kiss/src/main/java/org/wamblee/crawler/kiss/notification/MailNotifier.java b/crawler/kiss/src/main/java/org/wamblee/crawler/kiss/notification/MailNotifier.java new file mode 100644 index 00000000..e4646572 --- /dev/null +++ b/crawler/kiss/src/main/java/org/wamblee/crawler/kiss/notification/MailNotifier.java @@ -0,0 +1,145 @@ +/* + * Copyright 2006 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.wamblee.crawler.kiss.notification; + +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.dom4j.Element; +import org.wamblee.xml.XslTransformer; + +/** + * A notifier that uses SMTP to notify users by mail. + * + */ +public class MailNotifier implements Notifier { + + private String _from; + + private String _to; + + private String _subject; + + private String _htmlXslt; + + private String _textXslt; + + private MailServer _server; + + private XslTransformer _transformer; + + /** + * Constructs the notifier. + * + * @param aFrom + * Sender mail address to use. + * @param aTo + * Recipient mail address to use. + * @param aSubject + * Subject to use in the email. + * @param aHtmlXslt + * XSLT file to transform the report into HTML. + * @param aTextXslt + * XSLT file to transform the report into text. + * @param aServer + * Mail server to use. + * @param aTransformer Transformer to use. + */ + public MailNotifier(String aFrom, String aTo, String aSubject, + String aHtmlXslt, String aTextXslt, MailServer aServer, XslTransformer aTransformer) { + _from = aFrom; + _to = aTo; + _subject = aSubject; + _htmlXslt = aHtmlXslt; + _textXslt = aTextXslt; + _server = aServer; + _transformer = aTransformer; + } + + /* + * (non-Javadoc) + * + * @see org.wamblee.crawler.kiss.Notifier#send(org.dom4j.Element) + */ + 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, _htmlXslt); + String plainText = transformReport(aReport, _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); + } + } + + /** + * Transforms a report into a destination format. + * + * @param aReport + * Report to transform + * @param aXslt + * XSLT to use. + * @return Transformed result. + * @throws IOException + * In case of IO problems. + * @throws TransformerException + * In case of problems transforming. + */ + private String transformReport(Element aReport, String aXslt) + throws IOException, TransformerException { + String reportXmlText = aReport.asXML(); + return _transformer.textTransform(reportXmlText.getBytes(), _transformer.resolve(aXslt)); + } + + /* (non-Javadoc) + * @see org.wamblee.crawler.kiss.notification.Notifier#asHtml(org.dom4j.Element) + */ + public String asHtml(Element aReport) throws IOException, TransformerException { + return transformReport(aReport, _htmlXslt); + } + + /* (non-Javadoc) + * @see org.wamblee.crawler.kiss.notification.Notifier#asText(org.dom4j.Element) + */ + public String asText(Element aReport) throws IOException, TransformerException { + return transformReport(aReport, _textXslt); + } +}