package fr.openwide.core.jpa.security.business.person.dao; import java.util.List; import com.querydsl.core.types.dsl.BeanPath; import com.querydsl.core.types.dsl.PathBuilder; import com.querydsl.jpa.JPQLQuery; import com.querydsl.jpa.impl.JPAQuery; import fr.openwide.core.jpa.business.generic.dao.GenericEntityDaoImpl; import fr.openwide.core.jpa.security.business.person.model.GenericUser; import fr.openwide.core.jpa.security.business.person.model.QGenericUser; public abstract class GenericUserDaoImpl<U extends GenericUser<?, ?>> extends GenericEntityDaoImpl<Long, U> implements IGenericUserDao<U> { public GenericUserDaoImpl() { super(); } @Override public void save(U person) { super.save(person); flush(); } protected BeanPath<U> getEntityPath() { // obtention d'un mapper querydsl branché à l'implémentation concrète return new BeanPath<U>(getObjectClass(), QGenericUser.genericUser.getMetadata()); } @Override public List<String> listActiveUserNames() { QGenericUser qUser = new QGenericUser(getEntityPath()); JPQLQuery<String> query = new JPAQuery<String>(getEntityManager()); query.select(qUser.userName) .from(qUser) .where(qUser.active.isTrue()) .orderBy(qUser.userName.asc()); return query.fetch(); } @Override public Long countActive() { PathBuilder<U> qEntity = new PathBuilder<U>(getObjectClass(), "rootAlias"); QGenericUser qEntityAsGenericUser = new QGenericUser(qEntity); return countByField(qEntity, qEntityAsGenericUser.active, true); } @Override public U getByUserNameCaseInsensitive(String userName) { if (userName == null) { return null; } QGenericUser qUser = new QGenericUser(getEntityPath()); JPQLQuery<U> query = new JPAQuery<U>(getEntityManager()).from(qUser); query.where(qUser.userName.lower().eq(userName.toLowerCase())); return query.fetchOne(); } }