(no commit message)
[utils] / crawler / kiss / src / org / wamblee / crawler / kiss / KissCrawler.java
index 29d7c84940717d76711593e43c0e88272f011144..0549e48f3a8a99910512c8ca125f574a021d027c 100644 (file)
@@ -16,6 +16,7 @@
 
 package org.wamblee.crawler.kiss;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -24,6 +25,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Properties;
@@ -36,10 +38,16 @@ import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
+import javax.xml.transform.TransformerException;
 
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+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.w3c.dom.Document;
 import org.wamblee.crawler.Action;
 import org.wamblee.crawler.Configuration;
 import org.wamblee.crawler.Crawler;
@@ -47,6 +55,8 @@ import org.wamblee.crawler.Page;
 import org.wamblee.crawler.PageException;
 import org.wamblee.crawler.impl.ConfigurationParser;
 import org.wamblee.crawler.impl.CrawlerImpl;
+import org.wamblee.io.FileResource;
+import org.wamblee.xml.XSLT;
 
 /**
  * The KiSS crawler for automatic recording of interesting TV shows.
@@ -160,15 +170,13 @@ public class KissCrawler {
         ProgramActionExecutor executor = new ProgramActionExecutor();
         for (ProgramFilter filter : aProgramCondition) {
             List<Program> programs = filter.apply(aGuide);
-            ProgramAction action = filter.getAction(); 
-            for (Program program: programs) { 
+            ProgramAction action = filter.getAction();
+            for (Program program : programs) {
                 action.execute(program, executor);
             }
         }
         executor.commit();
-        String msg = executor.getReport();
-        System.out.println(msg);
-        sendMail(msg);
+        sendMail(executor);
     }
 
     /**
@@ -274,8 +282,8 @@ public class KissCrawler {
                         keywords = programInfo.getContent().element("keywords")
                                 .getText().trim();
                     } catch (PageException e) {
-                        LOG
-                                .warn("Program details could not be determined for '"
+                        LOG.warn(
+                                "Program details could not be determined for '"
                                         + action.getName() + "'", e);
                     }
                 }
@@ -297,22 +305,42 @@ public class KissCrawler {
      * @throws MessagingException
      *             In case of problems sending mail.
      */
-    private void sendMail(String aText) throws MessagingException {
+    private void sendMail(ProgramActionExecutor aExecutor) throws MessagingException {
+        String textReport = aExecutor.getReport();
+        System.out.println("Text report: \n" + textReport);
+        System.out.println("XML report:\n" + aExecutor.getXmlReport().asXML());
+        
+        
         Properties props = new Properties();
         props.put("mail.transport.protocol", "smtp");
         props.put("mail.smtp.host", "falcon");
         props.put("mail.smtp.port", "25");
 
         Session mailSession = Session.getInstance(props);
-        Message message = new MimeMessage(mailSession);
-
-        message.setFrom(new InternetAddress("erik@brakkee.org"));
-        message.setRecipient(Message.RecipientType.TO, new InternetAddress(
-                "erik@brakkee.org"));
-        message.setSentDate(new Date());
-        message.setSubject("KiSS crawler update");
-        message.setText(aText);
-        Transport.send(message);
+        InternetAddress from = new InternetAddress("erik@brakkee.org");
+    
+        HtmlEmail mail = new HtmlEmail();
+        mail.setMailSession(mailSession);
+        try {
+            mail.setFrom("erik@brakkee.org");
+            mail.setTo(Arrays.asList(new InternetAddress[] { from }));
+            mail.setSentDate(new Date());
+            mail.setSubject("KiSS Crawler Update");
+            String html = aExecutor.getXmlReport().asXML(); 
+            Document document = new XSLT().transform(html.getBytes(), new FileResource(new File("reportToHtml.xsl")));
+            ByteArrayOutputStream xhtml = new ByteArrayOutputStream();
+            XMLSerializer serializer = new XMLSerializer(xhtml, new OutputFormat());
+            serializer.serialize(document);
+            mail.setHtmlMsg(xhtml.toString());
+            mail.setTextMsg(textReport);
+            mail.send();
+        } catch (EmailException e) {
+            throw new RuntimeException(e);
+        } catch (TransformerException e) { 
+            throw new RuntimeException(e);
+        } catch (IOException e) { 
+            throw new RuntimeException(e);
+        }
     }
 
 }