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