package fr.openwide.core.jpa.more.business.generic.service; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Locale; import javax.persistence.NonUniqueResultException; import com.querydsl.core.types.EntityPath; import fr.openwide.core.jpa.exception.ServiceException; import fr.openwide.core.jpa.more.business.generic.dao.IGenericLocalizedGenericListItemDao; import fr.openwide.core.jpa.more.business.generic.model.EnabledFilter; import fr.openwide.core.jpa.more.business.generic.model.GenericLocalizedGenericListItem; import fr.openwide.core.jpa.more.business.localization.model.AbstractLocalizedText; public abstract class GenericLocalizedGenericListItemServiceImpl<GE extends GenericLocalizedGenericListItem<?, T>, T extends AbstractLocalizedText> implements IGenericLocalizedGenericListItemService<GE, T> { private final IGenericLocalizedGenericListItemDao<GE, T> dao; public GenericLocalizedGenericListItemServiceImpl(IGenericLocalizedGenericListItemDao<GE, T> dao) { super(); this.dao = dao; } @Override public <E extends GE> E getById(Class<E> clazz, Long id) { return dao.getById(clazz, id); } protected <E extends GE> E getByNaturalId(Class<E> clazz, Object naturalId) { return dao.getByNaturalId(clazz, naturalId); } @Override public <E extends GE> void create(E entity) { dao.save(entity); } @Override public <E extends GE> void update(E entity) { dao.update(entity); } @Override public <E extends GE> void delete(E entity) { dao.delete(entity); } @Override public <E extends GE> List<E> list(Class<E> clazz, Comparator<? super E> comparator) { return dao.list(clazz, EnabledFilter.ALL, comparator); } @Override public <E extends GE> List<E> listEnabled(Class<E> clazz, Comparator<? super E> comparator) { return dao.list(clazz, EnabledFilter.ENABLED_ONLY, comparator); } @Override public <E extends GE> List<E> list(Class<E> clazz, EnabledFilter enabledFilter, Comparator<? super E> comparator) { return dao.list(clazz, enabledFilter, comparator); } @Override public <E extends GE> long count(Class<E> clazz) { return dao.count(clazz); } @Override public <E extends GE> long count(Class<E> clazz, EnabledFilter enabledFilter) { return dao.count(clazz, enabledFilter); } @Override public <E extends GE> List<E> listByLocalizedLabel(EntityPath<E> source, Locale locale, String label) { return dao.listByLocalizedLabel(source, locale, label); } @Override public <E extends GE> E getByLocalizedLabel(EntityPath<E> source, Locale locale, String label) { Collection<E> matches = listByLocalizedLabel(source, locale, label); if (matches.isEmpty()) { return null; } else if (matches.size() > 1) { throw new NonUniqueResultException("Plusieurs '" + source.getAnnotatedElement().getClass().getSimpleName() + "' ont un libellé identique"); } else { return matches.iterator().next(); } } @Override @Deprecated public <E extends GE> List<E> searchAutocomplete(String searchPattern, Class<E> clazz, Locale locale, int limit, int offset) throws ServiceException { return dao.searchAutocomplete(searchPattern, clazz, locale, limit, offset); } @Override public void flush() { dao.flush(); } @Override public void clear() { dao.clear(); } }