trigger.java

来自「定时器开源项目, 相对于 jcrontab, Quartz 算是更完整的一个项目」· Java 代码 · 共 867 行 · 第 1/2 页

JAVA
867
字号
     * Set whether or not the <code>Trigger</code> should be persisted in the     * <code>{@link org.quartz.spi.JobStore}</code> for re-use after program     * restarts.     * </p>     */    public void setVolatility(boolean volatility) {        this.volatility = volatility;    }    /**     * <p>     * Associate the <code>{@link Calendar}</code> with the given name with     * this Trigger.     * </p>     *      * @param calendarName     *          use <code>null</code> to dis-associate a Calendar.     */    public void setCalendarName(String calendarName) {        this.calendarName = calendarName;    }    /**     * <p>     * Get the name of the <code>{@link Calendar}</code> associated with this     * Trigger.     * </p>     *      * @return <code>null</code> if there is no associated Calendar.     */    public String getCalendarName() {        return calendarName;    }    /**     * <p>     * Whether or not the <code>Trigger</code> should be persisted in the     * <code>{@link org.quartz.spi.JobStore}</code> for re-use after program     * restarts.     * </p>     *      * <p>     * If not explicitly set, the default value is <code>false</code>.     * </p>     *      * @return <code>true</code> if the <code>Trigger</code> should be     *         garbage collected along with the <code>{@link Scheduler}</code>.     */    public boolean isVolatile() {        return volatility;    }    /**     * <p>     * Add the specified name of a <code>{@link TriggerListener}</code> to     * the end of the <code>Trigger</code>'s list of listeners.     * </p>     */    public void addTriggerListener(String name) {        triggerListeners.add(name);    }    /**     * <p>     * Remove the specified name of a <code>{@link TriggerListener}</code>     * from the <code>Trigger</code>'s list of listeners.     * </p>     *      * @return true if the given name was found in the list, and removed     */    public boolean removeTriggerListener(String name) {        return triggerListeners.remove(name);    }    /**     * <p>     * Returns an array of <code>String</code> s containing the names of all     * <code>{@link TriggerListener}</code> assigned to the <code>Trigger</code>,     * in the order in which they should be notified.     * </p>     */    public String[] getTriggerListenerNames() {        String[] outNames = new String[triggerListeners.size()];        return (String[]) triggerListeners.toArray(outNames);    }    /**     * <p>     * This method should not be used by the Quartz client.     * </p>     *      * <p>     * Called when the <code>{@link Scheduler}</code> has decided to 'fire'     * the trigger (execute the associated <code>Job</code>), in order to     * give the <code>Trigger</code> a chance to update itself for its next     * triggering (if any).     * </p>     *      * @see #executionComplete(JobExecutionContext, JobExecutionException)     */    public abstract void triggered(Calendar calendar);    /**     * <p>     * This method should not be used by the Quartz client.     * </p>     *      * <p>     * Called by the scheduler at the time a <code>Trigger</code> is first     * added to the scheduler, in order to have the <code>Trigger</code>     * compute its first fire time, based on any associated calendar.     * </p>     *      * <p>     * After this method has been called, <code>getNextFireTime()</code>     * should return a valid answer.     * </p>     *      * @return the first time at which the <code>Trigger</code> will be fired     *         by the scheduler, which is also the same value <code>getNextFireTime()</code>     *         will return (until after the first firing of the <code>Trigger</code>).     *         </p>     */    public abstract Date computeFirstFireTime(Calendar calendar);    /**     * <p>     * This method should not be used by the Quartz client.     * </p>     *      * <p>     * Called after the <code>{@link Scheduler}</code> has executed the     * <code>{@link org.quartz.JobDetail}</code> associated with the <code>Trigger</code>     * in order to get the final instruction code from the trigger.     * </p>     *      * @param context     *          is the <code>JobExecutionContext</code> that was used by the     *          <code>Job</code>'s<code>execute(xx)</code> method.     * @param result     *          is the <code>JobExecutionException</code> thrown by the     *          <code>Job</code>, if any (may be null).     * @return one of the Trigger.INSTRUCTION_XXX constants.     *      * @see #INSTRUCTION_NOOP     * @see #INSTRUCTION_RE_EXECUTE_JOB     * @see #INSTRUCTION_DELETE_TRIGGER     * @see #INSTRUCTION_SET_TRIGGER_COMPLETE     * @see #triggered(Calendar)     */    public abstract int executionComplete(JobExecutionContext context,            JobExecutionException result);    /**     * <p>     * Used by the <code>{@link Scheduler}</code> to determine whether or not     * it is possible for this <code>Trigger</code> to fire again.     * </p>     *      * <p>     * If the returned value is <code>false</code> then the <code>Scheduler</code>     * may remove the <code>Trigger</code> from the <code>{@link org.quartz.spi.JobStore}</code>.     * </p>     */    public abstract boolean mayFireAgain();    /**     * <p>     * Get the time at which the <code>Trigger</code> should occur.     * </p>     */    public abstract Date getStartTime();    public abstract void setStartTime(Date startTime);         public abstract void setEndTime(Date endTime);         /**     * <p>     * Get the time at which the <code>Trigger</code> should quit repeating -     * even if an assigned 'repeatCount' isn't yet satisfied.     * </p>     *      * @see #getFinalFireTime()     */    public abstract Date getEndTime();    /**     * <p>     * Returns the next time at which the <code>Trigger</code> will fire. If     * the trigger will not fire again, <code>null</code> will be returned.     * The value returned is not guaranteed to be valid until after the <code>Trigger</code>     * has been added to the scheduler.     * </p>     */    public abstract Date getNextFireTime();    /**     * <p>     * Returns the previous time at which the <code>Trigger</code> will fire.     * If the trigger has not yet fired, <code>null</code> will be returned.     */    public abstract Date getPreviousFireTime();    /**     * <p>     * Returns the next time at which the <code>Trigger</code> will fire,     * after the given time. If the trigger will not fire after the given time,     * <code>null</code> will be returned.     * </p>     */    public abstract Date getFireTimeAfter(Date afterTime);    /**     * <p>     * Returns the last time at which the <code>Trigger</code> will fire, if     * the Trigger will repeat indefinitely, null will be returned.     * </p>     *      * <p>     * Note that the return time *may* be in the past.     * </p>     */    public abstract Date getFinalFireTime();    /**     * <p>     * Set the instruction the <code>Scheduler</code> should be given for     * handling misfire situations for this <code>Trigger</code>- the     * concrete <code>Trigger</code> type that you are using will have     * defined a set of additional <code>MISFIRE_INSTRUCTION_XXX</code>     * constants that may be passed to this method.     * </p>     *      * <p>     * If not explicitly set, the default value is <code>MISFIRE_INSTRUCTION_SMART_POLICY</code>.     * </p>     *      * @see #MISFIRE_INSTRUCTION_SMART_POLICY     * @see #updateAfterMisfire(Calendar)     * @see SimpleTrigger     * @see CronTrigger     */    public void setMisfireInstruction(int misfireInstruction) {        if (!validateMisfireInstruction(misfireInstruction))                throw new IllegalArgumentException(                        "The misfire instruction code is invalid for this type of trigger.");        this.misfireInstruction = misfireInstruction;    }    protected abstract boolean validateMisfireInstruction(int misfireInstruction);    /**     * <p>     * Get the instruction the <code>Scheduler</code> should be given for     * handling misfire situations for this <code>Trigger</code>- the     * concrete <code>Trigger</code> type that you are using will have     * defined a set of additional <code>MISFIRE_INSTRUCTION_XXX</code>     * constants that may be passed to this method.     * </p>     *      * <p>     * If not explicitly set, the default value is <code>MISFIRE_INSTRUCTION_SMART_POLICY</code>.     * </p>     *      * @see #MISFIRE_INSTRUCTION_SMART_POLICY     * @see #updateAfterMisfire(Calendar)     * @see SimpleTrigger     * @see CronTrigger     */    public int getMisfireInstruction() {        return misfireInstruction;    }    /**     * <p>     * This method should not be used by the Quartz client.     * </p>     *      * <p>     * To be implemented by the concrete classes that extend this class.     * </p>     *      * <p>     * The implementation should update the <code>Trigger</code>'s state     * based on the MISFIRE_INSTRUCTION_XXX that was selected when the <code>Trigger</code>     * was created.     * </p>     */    public abstract void updateAfterMisfire(Calendar cal);    /**     * <p>     * This method should not be used by the Quartz client.     * </p>     *      * <p>     * To be implemented by the concrete class.     * </p>     *      * <p>     * The implementation should update the <code>Trigger</code>'s state     * based on the given new version of the associated <code>Calendar</code>     * (the state should be updated so that it's next fire time is appropriate     * given the Calendar's new settings).      * </p>     *      * @param cal     */    public abstract void updateWithNewCalendar(Calendar cal, long misfireThreshold);    /**     * <p>     * Validates whether the properties of the <code>JobDetail</code> are     * valid for submission into a <code>Scheduler</code>.     *      * @throws IllegalStateException     *           if a required property (such as Name, Group, Class) is not     *           set.     */    public void validate() throws SchedulerException {        if (name == null)                throw new SchedulerException("Trigger's name cannot be null",                        SchedulerException.ERR_CLIENT_ERROR);        if (group == null)                throw new SchedulerException("Trigger's group cannot be null",                        SchedulerException.ERR_CLIENT_ERROR);        if (jobName == null)                throw new SchedulerException(                        "Trigger's related Job's name cannot be null",                        SchedulerException.ERR_CLIENT_ERROR);        if (jobGroup == null)                throw new SchedulerException(                        "Trigger's related Job's group cannot be null",                        SchedulerException.ERR_CLIENT_ERROR);    }    /**     * <p>     * This method should not be used by the Quartz client.     * </p>     *      * <p>     * Usable by <code>{@link org.quartz.spi.JobStore}</code>     * implementations, in order to facilitate 'recognizing' instances of fired     * <code>Trigger</code> s as their jobs complete execution.     * </p>     *      *       */    public void setFireInstanceId(String id) {        this.fireInstanceId = id;    }    /**     * <p>     * This method should not be used by the Quartz client.     * </p>     */    public String getFireInstanceId() {        return fireInstanceId;    }    /**     * <p>     * Return a simple string representation of this object.     * </p>     */    public String toString() {        return "Trigger '" + getFullName() + "':  triggerClass: '"                + getClass().getName() + " isVolatile: " + isVolatile()                + " calendar: '" + getCalendarName() + "' misfireInstruction: "                + getMisfireInstruction() + " nextFireTime: " + getNextFireTime();    }    /**     * <p>     * Compare the next fire time of this <code>Trigger</code> to that of     * another.     * </p>     */    public int compareTo(Object obj) {        Trigger other = (Trigger) obj;        Date myTime = getNextFireTime();        Date otherTime = other.getNextFireTime();        if (myTime == null && otherTime == null) return 0;        if (myTime == null) return 1;        if (otherTime == null) return -1;        if(myTime.before(otherTime))            return -1;        if(myTime.after(otherTime))            return 1;                return 0;    }    public boolean equals(Object obj) {        if (!(obj instanceof Trigger)) return false;        Trigger other = (Trigger) obj;        if (!other.getName().equals(getName())) return false;        if (!other.getGroup().equals(getGroup())) return false;        return true;    }            public int hashCode() {        return getFullName().hashCode();     }        public Object clone() {        Trigger copy;        try {            copy = (Trigger) super.clone();        } catch (CloneNotSupportedException ex) {            throw new IncompatibleClassChangeError("Not Cloneable.");        }        return copy;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?