package br.gov.mj.sislegis.app.model; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.xml.bind.annotation.XmlRootElement; import br.gov.mj.sislegis.app.enumerated.TipoTarefa; @Entity @Table(name = "tarefa") @XmlRootElement public class Tarefa extends AbstractEntity { public static Tarefa createTarefaEncaminhamento(Usuario usuario, EncaminhamentoProposicao encaminhamento) { Tarefa tarefa = new Tarefa(TipoTarefa.ENCAMINHAMENTO, usuario); tarefa.encaminhamentoProposicao = encaminhamento; return tarefa; } private static final long serialVersionUID = -806063711060116952L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id", updatable = false, nullable = false) private Long id; @Column(name = "data") @Temporal(TemporalType.TIMESTAMP) private Date data; @Column @Enumerated(EnumType.ORDINAL) private TipoTarefa tipoTarefa; @Column private boolean isFinalizada; @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE) private EncaminhamentoProposicao encaminhamentoProposicao; @ManyToOne(fetch = FetchType.EAGER) private Usuario usuario; @Transient private Proposicao proposicao; Tarefa() { } @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private Comentario comentarioFinalizacao; Tarefa(TipoTarefa tipo, Usuario user) { this.tipoTarefa = tipo; this.usuario = user; this.data = new Date(); } public Long getId() { return this.id; } public void setId(final Long id) { this.id = id; } public Date getData() { return data; } public void setData(Date data) { this.data = data; } public TipoTarefa getTipoTarefa() { return tipoTarefa; } public void setTipoTarefa(TipoTarefa tipoTarefa) { this.tipoTarefa = tipoTarefa; } public boolean isFinalizada() { return isFinalizada; } public void setFinalizada(boolean isFinalizada) { this.isFinalizada = isFinalizada; } public Usuario getUsuario() { return usuario; } public void setUsuario(Usuario usuario) { this.usuario = usuario; } public Proposicao getProposicao() { return proposicao; } public void setProposicao(Proposicao proposicao) { this.proposicao = proposicao; } public EncaminhamentoProposicao getEncaminhamentoProposicao() { if (!TipoTarefa.ENCAMINHAMENTO.equals(tipoTarefa)) { throw new IllegalArgumentException("Esta tarefa nao foi criada a partir de um encaminhamento"); } return encaminhamentoProposicao; } public void setEncaminhamentoProposicao(EncaminhamentoProposicao ent) { encaminhamentoProposicao = ent; } public Comentario getComentarioFinalizacao() { return comentarioFinalizacao; } public void setComentarioFinalizacao(Comentario comentarioFinalizacao) { this.comentarioFinalizacao = comentarioFinalizacao; } }