package eu.dnetlib.workflow.sarasvati;

import com.googlecode.sarasvati.load.GraphLoader;
import com.googlecode.sarasvati.mem.MemEngine;
import com.googlecode.sarasvati.mem.MemGraph;
import com.googlecode.sarasvati.mem.MemGraphFactory;

/**
 * Allows to inject a custom graph factory.
 *
 * @author marko
 *
 */
public class InjectableMemEngine extends MemEngine {

	/**
	 * possibly custom graph factory.
	 */
	private MemGraphFactory graphFactory;

	/**
	 * {@inheritDoc}
	 *
	 * @see com.googlecode.sarasvati.mem.MemEngine#getFactory()
	 */
	@Override
	public MemGraphFactory getFactory() {
		if (getGraphFactory() != null)
			return getGraphFactory();
		return super.getFactory();
	}

	@Override
	public GraphLoader<MemGraph> getLoader() {
		return new GraphLoader<MemGraph>(getFactory(), getRepository());
	}

	public void setGraphFactory(final MemGraphFactory graphFactory) {
		this.graphFactory = graphFactory;
	}

	public MemGraphFactory getGraphFactory() {
		return graphFactory;
	}
}
