All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.spikeify.cron.data.ScheduleUpdater Maven / Gradle / Ivy

package com.spikeify.cron.data;

import com.spikeify.cron.entities.CronJob;
import com.spikeify.cron.entities.enums.RunEvery;
import com.spikeify.cron.utils.DateTimeUtils;

public class ScheduleUpdater implements CronJobUpdater {

	private final String jobTarget;
	private final int runInterval;
	private final RunEvery runIntervalUnit;

	private final boolean runFromTo;
	private final boolean runOnce;

	private final Integer runFromHour;
	private final Integer runFromMinute;
	private final Integer runToHour;
	private final Integer runToMinute;


	public ScheduleUpdater(String target,
						   int interval,
						   RunEvery intervalUnit) {

		runFromTo = false;
		runOnce = false;

		jobTarget = target;
		runInterval = interval;
		runIntervalUnit = intervalUnit;

		runFromHour = null;
		runFromMinute = null;
		runToHour = null;
		runToMinute = null;
	}

	public ScheduleUpdater(String target,
						   int interval, RunEvery intervalUnit,
						   int fromHour, int fromMinute,
						   int toHour, int toMinute,
						   int timezone) {

		if (timezone < -11 || timezone > 12) {
			throw new IllegalArgumentException("Expected time zone >= -11 and <= 12!");
		}

		runFromTo = true;
		runOnce = false;

		jobTarget = target;
		runInterval = interval;
		runIntervalUnit = intervalUnit;

		runFromHour = DateTimeUtils.getUtcHour(fromHour, timezone);
		runFromMinute = fromMinute;
		runToHour = DateTimeUtils.getUtcHour(toHour, timezone);
		runToMinute = toMinute;
	}

	public ScheduleUpdater(String target,
						   int atHour, int atMinute,
						   int timezone) {

		if (timezone < -11 || timezone > 12) {
			throw new IllegalArgumentException("Expected time zone > -12 and <= 12!");
		}

		runFromTo = false;
		runOnce = true;

		jobTarget = target;
		runInterval = 1;
		runIntervalUnit = RunEvery.day;

		runFromHour = DateTimeUtils.getUtcHour(atHour, timezone);
		runFromMinute = atMinute;
		runToHour = null;
		runToMinute = null;
	}

	public void update(CronJob job) {

		job.setRunInterval(runInterval, runIntervalUnit);
		job.setTarget(jobTarget);

		job.clearRunFromTo();

		if (runFromTo) {
			job.runFromTo(runFromHour, runFromMinute, runToHour, runToMinute);
		}

		if (runOnce) {
			job.runExactlyAt(runFromHour, runFromMinute);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy