package eu.dnetlib.clients.data.espas;

import eu.dnetlib.api.data.espas.DataProviderService;
import eu.dnetlib.api.data.espas.DataProviderServiceException;
import eu.dnetlib.clients.ws.BaseDriverWebService;
import eu.dnetlib.domain.data.espas.HarvestHistory;
import eu.dnetlib.domain.data.espas.HarvestSchedule;

import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * Created by antleb on 6/23/14.
 */
public class DataProviderWebServiceImpl extends BaseDriverWebService<DataProviderService> implements DataProviderWebService {


	@Override
	public void harvest(List<String> types, Date dateFrom, Date dateTo, String dataProviderId) throws DataProviderWebServiceException {
		try {
			this.service.harvest(types, dateFrom, dateTo, dataProviderId);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public String scheduleHarvest(List<String> types, Date initialModificationDate, String dataProviderId, String cronExpression) throws DataProviderWebServiceException {
		try {
			return this.service.scheduleHarvest(types, initialModificationDate, dataProviderId, cronExpression);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public void updateHarvestSchedule(String scheduleId, List<String> types, String dataProviderId, String cronExpression) throws DataProviderWebServiceException {
		try {
			this.service.updateHarvestSchedule(scheduleId, types, dataProviderId, cronExpression);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public void cancelHarvestSchedule(String scheduleId) throws DataProviderWebServiceException {
		try {
			this.service.cancelHarvestSchedule(scheduleId);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public void pauseHarvestSchedule(String scheduleId) throws DataProviderWebServiceException {
		try {
			this.service.pauseHarvestSchedule(scheduleId);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public void resumeHarvestSchedule(String scheduleId) throws DataProviderWebServiceException {
		try {
			this.service.resumeHarvestScedule(scheduleId);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public List<HarvestSchedule> getHarvestSchedules(String dataProviderId) throws DataProviderWebServiceException {
		try {
			List<HarvestSchedule> res = this.service.getHarvestSchedules(dataProviderId);

			if (res == null)
				res = Collections.EMPTY_LIST;

			return res;
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public List<HarvestHistory> getHarvestHistory(String dataProviderId) throws DataProviderWebServiceException {
		try {
			List<HarvestHistory> res = this.service.getHarvestHistory(dataProviderId);

			if (res == null)
				res = Collections.EMPTY_LIST;
			return res;
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public void deleteHarvestHistory(String dataProviderId, Date from, Date to) throws DataProviderWebServiceException {
		try {
			this.service.deleteHarvestHistory(dataProviderId, from, to);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}

	@Override
	public void deleteHarvestHistory(List<String> harvestIds) throws DataProviderWebServiceException {
		try {
			this.service.deleteHarvestHistory(harvestIds);
		} catch (DataProviderServiceException e) {
			throw new DataProviderWebServiceException(e);
		}
	}
}
