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

io.robe.quartz.common.JobProvider Maven / Gradle / Ivy

There is a newer version: 0.5.0.0-1039
Show newest version
package io.robe.quartz.common;

import org.quartz.*;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

public abstract class JobProvider {

    public abstract JobInfo getJob(Class clazz);


    /**
     * Creates an identical JobDetail instance from the given parameters.
     *
     * @param info job annotation
     * @return
     */
    public static JobDetail convert2JobDetail(JobInfo info) {
        JobKey jobKey = JobKey.jobKey(info.getName());
        JobDetail jobDetail = newJob(info.getJobClass()).
                withIdentity(jobKey).
                build();
        return jobDetail;
    }

    public List convert2Triggers(JobInfo dto) {
        List triggers = new LinkedList<>();
        for (TriggerInfo trigDto : dto.getTriggers()) {
            triggers.add(convert2Trigger(trigDto));
        }
        return triggers;
    }

    /**
     * Creates an identical Trigger instance from the given annotation.
     *
     * @param dto
     * @return
     */
    public static Trigger convert2Trigger(TriggerInfo dto) {
        TriggerBuilder builder = newTrigger();
        builder.withIdentity(dto.getName(), dto.getGroup());

        switch (dto.getType()) {
            case CRON:
                setStartEndTime(dto, builder);

                if (!dto.getCron().isEmpty())
                    builder.withSchedule(CronScheduleBuilder.cronSchedule(dto.getCron()));
                break;
            case SIMPLE:
                setStartEndTime(dto, builder);
                setCountIntervalValues(dto, builder);
                break;
        }

        return builder.build();
    }

    /**
     * Helps to set count and intervals
     *
     * @param dto
     * @param builder
     */
    private static void setCountIntervalValues(TriggerInfo dto, TriggerBuilder builder) {
        SimpleScheduleBuilder builderSc = SimpleScheduleBuilder.simpleSchedule();
        if (dto.getRepeatCount() != 0)
            builderSc.withRepeatCount(dto.getRepeatCount());

        if (dto.getRepeatInterval() > 0)
            builderSc.withIntervalInMilliseconds(dto.getRepeatInterval());
        builder.withSchedule(builderSc);
    }


    /**
     * Helps to set start and end times
     *
     * @param dto
     * @param builder
     */
    private static void setStartEndTime(TriggerInfo dto, TriggerBuilder builder) {
        if (dto.getStartTime() > -1)
            builder.startAt(new Date(dto.getStartTime()));
        else
            builder.startNow();

        if (dto.getEndTime() > -1)
            builder.endAt(new Date(dto.getEndTime()));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy