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;

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

	private MappedResultSetFactory mappedResultSetFactory;

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

	@Override
	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 MappedResultSetFactory getMappedResultSetFactory() {
		return mappedResultSetFactory;
	}

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

}
