package br.gov.al.saude.test.builder;
import static br.gov.al.saude.test.util.ConversorDeTipo.converterStringParaBoolean;
import static br.gov.al.saude.test.util.ConversorDeTipo.converterStringParaInteger;
import static br.gov.al.saude.test.util.ConversorDeTipo.converterStringParaLong;
import java.util.HashSet;
import java.util.Set;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.scg.model.view.MunicipioView;
import br.gov.al.saude.scg.model.view.PessoaFisicaView;
import br.gov.al.saude.scg.model.view.UfView;
import br.gov.al.saude.scs.model.Capacitacao;
import br.gov.al.saude.scs.model.Turma;
import br.gov.al.saude.scs.model.TurmaParticipante;
import br.gov.al.saude.scs.model.TurmaPeriodo;
import br.gov.al.saude.scs.model.TurmaProcesso;
import br.gov.al.saude.scs.model.view.UnidadeView;
import br.gov.al.saude.test.unidade.generic.builder.AbstractEntidadeBuilder;
public class TurmaBuilder
extends AbstractEntidadeBuilder
<Turma
> {
public TurmaBuilder comSequencial
(String sequencial
) {
entidade.
setSequencial(parseLong
(sequencial
));
return this;
}
public TurmaBuilder comCapacitacao
(String sequencialCapacitacao
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(sequencialCapacitacao
)) {
Capacitacao capacitacao =
new CapacitacaoBuilder
().
comSequencial(sequencialCapacitacao
).
build();
entidade.
setCapacitacao(capacitacao
);
}
return this;
}
public TurmaBuilder comAnoExercicio
(String ano
) {
entidade.
setAnoExercicio(converterStringParaInteger
(ano
));
return this;
}
public TurmaBuilder comCargaHoraria
(String cargaHoraria
) {
entidade.
setCargaHoraria(converterStringParaInteger
(cargaHoraria
));
return this;
}
public TurmaBuilder comUf
(String codigoUf
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(codigoUf
)) {
UfView uf =
new UfView
();
uf.
setCodigo(codigoUf
);
entidade.
setUf(uf
);
}
return this;
}
public TurmaBuilder comMunicipio
(String sequencialMunicipio
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(sequencialMunicipio
)) {
MunicipioView municipio =
new MunicipioView
();
municipio.
setSequencial(converterStringParaLong
(sequencialMunicipio
));
entidade.
setMunicipio(municipio
);
}
return this;
}
public TurmaBuilder comObservacao
(String observacao
) {
entidade.
setObservacao(observacao
);
return this;
}
public TurmaBuilder comEmenta
(String ementa
) {
entidade.
setEmenta(ementa
);
return this;
}
public TurmaBuilder comUnidadeSolicitante
(String sequencialUnidade
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(sequencialUnidade
)) {
UnidadeView unidade =
new UnidadeView
();
unidade.
setSequencial(converterStringParaLong
(sequencialUnidade
));
entidade.
setUnidadeSolicitante(unidade
);
}
return this;
}
public TurmaBuilder comRepresentantes
(String representantesString
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(representantesString
)) {
entidade.
setRepresentantes(gerarTurmaRepresentantes
(representantesString
));
}
return this;
}
private Set<PessoaFisicaView
> gerarTurmaRepresentantes
(String representantesString
) {
Set<PessoaFisicaView
> representantes =
new HashSet<PessoaFisicaView
>();
String[] arrayRepresentantes = representantesString.
split(";");
for (String sequenciaPessoa : arrayRepresentantes
) {
PessoaFisicaView representante =
new PessoaFisicaView
();
representante.
setSequencialPessoa(parseLong
(sequenciaPessoa
));
representantes.
add(representante
);
}
return representantes
;
}
public TurmaBuilder comProcessos
(String processosTurmaString
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(processosTurmaString
)) {
entidade.
setProcessos(gerarTurmaProcessos
(processosTurmaString
));
}
return this;
}
private Set<TurmaProcesso
> gerarTurmaProcessos
(String processosTurmaString
) {
Set<TurmaProcesso
> turmaProcessos =
new HashSet<TurmaProcesso
>();
String[] arrayTurmaProcesso = processosTurmaString.
split(";");
for (String turmaProcessoString : arrayTurmaProcesso
) {
String[] propriedades = turmaProcessoString.
split(",");
TurmaProcesso turmaProcesso =
new TurmaProcessoBuilder
()
.
comTurma(entidade
)
.
comOrgao(propriedades
[0])
.
comNumeroProcesso(propriedades
[1])
.
comAno(propriedades
[2])
.
build();
turmaProcessos.
add(turmaProcesso
);
}
return turmaProcessos
;
}
public TurmaBuilder comParticipantes
(String participantesTurmaString
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(participantesTurmaString
)) {
entidade.
setParticipantes(gerarTurmaParticipante
(participantesTurmaString
));
}
return this;
}
private Set<TurmaParticipante
> gerarTurmaParticipante
(String participantesTurmaString
) {
Set<TurmaParticipante
> turmaParticipantes =
new HashSet<TurmaParticipante
>();
String[] arrayTurmaParticipante = participantesTurmaString.
split(";");
for (String turmaParticipanteString : arrayTurmaParticipante
) {
String[] propriedades = turmaParticipanteString.
split(",");
TurmaParticipante turmaParticipante =
new TurmaParticipanteBuilder
()
.
comTurma(entidade
)
.
comPessoa(propriedades
[0])
.
comPerfil(propriedades
[1])
.
comIndicadorRemunerado(propriedades
[2])
.
comCargaHorariaEspecifica("null".
equals(propriedades
[3])?null:propriedades
[3])
.
build();
turmaParticipantes.
add(turmaParticipante
);
}
return turmaParticipantes
;
}
public TurmaBuilder comPeriodos
(String periodosTurmaString
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(periodosTurmaString
)) {
entidade.
setPeriodos(gerarTurmaPeriodo
(periodosTurmaString
));
}
return this;
}
private Set<TurmaPeriodo
> gerarTurmaPeriodo
(String periodosTurmaString
) {
Set<TurmaPeriodo
> turmaPeriodos =
new HashSet<TurmaPeriodo
>();
String[] arrayTurmaPeriodo = periodosTurmaString.
split(";");
for (String turmaPeriodoString : arrayTurmaPeriodo
) {
String[] propriedades = turmaPeriodoString.
split(",");
TurmaPeriodo turmaPeriodo =
new TurmaPeriodoBuilder
()
.
comTurma(entidade
)
.
comDataInicial(propriedades
[0])
.
comDataFinal(propriedades
[1])
.
build();
turmaPeriodos.
add(turmaPeriodo
);
}
return turmaPeriodos
;
}
public TurmaBuilder comIndicadorAtivo
(String indicadorAtivo
) {
entidade.
setIndicadorAtivo(converterStringParaBoolean
(indicadorAtivo
));
return this;
}
@
Override
protected void inicializarDadosDefault
() {
entidade =
new Turma
();
}
}