package eu.dnetlib.zmq;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.FactoryBean;
import org.zeromq.ZMQ;

/**
 * This helper factory creates a ZMQ context if the jZMQ native library can be loaded,
 * otherwise it returns null.
 * 
 * TODO: return a mock context instead of returning null.
 * 
 * @author marko
 *
 */
public class ZMQFactory implements FactoryBean {
	private static final Log log = LogFactory.getLog(ZMQFactory.class); // NOPMD by marko on 11/24/08 5:02 PM

	private int ioThreads = 1;
	
	@Override
	public Object getObject() throws Exception {
		if (isLibraryLoaded()) {
			return ZMQ.context(ioThreads);
		}
		return null;
	}

	private boolean isLibraryLoaded() {
		try {
			System.loadLibrary("jzmq");
			return true;
		} catch (UnsatisfiedLinkError e) {
			log.warn("cannot load jzmq native library");
			return false;
		}
	}

	@Override
	public Class<?> getObjectType() {
		return null;
	}

	@Override
	public boolean isSingleton() {
		return true;
	}

	public int getIoThreads() {
		return ioThreads;
	}

	public void setIoThreads(int ioThreads) {
		this.ioThreads = ioThreads;
	}

}
