package ch.alv.components.service.mock;
import ch.alv.components.core.beans.Identifiable;
import ch.alv.components.core.search.ValuesProvider;
import ch.alv.components.data.DataLayerException;
import ch.alv.components.data.repository.Repository;
import java.util.*;
/**
* Mock implementation of the {@link Repository} interfce.
*
* @since 1.0.0
*/
public class MockRepository<TYPE extends Identifiable<String>> implements Repository<TYPE, String> {
private final Map<Class, Map> inMemoryData = new HashMap<>();
public MockRepository() {
initData();
}
private void initData() {
Map<String, MockModelItem> itemMap = new HashMap<>();
inMemoryData.put(MockModelItem.class, itemMap);
for (int i = 0; i < 50; i++) {
MockModelItem item = new MockModelItem(UUID.randomUUID().toString(), 0, "testItem " + i);
itemMap.put(item.getId(), item);
}
}
@Override
public TYPE save(TYPE entity, Class<TYPE> entityClass) throws DataLayerException {
Map classMap = new HashMap();
if (inMemoryData.containsKey(entityClass)) {
classMap = inMemoryData.get(entityClass);
}
if (entity.getId() == null) {
entity.setId(UUID.randomUUID().toString());
}
classMap.put(entity.getId(), entity);
return entity;
}
@Override
public List<TYPE> save(Collection<TYPE> entities, Class<TYPE> entityClass) throws DataLayerException {
List<TYPE> persistedEntities = new ArrayList<>();
for (TYPE entity : entities) {
persistedEntities.add(save(entity, entityClass));
}
return persistedEntities;
}
@Override
public TYPE find(String id, Class<TYPE> entityClass) throws DataLayerException {
if (!inMemoryData.containsKey(entityClass)) {
return null;
}
return (TYPE) inMemoryData.get(entityClass).get(id);
}
@Override
public List<TYPE> find(String searchName, ValuesProvider params, Class<TYPE> entityClass) throws DataLayerException {
return new ArrayList<>();
}
@Override
public List<TYPE> find(Class<TYPE> entityClass) throws DataLayerException {
if (!inMemoryData.containsKey(entityClass)) {
return new ArrayList<>();
}
List<TYPE> entities = new ArrayList<>();
Map<String, TYPE> map = inMemoryData.get(entityClass);
for (String key : map.keySet()) {
entities.add(map.get(key));
}
return entities;
}
@Override
public List<TYPE> find(Collection<String> ids, Class<TYPE> entityClass) throws DataLayerException {
List<TYPE> entities = new ArrayList<>();
for (String id : ids) {
entities.add(find(id, entityClass));
}
return entities;
}
@Override
public void delete(String id, Class<TYPE> entityClass) throws DataLayerException {
if (!inMemoryData.containsKey(entityClass)) {
return;
}
inMemoryData.get(entityClass).remove(id);
}
@Override
public void delete(Collection<String> ids, Class<TYPE> entityClass) throws DataLayerException {
if (!inMemoryData.containsKey(entityClass)) {
return;
}
for (String id : ids) {
delete(id, entityClass);
}
}
}