package br.usp.nds.remote.persistencia; import java.io.Serializable; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; @Entity public class Aquisicao extends Entidade implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int codigo; @Temporal(TemporalType.TIMESTAMP) private Date instante; @Temporal(TemporalType.TIMESTAMP) private Date instanteTransmissao; @Temporal(TemporalType.TIMESTAMP) private Date instanteProcessamento; @Column(precision = 10, scale = 8) private BigDecimal latitude; @Column(precision = 10, scale = 8) private BigDecimal longitude; @Transient private String filtroRotas; @Transient private String codigosEmbarcacoes; public static void main(String[] args) { String[] as = "12321321a".split("[a]"); System.out.println(as[0] + "---" + as[1]); } public List listarUltimas() { List result = new LinkedList(); for (Embarcacao embarcacao : (List)em.createQuery("SELECT e FROM Embarcacao e" + (codigosEmbarcacoes != null && !codigosEmbarcacoes.isEmpty() ? " WHERE e.codigo IN (" + codigosEmbarcacoes + ")" : "")).getResultList()) { List aqs = em.createQuery("SELECT a FROM Aquisicao a WHERE a.instante = (SELECT MAX(l.aquisicao.instante) FROM Leitura l WHERE l.sensor.embarcacao.codigo = " + embarcacao.getCodigo() + ")").getResultList(); if (!aqs.isEmpty()) { Map map = new HashMap(); map.put("latitude", aqs.get(0).getLatitude().toString()); map.put("longitude", aqs.get(0).getLongitude().toString()); map.put("embarcacao", embarcacao.getCodigo()); map.put("nome", embarcacao.getNome()); map.put("data", new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(aqs.get(0).getInstante())); result.add(map); } } return result; } public List listarRotas() { List result = new LinkedList(); if (codigosEmbarcacoes == null || codigosEmbarcacoes.isEmpty()) { codigosEmbarcacoes = "0"; } for (Embarcacao embarcacao : (List)em.createQuery("SELECT e FROM Embarcacao e WHERE e.codigo IN (" + codigosEmbarcacoes + ")").getResultList()) { Map map = new HashMap(); map.put("embarcacao", embarcacao.getCodigo()); String where = ""; if (filtroRotas != null && !filtroRotas.isEmpty()) { if ("dia".equals(filtroRotas)) { filtroRotas = " AND YEAR(a.instante) = YEAR(CURRENT_DATE) AND MONTH(a.instante) = MONTH(CURRENT_DATE) AND DAY(a.instante) = DAY(CURRENT_DATE)"; } else if ("mes".equals(filtroRotas)) { filtroRotas = " AND YEAR(a.instante) = YEAR(CURRENT_DATE) AND MONTH(a.instante) = MONTH(CURRENT_DATE)"; } else if (filtroRotas != null && filtroRotas.contains("a")) { String[] datas = filtroRotas.split("[a]"); filtroRotas = ""; if (datas.length > 0 && !datas[0].isEmpty()) { filtroRotas += " AND YEAR(a.instante) * 10000 + MONTH(a.instante) * 100 + DAY(a.instante) >= " + datas[0].substring(6, 10) + datas[0].substring(3, 5) + datas[0].substring(0, 2); } if (datas.length > 1 && !datas[1].isEmpty()) { filtroRotas += " AND YEAR(a.instante) * 10000 + MONTH(a.instante) * 100 + DAY(a.instante) <= " + datas[1].substring(6, 10) + datas[1].substring(3, 5) + datas[1].substring(0, 2); } } else { // TODO } where = filtroRotas; } List aqs = em.createQuery("SELECT a FROM Aquisicao a WHERE a.codigo IN (SELECT l.aquisicao.codigo FROM Leitura l WHERE l.sensor.embarcacao.codigo = " + embarcacao.getCodigo() + ")" + where + " ORDER BY a.instante").getResultList(); List pontos = new LinkedList(); for (Aquisicao aq : aqs) { Map map2 = new HashMap(); map2.put("latitude", aq.getLatitude().toString()); map2.put("longitude", aq.getLongitude().toString()); pontos.add(map2); } map.put("pontos", pontos); result.add(map); } return result; } public Aquisicao() { } public Aquisicao(Date instante, Date instanteTransmissao, Date instanteProcessamento, BigDecimal latitude, BigDecimal longitude) { super(); this.instante = instante; this.instanteTransmissao = instanteTransmissao; this.instanteProcessamento = instanteProcessamento; this.latitude = latitude; this.longitude = longitude; } public Date getInstanteTransmissao() { return instanteTransmissao; } public void setInstanteTransmissao(Date instanteTransmissao) { this.instanteTransmissao = instanteTransmissao; } public Date getInstanteProcessamento() { return instanteProcessamento; } public void setInstanteProcessamento(Date instanteProcessamento) { this.instanteProcessamento = instanteProcessamento; } public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } public Date getInstante() { return instante; } public void setInstante(Date instante) { this.instante = instante; } public BigDecimal getLatitude() { return latitude; } public void setLatitude(BigDecimal latitude) { this.latitude = latitude; } public BigDecimal getLongitude() { return longitude; } public void setLongitude(BigDecimal longitude) { this.longitude = longitude; } public String getFiltroRotas() { return filtroRotas; } public void setFiltroRotas(String filtroRotas) { this.filtroRotas = filtroRotas; } public String getCodigosEmbarcacoes() { return codigosEmbarcacoes; } public void setCodigosEmbarcacoes(String codigosEmbarcacoes) { this.codigosEmbarcacoes = codigosEmbarcacoes; } }