/**
 * Copyright (c) 2007-2012 EBM WebSourcing, 2012-2013 Linagora
 * 
 * This program/library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 2.1 of the License, or (at your
 * option) any later version.
 * 
 * This program/library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
 * for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program/library; If not, see <http://www.gnu.org/licenses/>
 * for the GNU Lesser General Public License version 2.1.
 */
package org.ow2.petals.se.quartz;

import javax.jbi.JBIException;

import org.ow2.petals.component.framework.bc.AbstractBindingComponent;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author Adrien LOUIS - EBM WebSourcing
 */
public class QuartzSe extends AbstractBindingComponent {

	/**
	 * The Quartz scheduler.
	 */
	private Scheduler quartzScheduler;


	/**
	 * @return the Quartz scheduler
	 */
	public Scheduler getQuartzScheduler() {
		return this.quartzScheduler;
	}


	/*
	 * (non-Javadoc)
	 * @see org.ow2.petals.component.framework.AbstractComponent
	 * #doInit()
	 */
	@Override
	public void doInit() throws JBIException {
		try {
			this.quartzScheduler = StdSchedulerFactory.getDefaultScheduler();

		} catch( final SchedulerException e ) {
			throw new JBIException( "An error occurred while creating the Quartz scheduler.", e );
		}
	}


	/*
	 * (non-Javadoc)
	 * @see org.ow2.petals.component.framework.AbstractComponent
	 * #doStart()
	 */
	@Override
	public void doStart() throws JBIException {
		try {
			this.quartzScheduler.start();

		} catch( final SchedulerException e ) {
			throw new JBIException( "An error occurred while starting the Quartz scheduler.", e );
		}
	}


	/*
	 * (non-Javadoc)
	 * @see org.ow2.petals.component.framework.AbstractComponent
	 * #doStop()
	 */
	@Override
	public void doStop() throws JBIException {
		try {
			this.quartzScheduler.standby();

		} catch( final SchedulerException e ) {
			throw new JBIException( "An error occurred while stopping the Quartz scheduler.", e );
		}
	}


	/*
	 * (non-Javadoc)
	 * @see org.ow2.petals.component.framework.AbstractComponent
	 * #doShutdown()
	 */
	@Override
	public void doShutdown() throws JBIException {
		try {
			this.quartzScheduler.shutdown( false );

		} catch( final SchedulerException e ) {
			throw new JBIException( "An error occurred while shutdowning the Quartz scheduler.", e );
		}
	}
}
