marcelofoxes

Cidades.java

May 20th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.87 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.Cidade;
  28. import com.zxsheart.pedidovenda.model.endereco.Estado;
  29. import com.zxsheart.pedidovenda.repository.filter.CidadeFilter;
  30.  
  31. /**
  32.  * Repositório de cidades.
  33.  *
  34.  * @author Marcelo Paixao Resende
  35.  *
  36.  */
  37. public class Cidades implements Serializable {
  38.     private static final long serialVersionUID = 9157858269113943535L;
  39.  
  40.     private @Inject EntityManager manager;
  41.  
  42.     public Set<Cidade> todos() {
  43.         List<Cidade> list = manager.createQuery("from Cidade").getResultList();
  44.         return new HashSet<>(list);
  45.     }
  46.  
  47.     public Cidade porCodigo(Integer codigo) {
  48.         return manager.find(Cidade.class, codigo);
  49.     }
  50.  
  51.     public Set<Cidade> filtrados(CidadeFilter filter) {
  52.         // criteriaBuilder
  53.         CriteriaBuilder cb = manager.getCriteriaBuilder();
  54.  
  55.         // metamodel
  56.         Metamodel metamodel = manager.getMetamodel();
  57.  
  58.         // entity model
  59.         EntityType<Cidade> type = metamodel.entity(Cidade.class);
  60.  
  61.         // criteriaQuery
  62.         CriteriaQuery<Cidade> cq = cb.createQuery(Cidade.class);
  63.  
  64.         // root
  65.         Root<Cidade> root = cq.from(Cidade.class);
  66.        
  67.         List<Predicate> predicates = new LinkedList<>();
  68.        
  69.         if ( StringUtils.isNotBlank( filter.getNome() ) ) {
  70.             SingularAttribute<Cidade, String> attr = type.getDeclaredSingularAttribute("nome", String.class);
  71.             Expression<String> lowerCaseNome = cb.lower( root.get(attr) ); 
  72.            
  73.             String likeMatchString = String.format("%s%%", filter.getNome().toLowerCase());
  74.            
  75.             Predicate siglaPredicate = cb.like(lowerCaseNome, likeMatchString);
  76.             predicates.add(siglaPredicate);
  77.         }
  78.        
  79.         if ( filter.getEstado() != null ) {
  80.             SingularAttribute<Cidade, Estado> attr = type.getDeclaredSingularAttribute("estado", Estado.class);
  81.             Path<Estado> estadoPath = root.get(attr);
  82.            
  83.             Predicate estadoPredicate = cb.equal(estadoPath, filter.getEstado());
  84.             predicates.add(estadoPredicate);
  85.         }
  86.        
  87.         // adiciona predicates
  88.         cq.where( predicates.toArray(new Predicate[] {}) );
  89.        
  90.         // return query
  91.         TypedQuery<Cidade> query = manager.createQuery(cq);
  92.         List<Cidade> resultList = query.getResultList();
  93.         return new HashSet<>( resultList );
  94.     }
  95.  
  96. }
Add Comment
Please, Sign In to add comment