(no commit message)
[utils] / crawler / kiss / src / org / wamblee / crawler / kiss / KissCrawler.java
index e8687d9d09a5d01f15090592bce528bae1091c65..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,40 +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) {
-            try {
-                Program.RecordingResult result = program.record();
-                messages.get(result).add(program);
-            } catch (PageException e) {
-                LOG.info("Attempt to record " + program + " failed.");
-                messages.get(RecordingResult.ERROR).add(program);
+        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);
             }
         }
-        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";
-                }
-            }
-        }
-        if ( programs.size() == 0 ) { 
-            msg += "No suitable programs found"; 
-        }
-        
+        executor.commit();
+        String msg = executor.getReport();
         System.out.println(msg);
         sendMail(msg);
     }
@@ -257,8 +231,8 @@ public class KissCrawler {
                 Channel channel = createChannel(action.getName(), action
                         .execute().getAction("right-now").execute());
                 channels.add(channel);
-                if ( SystemProperties.isDebugMode() ) { 
-                    break; // Only one channel is crawled. 
+                if (SystemProperties.isDebugMode()) {
+                    break; // Only one channel is crawled.
                 }
             } catch (PageException e) {
                 LOG.error("Could not create channel information for '"
@@ -301,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);
             }
         }