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.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import org.hibernate.envers.AuditTable;
import org.hibernate.envers.Audited;
import org.hibernate.envers.RelationTargetAuditMode;
import org.hibernate.validator.constraints.NotEmpty;

import br.edu.cesmac.core.interfaces.Alterar;
import br.edu.cesmac.core.interfaces.Cadastrar;
import br.edu.cesmac.core.util.StringUtil;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.sac.shared.views.CursoView;
import br.edu.cesmac.sca.shared.views.UsuarioView;
import br.edu.cesmac.sic.core.domain.model.tipo.TipoDocumentoProjeto;
import br.edu.cesmac.sic.core.domain.model.tipo.TipoSituacaoInscricao;

@Audited
@AuditTable(value="sic_aud_projeto_pesquisa", schema="admsic001")
@Entity
@Table(name="sic_projeto_pesquisa", schema="admsic001")
public class ProjetoPesquisa implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private Long sequencial;
        private ProcessoSeletivo processoSeletivo;
        private String titulo;
        private CursoView curso;
        private Area area;
        private Set<ProjetoPesquisaAluno> discentes = new HashSet<ProjetoPesquisaAluno>();
        private Set<ProjetoPesquisaOrientador> orientadores = new HashSet<ProjetoPesquisaOrientador>();
        private Set<ProjetoPesquisaAvaliador> avaliadores = new HashSet<ProjetoPesquisaAvaliador>();
        private Set<ArquivoProjeto> arquivos = new HashSet<ArquivoProjeto>();
        private String emailContato;
        private String observacao;
        private String tipoSituacaoInscricao;
        private Boolean indicadorProjetoCienciaTecnologia;
        private Boolean indicadorAprovado;
       
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Column(name="seq_projeto_pesquisa", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
       
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @NotNull(message="Obrigatório informar o processo seletivo", groups={Cadastrar.class, Alterar.class})
        @JoinColumn(name="seq_processo_seletivo", referencedColumnName="seq_processo_seletivo", nullable=false)
        public ProcessoSeletivo getProcessoSeletivo() {
                return processoSeletivo;
        }
       
        public void setProcessoSeletivo(ProcessoSeletivo processoSeletivo) {
                this.processoSeletivo = processoSeletivo;
        }
       
        @NotNull(message="Obrigatório informar o título", groups={Cadastrar.class, Alterar.class})
        @NotEmpty(message="Obrigatório informar o título", groups={Cadastrar.class, Alterar.class})
        @Column(name="dsc_titulo", nullable=false)
        public String getTitulo() {
                return titulo;
        }
       
        public void setTitulo(String titulo) {
                this.titulo = StringUtil.setarUpperCase(titulo);
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @NotNull(message="Obrigatório informar o curso", groups={Cadastrar.class, Alterar.class})
        @JoinColumn(name="seq_curso", referencedColumnName="seq_curso")
        public CursoView getCurso() {
                return curso;
        }
       
        public void setCurso(CursoView curso) {
                this.curso = curso;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @NotNull(message="Obrigatório informar a área", groups={Cadastrar.class, Alterar.class})
        @JoinColumn(name="cod_area", referencedColumnName="cod_area")
        public Area getArea() {
                return area;
        }
       
        public void setArea(Area area) {
                this.area = area;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @Valid
        @OneToMany(mappedBy="projetoPesquisa", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<ProjetoPesquisaAluno> getDiscentes() {
                return discentes;
        }
       
        public void setDiscentes(Set<ProjetoPesquisaAluno> discentes) {
                this.discentes = discentes;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @Valid
        @OneToMany(mappedBy="projetoPesquisa", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<ProjetoPesquisaOrientador> getOrientadores() {
                return orientadores;
        }
       
        public void setOrientadores(Set<ProjetoPesquisaOrientador> orientadores) {
                this.orientadores = orientadores;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @Valid
        @OneToMany(mappedBy="projetoPesquisa", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<ProjetoPesquisaAvaliador> getAvaliadores() {
                return avaliadores;
        }
       
        public void setAvaliadores(Set<ProjetoPesquisaAvaliador> avaliadores) {
                this.avaliadores = avaliadores;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @Valid
        @OneToMany(mappedBy="projetoPesquisa", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<ArquivoProjeto> getArquivos() {
                return arquivos;
        }
       
        public void setArquivos(Set<ArquivoProjeto> arquivos) {
                this.arquivos = arquivos;
        }
       
        @NotNull(message="Obrigatório informar o email para contato", groups={Cadastrar.class, Alterar.class})
        @NotEmpty(message="Obrigatório informar o email para contato", groups={Cadastrar.class, Alterar.class})
        @Column(name="dsc_email_contato", nullable=false)
        public String getEmailContato() {
                return emailContato;
        }
       
        public void setEmailContato(String emailContato) {
                this.emailContato = emailContato;
        }
       
        @Column(name="dsc_observacao")
        public String getObservacao() {
                return observacao;
        }
       
        public void setObservacao(String observacao) {
                this.observacao = StringUtil.setarUpperCase(observacao);
        }
       
        @NotNull(message="Obrigatório informar a situação da inscrição", groups={Cadastrar.class, Alterar.class})
        @NotEmpty(message="Obrigatório informar a situação da inscrição", groups={Cadastrar.class, Alterar.class})
        @Column(name="tip_situacao_inscricao")
        public String getTipoSituacaoInscricao() {
                return tipoSituacaoInscricao;
        }
       
        public void setTipoSituacaoInscricao(String tipoSituacaoInscricao) {
                this.tipoSituacaoInscricao = tipoSituacaoInscricao;
        }
       
        @NotNull(message="Obrigatório informar o indicador de Projeto de Ciência e Tecnologia", groups={Cadastrar.class, Alterar.class})
        @Column(name="ind_projcienciastec", nullable=false)
        public Boolean getIndicadorProjetoCienciaTecnologia() {
                return indicadorProjetoCienciaTecnologia;
        }
       
        public void setIndicadorProjetoCienciaTecnologia(Boolean indicadorProjetoCienciaTecnologia) {
                this.indicadorProjetoCienciaTecnologia = indicadorProjetoCienciaTecnologia;
        }
       
        @Column(name="ind_aprovado")
        public Boolean getIndicadorAprovado() {
                return indicadorAprovado;
        }
       
        public void setIndicadorAprovado(Boolean indicadorAprovado) {
                this.indicadorAprovado = indicadorAprovado;
        }
       
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((sequencial == null) ? 0 : sequencial.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;
                ProjetoPesquisa other = (ProjetoPesquisa) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }

        @Transient
        public Long getSequencialDoProcessoSeletivo() {
                return VerificadorUtil.naoEstaNulo(processoSeletivo)? getProcessoSeletivo().getSequencial() : null;
        }
       
        @Transient
        public String getDescricaoDoProcessoSeletivo() {
                return VerificadorUtil.naoEstaNulo(processoSeletivo)? getProcessoSeletivo().getDescricao() : null;
        }
       
        @Transient
        public ArquivoProjeto getArquivoProjeto() {
                if (VerificadorUtil.naoEstaNuloOuVazio(getArquivos())) {
                        for(ArquivoProjeto arquivo : getArquivos()) {
                                if (arquivo.getTipoDocumentoProjeto().equals(TipoDocumentoProjeto.PROJETO.getValue())) {
                                        return arquivo;
                                }
                        }
                }
                return null;
        }
       
        @Transient
        public ArquivoProjeto getArquivoProjetoParaAvaliador() {
                if (VerificadorUtil.naoEstaNuloOuVazio(getArquivos())) {
                        for(ArquivoProjeto arquivo : getArquivos()) {
                                if (arquivo.getTipoDocumentoProjeto().equals(TipoDocumentoProjeto.PROJETO_AVALIACAO.getValue())) {
                                        return arquivo;
                                }
                        }
                }
                return null;
        }
       
        @Transient
        public ProjetoPesquisaOrientador getOrientador() {
                if (VerificadorUtil.naoEstaNuloOuVazio(getOrientadores())) {
                        for (ProjetoPesquisaOrientador orientador : getOrientadores()) {
                                if (!orientador.getIndicadorCoorientador()) {
                                        return orientador;
                                }
                        }
                }
                return null;
        }
       
        @Transient
        public ProjetoPesquisaOrientador getCoorientador() {
                if (VerificadorUtil.naoEstaNuloOuVazio(getOrientadores())) {
                        for (ProjetoPesquisaOrientador orientador : getOrientadores()) {
                                if (orientador.getIndicadorCoorientador()) {
                                        return orientador;
                                }
                        }
                }
                return null;
        }
       
        @Transient
        public ProjetoPesquisaAluno getDiscenteBolsista() {
                if (VerificadorUtil.naoEstaNuloOuVazio(getDiscentes())) {
                        for (ProjetoPesquisaAluno discente : getDiscentes()) {
                                if (discente.getIndicadorBolsista()) {
                                        return discente;
                                }
                        }
                }
                return null;
        }

        @Transient
        public String getDescricaoDoCurso() {
                return VerificadorUtil.naoEstaNulo(getCurso())? getCurso().getDescricao(): null;
        }
       
        @Transient
        public Boolean tipoSituacaoInscricaoEmAnalise() {
                return getTipoSituacaoInscricao().equals(TipoSituacaoInscricao.ANALISE.getValue());
        }
       
        @Transient
        public Boolean tipoSituacaoInscricaoConfirmada() {
                return getTipoSituacaoInscricao().equals(TipoSituacaoInscricao.CONFIRMADA.getValue());
        }
       
        @Transient
        public Boolean tipoSituacaoInscricaoComPendencia() {
                return getTipoSituacaoInscricao().equals(TipoSituacaoInscricao.PENDENCIA.getValue());
        }
       
        @Transient
        public String getDescricaoDoTipoSituacaoInscricao() {
                return TipoSituacaoInscricao.parse(getTipoSituacaoInscricao()).getDescricao();
        }
       
        @Transient
        public Boolean usuarioEhAvaliador(UsuarioView usuario) {
                for (ProjetoPesquisaAvaliador avaliador : getAvaliadores()) {
                        if (avaliador.getSequencialDoAvaliador().equals(usuario.getPessoa().getSequencial())) {
                                return true;
                        }
                }
                return false;
        }
       
        @Transient
        public Boolean aprovador() {
                return VerificadorUtil.naoEstaNulo(getIndicadorAprovado())? getIndicadorAprovado() : false;
        }
       
        @Transient
        public String getDescricaoDaArea() {
                return VerificadorUtil.naoEstaNulo(getArea())? getArea().getDescricao() : null;
        }
       
}