Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.quartz.impl.triggers
Class CalendarIntervalTriggerImpl

    java.lang.Object
      org.quartz.impl.triggers.AbstractTrigger<CalendarIntervalTrigger>
          org.quartz.impl.triggers.CalendarIntervalTriggerImpl

All Implemented Interfaces:
  Serializable, Cloneable, Comparable<Trigger>, CalendarIntervalTrigger, CoreTrigger, MutableTrigger, 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(org.quartz.DateBuilder.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 `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 `MutableTrigger`
  Specified by:
    `setEndTime` in class `AbstractTrigger<CalendarIntervalTrigger>`
  Throws:
    `IllegalArgumentException` - if endTime is before start time.
  See Also:
    `TriggerUtils.computeEndTimeToAllowParticularNumberOfFirings(org.quartz.spi.OperableTrigger, org.quartz.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:

  - The instruction will be interpreted as `MISFIRE_INSTRUCTION_FIRE_ONCE_NOW`

  Specified by:
    `updateAfterMisfire` in interface `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 `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 `OperableTrigger`
  Specified by:
    `updateWithNewCalendar` in class `AbstractTrigger<CalendarIntervalTrigger>`
  Parameters:
    `calendar` - the modifying calendar
  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 `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(org.quartz.spi.OperableTrigger, org.quartz.Calendar, java.util.Date, java.util.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 `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 `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 `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`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright 2001-2016, Terracotta, Inc.