Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
package br.edu.cesmac.sic.core.domain.model;
2
 
3
import java.io.Serializable;
4
import java.util.ArrayList;
5
import java.util.Collections;
6
import java.util.Comparator;
7
import java.util.HashSet;
8
import java.util.List;
9
import java.util.Set;
10
 
11
import javax.persistence.CascadeType;
12
import javax.persistence.Column;
13
import javax.persistence.EmbeddedId;
14
import javax.persistence.Entity;
15
import javax.persistence.JoinColumn;
16
import javax.persistence.JoinColumns;
17
import javax.persistence.ManyToOne;
18
import javax.persistence.OneToMany;
19
import javax.persistence.Table;
20
import javax.persistence.Transient;
21
import javax.validation.Valid;
22
import javax.validation.constraints.NotNull;
23
 
24
import org.hibernate.envers.AuditTable;
25
import org.hibernate.envers.Audited;
26
import org.hibernate.envers.RelationTargetAuditMode;
27
 
28
import br.edu.cesmac.core.interfaces.Alterar;
29
import br.edu.cesmac.core.interfaces.Cadastrar;
30
import br.edu.cesmac.core.util.StringUtil;
31
import br.edu.cesmac.core.util.VerificadorUtil;
32
import br.edu.cesmac.sic.core.domain.model.dto.TopicoQuestaoDTO;
33
import br.edu.cesmac.sic.core.domain.model.tipo.TipoConceitoGlobal;
34
import br.edu.cesmac.sic.core.domain.model.tipo.TipoTopico;
35
 
36
@Audited
37
@AuditTable(value="sic_aud_avaliacao", schema="admsic001")
38
@Entity
39
@Table(name="sic_avaliacao", schema="admsic001")
40
public class Avaliacao implements Serializable {
41
 
42
        private static final long serialVersionUID = 1L;
43
 
44
        private AvaliacaoId avaliacaoId = new AvaliacaoId();
45
        private ProjetoPesquisaAvaliador projetoPesquisaAvaliador;
46
 
47
        private Boolean indicadorTecnicoCientificoRelevante;
48
        private Boolean indicadorComissaoEtica;
49
        private Boolean indicadorRegistroComiteEtica;
50
        private String tipoConceitoGlobal;
51
        private String numeroProcotoloComiteEtica;
52
        private Boolean indicadorParecerAdequado;
53
        private String justificativa;
54
        private Boolean indicadorValidacao = false;
55
        private Set<Resposta> respostas = new HashSet<Resposta>();
56
 
57
        @EmbeddedId
58
        public AvaliacaoId getAvaliacaoId() {
59
                return avaliacaoId;
60
        }
61
 
62
        public void setAvaliacaoId(AvaliacaoId avaliacaoId) {
63
                this.avaliacaoId = avaliacaoId;
64
        }
65
 
66
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
67
        @ManyToOne
68
        @JoinColumns(value={
69
                @JoinColumn(name="seq_avaliador", referencedColumnName="seq_avaliador", nullable=false, insertable=false, updatable=false),
70
                @JoinColumn(name="seq_projeto_pesquisa", referencedColumnName="seq_projeto_pesquisa", nullable=false, insertable=false, updatable=false),
71
        })
72
        public ProjetoPesquisaAvaliador getProjetoPesquisaAvaliador() {
73
                return projetoPesquisaAvaliador;
74
        }
75
 
76
        public void setProjetoPesquisaAvaliador(ProjetoPesquisaAvaliador projetoPesquisaAvaliador) {
77
                if(VerificadorUtil.naoEstaNulo(projetoPesquisaAvaliador)) {
78
                        avaliacaoId.setSequencialAvaliador(projetoPesquisaAvaliador.getSequencialDoAvaliador());
79
                        avaliacaoId.setSequencialProjetoPesquisa(projetoPesquisaAvaliador.getSequencialDoProjetoPesquisa());
80
                }
81
                this.projetoPesquisaAvaliador = projetoPesquisaAvaliador;
82
        }
83
 
84
        @NotNull(message="Obrigatório informar o indicador de mérito técnico-científico relevante", groups={Cadastrar.class, Alterar.class})
85
        @Column(name="ind_merteccienrel", nullable=false)
86
        public Boolean getIndicadorTecnicoCientificoRelevante() {
87
                return indicadorTecnicoCientificoRelevante;
88
        }
89
 
90
        public void setIndicadorTecnicoCientificoRelevante(Boolean indicadorTecnicoCientificoRelevante) {
91
                this.indicadorTecnicoCientificoRelevante = indicadorTecnicoCientificoRelevante;
92
        }
93
 
94
        @NotNull(message="Obrigatório informar o indicador de necessidade de comitê de ética", groups={Cadastrar.class, Alterar.class})
95
        @Column(name="ind_neccomitetic", nullable=false)
96
        public Boolean getIndicadorComissaoEtica() {
97
                return indicadorComissaoEtica;
98
        }
99
 
100
        public void setIndicadorComissaoEtica(Boolean indicadorComissaoEtica) {
101
                this.indicadorComissaoEtica = indicadorComissaoEtica;
102
        }
103
 
104
        @NotNull(message="Obrigatório informar o indicador de registro de comitê de ética", groups={Cadastrar.class, Alterar.class})
105
        @Column(name="ind_registro_comitetic", nullable=false)
106
        public Boolean getIndicadorRegistroComiteEtica() {
107
                return indicadorRegistroComiteEtica;
108
        }
109
 
110
        public void setIndicadorRegistroComiteEtica(Boolean indicadorRegistroComiteEtica) {
111
                this.indicadorRegistroComiteEtica = indicadorRegistroComiteEtica;
112
        }
113
 
114
        @NotNull(message="Obrigatório informar o conceito global", groups={Cadastrar.class, Alterar.class})
115
        @Column(name="tip_conceito_global", nullable=false)
116
        public String getTipoConceitoGlobal() {
117
                return tipoConceitoGlobal;
118
        }
119
 
120
        public void setTipoConceitoGlobal(String tipoConceitoGlobal) {
121
                this.tipoConceitoGlobal = tipoConceitoGlobal;
122
        }
123
 
124
        @Column(name="dsc_protocolo_comitetic")
125
        public String getNumeroProcotoloComiteEtica() {
126
                return numeroProcotoloComiteEtica;
127
        }
128
 
129
        public void setNumeroProcotoloComiteEtica(String numeroProcotoloComiteEtica) {
130
                this.numeroProcotoloComiteEtica = numeroProcotoloComiteEtica;
131
        }
132
 
133
        @NotNull(message="Obrigatório informar o indicador de parecer adequado", groups={Cadastrar.class, Alterar.class})
134
        @Column(name="ind_parecer_adequado", nullable=false)
135
        public Boolean getIndicadorParecerAdequado() {
136
                return indicadorParecerAdequado;
137
        }
138
 
139
        public void setIndicadorParecerAdequado(Boolean indicadorParecerAdequado) {
140
                this.indicadorParecerAdequado = indicadorParecerAdequado;
141
        }
142
 
143
        @Column(name="dsc_justificativa")
144
        public String getJustificativa() {
145
                return justificativa;
146
        }
147
 
148
        public void setJustificativa(String justificativa) {
149
                this.justificativa = StringUtil.setarUpperCase(justificativa);
150
        }
151
 
152
        @Column(name="ind_validado")
153
        public Boolean getIndicadorValidacao() {
154
                return indicadorValidacao;
155
        }
156
 
157
        public void setIndicadorValidacao(Boolean indicadorValidacao) {
158
                this.indicadorValidacao = indicadorValidacao;
159
        }
160
 
161
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
162
        @Valid
163
        @OneToMany(mappedBy="avaliacao", cascade=CascadeType.ALL, orphanRemoval=true)
164
        public Set<Resposta> getRespostas() {
165
                return respostas;
166
        }
167
 
168
        public void setRespostas(Set<Resposta> respostas) {
169
                this.respostas = respostas;
170
        }
171
 
172
        @Override
173
        public int hashCode() {
174
                final int prime = 31;
175
                int result = 1;
176
                result = prime * result + ((avaliacaoId == null) ? 0 : avaliacaoId.hashCode());
177
                return result;
178
        }
179
 
180
        @Override
181
        public boolean equals(Object obj) {
182
                if (this == obj)
183
                        return true;
184
                if (obj == null)
185
                        return false;
186
                if (getClass() != obj.getClass())
187
                        return false;
188
                Avaliacao other = (Avaliacao) obj;
189
                if (avaliacaoId == null) {
190
                        if (other.avaliacaoId != null)
191
                                return false;
192
                } else if (!avaliacaoId.equals(other.avaliacaoId))
193
                        return false;
194
                return true;
195
        }
196
 
197
        @Transient
198
        public Long getSequencialDoAvaliador() {
199
                return VerificadorUtil.naoEstaNulo(getAvaliacaoId())? getAvaliacaoId().getSequencialAvaliador() : null;
200
        }
201
 
202
        @Transient
203
        public Long getSequencialDoProjetoPesquisa() {
204
                return VerificadorUtil.naoEstaNulo(getAvaliacaoId())? getAvaliacaoId().getSequencialProjetoPesquisa() : null;
205
        }
206
 
207
        @Transient
208
        public String getDescricaoDoTipoConceitoGlobal() {
209
                return VerificadorUtil.naoEstaNulo(getTipoConceitoGlobal())? TipoConceitoGlobal.parse(getTipoConceitoGlobal()).getDescricao() : null;
210
        }
211
 
212
        @Transient
213
        public Double getValorPontuacaoTotal() {
214
                Double valorTotal = new Double(0.0);
215
                if (VerificadorUtil.naoEstaNulo(getRespostas())) {
216
                        for (Resposta resposta : getRespostas()) {
217
                                valorTotal = valorTotal + resposta.getValorPontuacao();
218
                        }
219
                }
220
                return valorTotal;
221
        }
222
 
223
        @Transient
224
        public String getNomeDoAvaliador() {
225
                return VerificadorUtil.naoEstaNulo(getProjetoPesquisaAvaliador())? getProjetoPesquisaAvaliador().getNomeDoAvaliador() : null;
226
        }
227
 
228
        @Transient
229
        public List<TopicoQuestaoDTO> getTopicosOrdenados() {
230
                List<TopicoQuestaoDTO> topicos = new ArrayList<TopicoQuestaoDTO>();
231
                List<Resposta> respostasDTO = new ArrayList<Resposta>(respostas);
232
                if (VerificadorUtil.naoEstaNulo(respostasDTO)) {
233
                        adicionarRespostasDoTopico(topicos, null, respostasDTO);
234
                        adicionarRespostasDoTopico(topicos, TipoTopico.INTRODUCAO.getValue(), respostasDTO);
235
                        adicionarRespostasDoTopico(topicos, TipoTopico.OBJETIVOS.getValue(), respostasDTO);
236
                        adicionarRespostasDoTopico(topicos, TipoTopico.METODOLOGIA.getValue(), respostasDTO);
237
                        adicionarRespostasDoTopico(topicos, TipoTopico.REFERENCIAS.getValue(), respostasDTO);
238
                        adicionarRespostasDoTopico(topicos, TipoTopico.PLANO_ATIVIDADES_CRONOGRAMA.getValue(), respostasDTO);
239
                }
240
                return topicos;
241
        }
242
 
243
        private void adicionarRespostasDoTopico(List<TopicoQuestaoDTO> topicos, String tipoTopico, List<Resposta> respostas) {
244
                TopicoQuestaoDTO topico = new TopicoQuestaoDTO(tipoTopico);
245
                for (Resposta resposta : getRespostasOrdenadas(respostas)) {
246
                        if (VerificadorUtil.naoEstaNulo(resposta.getQuestao().getTipoTopico())) {
247
                                if (resposta.getQuestao().getTipoTopico().equals(tipoTopico)) {
248
                                        topico.getRespostas().add(resposta);
249
                                }
250
                        } else if (VerificadorUtil.estaNulo(tipoTopico)) {
251
                                topico.getRespostas().add(resposta);
252
                        }
253
                }
254
                topicos.add(topico);
255
        }
256
 
257
        @Transient
258
        public List<Resposta> getRespostasOrdenadas(List<Resposta> respostas) {
259
                List<Resposta> respostasOrdenadas = null;
260
                if (VerificadorUtil.naoEstaNulo(respostas)) {
261
                        respostasOrdenadas = new ArrayList<Resposta>(respostas);
262
                        Collections.sort(respostasOrdenadas, new Comparator<Resposta>() {
263
                                public int compare(Resposta r1, Resposta r2) {
264
                                        return r1.getQuestao().getNumeroQuestao().compareTo(r2.getQuestao().getNumeroQuestao());
265
                                };
266
                        });
267
                }
268
                return respostasOrdenadas;
269
        }
270
 
271
}