(no commit message)
[utils] / crawler / kiss / src / org / wamblee / crawler / kiss / KissCrawler.java
index 2f47c695a7a747b4ad00fa870d4b4923726f7a1a..29d7c84940717d76711593e43c0e88272f011144 100644 (file)
@@ -25,7 +25,6 @@ import java.io.InputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.EnumMap;
 import java.util.List;
 import java.util.Properties;
 import java.util.regex.Matcher;
@@ -41,7 +40,6 @@ import javax.mail.internet.MimeMessage;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.wamblee.conditions.Condition;
 import org.wamblee.crawler.Action;
 import org.wamblee.crawler.Configuration;
 import org.wamblee.crawler.Crawler;
@@ -49,7 +47,6 @@ 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.crawler.kiss.Program.RecordingResult;
 
 /**
  * The KiSS crawler for automatic recording of interesting TV shows.
@@ -131,17 +128,16 @@ public class KissCrawler {
             // client.getHostConfiguration().setProxy("127.0.0.1", 3128);
 
             Crawler crawler = createCrawler(aCrawlerConfig, os, client);
+            InputStream programConfigFile = new FileInputStream(new File(
+                    aProgramConfig));
+            List<ProgramFilter> programFilters = new ProgramConfigurationParser()
+                    .parse(programConfigFile);
 
             Page page = getStartPage(aStartUrl, crawler);
             TVGuide guide = createGuide(page);
             PrintVisitor printer = new PrintVisitor(System.out);
             guide.accept(printer);
-
-            InputStream programConfigFile = new FileInputStream(new File(
-                    aProgramConfig));
-            Condition<Program> programCondition = new ProgramConfigurationParser()
-                    .parse(programConfigFile);
-            recordInterestingShows(programCondition, guide);
+            processResults(programFilters, guide);
         } finally {
             os.flush();
             os.close();
@@ -159,34 +155,18 @@ public class KissCrawler {
      * @throws MessagingException
      *             In case of problems sending a summary mail.
      */
-    private void recordInterestingShows(Condition<Program> aProgramCondition,
+    private void processResults(List<ProgramFilter> aProgramCondition,
             TVGuide aGuide) throws MessagingException {
-        MatchVisitor matcher = new MatchVisitor(aProgramCondition);
-        aGuide.accept(matcher);
-        List<Program> programs = matcher.getMatches();
-        EnumMap<RecordingResult, List<Program>> messages = new EnumMap<RecordingResult, List<Program>>(
-                RecordingResult.class);
-        for (RecordingResult result : RecordingResult.values()) {
-            messages.put(result, new ArrayList<Program>());
-        }
-        for (Program program : programs) {
-            Program.RecordingResult result = program.record();
-            messages.get(result).add(program);
-        }
-        String msg = "Summary of KiSS crawler: \n\n\n";
-
-        for (RecordingResult result : RecordingResult.values()) {
-            if (messages.get(result).size() > 0) {
-                msg += result.getDescription() + "\n\n";
-                for (Program program : messages.get(result)) {
-                    msg += program + "\n";
-                }
+        ProgramActionExecutor executor = new ProgramActionExecutor();
+        for (ProgramFilter filter : aProgramCondition) {
+            List<Program> programs = filter.apply(aGuide);
+            ProgramAction action = filter.getAction(); 
+            for (Program program: programs) { 
+                action.execute(program, executor);
             }
         }
-        if (programs.size() == 0) {
-            msg += "No suitable programs found";
-        }
-
+        executor.commit();
+        String msg = executor.getReport();
         System.out.println(msg);
         sendMail(msg);
     }
@@ -295,14 +275,14 @@ public class KissCrawler {
                                 .getText().trim();
                     } catch (PageException e) {
                         LOG
-                                .warn("Program details coul dnot be determined for '"
-                                        + action.getName() + "'");
+                                .warn("Program details coulnot be determined for '"
+                                        + action.getName() + "'", e);
                     }
                 }
                 Program program = new Program(aChannel, action.getName(),
                         description, keywords, interval, action);
 
-                LOG.debug("Got program " + program);
+                LOG.info("Got program " + program);
                 programs.add(program);
             }
         }