/* * Copyright 2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.crawler.kiss; import org.wamblee.crawler.Action; import org.wamblee.crawler.PageException; /** * Represents a television program. */ public class Program { /** * Name of the record action on the program details page. */ private static final String RECORD_ACTION = "record"; /** * Indent string to use for pretty printing. */ private static final String INDENT = " "; /** * Channel the program is on. */ private String _channel; /** * Program name. */ private String _name; /** * Program description. */ private String _description; /** * Keywords or classification of the program. */ private String _keywords; /** * Time interval for the program (from/to). */ private TimeInterval _interval; /** * 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. */ public Program(String aChannel, String aName, String aDescription, String aKeywords, TimeInterval aInterval, Action aProgramInfo) { _channel = aChannel; _name = aName; _description = aDescription; _keywords = aKeywords; _interval = aInterval; _programInfo = aProgramInfo; } /** * Gets the channel. * @return Channel. */ public String getChannel() { return _channel; } /** * Gets the program name. * @return Name. */ public String getName() { return _name; } /** * Gets the description. * @return Description. */ public String getDescription() { return _description; } /** * Gets the keywords/classification. * @return Keywords/classification */ public String getKeywords() { return _keywords; } /** * Gets the time interval. * @return Time interval. */ public TimeInterval getInterval() { return _interval; } /** * Records the show. * @return True iff an attempt could be made to record the page. * @throws PageException In case of problems recording the page. */ public boolean record() throws PageException { Action record = _programInfo.execute().getAction(RECORD_ACTION); if (record == null) { return false; } record.execute(); return true; } /** * Accepts the visitor. * @param aVisitor Visitor. */ public void accept(Visitor aVisitor) { aVisitor.visitProgram(this); } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ @Override public String toString() { return _interval + " - " + _name + " (" + _channel + "/" + _keywords + ")" + "\n" + (INDENT + _description).replaceAll("\n", "\n" + INDENT); } }