package com.thinkbiganalytics.scheduler; /*- * #%L * thinkbig-scheduler-quartz * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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. * #L% */ import org.quartz.CronTrigger; import org.quartz.SimpleTrigger; import java.util.Date; import java.util.List; /** * Java class representing a scheduled job. */ public class QuartzScheduledJob implements ScheduledJob { private JobIdentifier jobIdentifier; private String jobName; private String jobStatus; private String jobGroup; private String nextFireTimeString; private String cronExpression; private Date nextFireTime; private List<TriggerInfo> triggers; private String state; private String cronExpressionSummary; public QuartzScheduledJob() { } @Override public String getJobStatus() { return jobStatus; } @Override public void setJobStatus(String jobStatus) { this.jobStatus = jobStatus; } @Override public String getJobGroup() { return jobGroup; } @Override public void setJobGroup(String jobGroup) { this.jobGroup = jobGroup; } @Override public String getNextFireTimeString() { return nextFireTimeString; } @Override public void setNextFireTimeString(String nextFireTimeString) { this.nextFireTimeString = nextFireTimeString; } @Override public Date getNextFireTime() { return nextFireTime; } @Override public void setNextFireTime(Date nextFireTime) { this.nextFireTime = nextFireTime; } @Override public String getCronExpression() { return cronExpression; } @Override public void setCronExpression(String cronExpression) { this.cronExpression = cronExpression; } @Override public String getJobName() { return jobName; } @Override public void setJobName(String jobName) { this.jobName = jobName; } @Override public List<TriggerInfo> getTriggers() { return triggers; } @Override public void setTriggers(List<TriggerInfo> triggers) { this.triggers = triggers; } @Override public JobIdentifier getJobIdentifier() { return jobIdentifier; } @Override public void setJobIdentifier(JobIdentifier jobIdentifier) { this.jobIdentifier = jobIdentifier; } @Override public void setState() { String state = ""; if (isRunning()) { state = "RUNNING"; } else if (isPaused()) { state = "PAUSED"; } else if (isScheduled()) { state = "SCHEDULED"; } else { state = "UNKNOWN"; } this.state = state; } @Override public String getState() { return state; } @Override public String getCronExpressionSummary() { return cronExpressionSummary; } @Override public void setCronExpressionData() { if (getTriggers() != null) { for (TriggerInfo triggerInfo : getTriggers()) { if (CronTrigger.class.isAssignableFrom(triggerInfo.getTriggerClass())) { this.setCronExpression(triggerInfo.getCronExpression()); this.nextFireTime = triggerInfo.getNextFireTime(); this.cronExpressionSummary = triggerInfo.getCronExpressionSummary(); break; } } } } @Override public boolean isRunning() { boolean running = false; if (getTriggers() != null) { for (TriggerInfo triggerInfo : getTriggers()) { running = triggerInfo.getState().equals(TriggerInfo.TriggerState.BLOCKED) || ( !CronTrigger.class.isAssignableFrom(triggerInfo.getTriggerClass()) && SimpleTrigger.class .isAssignableFrom(triggerInfo.getTriggerClass())); if (running) { break; } } } return running; } @Override public boolean isPaused() { boolean paused = false; if (getTriggers() != null) { for (TriggerInfo triggerInfo : getTriggers()) { paused = triggerInfo.getState().equals(TriggerInfo.TriggerState.PAUSED); if (paused) { break; } } } return paused; } @Override public boolean isScheduled() { boolean scheduled = false; if (getTriggers() != null) { for (TriggerInfo triggerInfo : getTriggers()) { if (CronTrigger.class.isAssignableFrom(triggerInfo.getTriggerClass())) { scheduled = true; break; } } } return scheduled; } }