package eu.dnetlib.data.utility.cleaner;

import javax.xml.ws.wsaddressing.W3CEndpointReference;

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

import eu.dnetlib.data.utility.cleaner.rmi.CleanerException;
import eu.dnetlib.data.utility.cleaner.rmi.CleanerService;
import eu.dnetlib.enabling.resultset.MappedResultSetFactory;
import eu.dnetlib.enabling.tools.AbstractBaseService;
import eu.dnetlib.enabling.tools.ServiceResolver;

public class CleanerServiceImpl extends AbstractBaseService implements CleanerService {
	private CleanerFactory cleanerFactory;

	private MappedResultSetFactory mappedResultSetFactory;

	private ProviderConsumerFactory providerConsumerFactory;
	private ServiceResolver serviceResolver;

	public W3CEndpointReference clean(W3CEndpointReference epr, String ruleId) throws CleanerException {
		return cleanInContext(epr, ruleId, null);
	}

	public W3CEndpointReference cleanInContext(W3CEndpointReference epr, String ruleId, String context) throws CleanerException {
		if ((ruleId == null) || (ruleId.isEmpty()))
			throw new CleanerException("Invalid ruleId: id is empty");
		if (epr == null)
			throw new CleanerException("Passed epr is empty");

		return mappedResultSetFactory.createMappedResultSet(epr, cleanerFactory.createContextualizedCleaner(ruleId, context));
	}

	public CleanerFactory getCleanerFactory() {
		return cleanerFactory;
	}

	@Required
	public void setCleanerFactory(CleanerFactory cleanerFactory) {
		this.cleanerFactory = cleanerFactory;
	}

	public ProviderConsumerFactory getProviderConsumerFactory() {
		return providerConsumerFactory;
	}

	@Required
	public void setProviderConsumerFactory(ProviderConsumerFactory providerConsumerFactory) {
		this.providerConsumerFactory = providerConsumerFactory;
	}

	public ServiceResolver getServiceResolver() {
		return serviceResolver;
	}

	@Required
	public void setServiceResolver(ServiceResolver serviceResolver) {
		this.serviceResolver = serviceResolver;
	}

	public MappedResultSetFactory getMappedResultSetFactory() {
		return mappedResultSetFactory;
	}

	@Required
	public void setMappedResultSetFactory(MappedResultSetFactory mappedResultSetFactory) {
		this.mappedResultSetFactory = mappedResultSetFactory;
	}

}
