Subversion Repositories Integrator Subversion

Rev

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

package br.gov.al.saude.test.formatador;

import static br.gov.al.saude.test.ConstantesTestHelper.VALOR_VAZIO;
import static br.gov.al.saude.test.util.SrvConversorDeTipo.FORMATO_DATA_DD_MM_YYYY;
import static br.gov.al.saude.test.util.SrvConversorDeTipo.converterDateParaString;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.framework.model.PessoaFisicaView;
import br.gov.al.saude.test.formatador.impl.FormatadorDeMensagemPessoaFisicaImpl;
import br.gov.al.saude.test.util.formatador.ContextoMensagem;
import br.gov.al.saude.test.util.formatador.FormatadorDeMensagem;
import br.gov.al.saude.test.util.formatador.impl.AbstractFormatadorDeMensagem;

public class FormatadorPessoaFisica extends
                AbstractFormatadorDeMensagem<PessoaFisicaView> {
       
        private FormatadorDeMensagem<Object> formatadorDeMensagem;
       
        public FormatadorPessoaFisica() {
                formatadorDeMensagem = new FormatadorDeMensagemPessoaFisicaImpl();
        }
       
        @Override
        protected String obterPadrao() {
                StringBuilder pessoaFisica = new StringBuilder();
                pessoaFisica.append("Nome: ''{0}'', Sexo: ''{1}'', ");
                pessoaFisica.append("Nome da Mãe: ''{2}'', Nome do Pai: ''{3}'', Estado Civil: ''{4}'', ");
                pessoaFisica.append("Data de Nascimento: ''{5}'', Tipo do Endereço: ''{6}'', Logradouro: ''{7}'', ");
                pessoaFisica.append("Número: ''{8}'', CEP: ''{9}'', Bairro: ''{10}'', Complemento: ''{11}'', ");
                pessoaFisica.append("Município: ''{12}'', Documentos: {13}, Telefones: {14}");
               
                return pessoaFisica.toString();
        }

        @Override
        protected List<Object> gerarParametros(PessoaFisicaView pessoaFisica) {
                List<Object> listaParametros = new ArrayList<Object>();
                listaParametros.add(pessoaFisica.getNomePessoa());
                listaParametros.add(getNomeSexo(pessoaFisica.getTipoSexo()));
                listaParametros.add(pessoaFisica.getNomeMae());
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getNomePai()) ? pessoaFisica.getNomePai() : VALOR_VAZIO);
                listaParametros.add(pessoaFisica.getDescricaoTipoEstadoCivil().toUpperCase());
                listaParametros.add(converterDateParaString(pessoaFisica.getDataNascimento(), FORMATO_DATA_DD_MM_YYYY));
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getTipoEndereco()) ? pessoaFisica.getDescricaoTipoEndereco().toUpperCase() : VALOR_VAZIO);
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getLogradouro()) ? pessoaFisica.getLogradouro() : VALOR_VAZIO);
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getNumeroImovel()) ? pessoaFisica.getNumeroImovel() : VALOR_VAZIO);
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getNumeroCep()) ? pessoaFisica.getNumeroCep() : VALOR_VAZIO);
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getNomeBairro()) ? pessoaFisica.getNomeBairro() : VALOR_VAZIO);
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getComplemento()) ? pessoaFisica.getComplemento() : VALOR_VAZIO);
                listaParametros.add(VerificadorUtil.naoEstaNuloOuVazio(pessoaFisica.getNomeMunicipio()) ? pessoaFisica.getNomeMunicipio() : VALOR_VAZIO);
                listaParametros.add(formatar(ordenarListaObjetos(pessoaFisica.getDocumentos())));
                listaParametros.add(formatar(ordenarListaObjetos(pessoaFisica.getTelefones())));
               
                return listaParametros;
        }
       
        private <T extends Comparable<? super T>> List<T> ordenarListaObjetos(Set<T> objetos) {
                List<T> listaObjetos = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(objetos)){
                        listaObjetos = new ArrayList<T>(objetos);
                        Collections.sort(listaObjetos);
                }
               
                return listaObjetos;
        }

        private <T> String formatar(List<T> objetos) {
                if(VerificadorUtil.naoEstaNulo(objetos)){
                        StringBuilder mensagem = new StringBuilder();
                       
                        for (T objeto : objetos) {
                                mensagem.append(formatadorDeMensagem.formatar(ContextoMensagem.NAO_POSSUI, objeto));
                        }
                       
                        return isStringVazia(mensagem.toString()) ? null : mensagem.toString();
                }
               
                return null;
        }
       
        private boolean isStringVazia(String mensagem) {
                return mensagem.isEmpty();
        }
       
        private static String getNomeSexo(String sexo) {
                if(VerificadorUtil.naoEstaNuloOuVazio(sexo)) {
                        if("M".equalsIgnoreCase(sexo)) {
                                return "MASCULINO";
                        } else if("F".equalsIgnoreCase(sexo)) {
                                return "FEMININO";
                        }
                }
               
                return null;
        }
}