Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /* ************************************************************************
 #
 #  DivConq
 #
 #  http://divconq.com/
 #
 #  Copyright:
 #    Copyright 2014 eTimeline, LLC. All rights reserved.
 #
#  License:
#    See the license.txt file in the project's top-level directory for details.
#  Authors:
#    * Andy White
************************************************************************ */
package divconq.scheduler.common;
/*
 *  // use ISO periods, e.g. PT2H30M10S
 *  // used for intra-daily mostly, but can be any
 *  <Period Value="n"  />   
 */
public class PeriodHelper extends CommonHelper {
	protected Period period = null;
	// first time this code was run since the module/server was started
	// requires special check for any missed runs
	protected boolean firstCall = true;
	public void init(CommonSchedule scheduleXElement config) {
		super.init(scheduleconfig);
		if (config == null)
			return;
		String period = config.getAttribute("Value");
		if (!StringUtil.isEmpty(period))
			try {
				this. = ISOPeriodFormat.standard().parsePeriod(period);
			}
			catch (Exception x) {
				// TODO log
			}
	}
	// return null to indicate this can never run again
	public DateTime next() {
		if (this.) {
			this. = false;
			if (this..isEnded()) {
				this. = null;
				return null;
			}
			// if there was no past runs, do not try to find them
			// or if last run was more than one period old, then run asap
			if ((this. == null) || (this..plus(this..toStandardDuration()).isBeforeNow())) {
				this. = this..nextAllowedRun();
				return this.;
			}
		}
		if (this. == null)
			return null;
		this. = this..plus(this.);
		// we cannot schedule again, the schedule is expired
		if (this..isEnded(this.))
			return null;
		// can we run at the suggested time?
		if (this..checkForRun(this.)) 
			return this.;
		this. = this..nextAllowedRunAfter(this.);
		return this.;
	}
New to GrepCode? Check out our FAQ X