001package com.hfg.util.scheduler;
002
003import java.util.Date;
004
005import com.hfg.units.TimeSpan;
006
007//------------------------------------------------------------------------------
008/**
009 Scheduler that runs at a specified interval, specified in minutes.
010 <div>
011 @author J. Alex Taylor, hairyfatguy.com
012 </div>
013 */
014//------------------------------------------------------------------------------
015// com.hfg Library
016//
017// This library is free software; you can redistribute it and/or
018// modify it under the terms of the GNU Lesser General Public
019// License as published by the Free Software Foundation; either
020// version 2.1 of the License, or (at your option) any later version.
021//
022// This library is distributed in the hope that it will be useful,
023// but WITHOUT ANY WARRANTY; without even the implied warranty of
024// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
025// Lesser General Public License for more details.
026//
027// You should have received a copy of the GNU Lesser General Public
028// License along with this library; if not, write to the Free Software
029// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
030//
031// J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com
032// jataylor@hairyfatguy.com
033//------------------------------------------------------------------------------
034
035public class IntervalSchedule implements Schedule
036{
037   private long mStartTime;
038   private TimeSpan mFrequency;
039
040   //###########################################################################
041   // CONSTRUCTORS
042   //###########################################################################
043
044   //---------------------------------------------------------------------------
045   public IntervalSchedule(TimeSpan inFrequency)
046   {
047      mStartTime = System.currentTimeMillis();
048      mFrequency = inFrequency;
049   }
050
051   //###########################################################################
052   // PUBLIC METHODS
053   //###########################################################################
054
055   //---------------------------------------------------------------------------
056   public TimeSpan getFrequency()
057   {
058      return mFrequency;
059   }
060
061   //---------------------------------------------------------------------------
062   public Date next()
063   {
064      return nextAfter(new Date());
065   }
066
067   //---------------------------------------------------------------------------
068   public Date nextAfter(Date inReferenceDate)
069   {
070      long msDelta = inReferenceDate.getTime() - mStartTime;
071
072      long remainder = msDelta%mFrequency.getMilliseconds();
073
074      return new Date(inReferenceDate.getTime() - remainder + getFrequency().getMilliseconds());
075   }
076
077
078}
079