org.quartz.impl.triggers
Class CalendarIntervalTriggerImpl

java.lang.Object
  extended by org.quartz.impl.triggers.AbstractTrigger<CalendarIntervalTrigger>
      extended by org.quartz.impl.triggers.CalendarIntervalTriggerImpl
All Implemented Interfaces:
Serializable, Cloneable, Comparable<Trigger>, CalendarIntervalTrigger, CoreTrigger, org.quartz.spi.MutableTrigger, org.quartz.spi.OperableTrigger, Trigger

public class CalendarIntervalTriggerImpl
extends AbstractTrigger<CalendarIntervalTrigger>
implements CalendarIntervalTrigger, CoreTrigger

A concrete Trigger that is used to fire a JobDetail based upon repeating calendar time intervals.

The trigger will fire every N (see setRepeatInterval(int) ) units of calendar time (see #setRepeatIntervalUnit(IntervalUnit)) as specified in the trigger's definition. This trigger can achieve schedules that are not possible with SimpleTrigger (e.g because months are not a fixed number of seconds) or CronTrigger (e.g. because "every 5 months" is not an even divisor of 12).

If you use an interval unit of MONTH then care should be taken when setting a startTime value that is on a day near the end of the month. For example, if you choose a start time that occurs on January 31st, and have a trigger with unit MONTH and interval 1, then the next fire time will be February 28th, and the next time after that will be March 28th - and essentially each subsequent firing will occur on the 28th of the month, even if a 31st day exists. If you want a trigger that always fires on the last day of the month - regardless of the number of days in the month, you should use CronTrigger.

Since:
1.7
Author:
James House
See Also:
Trigger, CronTrigger, SimpleTrigger, TriggerUtils, Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.quartz.Trigger
Trigger.CompletedExecutionInstruction, Trigger.TriggerState, Trigger.TriggerTimeComparator
 
Field Summary
 
Fields inherited from interface org.quartz.CalendarIntervalTrigger
MISFIRE_INSTRUCTION_DO_NOTHING, MISFIRE_INSTRUCTION_FIRE_ONCE_NOW
 
Fields inherited from interface org.quartz.Trigger
DEFAULT_PRIORITY, MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY, MISFIRE_INSTRUCTION_SMART_POLICY
 
Constructor Summary
CalendarIntervalTriggerImpl()
           Create a DateIntervalTrigger with no settings.
CalendarIntervalTriggerImpl(String name, DateBuilder.IntervalUnit intervalUnit, int repeatInterval)
           Create a DateIntervalTrigger that will occur immediately, and repeat at the the given interval.
CalendarIntervalTriggerImpl(String name, Date startTime, Date endTime, DateBuilder.IntervalUnit intervalUnit, int repeatInterval)
           Create a DateIntervalTrigger that will occur at the given time, and repeat at the the given interval until the given end time.
CalendarIntervalTriggerImpl(String name, String group, DateBuilder.IntervalUnit intervalUnit, int repeatInterval)
           Create a DateIntervalTrigger that will occur immediately, and repeat at the the given interval.
CalendarIntervalTriggerImpl(String name, String group, Date startTime, Date endTime, DateBuilder.IntervalUnit intervalUnit, int repeatInterval)
           Create a DateIntervalTrigger that will occur at the given time, and repeat at the the given interval until the given end time.
CalendarIntervalTriggerImpl(String name, String group, String jobName, String jobGroup, Date startTime, Date endTime, DateBuilder.IntervalUnit intervalUnit, int repeatInterval)
           Create a DateIntervalTrigger that will occur at the given time, fire the identified Job and repeat at the the given interval until the given end time.
 
Method Summary
 Date computeFirstFireTime(Calendar calendar)
           Called by the scheduler at the time a Trigger is first added to the scheduler, in order to have the Trigger compute its first fire time, based on any associated calendar.
 Date getEndTime()
           Get the time at which the DateIntervalTrigger should quit repeating.
 Date getFinalFireTime()
           Returns the final time at which the DateIntervalTrigger will fire, if there is no end time set, null will be returned.
 Date getFireTimeAfter(Date afterTime)
           Returns the next time at which the DateIntervalTrigger will fire, after the given time.
protected  Date getFireTimeAfter(Date afterTime, boolean ignoreEndTime)
           
 Date getNextFireTime()
           Returns the next time at which the Trigger is scheduled to fire.
 Date getPreviousFireTime()
           Returns the previous time at which the DateIntervalTrigger fired.
 int getRepeatInterval()
           Get the the time interval that will be added to the DateIntervalTrigger's fire time (in the set repeat interval unit) in order to calculate the time of the next trigger repeat.
 DateBuilder.IntervalUnit getRepeatIntervalUnit()
          Get the interval unit - the time unit on with the interval applies.
 ScheduleBuilder<CalendarIntervalTrigger> getScheduleBuilder()
          Get a ScheduleBuilder that is configured to produce a schedule identical to this trigger's schedule.
 Date getStartTime()
           Get the time at which the DateIntervalTrigger should occur.
 int getTimesTriggered()
           Get the number of times the DateIntervalTrigger has already fired.
 TimeZone getTimeZone()
           Gets the time zone within which time calculations related to this trigger will be performed.
 boolean hasAdditionalProperties()
           
 boolean isPreserveHourOfDayAcrossDaylightSavings()
          If intervals are a day or greater, this property (set to true) will cause the firing of the trigger to always occur at the same time of day, (the time of day of the startTime) regardless of daylight saving time transitions.
 boolean isSkipDayIfHourDoesNotExist()
          If intervals are a day or greater, and preserveHourOfDayAcrossDaylightSavings property is set to true, and the hour of the day does not exist on a given day for which the trigger would fire, the day will be skipped and the trigger advanced a second interval if this property is set to true.
 boolean mayFireAgain()
           Determines whether or not the DateIntervalTrigger will occur again.
 void setEndTime(Date endTime)
           Set the time at which the DateIntervalTrigger should quit repeating (and be automatically deleted).
 void setNextFireTime(Date nextFireTime)
           Set the next time at which the DateIntervalTrigger should fire.
 void setPreserveHourOfDayAcrossDaylightSavings(boolean preserveHourOfDayAcrossDaylightSavings)
           
 void setPreviousFireTime(Date previousFireTime)
           Set the previous time at which the DateIntervalTrigger fired.
 void setRepeatInterval(int repeatInterval)
           set the the time interval that will be added to the DateIntervalTrigger's fire time (in the set repeat interval unit) in order to calculate the time of the next trigger repeat.
 void setRepeatIntervalUnit(DateBuilder.IntervalUnit intervalUnit)
          Set the interval unit - the time unit on with the interval applies.
 void setSkipDayIfHourDoesNotExist(boolean skipDayIfHourDoesNotExist)
           
 void setStartTime(Date startTime)
           Set the time at which the DateIntervalTrigger should occur.
 void setTimesTriggered(int timesTriggered)
           Set the number of times the DateIntervalTrigger has already fired.
 void setTimeZone(TimeZone timeZone)
           Sets the time zone within which time calculations related to this trigger will be performed.
 void triggered(Calendar calendar)
           Called when the Scheduler has decided to 'fire' the trigger (execute the associated Job), in order to give the Trigger a chance to update itself for its next triggering (if any).
 void updateAfterMisfire(Calendar cal)
           Updates the DateIntervalTrigger's state based on the MISFIRE_INSTRUCTION_XXX that was selected when the DateIntervalTrigger was created.
 void updateWithNewCalendar(Calendar calendar, long misfireThreshold)
           This method should not be used by the Quartz client.
 void validate()
           Validates whether the properties of the JobDetail are valid for submission into a Scheduler.
protected  boolean validateMisfireInstruction(int misfireInstruction)
           
 
Methods inherited from class org.quartz.impl.triggers.AbstractTrigger
clone, compareTo, equals, executionComplete, getCalendarName, getDescription, getFireInstanceId, getFullJobName, getFullName, getGroup, getJobDataMap, getJobGroup, getJobKey, getJobName, getKey, getMisfireInstruction, getName, getPriority, getTriggerBuilder, hashCode, setCalendarName, setDescription, setFireInstanceId, setGroup, setJobDataMap, setJobGroup, setJobKey, setJobName, setKey, setMisfireInstruction, setName, setPriority, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.quartz.CalendarIntervalTrigger
getTriggerBuilder
 
Methods inherited from interface org.quartz.Trigger
compareTo, equals, getCalendarName, getDescription, getJobDataMap, getJobKey, getKey, getMisfireInstruction, getPriority
 

Constructor Detail

CalendarIntervalTriggerImpl

public CalendarIntervalTriggerImpl()

Create a DateIntervalTrigger with no settings.


CalendarIntervalTriggerImpl

public CalendarIntervalTriggerImpl(String name,
                                   DateBuilder.IntervalUnit intervalUnit,
                                   int repeatInterval)

Create a DateIntervalTrigger that will occur immediately, and repeat at the the given interval.


CalendarIntervalTriggerImpl

public CalendarIntervalTriggerImpl(String name,
                                   String group,
                                   DateBuilder.IntervalUnit intervalUnit,
                                   int repeatInterval)

Create a DateIntervalTrigger that will occur immediately, and repeat at the the given interval.


CalendarIntervalTriggerImpl

public CalendarIntervalTriggerImpl(String name,
                                   Date startTime,
                                   Date endTime,
                                   DateBuilder.IntervalUnit intervalUnit,
                                   int repeatInterval)

Create a DateIntervalTrigger that will occur at the given time, and repeat at the the given interval until the given end time.

Parameters:
startTime - A Date set to the time for the Trigger to fire.
endTime - A Date set to the time for the Trigger to quit repeat firing.
intervalUnit - The repeat interval unit (minutes, days, months, etc).
repeatInterval - The number of milliseconds to pause between the repeat firing.

CalendarIntervalTriggerImpl

public CalendarIntervalTriggerImpl(String name,
                                   String group,
                                   Date startTime,
                                   Date endTime,
                                   DateBuilder.IntervalUnit intervalUnit,
                                   int repeatInterval)

Create a DateIntervalTrigger that will occur at the given time, and repeat at the the given interval until the given end time.

Parameters:
startTime - A Date set to the time for the Trigger to fire.
endTime - A Date set to the time for the Trigger to quit repeat firing.
intervalUnit - The repeat interval unit (minutes, days, months, etc).
repeatInterval - The number of milliseconds to pause between the repeat firing.

CalendarIntervalTriggerImpl

public CalendarIntervalTriggerImpl(String name,
                                   String group,
                                   String jobName,
                                   String jobGroup,
                                   Date startTime,
                                   Date endTime,
                                   DateBuilder.IntervalUnit intervalUnit,
                                   int repeatInterval)

Create a DateIntervalTrigger that will occur at the given time, fire the identified Job and repeat at the the given interval until the given end time.

Parameters:
startTime - A Date set to the time for the Trigger to fire.
endTime - A Date set to the time for the Trigger to quit repeat firing.
intervalUnit - The repeat interval unit (minutes, days, months, etc).
repeatInterval - The number of milliseconds to pause between the repeat firing.
Method Detail

getStartTime

public Date getStartTime()

Get the time at which the DateIntervalTrigger should occur.

Specified by:
getStartTime in interface Trigger
Specified by:
getStartTime in class AbstractTrigger<CalendarIntervalTrigger>

setStartTime

public void setStartTime(Date startTime)

Set the time at which the DateIntervalTrigger should occur.

Specified by:
setStartTime in interface org.quartz.spi.MutableTrigger
Specified by:
setStartTime in class AbstractTrigger<CalendarIntervalTrigger>
Throws:
IllegalArgumentException - if startTime is null.

getEndTime

public Date getEndTime()

Get the time at which the DateIntervalTrigger should quit repeating.

Specified by:
getEndTime in interface Trigger
Specified by:
getEndTime in class AbstractTrigger<CalendarIntervalTrigger>
See Also:
getFinalFireTime()

setEndTime

public void setEndTime(Date endTime)

Set the time at which the DateIntervalTrigger should quit repeating (and be automatically deleted).

Specified by:
setEndTime in interface org.quartz.spi.MutableTrigger
Specified by:
setEndTime in class AbstractTrigger<CalendarIntervalTrigger>
Throws:
IllegalArgumentException - if endTime is before start time.
See Also:
TriggerUtils#computeEndTimeToAllowParticularNumberOfFirings(AbstractTrigger, Calendar, int)

getRepeatIntervalUnit

public DateBuilder.IntervalUnit getRepeatIntervalUnit()
Description copied from interface: CalendarIntervalTrigger

Get the interval unit - the time unit on with the interval applies.

Specified by:
getRepeatIntervalUnit in interface CalendarIntervalTrigger

setRepeatIntervalUnit

public void setRepeatIntervalUnit(DateBuilder.IntervalUnit intervalUnit)

Set the interval unit - the time unit on with the interval applies.


getRepeatInterval

public int getRepeatInterval()
Description copied from interface: CalendarIntervalTrigger

Get the the time interval that will be added to the DateIntervalTrigger's fire time (in the set repeat interval unit) in order to calculate the time of the next trigger repeat.

Specified by:
getRepeatInterval in interface CalendarIntervalTrigger

setRepeatInterval

public void setRepeatInterval(int repeatInterval)

set the the time interval that will be added to the DateIntervalTrigger's fire time (in the set repeat interval unit) in order to calculate the time of the next trigger repeat.

Throws:
IllegalArgumentException - if repeatInterval is < 1

getTimeZone

public TimeZone getTimeZone()
Description copied from interface: CalendarIntervalTrigger

Gets the time zone within which time calculations related to this trigger will be performed.

If null, the system default TimeZone will be used.

Specified by:
getTimeZone in interface CalendarIntervalTrigger

setTimeZone

public void setTimeZone(TimeZone timeZone)

Sets the time zone within which time calculations related to this trigger will be performed.

Parameters:
timeZone - the desired TimeZone, or null for the system default.

isPreserveHourOfDayAcrossDaylightSavings

public boolean isPreserveHourOfDayAcrossDaylightSavings()
If intervals are a day or greater, this property (set to true) will cause the firing of the trigger to always occur at the same time of day, (the time of day of the startTime) regardless of daylight saving time transitions. Default value is false.

For example, without the property set, your trigger may have a start time of 9:00 am on March 1st, and a repeat interval of 2 days. But after the daylight saving transition occurs, the trigger may start firing at 8:00 am every other day.

If however, the time of day does not exist on a given day to fire (e.g. 2:00 am in the United States on the days of daylight saving transition), the trigger will go ahead and fire one hour off on that day, and then resume the normal hour on other days. If you wish for the trigger to never fire at the "wrong" hour, then you should set the property skipDayIfHourDoesNotExist.

Specified by:
isPreserveHourOfDayAcrossDaylightSavings in interface CalendarIntervalTrigger
See Also:
isSkipDayIfHourDoesNotExist(), getStartTime(), getTimeZone()

setPreserveHourOfDayAcrossDaylightSavings

public void setPreserveHourOfDayAcrossDaylightSavings(boolean preserveHourOfDayAcrossDaylightSavings)

isSkipDayIfHourDoesNotExist

public boolean isSkipDayIfHourDoesNotExist()
If intervals are a day or greater, and preserveHourOfDayAcrossDaylightSavings property is set to true, and the hour of the day does not exist on a given day for which the trigger would fire, the day will be skipped and the trigger advanced a second interval if this property is set to true. Defaults to false.

CAUTION! If you enable this property, and your hour of day happens to be that of daylight savings transition (e.g. 2:00 am in the United States) and the trigger's interval would have had the trigger fire on that day, then you may actually completely miss a firing on the day of transition if that hour of day does not exist on that day! In such a case the next fire time of the trigger will be computed as double (if the interval is 2 days, then a span of 4 days between firings will occur).

Specified by:
isSkipDayIfHourDoesNotExist in interface CalendarIntervalTrigger
See Also:
isPreserveHourOfDayAcrossDaylightSavings()

setSkipDayIfHourDoesNotExist

public void setSkipDayIfHourDoesNotExist(boolean skipDayIfHourDoesNotExist)

getTimesTriggered

public int getTimesTriggered()
Description copied from interface: CalendarIntervalTrigger

Get the number of times the DateIntervalTrigger has already fired.

Specified by:
getTimesTriggered in interface CalendarIntervalTrigger

setTimesTriggered

public void setTimesTriggered(int timesTriggered)

Set the number of times the DateIntervalTrigger has already fired.


validateMisfireInstruction

protected boolean validateMisfireInstruction(int misfireInstruction)
Specified by:
validateMisfireInstruction in class AbstractTrigger<CalendarIntervalTrigger>

updateAfterMisfire

public void updateAfterMisfire(Calendar cal)

Updates the DateIntervalTrigger's state based on the MISFIRE_INSTRUCTION_XXX that was selected when the DateIntervalTrigger was created.

If the misfire instruction is set to MISFIRE_INSTRUCTION_SMART_POLICY, then the following scheme will be used:

Specified by:
updateAfterMisfire in interface org.quartz.spi.OperableTrigger
Specified by:
updateAfterMisfire in class AbstractTrigger<CalendarIntervalTrigger>

triggered

public void triggered(Calendar calendar)

Called when the Scheduler has decided to 'fire' the trigger (execute the associated Job), in order to give the Trigger a chance to update itself for its next triggering (if any).

Specified by:
triggered in interface org.quartz.spi.OperableTrigger
Specified by:
triggered in class AbstractTrigger<CalendarIntervalTrigger>
See Also:
AbstractTrigger.executionComplete(JobExecutionContext, JobExecutionException)

updateWithNewCalendar

public void updateWithNewCalendar(Calendar calendar,
                                  long misfireThreshold)
Description copied from class: AbstractTrigger

This method should not be used by the Quartz client.

To be implemented by the concrete class.

The implementation should update the Trigger's state based on the given new version of the associated Calendar (the state should be updated so that it's next fire time is appropriate given the Calendar's new settings).

Specified by:
updateWithNewCalendar in interface org.quartz.spi.OperableTrigger
Specified by:
updateWithNewCalendar in class AbstractTrigger<CalendarIntervalTrigger>
See Also:
OperableTrigger.updateWithNewCalendar(org.quartz.Calendar, long)

computeFirstFireTime

public Date computeFirstFireTime(Calendar calendar)

Called by the scheduler at the time a Trigger is first added to the scheduler, in order to have the Trigger compute its first fire time, based on any associated calendar.

After this method has been called, getNextFireTime() should return a valid answer.

Specified by:
computeFirstFireTime in interface org.quartz.spi.OperableTrigger
Specified by:
computeFirstFireTime in class AbstractTrigger<CalendarIntervalTrigger>
Returns:
the first time at which the Trigger will be fired by the scheduler, which is also the same value getNextFireTime() will return (until after the first firing of the Trigger).


getNextFireTime

public Date getNextFireTime()

Returns the next time at which the Trigger is scheduled to fire. If the trigger will not fire again, null will be returned. Note that the time returned can possibly be in the past, if the time that was computed for the trigger to next fire has already arrived, but the scheduler has not yet been able to fire the trigger (which would likely be due to lack of resources e.g. threads).

The value returned is not guaranteed to be valid until after the Trigger has been added to the scheduler.

Specified by:
getNextFireTime in interface Trigger
Specified by:
getNextFireTime in class AbstractTrigger<CalendarIntervalTrigger>
See Also:
TriggerUtils#computeFireTimesBetween(AbstractTrigger, Calendar, Date, Date)

getPreviousFireTime

public Date getPreviousFireTime()

Returns the previous time at which the DateIntervalTrigger fired. If the trigger has not yet fired, null will be returned.

Specified by:
getPreviousFireTime in interface Trigger
Specified by:
getPreviousFireTime in class AbstractTrigger<CalendarIntervalTrigger>

setNextFireTime

public void setNextFireTime(Date nextFireTime)

Set the next time at which the DateIntervalTrigger should fire.

This method should not be invoked by client code.

Specified by:
setNextFireTime in interface org.quartz.spi.OperableTrigger

setPreviousFireTime

public void setPreviousFireTime(Date previousFireTime)

Set the previous time at which the DateIntervalTrigger fired.

This method should not be invoked by client code.

Specified by:
setPreviousFireTime in interface org.quartz.spi.OperableTrigger

getFireTimeAfter

public Date getFireTimeAfter(Date afterTime)

Returns the next time at which the DateIntervalTrigger will fire, after the given time. If the trigger will not fire after the given time, null will be returned.

Specified by:
getFireTimeAfter in interface Trigger
Specified by:
getFireTimeAfter in class AbstractTrigger<CalendarIntervalTrigger>

getFireTimeAfter

protected Date getFireTimeAfter(Date afterTime,
                                boolean ignoreEndTime)

getFinalFireTime

public Date getFinalFireTime()

Returns the final time at which the DateIntervalTrigger will fire, if there is no end time set, null will be returned.

Note that the return time may be in the past.

Specified by:
getFinalFireTime in interface Trigger
Specified by:
getFinalFireTime in class AbstractTrigger<CalendarIntervalTrigger>

mayFireAgain

public boolean mayFireAgain()

Determines whether or not the DateIntervalTrigger will occur again.

Specified by:
mayFireAgain in interface Trigger
Specified by:
mayFireAgain in class AbstractTrigger<CalendarIntervalTrigger>

validate

public void validate()
              throws SchedulerException

Validates whether the properties of the JobDetail are valid for submission into a Scheduler.

Specified by:
validate in interface org.quartz.spi.OperableTrigger
Overrides:
validate in class AbstractTrigger<CalendarIntervalTrigger>
Throws:
IllegalStateException - if a required property (such as Name, Group, Class) is not set.
SchedulerException

getScheduleBuilder

public ScheduleBuilder<CalendarIntervalTrigger> getScheduleBuilder()
Get a ScheduleBuilder that is configured to produce a schedule identical to this trigger's schedule.

Specified by:
getScheduleBuilder in interface Trigger
Specified by:
getScheduleBuilder in class AbstractTrigger<CalendarIntervalTrigger>
See Also:
AbstractTrigger.getTriggerBuilder()

hasAdditionalProperties

public boolean hasAdditionalProperties()
Specified by:
hasAdditionalProperties in interface CoreTrigger


Copyright 2001-2013, Terracotta, Inc.