(no commit message)
[utils] / crawler / kiss / src / org / wamblee / crawler / kiss / KissCrawler.java
index d302fb6e915b8e5bffcf9228837ef015a6fbd453..5922cc4209c175ee1c812a5f83b74769902e1e01 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.Set;
@@ -50,7 +49,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.
@@ -141,9 +139,7 @@ public class KissCrawler {
             TVGuide guide = createGuide(page);
             PrintVisitor printer = new PrintVisitor(System.out);
             guide.accept(printer);
-
-          
-            recordInterestingShows(programFilters, guide);
+            processResults(programFilters, guide);
         } finally {
             os.flush();
             os.close();
@@ -161,81 +157,22 @@ public class KissCrawler {
      * @throws MessagingException
      *             In case of problems sending a summary mail.
      */
-    private void recordInterestingShows(List<ProgramFilter> aProgramCondition,
+    private void processResults(List<ProgramFilter> aProgramCondition,
             TVGuide aGuide) throws MessagingException {
-
-        Set<Program> showsToRecord = new TreeSet<Program>(new Program.TimeSorter());
-        Set<Program> interestingShows = new TreeSet<Program>(new Program.TimeSorter());
-       
+        ProgramActionExecutor executor = new ProgramActionExecutor();
         for (ProgramFilter filter : aProgramCondition) {
-            List<Program> programs = filter.apply(aGuide); 
-            switch (filter.getAction()) {
-            case RECORD: {
-                for (Program program: programs) { 
-                    showsToRecord.add(program);
-                }
-                break; 
-            }
-            case NOTIFY: { 
-                for (Program program: programs) {
-                    if ( program.isRecordingPossible()) { 
-                        interestingShows.add(program);
-                    }
-                }
-                break;
-            }
-            default: { 
-                throw new RuntimeException("Unknown action '" + filter.getAction() + "'"); 
-            }
+            List<Program> programs = filter.apply(aGuide);
+            ProgramAction action = filter.getAction(); 
+            for (Program program: programs) { 
+                action.execute(program, executor);
             }
         }
-
-        EnumMap<RecordingResult, List<Program>> messages = recordShows(showsToRecord);
-        
-        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\n";
-                }
-            }
-        }
-        
-        if ( interestingShows.size() > 0 ) { 
-            msg += "Possibly interesting shows:\n\n"; 
-            for (Program program: interestingShows) { 
-                msg += program + "\n\n";
-            }
-        }
-        if (showsToRecord.size()  + interestingShows.size() == 0) {
-            msg += "No suitable programs found";
-        }
-
+        executor.commit();
+        String msg = executor.getReport();
         System.out.println(msg);
         sendMail(msg);
     }
 
-    /**
-     * Records shows.
-     * @param showsToRecord Shows to record.
-     * @return Recording results. 
-     */
-    private EnumMap<RecordingResult, List<Program>> recordShows(Set<Program> showsToRecord) {
-        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 : showsToRecord) {
-            Program.RecordingResult result = program.record();
-            messages.get(result).add(program);
-        }
-        return messages;
-    }
-
     /**
      * Creates the crawler.
      *