package eu.dnetlib.enabling.aas.is;

import org.apache.log4j.Logger;

import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
import eu.dnetlib.enabling.is.sn.rmi.ISSNService;
import eu.dnetlib.enabling.resultset.rmi.ResultSetService;

/**
 * Holds information about IS services versions.
 * @author mhorst
 *
 */
public class ISServicesVersionHolder {
	
	protected static final Logger log = Logger.getLogger(ISServicesVersionHolder.class);
	
	public static final String SERVICE_VERSION_UNSPECIFIED = "UNSPECIFIED";
	
	public static final String SERVICE_VERSION_TOKEN_DELIMITER = "-";
	
	String lookUpServiceVersion = null;
	String registryServiceVersion = null;
	String snServiceVersion = null;
	String resultSetServiceVersion = null;
	
	private ISLookUpService lookUpService = null;
	private ISRegistryService registryService = null;
	private ISSNService snService = null;
	private ResultSetService resultSetService = null;
	
	
	public void init() {
		try {
			lookUpServiceVersion = lookUpService.identify();
			log.info("got lookUpServiceVersion:" + lookUpServiceVersion);
		} catch (Exception e) {
			log.error("Exception occured when checking IS LookUp service version! " +
					"Possible cause: service doesn't implement identify() method.",e);
			lookUpServiceVersion = SERVICE_VERSION_UNSPECIFIED;
		}
		try {
			registryServiceVersion = registryService.identify();
			log.info("got registryServiceVersion:" + registryServiceVersion);
		} catch (Exception e) {
			log.error("Exception occured when checking IS Registry service version! " +
					"Possible cause: service doesn't implement identify() method.",e);
			registryServiceVersion = SERVICE_VERSION_UNSPECIFIED;
		}
		try {
			snServiceVersion = snService.identify();
			log.info("got snServiceVersion:" + snServiceVersion);
		} catch (Exception e) {
			log.error("Exception occured when checking IS SN service version! " +
					"Possible cause: service doesn't implement identify() method.",e);
			snServiceVersion = SERVICE_VERSION_UNSPECIFIED;
		}
		try {
			resultSetServiceVersion = resultSetService.identify();
			log.info("got resultSetServiceVersion:" + resultSetServiceVersion);
		} catch (Exception e) {
			log.error("Exception occured when checking ResultSet service version! " +
					"Possible cause: service doesn't implement identify() method.",e);
			resultSetServiceVersion = SERVICE_VERSION_UNSPECIFIED;
		}
	}


	public ISLookUpService getLookUpService() {
		return lookUpService;
	}


	public void setLookUpService(ISLookUpService lookUpService) {
		this.lookUpService = lookUpService;
	}


	public ISRegistryService getRegistryService() {
		return registryService;
	}


	public void setRegistryService(ISRegistryService registryService) {
		this.registryService = registryService;
	}


	public ResultSetService getResultSetService() {
		return resultSetService;
	}


	public void setResultSetService(ResultSetService resultSetService) {
		this.resultSetService = resultSetService;
	}


	public ISSNService getSnService() {
		return snService;
	}


	public void setSnService(ISSNService snService) {
		this.snService = snService;
	}


	/**
	 * Returns IS LookUp service version.
	 * @return IS LookUp service version
	 */
	public String getLookUpServiceVersion() {
		return lookUpServiceVersion;
	}


	/**
	 * Returns IS Registry service version.
	 * @return IS Registry service version
	 */
	public String getRegistryServiceVersion() {
		return registryServiceVersion;
	}


	/**
	 * Returns ResultSet service version.
	 * @return ResultSet service version
	 */
	public String getResultSetServiceVersion() {
		return resultSetServiceVersion;
	}


	/**
	 * Returns IS SN service version.
	 * @return IS SN service version
	 */
	public String getSnServiceVersion() {
		return snServiceVersion;
	}


	public void setLookUpServiceVersion(String lookUpServiceVersion) {
		this.lookUpServiceVersion = lookUpServiceVersion;
	}


	public void setRegistryServiceVersion(String registryServiceVersion) {
		this.registryServiceVersion = registryServiceVersion;
	}


	public void setSnServiceVersion(String snServiceVersion) {
		this.snServiceVersion = snServiceVersion;
	}


	public void setResultSetServiceVersion(String resultSetServiceVersion) {
		this.resultSetServiceVersion = resultSetServiceVersion;
	}

}
