Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.edu.cesmac.sic.core.domain.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.hibernate.envers.AuditTable;
import org.hibernate.envers.Audited;
import org.hibernate.envers.RelationTargetAuditMode;

import br.edu.cesmac.core.interfaces.Alterar;
import br.edu.cesmac.core.interfaces.Cadastrar;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.sic.core.domain.model.dto.TopicoQuestaoDTO;
import br.edu.cesmac.sic.core.domain.model.tipo.TipoTopico;

@Audited
@AuditTable(value="sic_aud_resposta", schema="admsic001")
@Entity
@Table(name="sic_resposta", schema="admsic001")
public class Resposta implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private RespostaId respostaId = new RespostaId();
        private Questao questao;
        private Avaliacao avaliacao;
        private Double valorPontuacao;

        @EmbeddedId
        public RespostaId getRespostaId() {
                return respostaId;
        }
       
        public void setRespostaId(RespostaId respostaId) {
                this.respostaId = respostaId;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumn(name="seq_questao", referencedColumnName="seq_questao", nullable=false, insertable=false, updatable=false)
        public Questao getQuestao() {
                return questao;
        }
       
        public void setQuestao(Questao questao) {
                if (VerificadorUtil.naoEstaNulo(questao)) {
                        respostaId.setSequencialQuestao(questao.getSequencial());
                }
                this.questao = questao;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumns(value={
                @JoinColumn(name="seq_projeto_pesquisa", referencedColumnName="seq_projeto_pesquisa", nullable=false, insertable=false, updatable=false),
                @JoinColumn(name="seq_avaliador", referencedColumnName="seq_avaliador", nullable=false, insertable=false, updatable=false)
        })
        public Avaliacao getAvaliacao() {
                return avaliacao;
        }
       
        public void setAvaliacao(Avaliacao avaliacao) {
                if (VerificadorUtil.naoEstaNulo(avaliacao)) {
                        respostaId.setSequencialProjetoPesquisa(avaliacao.getSequencialDoProjetoPesquisa());
                        respostaId.setSequencialAvaliador(avaliacao.getSequencialDoAvaliador());
                }
                this.avaliacao = avaliacao;
        }
       
        @NotNull(message="Obrigatório informar a pontuação", groups={Cadastrar.class, Alterar.class})
        @Column(name="val_pontuacao", nullable=false)
        public Double getValorPontuacao() {
                return valorPontuacao;
        }
       
        public void setValorPontuacao(Double valorPontuacao) {
                this.valorPontuacao = valorPontuacao;
        }

        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((respostaId == null) ? 0 : respostaId.hashCode());
                return result;
        }

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                Resposta other = (Resposta) obj;
                if (respostaId == null) {
                        if (other.respostaId != null)
                                return false;
                } else if (!respostaId.equals(other.respostaId))
                        return false;
                return true;
        }
       
}