package br.usp.nds.agualastro.persistencia; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import br.usp.nds.agualastro.modelo.Leitura; public class PersistenciaFacade { public static void main(String[] args) { new PersistenciaFacade().inicializar(); } public List listarSensoresPorNavio(String emailNavio) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); Navio navio = em.find(Navio.class, emailNavio); List codigos = new LinkedList(); codigos.add(navio.getCodigoSensor1()); codigos.add(navio.getCodigoSensor2()); codigos.add(navio.getCodigoSensor3()); codigos.add(navio.getCodigoSensor4()); codigos.add(navio.getCodigoSensor5()); codigos.add(navio.getCodigoSensor6()); codigos.add(navio.getCodigoSensor7()); codigos.add(navio.getCodigoSensor8()); @SuppressWarnings("unchecked") List sensores = em.createQuery("SELECT s FROM Sensor s WHERE s.codigo IN :sensores ORDER BY s.codigo").setParameter("sensores", codigos).getResultList(); em.close(); emf.close(); return sensores; } public List listarSensores() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); @SuppressWarnings("unchecked") List sensores = em.createQuery("SELECT s FROM Sensor s ORDER BY s.codigo").getResultList(); em.close(); emf.close(); return sensores; } public List listarAquisicoes(String emailNavio, Date inicio, Date fim) throws Exception { if (inicio == null) { inicio = new SimpleDateFormat("yyyyMMdd").parse("19000101"); } if (fim == null) { fim = new SimpleDateFormat("yyyyMMdd").parse("21001231"); } if (emailNavio != null && emailNavio.isEmpty()) { emailNavio = null; } EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); List aquisicoes = em.createQuery("SELECT a FROM Aquisicao a WHERE (:navio IS NULL OR a.navio.email = :navio) AND a.instante >= :inicio AND a.instante <= :fim ORDER BY a.instante") .setParameter("navio", emailNavio).setParameter("inicio", inicio).setParameter("fim", fim).getResultList(); em.close(); emf.close(); return aquisicoes; } public List listarNavios() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); @SuppressWarnings("unchecked") List navios = em.createQuery("SELECT n FROM Navio n ORDER BY n.nome").getResultList(); em.close(); emf.close(); return navios; } public List listarLeiturasPorAquisicao(Date instante) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); @SuppressWarnings("unchecked") List leituras = em.createQuery("SELECT l FROM LeituraSensor l WHERE l.aquisicao.instante = :instante ORDER BY l.sensor.codigo").setParameter("instante", instante).getResultList(); for (LeituraSensor leitura : leituras) { leitura.setValorConvertido(new Leitura().carregar(leitura).getValor()); } em.close(); emf.close(); return leituras; } public List listarLeituras(int sensor, Date inicio, Date fim, String navio) throws Exception { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); if (inicio == null) { inicio = new SimpleDateFormat("yyyyMMdd").parse("19000101"); } if (fim == null) { fim = new SimpleDateFormat("yyyyMMdd").parse("21001231"); } @SuppressWarnings("unchecked") List leituras = em.createQuery("SELECT l FROM LeituraSensor l WHERE l.sensor.codigo = :sensor AND (l.aquisicao.instante >= :inicio) AND (l.aquisicao.instante <= :fim) AND l.aquisicao.navio.email = :navio ORDER BY l.aquisicao.instante"). setParameter("sensor", sensor).setParameter("inicio", inicio).setParameter("fim", fim).setParameter("navio", navio).getResultList(); em.close(); emf.close(); return leituras; } public List listarLeituras(Date inicio, Date fim, String navio) throws Exception { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); if (inicio == null) { inicio = new SimpleDateFormat("yyyyMMdd").parse("19000101"); } if (fim == null) { fim = new SimpleDateFormat("yyyyMMdd").parse("21001231"); } @SuppressWarnings("unchecked") List leituras = em.createQuery("SELECT l FROM LeituraSensor l WHERE (l.aquisicao.instante >= :inicio) AND (l.aquisicao.instante <= :fim) AND l.aquisicao.navio.email = :navio ORDER BY l.aquisicao.instante, l.sensor.codigo"). setParameter("inicio", inicio).setParameter("fim", fim).setParameter("navio", navio).getResultList(); em.close(); emf.close(); return leituras; } public void inicializar() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.createQuery("DELETE FROM LeituraSensor s").executeUpdate(); em.createQuery("DELETE FROM Sensor s").executeUpdate(); em.createQuery("DELETE FROM Aquisicao s").executeUpdate(); em.getTransaction().commit(); em.getTransaction().begin(); em.persist(new Sensor(1, "Temperatura", "C", 0.001626f, -50)); em.persist(new Sensor(2, "Pressão Atmosférica", "mB", 0.004883f, 800)); em.persist(new Sensor(3, "Condutividade", "uS", 0.6416f, 0)); em.persist(new Sensor(4, "Oxigênio Dissolvido", "%", 0.001617f, 0)); em.persist(new Sensor(5, "Turbidez", "NTU", 0.0007629f, 0)); em.persist(new Sensor(6, "pH", "", 0.0002261f, 0)); em.persist(new Sensor(7, "", "", 0, 0)); em.persist(new Sensor(8, "", "", 0, 0)); em.getTransaction().commit(); em.close(); emf.close(); } public void registrar(Date instante, float latitude, float longitude, int[] sensores, String emailNavio) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("agua-lastro"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Navio navio = null; List ns = em.createQuery("SELECT n FROM Navio n").getResultList(); System.out.println("emailNavio = -----" + emailNavio + "-----"); for (Navio n : ns) { if (n.getEmail().contains(emailNavio)) { navio = n; break; } } if (navio != null) { Aquisicao aquisicao = new Aquisicao(instante, latitude, longitude, navio); em.persist(aquisicao); if (navio.getCodigoSensor1() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor1()), aquisicao, sensores[0])); } if (navio.getCodigoSensor2() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor2()), aquisicao, sensores[1])); } if (navio.getCodigoSensor3() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor3()), aquisicao, sensores[2])); } if (navio.getCodigoSensor4() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor4()), aquisicao, sensores[3])); } if (navio.getCodigoSensor5() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor5()), aquisicao, sensores[4])); } if (navio.getCodigoSensor6() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor6()), aquisicao, sensores[5])); } if (navio.getCodigoSensor7() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor7()), aquisicao, sensores[6])); } if (navio.getCodigoSensor8() != 0) { em.persist(new LeituraSensor(em.find(Sensor.class, navio.getCodigoSensor8()), aquisicao, sensores[7])); } } em.getTransaction().commit(); em.close(); emf.close(); } }