package eu.dnetlib.msro.dispatcher;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import eu.dnetlib.common.ifaces.BlackboardCallback;
import eu.dnetlib.miscutils.DateUtils;
import eu.dnetlib.rmi.blackboard.LaunchWorkflowMessage;
import eu.dnetlib.rmi.objects.is.BlackboardActionStatus;

public class SimpleLaunchWorkflowCallback implements BlackboardCallback<LaunchWorkflowMessage> {

	private ProcessInfo info;

	private static final Log log = LogFactory.getLog(SimpleLaunchWorkflowCallback.class);

	public SimpleLaunchWorkflowCallback(final ProcessInfo info) {
		this.info = info;
	}

	@Override
	public void onSuccess(final LaunchWorkflowMessage m) {
		final long now = DateUtils.now();
		info.setStatus(BlackboardActionStatus.DONE);
		info.setCurrentNode(m.getCurrentNode());
		info.setLastActivityDate(now);
		log.debug("***** SUCCESS: " + m.getProcId() + " - " + m.getCurrentNode());
	}

	@Override
	public void onFail(final LaunchWorkflowMessage m) {
		final long now = DateUtils.now();
		info.setStatus(BlackboardActionStatus.FAILED);
		info.setCurrentNode(m.getCurrentNode());
		info.setLastActivityDate(now);
		log.debug("***** FAIL: " + m.getError() + " - " + m.getCurrentNode());
	}

	@Override
	public void onOngoing(final LaunchWorkflowMessage m) {
		info.setStatus(BlackboardActionStatus.ONGOING);
		info.setCurrentNode(m.getCurrentNode());
		info.setLastActivityDate(DateUtils.now());
		log.debug("***** ONGOING: " + m.getProcId() + " - " + m.getCurrentNode());
	}

	public final ProcessInfo getInfo() {
		return info;
	}

	public final void setInfo(final ProcessInfo info) {
		this.info = info;
	}

	public LaunchWorkflowMessage getInitialMessage(final String sarasvatiXml) {
		return new LaunchWorkflowMessage(info.getProcId(), info.getMetaWfId(), info.getWfName(), info.getFamily(),
				info.getPriority(),
				sarasvatiXml);
	}

}
