package eu.dnetlib.enabling.manager.msro;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Required;

import com.googlecode.sarasvati.Engine;
import com.googlecode.sarasvati.Env;
import com.googlecode.sarasvati.Graph;
import com.googlecode.sarasvati.GraphProcess;
import com.googlecode.sarasvati.mem.MemGraphProcess;

import eu.dnetlib.enabling.tools.blackboard.NotificationHandler;
import eu.dnetlib.workflow.GraphProcessRegistry;

/**
 * reindex indices when the mdstores change.
 *
 * @author marko
 *
 */
public class ReindexNotificationHandler implements NotificationHandler {

	/**
	 * workflow process registry.
	 */
	private GraphProcessRegistry processRegistry;

	/**
	 * workflow graph.
	 */
	private Graph graph;

	/**
	 * workflow engine.
	 */
	@Resource
	private transient Engine engine;

	/**
	 * {@inheritDoc}
	 *
	 * @see eu.dnetlib.enabling.tools.blackboard.NotificationHandler#notified(java.lang.String, java.lang.String,
	 *      java.lang.String, java.lang.String)
	 */
	public void notified(final String subscrId, final String topic, final String rsId, final String profile) {
		if (!topic.startsWith("UPDATE.MDStoreDSResourceType"))
			return;

		final GraphProcess process = new MemGraphProcess(graph);
		processRegistry.associateProcessWithResource(process, rsId);

		final Env env = process.getEnv();

		env.setStringAttribute("mdId", rsId);

		engine.startProcess(process);
	}

	public GraphProcessRegistry getProcessRegistry() {
		return processRegistry;
	}

	@Required
	public void setProcessRegistry(final GraphProcessRegistry processRegistry) {
		this.processRegistry = processRegistry;
	}

	public Graph getGraph() {
		return graph;
	}

	@Required
	public void setGraph(final Graph graph) {
		this.graph = graph;
	}

}
