blob: 395171391be778d702e819bac3e87467317bad98 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.cocoon.components.cron;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
/**
* Implementation of the JobSchedulerEntry interface for the QuartzJobScheduler
*
* @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
* @version CVS $Id$
*/
public class QuartzJobSchedulerEntry implements JobSchedulerEntry {
/** The data map */
private final JobDataMap m_data;
/** The detail */
private final JobDetail m_detail;
/** The scheduler reference */
private final Scheduler m_scheduler;
/** The date formatter */
private final SimpleDateFormat m_formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/** The name */
private final String m_name;
/** The trigger */
private final Trigger m_trigger;
/**
* Construct an JobSchedulerEntry
*
* @param name The name of the job
* @param scheduler The QuartzJobScheduler
*
* @throws SchedulerException in case of failures
*/
public QuartzJobSchedulerEntry(final String name, final Scheduler scheduler)
throws SchedulerException {
m_scheduler = scheduler;
m_name = name;
m_detail = m_scheduler.getJobDetail(name, QuartzJobScheduler.DEFAULT_QUARTZ_JOB_GROUP);
m_data = m_detail.getJobDataMap();
m_trigger = m_scheduler.getTrigger(name, QuartzJobScheduler.DEFAULT_QUARTZ_JOB_GROUP);
}
/* (non-Javadoc)
* @see org.apache.cocoon.components.cron.JobSchedulerEntry#getJobName()
*/
public String getJobName() {
String name = (String)m_data.get(QuartzJobScheduler.DATA_MAP_ROLE);
if (null == name) {
name = m_data.get(QuartzJobScheduler.DATA_MAP_OBJECT).getClass().getName();
}
return name;
}
/* (non-Javadoc)
* @see org.apache.cocoon.components.cron.JobSchedulerEntry#getName()
*/
public String getName() {
return m_name;
}
/* (non-Javadoc)
* @see org.apache.cocoon.components.cron.JobSchedulerEntry#getNextTime()
*/
public Date getNextTime() {
return m_trigger.getNextFireTime();
}
/* (non-Javadoc)
* @see org.apache.cocoon.components.cron.JobSchedulerEntry#isRunning()
*/
public boolean isRunning() {
Boolean runs = (Boolean)m_data.get(QuartzJobScheduler.DATA_MAP_KEY_ISRUNNING);
if (null != runs) {
return runs.booleanValue();
}
return false;
}
/* (non-Javadoc)
* @see org.apache.cocoon.components.cron.JobSchedulerEntry#getSchedule()
*/
public String getSchedule() {
if (m_trigger instanceof CronTrigger) {
return "cron: " + ((CronTrigger)m_trigger).getCronExpression();
} else if (m_trigger instanceof SimpleTrigger) {
if (((SimpleTrigger)m_trigger).getRepeatInterval() == 0) {
return "once: at " + m_formatter.format(m_trigger.getFinalFireTime());
}
return "periodic: every " + (((SimpleTrigger)m_trigger).getRepeatInterval() / 1000) + "s";
} else {
return "next: " + m_formatter.format(m_trigger.getNextFireTime());
}
}
}