package ch.alv.components.data.mock; import ch.alv.components.core.beans.ModelItem; import java.io.Serializable; import java.util.*; /** * In memory implementation of a data store. * * @since 1.0.0 */ public class MockModelItemDataStore<TYPE extends ModelItem, ID extends Serializable> { private Map<String, TYPE> entitiesMap = new HashMap<>(); private List<TYPE> entitiesList = new ArrayList<>(); private UUIDFactory idFactory = new UUIDFactory(); public MockModelItemDataStore() { } public MockModelItemDataStore(Map<String, TYPE> entitiesMap) { this.entitiesMap = entitiesMap; } public TYPE findOne(String id) { for (String key : entitiesMap.keySet()) { if (key.equals(id)) { return entitiesMap.get(id); } } return null; } public Iterable<TYPE> findAll() { return entitiesList; } @SuppressWarnings("unchecked") public <S extends TYPE> S save(S entity) { if (entity.getId() == null) { entity.setId(idFactory.newId()); } entitiesMap.put(entity.getId(), entity); refreshEntitiesListFromMap(); return entity; } public long count() { return entitiesMap.size(); } public void delete(ID id) { if (id == null) { return; } entitiesMap.remove(id); refreshEntitiesListFromMap(); } private void refreshEntitiesListFromMap() { entitiesList.clear(); for (String key : entitiesMap.keySet()) { entitiesList.add(entitiesMap.get(key)); } } public Map<String, TYPE> getEntitiesMap() { return entitiesMap; } public void setEntitiesMap(Map<String, TYPE> entitiesMap) { this.entitiesMap.clear(); if (entitiesMap == null) { return; } this.entitiesMap = entitiesMap; refreshEntitiesListFromMap(); } public UUIDFactory getIdFactory() { return idFactory; } public void setIdFactory(UUIDFactory idFactory) { this.idFactory = idFactory; } public class UUIDFactory implements IdFactory { @Override public String newId() { return UUID.randomUUID().toString(); } } public interface IdFactory { Object newId(); } }