X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=crawler%2Fkiss%2Fsrc%2Forg%2Fwamblee%2Fcrawler%2Fkiss%2Fmain%2FProgramActionExecutor.java;h=c19b6473b04b16e829f0b30a6647d5938f6beb5c;hb=2160337764463b1cd9217671f0f9c2f6ab89dcb0;hp=4b2476d06dd2653deb38dca28f36e9d64aba2b2e;hpb=6fcc8f81b60ba48e532eb0b354e3e8547b7e5198;p=utils diff --git a/crawler/kiss/src/org/wamblee/crawler/kiss/main/ProgramActionExecutor.java b/crawler/kiss/src/org/wamblee/crawler/kiss/main/ProgramActionExecutor.java index 4b2476d0..c19b6473 100644 --- a/crawler/kiss/src/org/wamblee/crawler/kiss/main/ProgramActionExecutor.java +++ b/crawler/kiss/src/org/wamblee/crawler/kiss/main/ProgramActionExecutor.java @@ -16,7 +16,6 @@ package org.wamblee.crawler.kiss.main; -import java.util.EnumMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -25,8 +24,6 @@ import java.util.TreeSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.dom4j.DocumentFactory; -import org.dom4j.Element; import org.wamblee.crawler.kiss.guide.Program; import org.wamblee.crawler.kiss.guide.TimeInterval; import org.wamblee.crawler.kiss.guide.Program.RecordingResult; @@ -41,35 +38,23 @@ public class ProgramActionExecutor { private static final Log LOG = LogFactory .getLog(ProgramActionExecutor.class); - /** - * A map of category name to a set of program. Useful for displaying the - * output of possibly interesting programs on a per category basis. - */ - private Map> _interestingShows; - /** * Map of priority to set of programs. */ private Map> _showsToRecord; - + /** - * Map or recording result to a set of programs. + * Report to use. */ - private EnumMap> _recordings; + private Report _report; /** * Constructs the program action executor. * */ - public ProgramActionExecutor() { - _interestingShows = new TreeMap>(); + public ProgramActionExecutor(Report aReport) { _showsToRecord = new TreeMap>(); - _recordings = new EnumMap>( - RecordingResult.class); - for (RecordingResult result : RecordingResult.values()) { - _recordings.put(result, new TreeSet( - new Program.TimeSorter())); - } + _report = aReport; } /** @@ -82,12 +67,12 @@ public class ProgramActionExecutor { */ public void recordProgram(int aPriority, Program aProgram) { LOG.info("priority = " + aPriority + ", program: " + aProgram); - // Putting -priority into the set makes sure that iteration order - // over the priorities will go from higher priority to lower priority. + // Putting -priority into the set makes sure that iteration order + // over the priorities will go from higher priority to lower priority. Set programs = _showsToRecord.get(-aPriority); if (programs == null) { programs = new TreeSet(new Program.TimeSorter()); - _showsToRecord.put(-aPriority, programs); + _showsToRecord.put(-aPriority, programs); } programs.add(aProgram); } @@ -102,84 +87,44 @@ public class ProgramActionExecutor { */ public void interestingProgram(String aCategory, Program aProgram) { LOG.info("category = '" + aCategory + "', program: " + aProgram); - Set programs = _interestingShows.get(aCategory); - if (programs == null) { - programs = new TreeSet(new Program.TimeSorter()); - _interestingShows.put(aCategory, programs); - } - programs.add(aProgram); + _report.interestingProgram(aCategory, aProgram); } /** * Makes sure that the actions are performed. - * */ public void commit() { Set previouslyRecorded = new HashSet(); for (Integer priority : _showsToRecord.keySet()) { for (Program program : _showsToRecord.get(priority)) { - TimeInterval interval = program.getInterval(); - if ( recordingConflictExists(previouslyRecorded, interval)) { - _recordings.get(RecordingResult.CONFLICT).add(program); + TimeInterval interval = program.getInterval(); + if (recordingConflictExists(previouslyRecorded, interval)) { + _report.setRecordingResult(RecordingResult.CONFLICT, program); } else { RecordingResult result = program.record(); - _recordings.get(result).add(program); + _report.setRecordingResult(result, program); previouslyRecorded.add(interval); } } } } - - /** - * Checks an interval for overlap with a previously recorded program. - * @param aPreviouslyRecorded Previously recorded programs. - * @param interval Interval. - * @return True iff there is a recording conflict. - */ - private boolean recordingConflictExists(Set aPreviouslyRecorded, TimeInterval interval) { - for (TimeInterval recordedInterval: aPreviouslyRecorded ) { - if ( interval.overlap(recordedInterval)) { - return true; - } - } - return false; - } /** - * Get report as XML. + * Checks an interval for overlap with a previously recorded program. * - * @return XML report + * @param aPreviouslyRecorded + * Previously recorded programs. + * @param aInterval + * Interval. + * @return True iff there is a recording conflict. */ - public Element getReport() { - DocumentFactory factory = DocumentFactory.getInstance(); - Element report = factory.createElement("report"); - - for (RecordingResult result : RecordingResult.values()) { - if (_recordings.get(result).size() > 0) { - Element recordingResult = report.addElement("recorded") - .addAttribute("result", result.toString()); - - for (Program program : _recordings.get(result)) { - recordingResult.add(program.asXml()); - } + private boolean recordingConflictExists( + Set aPreviouslyRecorded, TimeInterval aInterval) { + for (TimeInterval recordedInterval : aPreviouslyRecorded) { + if (aInterval.overlap(recordedInterval)) { + return true; } } - - if (_interestingShows.size() > 0) { - Element interesting = report.addElement("interesting"); - for (String category : _interestingShows.keySet()) { - Element categoryElem = interesting; - if (category.length() > 0) { - categoryElem = interesting.addElement("category"); - categoryElem.addAttribute("name", category); - } - for (Program program : _interestingShows.get(category)) { - categoryElem.add(program.asXml()); - } - } - - } - - return report; + return false; } }