package org.n3r.quartz.glass.job.annotation; import org.codehaus.jackson.annotate.JsonProperty; import org.n3r.quartz.glass.util.Jobs; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobDetail; import org.quartz.PersistJobDataAfterExecution; import java.lang.annotation.Annotation; import java.util.List; /** * Bean that can be used in jsp files and in json serialisations. * * @author damien bourdette */ public class JobBean { @JsonProperty private String description; @JsonProperty private boolean disallowConcurrentExecution; @JsonProperty private boolean persistJobDataAfterExecution; @JsonProperty private List<JobArgumentBean> arguments; public static JobBean fromClass(Class<?> jobClass) { JobBean jobBean = new JobBean(); jobBean.description = getDescription(jobClass); jobBean.disallowConcurrentExecution = isDisallowConcurrentExecution(jobClass); jobBean.persistJobDataAfterExecution = isPersistJobDataAfterExecution(jobClass); jobBean.arguments = JobArgumentBean.fromClass(jobClass); return jobBean; } public static String getDescription(Class<?> jobClass) { GlassJob annotation = getAnnotation(jobClass, GlassJob.class); return annotation == null ? "" : annotation.description(); } public static JobBean fromClass(JobDetail jobDetail) { JobBean jobBean = new JobBean(); jobBean.description = getDescription(jobDetail); jobBean.disallowConcurrentExecution = jobDetail.isConcurrentExectionDisallowed(); jobBean.persistJobDataAfterExecution = jobDetail.isPersistJobDataAfterExecution(); jobBean.arguments = JobArgumentBean.fromClass(Jobs.jobCass(jobDetail)); return jobBean; } private static String getDescription(JobDetail jobDetail) { GlassJob annotation = Jobs.glassJob(jobDetail); return annotation == null ? "" : annotation.description(); } public static boolean isDisallowConcurrentExecution(Class<?> jobClass) { return getAnnotation(jobClass, DisallowConcurrentExecution.class) != null; } public static boolean isPersistJobDataAfterExecution(Class<?> jobClass) { return getAnnotation(jobClass, PersistJobDataAfterExecution.class) != null; } public String getDescription() { return description; } public boolean isDisallowConcurrentExecution() { return disallowConcurrentExecution; } public boolean isPersistJobDataAfterExecution() { return persistJobDataAfterExecution; } private static <T extends Annotation> T getAnnotation(Class<?> jobClass, Class<T> annotationClass) { if (jobClass == null) return null; return jobClass.getAnnotation(annotationClass); } public List<JobArgumentBean> getArguments() { return arguments; } }