package eu.dnetlib.common.ws.subscription;

import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.ws.wsaddressing.W3CEndpointReference;

import org.apache.log4j.Logger;

import eu.dnetlib.common.utils.EprUtils;
import eu.dnetlib.common.ws.RegisterServiceJob;
import eu.dnetlib.enabling.is.sn.rmi.ISSNException;
import eu.dnetlib.enabling.is.sn.rmi.ISSNService;

public class AbstractSubscription {

	protected static final Logger log = Logger.getLogger(RegisterServiceJob.class);
	
	public static final String SUBSCR_ID_UNSPECIFIED = "UNSPECIFIED";
	
	protected ISSNService snService;
	protected String serviceHost;
	protected String serviceProfId;

	private List<String> topicList;

	public AbstractSubscription(ISSNService snService, 
			String serviceProfId, String serviceHost) {	
		this.setParameter(snService, serviceProfId, serviceHost);
	}
	
	public AbstractSubscription(){}
	
	public void setParameter(ISSNService snService, 
			String serviceProfId, String serviceHost){
		this.snService = snService;
		this.serviceProfId  = serviceProfId;
		this.serviceHost = serviceHost;		
	}
	
	public void initSubscriptions(){
		try {
			W3CEndpointReference W3CEPR = EprUtils.buildW3CEPR(this.serviceHost,
					this.serviceHost+"?wsdl");
			for (String topic: this.topicList){
				String subscrId;
				try {
					subscrId = snService.subscribe(W3CEPR, topic,
							NotificationConstants.TERMINATION_TIME_INFINITE);
					log.debug("subscribed to " + topic + " with subscrId:" + subscrId);				
				} catch (ISSNException e) {
					log.error("couldn't subscribe with topic " + topic, e);
				}
			}
		} catch (ParserConfigurationException e){
			log.error("Problem during creating W3CEPR ", e);
		}		
	}

	public void setTopicList(List<String> topicList) {
		this.topicList = topicList;
	}

	public List<String> getTopicList() {
		return topicList;
	}

}
