001    package org.hackystat.tickertape.server;
002    
003    import java.util.TimerTask;
004    import java.util.logging.Logger;
005    
006    import org.hackystat.tickertape.ticker.Ticker;
007    import org.hackystat.tickertape.tickerlingua.TickerLingua;
008    import org.hackystat.tickertape.tickerlingua.Tickertape;
009    
010    /**
011     * A TimerTask that supports the periodic running of a Tickertape instance.
012     * @author Philip Johnson
013     */
014    public class TickertapeTask extends TimerTask {
015      
016      /** Holds the tickertape instance associated with this timer task. */
017      private Tickertape tickertape;
018      /** The logger that will record information about tickertape execution. */
019      private Logger logger;
020      
021      private TickerLingua tickerLingua;
022    
023      /**
024       * Creates a new task that will execute the associated tickertape processing. 
025       * @param tickertape The tickertape definition. 
026       * @param tickerLingua The tickerLingua definition.
027       * @param logger The logger. 
028       */
029      public TickertapeTask(Tickertape tickertape, TickerLingua tickerLingua, Logger logger) {
030        this.tickertape = tickertape;
031        this.logger = logger;
032        this.tickerLingua = tickerLingua;
033      }
034    
035      /**
036       * When this task wakes up, it will invoke the Ticker from this Tickertape instance. 
037       */
038      @Override
039      public void run() {
040        this.logger.info("Running tickertape: " + tickertape.getId());
041        Ticker ticker = this.tickertape.getTicker();
042        ticker.run(tickertape, tickerLingua, logger);
043      }
044    }