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

io.logspace.agent.shaded.quartz.JobBuilder Maven / Gradle / Ivy

There is a newer version: 0.3.2
Show newest version
/*
 * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
 * use this file except in compliance with the License. You may obtain a copy 
 * of the License at 
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0 
 *   
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
 * License for the specific language governing permissions and limitations 
 * under the License.
 * 
 */

package io.logspace.agent.shaded.quartz;

import io.logspace.agent.shaded.quartz.impl.JobDetailImpl;
import io.logspace.agent.shaded.quartz.utils.Key;

/**
 * JobBuilder is used to instantiate {@link JobDetail}s.
 * 
 * 

The builder will always try to keep itself in a valid state, with * reasonable defaults set for calling build() at any point. For instance * if you do not invoke withIdentity(..) a job name will be generated * for you.

* *

Quartz provides a builder-style API for constructing scheduling-related * entities via a Domain-Specific Language (DSL). The DSL can best be * utilized through the usage of static imports of the methods on the classes * TriggerBuilder, JobBuilder, * DateBuilder, JobKey, TriggerKey * and the various ScheduleBuilder implementations.

* *

Client code can then use the DSL to write code such as this:

*
 *         JobDetail job = newJob(MyJob.class)
 *             .withIdentity("myJob")
 *             .build();
 *             
 *         Trigger trigger = newTrigger() 
 *             .withIdentity(triggerKey("myTrigger", "myTriggerGroup"))
 *             .withSchedule(simpleSchedule()
 *                 .withIntervalInHours(1)
 *                 .repeatForever())
 *             .startAt(futureDate(10, MINUTES))
 *             .build();
 *         
 *         scheduler.scheduleJob(job, trigger);
 * 
 *  
 * @see TriggerBuilder
 * @see DateBuilder 
 * @see JobDetail
 */
public class JobBuilder {

    private JobKey key;
    private String description;
    private Class jobClass;
    private boolean durability;
    private boolean shouldRecover;
    
    private JobDataMap jobDataMap = new JobDataMap();
    
    protected JobBuilder() {
    }
    
    /**
     * Create a JobBuilder with which to define a JobDetail.
     * 
     * @return a new JobBuilder
     */
    public static JobBuilder newJob() {
        return new JobBuilder();
    }
    
    /**
     * Create a JobBuilder with which to define a JobDetail,
     * and set the class name of the Job to be executed.
     * 
     * @return a new JobBuilder
     */
    public static JobBuilder newJob(Class  jobClass) {
        JobBuilder b = new JobBuilder();
        b.ofType(jobClass);
        return b;
    }

    /**
     * Produce the JobDetail instance defined by this 
     * JobBuilder.
     * 
     * @return the defined JobDetail.
     */
    public JobDetail build() {

        JobDetailImpl job = new JobDetailImpl();
        
        job.setJobClass(jobClass);
        job.setDescription(description);
        if(key == null)
            key = new JobKey(Key.createUniqueName(null), null);
        job.setKey(key); 
        job.setDurability(durability);
        job.setRequestsRecovery(shouldRecover);
        
        
        if(!jobDataMap.isEmpty())
            job.setJobDataMap(jobDataMap);
        
        return job;
    }
    
    /**
     * Use a JobKey with the given name and default group to
     * identify the JobDetail.
     * 
     * 

If none of the 'withIdentity' methods are set on the JobBuilder, * then a random, unique JobKey will be generated.

* * @param name the name element for the Job's JobKey * @return the updated JobBuilder * @see JobKey * @see JobDetail#getKey() */ public JobBuilder withIdentity(String name) { key = new JobKey(name, null); return this; } /** * Use a JobKey with the given name and group to * identify the JobDetail. * *

If none of the 'withIdentity' methods are set on the JobBuilder, * then a random, unique JobKey will be generated.

* * @param name the name element for the Job's JobKey * @param group the group element for the Job's JobKey * @return the updated JobBuilder * @see JobKey * @see JobDetail#getKey() */ public JobBuilder withIdentity(String name, String group) { key = new JobKey(name, group); return this; } /** * Use a JobKey to identify the JobDetail. * *

If none of the 'withIdentity' methods are set on the JobBuilder, * then a random, unique JobKey will be generated.

* * @param jobKey the Job's JobKey * @return the updated JobBuilder * @see JobKey * @see JobDetail#getKey() */ public JobBuilder withIdentity(JobKey jobKey) { this.key = jobKey; return this; } /** * Set the given (human-meaningful) description of the Job. * * @param jobDescription the description for the Job * @return the updated JobBuilder * @see JobDetail#getDescription() */ public JobBuilder withDescription(String jobDescription) { this.description = jobDescription; return this; } /** * Set the class which will be instantiated and executed when a * Trigger fires that is associated with this JobDetail. * * @param jobClazz a class implementing the Job interface. * @return the updated JobBuilder * @see JobDetail#getJobClass() */ public JobBuilder ofType(Class jobClazz) { this.jobClass = jobClazz; return this; } /** * Instructs the Scheduler whether or not the Job * should be re-executed if a 'recovery' or 'fail-over' situation is * encountered. * *

* If not explicitly set, the default value is false. *

* * @return the updated JobBuilder * @see JobDetail#requestsRecovery() */ public JobBuilder requestRecovery() { this.shouldRecover = true; return this; } /** * Instructs the Scheduler whether or not the Job * should be re-executed if a 'recovery' or 'fail-over' situation is * encountered. * *

* If not explicitly set, the default value is false. *

* * @param jobShouldRecover the desired setting * @return the updated JobBuilder */ public JobBuilder requestRecovery(boolean jobShouldRecover) { this.shouldRecover = jobShouldRecover; return this; } /** * Whether or not the Job should remain stored after it is * orphaned (no {@link Trigger}s point to it). * *

* If not explicitly set, the default value is false * - this method sets the value to true. *

* * @return the updated JobBuilder * @see JobDetail#isDurable() */ public JobBuilder storeDurably() { this.durability = true; return this; } /** * Whether or not the Job should remain stored after it is * orphaned (no {@link Trigger}s point to it). * *

* If not explicitly set, the default value is false. *

* * @param jobDurability the value to set for the durability property. * @return the updated JobBuilder * @see JobDetail#isDurable() */ public JobBuilder storeDurably(boolean jobDurability) { this.durability = jobDurability; return this; } /** * Add the given key-value pair to the JobDetail's {@link JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder usingJobData(String dataKey, String value) { jobDataMap.put(dataKey, value); return this; } /** * Add the given key-value pair to the JobDetail's {@link JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder usingJobData(String dataKey, Integer value) { jobDataMap.put(dataKey, value); return this; } /** * Add the given key-value pair to the JobDetail's {@link JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder usingJobData(String dataKey, Long value) { jobDataMap.put(dataKey, value); return this; } /** * Add the given key-value pair to the JobDetail's {@link JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder usingJobData(String dataKey, Float value) { jobDataMap.put(dataKey, value); return this; } /** * Add the given key-value pair to the JobDetail's {@link JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder usingJobData(String dataKey, Double value) { jobDataMap.put(dataKey, value); return this; } /** * Add the given key-value pair to the JobDetail's {@link JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder usingJobData(String dataKey, Boolean value) { jobDataMap.put(dataKey, value); return this; } /** * Add all the data from the given {@link JobDataMap} to the * {@code JobDetail}'s {@code JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder usingJobData(JobDataMap newJobDataMap) { jobDataMap.putAll(newJobDataMap); return this; } /** * Replace the {@code JobDetail}'s {@link JobDataMap} with the * given {@code JobDataMap}. * * @return the updated JobBuilder * @see JobDetail#getJobDataMap() */ public JobBuilder setJobData(JobDataMap newJobDataMap) { jobDataMap = newJobDataMap; return this; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy