package br.com.ufrj.msi2.netuno.carga.servicos; import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Expression; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import br.com.ufrj.msi2.netuno.modelo.entidades.AgenteCarga; import br.com.ufrj.msi2.netuno.modelo.entidades.Carga; import br.com.ufrj.msi2.netuno.modelo.entidades.Conteiner; import br.com.ufrj.msi2.netuno.modelo.entidades.Navio; import br.com.ufrj.msi2.netuno.modelo.entidades.Porto; import br.com.ufrj.msi2.netuno.modelo.servicos.ConteinerService; @Stateless public class GerenciarConteinersServiceImpl implements GerenciarConteinersService { private static final long serialVersionUID = -1640096335992798113L; @EJB ConteinerService service; public ConteinerService getConteinerService() { return service; } @Override public List<Conteiner> listaConteinersDisponiveis(Carga carga,Porto porto) { List<Conteiner> resultList = new ArrayList<Conteiner>(); try { CriteriaBuilder builder = service.getCriteriaBuilder(); CriteriaQuery<Conteiner> criteria = builder.createQuery(Conteiner.class); Root<Conteiner> root = criteria.from(Conteiner.class); ArrayList<Predicate> predicados = new ArrayList<Predicate>(); Expression<String> exp = root.get("porto"); predicados.add(builder.equal(builder.lower(exp),porto.getId())); Expression<String> expQt = root.get("pesoDisponivel"); predicados.add(builder.notEqual(builder.lower(expQt),"0")); criteria.select(root).where(predicados.toArray(new Predicate[]{})); resultList = service.filtrar(criteria); } catch (Exception e) { // TODO: handle exception } return resultList; } @Override public Conteiner obterPorId(Integer id) { if(id!=null && id > 0) return this.service.obterPorId(id); else return null; } @Override public void criarNovoConteiner(Porto porto){ Conteiner novo = new Conteiner(); novo.setPorto(porto); novo.setPesoDisponivel((double)Conteiner.getPesomaximo()); service.salvarConteiner(novo); } @Override public void AtualizaPeso(Conteiner conteiner, double novoPeso) { conteiner = service.obterPorId(conteiner.getId()); conteiner.setPesoDisponivel(novoPeso < 0? 0 : novoPeso); service.salvarConteiner(conteiner); } @Override public List<Conteiner> recuperarTodos() { return service.recuperarTodos(); } @Override public List<Conteiner> recuperarConteinersPorNavio(Navio navio) { return service.recuperarConteinersPorNavio(navio); } public List<Conteiner> recuperarPorNavioPorAgenteParaDesembarque(Navio navio, AgenteCarga agente){ return service.recuperarPorNavioPorAgenteParaDesembarque(navio, agente); } @Override public void embarcarConteiner(Conteiner conteiner, Navio navio) { conteiner.setPorto(null); conteiner.setNavio(navio); service.atualizarConteiner(conteiner); } @Override public void desembarcarConteiner(Conteiner conteiner, Porto porto) { conteiner.setPorto(porto); conteiner.setNavio(null); service.atualizarConteiner(conteiner); } }