package br.gov.mj.sislegis.app.model.pautacomissao; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedNativeQueries; import javax.persistence.NamedNativeQuery; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.UniqueConstraint; import br.gov.mj.sislegis.app.enumerated.Origem; import br.gov.mj.sislegis.app.model.AbstractEntity; import br.gov.mj.sislegis.app.model.Usuario; import com.fasterxml.jackson.annotation.JsonIgnore; @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = { "comissao", "casa" })) //@formatter:off @NamedNativeQueries({ @NamedNativeQuery( name = "getAllAgendasSeguidas", query = "SELECT * " + "FROM AgendaComissao a where a.id in (select agendasseguidas_id from Usuario_Agendas)", resultClass=AgendaComissao.class ), @NamedNativeQuery( name = "getSeguidoresAgenda", query = "SELECT * " + "FROM Usuario a where a.id in (select usuario_id from Usuario_Agendas where agendasseguidas_id=:idAgenda)", resultClass=Usuario.class ) }) @NamedQueries({ @NamedQuery( name="getByCasaComissao", query= "SELECT ag FROM AgendaComissao ag where ag.comissao=:comissao and ag.casa=:casa" ) }) //@formatter:on public class AgendaComissao extends AbstractEntity { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id", updatable = false, nullable = false) private Long id; @Column @Temporal(TemporalType.DATE) private Date dataReferencia; @Column @Temporal(TemporalType.TIMESTAMP) private Date ultimaConsulta; @Column @Temporal(TemporalType.TIMESTAMP) private Date ultimaAtualizacao; public Date getUltimaAtualizacao() { return ultimaAtualizacao; } @Column private String comissao; @Column @Enumerated(EnumType.STRING) private Origem casa; @OneToMany(targetEntity = br.gov.mj.sislegis.app.model.pautacomissao.Sessao.class, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE }, orphanRemoval = true, mappedBy = "agenda") private Set<Sessao> sessoes = new HashSet<Sessao>(); @JsonIgnore public Set<Sessao> getSessoes() { return sessoes; } public Origem getCasa() { return casa; } public AgendaComissao() { } public AgendaComissao(Origem casa, String comissao, Date date) { this.casa = casa; this.comissao = comissao; this.dataReferencia = date; } @JsonIgnore public Long getId() { return id; } public Date getDataReferencia() { return dataReferencia; } public Date getUltimaConsulta() { return ultimaConsulta; } public String getComissao() { return comissao; } public void setConsultada() { ultimaConsulta = new Date(); } public void setPautasAtualizadas() { ultimaAtualizacao = new Date(); } public Sessao getSessao(String identificadorExterno) { if (sessoes != null) { for (Iterator<Sessao> iterator = sessoes.iterator(); iterator.hasNext();) { Sessao sessao = (Sessao) iterator.next(); if (identificadorExterno.equals(sessao.getIdentificadorExterno())) { return sessao; } } } return null; } public void addSessao(Sessao sessaoWS) { sessaoWS.setAgenda(this); sessoes.add(sessaoWS); } public void setDataReferencia(Date time) { dataReferencia = time; sessoes.clear(); } }