package org.cad.interruptus.repository.zookeeper; import java.lang.reflect.ParameterizedType; import java.util.List; import java.util.Map; import org.cad.interruptus.core.EntityNotFoundException; import org.cad.interruptus.entity.Entity; import org.cad.interruptus.repository.EntityRepository; abstract class AbstractConfigurationRepository<E extends Entity> implements EntityRepository<String, E> { final ConfigurationManager manager; final Class<E> targetClass; public AbstractConfigurationRepository(final ConfigurationManager manager) { this.manager = manager; this.targetClass = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } @Override public List<E> findAll() throws Exception { return manager.list(targetClass); } @Override public E findById(final String name) throws Exception { final Map<String, E> map = manager.map(targetClass); if ( ! map.containsKey(name)) { throw new EntityNotFoundException(targetClass, name); } return map.get(name); } @Override public void save(final E entity) throws Exception { manager.save(entity); manager.flush(); } @Override public void remove(final String name) throws Exception { manager.remove(targetClass, name); manager.flush(); } }