package eu.dnetlib.enabling.cron;

import java.util.List;

import javax.annotation.Resource;

import com.google.common.collect.Lists;

import eu.dnetlib.enabling.cron.rmi.CronService;
import eu.dnetlib.enabling.tools.AbstractBaseService;
import eu.dnetlib.enabling.tools.SchedulableEnumerator;

/**
 * @author claudio
 *
 */
public class CronServiceImpl extends AbstractBaseService implements CronService {

	@Resource
	private SchedulableEnumerator schedulableEnumerator;

	/* (non-Javadoc)
	 * @see eu.dnetlib.enabling.cron.rmi.CronService#timeToNextRun(String)
	 */
	@Override
	public String timeToNextRun(String action) {
		return schedulableEnumerator.getSchedulable(action).getNextFireTime();
	}

	/* (non-Javadoc)
	 * @see eu.dnetlib.enabling.cron.rmi.CronService#trigger(String)
	 */
	@Override
	public void trigger(String action) {
		schedulableEnumerator.getSchedulable(action).execute();
	}

	/* (non-Javadoc)
	 * @see eu.dnetlib.enabling.cron.rmi.CronService#setEnabled(String, boolean)
	 */
	@Override
	public void setEnabled(String action, boolean enable) {
		schedulableEnumerator.getSchedulable(action).setEnabled(enable);
	}

	/* (non-Javadoc)
	 * @see eu.dnetlib.enabling.cron.rmi.CronService#setCronExpression(String, String)
	 */
	@Override
	public void setCronExpression(String action, String cronExpression) {
		schedulableEnumerator.getSchedulable(action).updateCronExpression(cronExpression);
	}

	@Override
	public List<String> getActions() {
		return Lists.newArrayList(schedulableEnumerator.getAllSchedulables().keySet());
	}

	@Override
	public boolean isEnabled(String action) {
		return schedulableEnumerator.getSchedulable(action).isEnabled();
	}

	@Override
	public String getCronExpression(String action) {
		return schedulableEnumerator.getSchedulable(action).getCronExpression();
	}

}
