/**
 * AbstractJobCallback.java
 * Created May 28, 2009
 * Copyright (c) Tandberg Television 2009
 */
package com.tandbergtv.watchpoint.pmm.job.callback;

import java.util.Date;
import java.util.Map;

import org.apache.log4j.Logger;

import com.tandbergtv.watchpoint.pmm.job.referenceEvaluator.JobData;
import com.tandbergtv.watchpoint.pmm.job.referenceEvaluator.ReferenceEvaluatorChain;

/**
 * Provides bare bones implementation of the job callback with support for chaining them
 * 
 * @author Sahil Verma
 */
public class AbstractJobCallback implements IJobCallback {

	protected IJobCallback next;
	
	private static final Logger logger = Logger.getLogger(AbstractJobCallback.class);
	
	/**
	 * Default ctor
	 */
	public AbstractJobCallback() {
		super();
	}

	/**
	 * @param next
	 */
	public AbstractJobCallback(IJobCallback next) {
		super();
		this.next = next;
		logger.debug("I am " + getClass().getSimpleName() + ", next is " + next.getClass().getSimpleName());
	}
	
	/**
	 * Performs evaluation of parameters before doing any real work
	 * 
	 * @param data
	 * @param date
	 */
	public void preexecute(Map<String, Object> data, Date date) {
		ReferenceEvaluatorChain evaluators = ReferenceEvaluatorChain.getInstance();
		
		evaluators.evaluate(new JobData(date), data);
	}

	/* (non-Javadoc)
	 * @see com.tandbergtv.watchpoint.pmm.job.callback.IJobCallback#executeJob(java.util.Map, java.util.Date)
	 */
	@Override
	public void executeJob(Map<String, Object> data, Date date) {
		logger.debug("I am " + getClass().getSimpleName() + ", next is " + next.getClass().getSimpleName());
		this.next.executeJob(data, date);
	}
}
