package eu.europeana.cloud.service.uis.dao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
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.service.uis.exception.ProviderAlreadyExistsException;
import eu.europeana.cloud.service.uis.status.IdentifierErrorTemplate;
/**
* InMemoryDataProviderDAO
*/
@Repository
public class InMemoryDataProviderDAO {
private Map<String, DataProvider> providers = new HashMap<>();
/**
* Get a predefined number of providers
* @param limit The number of providers to retrieve
* @return A List of data providers
*/
public List<DataProvider> getProviders(int limit) {
Collection<DataProvider> providerList = providers.values();
return new ArrayList<>(providerList).subList(0, Math.min(limit, providerList.size()));
}
/**
* Get a data provider with the selected id
* @param id The id to search for
* @return The data provider with the provided id
* @throws ProviderDoesNotExistException
*/
public DataProvider getProvider(String id) throws ProviderDoesNotExistException {
DataProvider provider = providers.get(id);
if (provider == null) {
throw new ProviderDoesNotExistException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getErrorInfo(id)));
}
return provider;
}
/**
* Create a new data provider
* @param providerId The data provider Id
* @param properties The properties of the data provider
* @return The newly created Data Provider
* @throws ProviderAlreadyExistsException
*/
public DataProvider createProvider(String providerId, DataProviderProperties properties)
throws ProviderAlreadyExistsException {
if (providers.containsKey(providerId)) {
throw new ProviderAlreadyExistsException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_ALREADY_EXISTS.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_ALREADY_EXISTS.getErrorInfo(providerId)));
}
DataProvider provider = new DataProvider();
provider.setId(providerId);
provider.setProperties(properties);
providers.put(providerId, provider);
return provider;
}
/**
* Update a data provider
* @param providerId The provider Id to search for
* @param properties The properties of the data provider to update
* @return The updated data provider
* @throws ProviderDoesNotExistException
*/
public DataProvider updateProvider(String providerId, DataProviderProperties properties)
throws ProviderDoesNotExistException {
DataProvider dp = providers.get(providerId);
if (dp == null) {
throw new ProviderDoesNotExistException(new IdentifierErrorInfo(
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getHttpCode(),
IdentifierErrorTemplate.PROVIDER_DOES_NOT_EXIST.getErrorInfo(providerId)));
}
dp.setProperties(properties);
return dp;
}
}