marcelofoxes

Estados.java

May 20th, 2016
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.81 KB | None | 0 0
  1. /**
  2.  *
  3.  */
  4. package com.zxsheart.pedidovenda.repository;
  5.  
  6. import java.io.Serializable;
  7. import java.util.HashSet;
  8. import java.util.LinkedList;
  9. import java.util.List;
  10. import java.util.Set;
  11.  
  12. import javax.inject.Inject;
  13. import javax.persistence.EntityManager;
  14. import javax.persistence.TypedQuery;
  15. import javax.persistence.criteria.CriteriaBuilder;
  16. import javax.persistence.criteria.CriteriaQuery;
  17. import javax.persistence.criteria.Expression;
  18. import javax.persistence.criteria.Path;
  19. import javax.persistence.criteria.Predicate;
  20. import javax.persistence.criteria.Root;
  21. import javax.persistence.metamodel.EntityType;
  22. import javax.persistence.metamodel.Metamodel;
  23. import javax.persistence.metamodel.SingularAttribute;
  24.  
  25. import org.apache.commons.lang3.StringUtils;
  26.  
  27. import com.zxsheart.pedidovenda.model.endereco.Estado;
  28. import com.zxsheart.pedidovenda.repository.filter.EstadoFilter;
  29.  
  30. /**
  31.  * Repositório de estados.
  32.  *
  33.  * @author Marcelo Paixao Resende
  34.  *
  35.  */
  36. public class Estados implements Serializable {
  37.     private static final long serialVersionUID = 9157858269113943535L;
  38.  
  39.     private @Inject EntityManager manager;
  40.  
  41.     public Set<Estado> todos() {
  42.         List<Estado> list = manager.createQuery("from Estado").getResultList();
  43.         return new HashSet<>(list);
  44.     }
  45.  
  46.     public Estado porCodigo(Long codigo) {
  47.         return manager.find(Estado.class, codigo);
  48.     }
  49.  
  50.     public Set<Estado> filtrados(EstadoFilter filter) {
  51.         // criteriaBuilder
  52.         CriteriaBuilder cb = manager.getCriteriaBuilder();
  53.  
  54.         // metamodel
  55.         Metamodel metamodel = manager.getMetamodel();
  56.  
  57.         // entity model
  58.         EntityType<Estado> type = metamodel.entity(Estado.class);
  59.  
  60.         // criteriaQuery
  61.         CriteriaQuery<Estado> cq = cb.createQuery(Estado.class);
  62.  
  63.         // root
  64.         Root<Estado> root = cq.from(Estado.class);
  65.        
  66.         List<Predicate> predicates = new LinkedList<>();
  67.        
  68.         if ( StringUtils.isNotBlank( filter.getSigla() ) ) {
  69.             SingularAttribute<Estado, String> attr = type.getDeclaredSingularAttribute("sigla", String.class);
  70.             Path<String> path = root.get(attr);
  71.             Predicate siglaPredicate = cb.equal(path, filter.getSigla());
  72.             predicates.add(siglaPredicate);
  73.         }
  74.        
  75.         if ( StringUtils.isNotBlank( filter.getNome() ) ) {
  76.             SingularAttribute<Estado, String> attr = type.getDeclaredSingularAttribute("nome", String.class);
  77.             Expression<String> lowerCaseNome = cb.lower( root.get(attr) ); 
  78.            
  79.             String likeMatchString = String.format("%s%%", filter.getNome().toLowerCase());
  80.            
  81.             Predicate siglaPredicate = cb.like(lowerCaseNome, likeMatchString);
  82.             predicates.add(siglaPredicate);
  83.         }
  84.        
  85.         // adiciona predicates
  86.         cq.where( predicates.toArray(new Predicate[] {}) );
  87.        
  88.         // return query
  89.         TypedQuery<Estado> query = manager.createQuery(cq);
  90.         List<Estado> resultList = query.getResultList();
  91.         return new HashSet<>( resultList );
  92.     }
  93.  
  94. }
Add Comment
Please, Sign In to add comment