(no commit message)
[utils] / crawler / kiss / src / org / wamblee / crawler / kiss / Program.java
index e48ccae48a3ca0d9a0d989ae1f164a0244465218..83531ff75100d4040f2c1572d9f44cb28ee84247 100644 (file)
 
 package org.wamblee.crawler.kiss;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.wamblee.crawler.Action;
 import org.wamblee.crawler.Page;
 import org.wamblee.crawler.PageException;
 
 /**
- * Represents a television program. 
+ * Represents a television program.
  */
 public class Program {
+    
+    private static final Log LOG = LogFactory.getLog(Program.class);
 
     /**
-     * Name of the record action on the program details page. 
+     * Name of the record action on the program details page.
      */
     private static final String RECORD_ACTION = "record";
-    
+
     private static final String RESULT_ELEM = "result";
-    
+
     public enum RecordingResult {
-            OK("Successfully recorded programs"), 
-            DUPLICATE("Already recorded programs"), 
-            CONFLICT("Programs in conflict with another recorded program"), 
-            OLDSHOW("Programs that occurred in the past"), 
-            ERROR("Programs that could not be recorded for technical reasons");
-            
-            private String _description; 
-            
-            private RecordingResult(String aDescription) { 
-                _description = aDescription;     
-            }
-            
-            public String getDescription() { 
-                return _description; 
-            }
+        OK("Successfully recorded programs"), DUPLICATE(
+                "Already recorded programs"), CONFLICT(
+                "Programs in conflict with another recorded program"), OLDSHOW(
+                "Programs that occurred in the past"), ERROR(
+                "Programs that could not be recorded for technical reasons");
+
+        private String _description;
+
+        private RecordingResult(String aDescription) {
+            _description = aDescription;
+        }
+
+        public String getDescription() {
+            return _description;
+        }
     };
 
     /**
-     * Indent string to use for pretty printing. 
+     * Indent string to use for pretty printing.
      */
     private static final String INDENT = "       ";
 
     /**
-     * Channel the program is on.  
+     * Channel the program is on.
      */
     private String _channel;
 
     /**
-     * Program name. 
+     * Program name.
      */
     private String _name;
 
     /**
-     * Program description. 
+     * Program description.
      */
     private String _description;
 
     /**
-     * Keywords or classification of the program. 
+     * Keywords or classification of the program.
      */
     private String _keywords;
 
@@ -81,19 +85,27 @@ public class Program {
     private TimeInterval _interval;
 
     /**
-     * Action to execute to obtain program information and/or record the program.
+     * Action to execute to obtain program information and/or record the
+     * program.
      */
     private Action _programInfo;
 
     /**
-     * Constructs the program. 
-     * @param aChannel Channel name. 
-     * @param aName Program name. 
-     * @param aDescription Description. 
-     * @param aKeywords Keywords/classification.
-     * @param aInterval Time interval. 
-     * @param aProgramInfo Action to execute for detailed program information or
-     *    for recording the page. 
+     * Constructs the program.
+     * 
+     * @param aChannel
+     *            Channel name.
+     * @param aName
+     *            Program name.
+     * @param aDescription
+     *            Description.
+     * @param aKeywords
+     *            Keywords/classification.
+     * @param aInterval
+     *            Time interval.
+     * @param aProgramInfo
+     *            Action to execute for detailed program information or for
+     *            recording the page.
      */
     public Program(String aChannel, String aName, String aDescription,
             String aKeywords, TimeInterval aInterval, Action aProgramInfo) {
@@ -107,6 +119,7 @@ public class Program {
 
     /**
      * Gets the channel.
+     * 
      * @return Channel.
      */
     public String getChannel() {
@@ -115,7 +128,8 @@ public class Program {
 
     /**
      * Gets the program name.
-     * @return Name. 
+     * 
+     * @return Name.
      */
     public String getName() {
         return _name;
@@ -123,14 +137,16 @@ public class Program {
 
     /**
      * Gets the description.
-     * @return Description. 
+     * 
+     * @return Description.
      */
     public String getDescription() {
         return _description;
     }
 
     /**
-     * Gets the keywords/classification. 
+     * Gets the keywords/classification.
+     * 
      * @return Keywords/classification
      */
     public String getKeywords() {
@@ -138,8 +154,9 @@ public class Program {
     }
 
     /**
-     * Gets the time interval. 
-     * @return Time interval. 
+     * Gets the time interval.
+     * 
+     * @return Time interval.
      */
     public TimeInterval getInterval() {
         return _interval;
@@ -147,21 +164,28 @@ public class Program {
 
     /**
      * Records the show.
-     * @return True iff an attempt could be made to record the page. 
-     * @throws PageException In case of problems recording the page.
+     * 
+     * @return Status describing the result of recording.
      */
-    public RecordingResult record() throws PageException {
-        Action record = _programInfo.execute().getAction(RECORD_ACTION);
-        if (record == null) {
-            return RecordingResult.OLDSHOW;
+    public RecordingResult record() {
+        try {
+            Action record = _programInfo.execute().getAction(RECORD_ACTION);
+            if (record == null) {
+                return RecordingResult.OLDSHOW;
+            }
+            Page result = record.execute();
+            return RecordingResult.valueOf(result.getContent().getText());
+        } catch (PageException e) {
+            LOG.warn("Technical problem recording program: '" + this + "'", e);
+            return RecordingResult.ERROR;
         }
-        Page result = record.execute();
-        return RecordingResult.valueOf(result.getContent().getText());    
     }
 
     /**
-     * Accepts the visitor. 
-     * @param aVisitor Visitor. 
+     * Accepts the visitor.
+     * 
+     * @param aVisitor
+     *            Visitor.
      */
     public void accept(Visitor aVisitor) {
         aVisitor.visitProgram(this);