package eu.dnetlib.functionality.index;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Required;

import com.sun.xml.messaging.saaj.util.Base64;

import eu.dnetlib.enabling.tools.blackboard.AbstractBlackboardNotificationHandler;
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;

/**
 * Accepts index creation and feed but mocks those operations.
 * 
 * @author marko
 * 
 */
public class IndexMockNotificationHandler extends AbstractBlackboardNotificationHandler<BlackboardServerHandler> {

	/**
	 * logger.
	 */
	private static final Log log = LogFactory.getLog(IndexMockNotificationHandler.class); // NOPMD by marko on 11/24/08 5:02 PM

	/**
	 * index service.
	 */
	private IndexServiceMockImpl indexService;

	@Override
	protected void processJob(BlackboardJob job) {
		log.info("processing mock index job: " + job.getAction());

		try {
			if (job.getAction().equals("CREATE")) {
				final String format = job.getParameters().get("format");
				final String interpretation = job.getParameters().get("interpretation");
				final String layout = job.getParameters().get("layout");
				job.getParameters().put("id", indexService.createIndex(format, interpretation, layout));
			} else if (job.getAction().equals("FEED")) {
				String epr = Base64.base64Decode(job.getParameters().get("resultset_epr"));
				indexService.feedIndex(job.getParameters().get("id"), epr);
			}

			getBlackboardHandler().done(job);
		} catch (Throwable e) {
			getBlackboardHandler().failed(job, e);
		}
	}

	public IndexServiceMockImpl getIndexService() {
		return indexService;
	}

	@Required
	public void setIndexService(IndexServiceMockImpl indexService) {
		this.indexService = indexService;
	}

}
