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;
-import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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.
TVGuide guide = createGuide(page);
PrintVisitor printer = new PrintVisitor(System.out);
guide.accept(printer);
-
-
- recordInterestingShows(programFilters, guide);
+ processResults(programFilters, guide);
} finally {
os.flush();
os.close();
* @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.
*
.getText().trim();
} catch (PageException e) {
LOG
- .warn("Program details coul dnot be determined for '"
- + action.getName() + "'");
+ .warn("Program details could not 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);
}
}