package eu.europeana.cloud.service.uis.persistent;
import eu.europeana.cloud.common.exceptions.ProviderDoesNotExistException;
import eu.europeana.cloud.common.model.DataProvider;
import eu.europeana.cloud.common.model.DataProviderProperties;
import eu.europeana.cloud.common.model.IdentifierErrorInfo;
import eu.europeana.cloud.common.response.ResultSlice;
import eu.europeana.cloud.service.uis.DataProviderService;
import eu.europeana.cloud.service.uis.exception.ProviderAlreadyExistsException;
import eu.europeana.cloud.service.uis.persistent.dao.CassandraDataProviderDAO;
import eu.europeana.cloud.service.uis.status.IdentifierErrorTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Data provider service using Cassandra as database.
*/
@Service
public class CassandraDataProviderService implements DataProviderService {
@Autowired
private CassandraDataProviderDAO dataProviderDao;
private static final Logger LOGGER = LoggerFactory.getLogger(CassandraDataProviderService.class);
@Override
public ResultSlice<DataProvider> getProviders(String thresholdProviderId, int limit) {
LOGGER.info("getProviders() thresholdProviderId='{}', limit='{}'", thresholdProviderId, limit);
String nextProvider = null;
List<DataProvider> providers = dataProviderDao.getProviders(thresholdProviderId, limit + 1);
final int providerSize = providers.size();
if (providerSize == limit + 1) {
nextProvider = providers.get(limit).getId();
providers.remove(limit);
}
LOGGER.info("getProviders() returning providers={} and nextProvider={} for thresholdProviderId='{}', limit='{}'",
providerSize, nextProvider, thresholdProviderId, limit);
return new ResultSlice<DataProvider>(nextProvider, providers);
}
@Override
public DataProvider getProvider(String providerId)
throws ProviderDoesNotExistException {
LOGGER.info("getProvider() providerId='{}'", providerId);
DataProvider dp = dataProviderDao.getProvider(providerId);
if (dp == null) {
LOGGER.warn("ProviderDoesNotExistException providerId='{}''", providerId);
throw new ProviderDoesNotExistException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getErrorInfo(providerId)));
} else {
return dp;
}
}
@Override
public DataProvider createProvider(String providerId, DataProviderProperties properties)
throws ProviderAlreadyExistsException {
LOGGER.info("createProvider() providerId='{}', properties='{}'", providerId, properties);
DataProvider dp = dataProviderDao.getProvider(providerId);
if (dp != null) {
LOGGER.warn("ProviderAlreadyExistsException providerId='{}', properties='{}'", providerId, properties);
throw new ProviderAlreadyExistsException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_ALREADY_EXISTS.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_ALREADY_EXISTS.getErrorInfo(providerId)));
}
return dataProviderDao.createDataProvider(providerId, properties);
}
@Override
public DataProvider updateProvider(String providerId, DataProviderProperties properties)
throws ProviderDoesNotExistException {
LOGGER.info("updateProvider() providerId='{}', properties='{}'", providerId, properties);
DataProvider dp = dataProviderDao.getProvider(providerId);
if (dp == null) {
LOGGER.warn("ProviderDoesNotExistException providerId='{}', properties='{}'", providerId, properties);
throw new ProviderDoesNotExistException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getErrorInfo(providerId)));
}else{
dp.setProperties(properties);
return dataProviderDao.updateDataProvider(dp);
}
}
@Override
public DataProvider updateProvider(DataProvider dataProvider) throws ProviderDoesNotExistException {
LOGGER.info("updating data provider providerId='{}', properties='{}'", dataProvider.getId(), dataProvider.getProperties());
DataProvider dp = dataProviderDao.getProvider(dataProvider.getId());
if (dp == null) {
LOGGER.warn("ProviderDoesNotExistException providerId='{}', properties='{}'", dataProvider.getId(), dataProvider.getProperties());
throw new ProviderDoesNotExistException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getErrorInfo(dataProvider.getId())));
}
return dataProviderDao.updateDataProvider(dataProvider);
}
@Override
public void deleteProvider(String providerId) throws ProviderDoesNotExistException {
LOGGER.info("Deleting provider {}", providerId);
DataProvider dp = dataProviderDao.getProvider(providerId);
if (dp == null) {
LOGGER.warn("ProviderDoesNotExistException providerId='{}'", providerId);
throw new ProviderDoesNotExistException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getErrorInfo(providerId)));
}
dataProviderDao.deleteProvider(providerId);
}
}