BrazilUtils API

Imaginei. Mas na minha humilde opiniao acho que alguem devia fazer essa tarefa. Assumir um pouco mais a responsabilidade de definicao da estrutura do projeto em si, pacotes, classes, etc.
Isso nao precisa ser feito por uma unica pessoa, podem dividir o projeto em sub-projetos e dividir essa responsabilidade. Pra mim sem fazer isso o projeto vai cair no limbo logo, logo com divergencia de opniao, coisas repetidas, e codigo mal escrito que nao foi “revisado” por alguem com um conhecimento do todo do projeto.

É só uma dica, se acharem valido legal.

]['s

Galera se possível, já que hoje é sexta, quem puder, entrar no canal #guj, para podemos debater mais, até por que quinta eu faltei! :wink:

Fábio, beleza! Ainda estamos engatinhando e coloquei aquele código lá mais para receber críticas mesmo. Tava todo mundo discutindo sobre coisas diferentes, agora acho que todos têm idéia geral dos objetivos e alcance do projeto. Apesar da discordância sobre a língua. :lol:

Grivon, vamos marcar às 19:00h, quem puder aparece.

Thiago, para vc que tah preocupado com versoes e tal, entre no projeto,
lah em https://brazilutils.dev.java.net/ mesmo q como observer, inscreva-se na lista de developers( dev@brazilutils.dev.java.net
) , que vc receberá um email de discussão sobre o que acontece no projeto.

Um tópico será criado para que o pessoal possa acompanhar o desenrolar do projeto.

Cv, eu discuti com o PEAS tb sobre isso e não há saida fácil…
Melhor começar-mos dessa forma. :wink:

Fábio, eu tinha convidado ateh o Philip para mais ou menos fazer essa função(acho q ele tah meio enrolado com o trabalho), que no final eu e o douglas estamos fazendo.
Por enquanto até que as coisas estão + ou - definidas, e não serão muitas, senão não começamos.

Grinvon, se der eu apareço, mais ainda tenho que ver o código do Douglas(aliás, quem eh Newton???Douglas?Vc tem “nome de guerra”?)
e agora eu tô indo colar grau lah no McDonalds e pro meu curso de Oracle. :wink:

[quote=Ironlynx]
Douglas(aliás, quem eh Newton???Douglas?Vc tem “nome de guerra”?)
:wink: [/quote]
:lol: Acho que te mandei o email pelo email do meu pai. Eu praticamente administro um provedor caseiro:lol: . Tem conta de email do trabalho do meu pai, laboratório da namorada, da minha mãe…
Vai aparecer lá hoje? 19:00 tá bom?

Douglas, para mim não dah… minha colação é nesse horário…(eu jah tô ateh atrasado,pois tenho Curso de Oracle antes)
Se estiver de madrugada, eu converso contigo…senão, dom eu vou estar o dia todo vendo o Projeto.

Tou saindo agora do trampo, são 8:37, devo chegar em casa umas 9:20

Grinvon, não dah para te adicionar ao projeto mandando email para mim como vc fez na lista de dev.Vc tem que criar um login no java.net e depois clique em “entrar nesse projeto” no brazilutils escolhendo o “cargo”(Developer,Observer…) q vc quer… a lista é só para discussão!

Smota, entra lah no projeto(mesmo q como Observer!) para participar.
https://brazilutils.dev.java.net/
Vamos marcar uma discussão com o pessoal, para vermos o que a versão 0.1 deverá possuir.(Vou postar algumas idéias na lista de devs)

Velo, o Douglas tah fazendo uma opção legal de pacote de Telefone para aquele problema(de diferentes estados) que você havia falado(acho q foi vc se não foi, foi malz…).

O pacote telefone está dentro do zip (brazilutils.zip) na página do projeto para quem quiser dar uma olhada. Tem uma interface gráfica para testar as entradas e saídas do telefone e como fica a formatação naqueles casos discutidos neste post:
http://www.guj.com.br/posts/list/18999.java

Adiantando: usar uma máscara *###-#### já é um começo. No caso de ser possível telefones com 7 ou 8 dígitos é necessário padronizar onde fica o espaço vazio (início ou fim) antes de pensar em outra coisa.

Pessoal…

Entrei no grupo do BrazilUtils também lá no Java.net! Acompanharei o andamento do projeto com vocês e tentarei ajudá-los sempre que necessário!

Contem comigo! :wink:

Abraços!
Thiago

Caramba! Agora pela manhã recebi três pedidos de entrada no projeto. Aproveitando o entusiasmo, vou colocar aqui a idéia para classe Logradouro, parte integrante da Endereco, para que venham opiniões e ajuda. Não segui a idéia inicial do Grivon, pis adaptei ao padrão do resto do pacote, mas os métodos de conversão e transformação estão lá co um TODO para ele (Grivon) ou quem mais se interressar em ajudar.

Inicialmente temos a interface Logradouro que além do próprio Logradouro recebe e fornece o Logradouro separado em Tipo e Nome. Como já vimos isso é fundamental, e dessa forma fica opicional.

public interface Logradouro {
    
    public String getLogradouro();
    
    public void setLogradouro(String logradouro);
    
    public String getTipo();
    
    public void setTipo(String tipo);

    public String getNome();
    
    public void setNome(String nome); 
    
}

Implemteii uma classe básica para representar um logradouro. Ela tem um objeto Tipo e um Nome.

public class LogradouroBasico implements Logradouro {
    private TipoLogradouro tipo = new TipoLogradouro();
    private NomeLogradouro nome = new NomeLogradouro();
  
  public String getLogradouro() {
        return tipo.getTipo() + " " + nome.getNome();
    }
    public void setLogradouro(String logradouro) {
        tipo.setLogradouro(logradouro);
        nome.setLogradouro(logradouro);
    }
    public String getTipo() {
        return tipo.getTipo();
    }
    public void setTipo(String tipo) {
        this.tipo.setTipo(tipo);
    }
    public String getNome() {
        return nome.getNome();
    }
    public void setNome(String nome) {
        this.nome.setNome(nome);
    }

}

Classe para Tipo do Logradouro:

    public static final String AEROPORTO   = "Aeroporto";
    public static final String ALAMEDA     = "Alameda";
    public static final String AREA        = "Área";
    public static final String AVENIDA     = "Avenida";
    public static final String CAMPO       = "Campo";
    public static final String CHACARA     = "Chácara";
    public static final String COLONIA     = "Colônia";
    public static final String CONDOMINIO  = "Condomínio";
    public static final String CONJUNTO    = "Conjunto";
    public static final String DISTRITO    = "Distrito";
    public static final String ESPLANADA   = "Esplanada";
    public static final String ESTACAO     = "Estação";
    public static final String ESTRADA     = "Estrada";
    public static final String FAVELA      = "Favela";
    public static final String FAZENDA     = "Fazenda";
    public static final String FEIRA       = "Feira";
    public static final String JARDIM      = "Jardim";
    public static final String LADEIRA     = "Ladeira";
    public static final String LAGO        = "Lago";
    public static final String LAGOA       = "Lagoa";
    public static final String LARGO       = "Largo";
    public static final String LOTEAMENTO  = "Loteamento";
    public static final String MORRO       = "Morro";
    public static final String NUCLEO      = "Núcleo";
    public static final String PARQUE      = "Parque";
    public static final String PASSARELA   = "Passarela";
    public static final String PATIO       = "Pátio";
    public static final String PRACA       = "Praça";
    public static final String QUADRA      = "Quadra";
    public static final String RECANTO     = "Recanto";
    public static final String RESIDENCIAL = "Residencial";
    public static final String RODOVIA     = "Rodovia";
    public static final String RUA         = "Rua";
    public static final String SETOR       = "Setor";
    public static final String SITIO       = "Sítio";
    public static final String TRAVESSA    = "Travessa";
    public static final String TRECHO      = "Trecho";
    public static final String TREVO       = "Trevo";
    public static final String VALE        = "Vale";
    public static final String VEREDA      = "Vereda";
    public static final String VIA         = "Via";
    public static final String VIADUTO     = "Viaduto";
    public static final String VIELA       = "Viela";
    public static final String VILA        = "Vila";
    
    private static final String[] TIPOS = {
      AEROPORTO,   ALAMEDA,     AREA,        AVENIDA, 
      CAMPO,       CHACARA,     COLONIA,     CONDOMINIO,
      CONJUNTO,    DISTRITO,    ESPLANADA,   ESTACAO,
      ESTRADA,     FAVELA,      FAZENDA,     FEIRA,
      JARDIM,      LADEIRA,     LAGO,        LAGOA,
      LARGO,       LOTEAMENTO,  MORRO,       NUCLEO,
      PARQUE,      PASSARELA,   PATIO,       PRACA,
      QUADRA,      RECANTO,     RESIDENCIAL, RODOVIA,
      RUA,         SETOR,       SITIO,       TRAVESSA,
      TRECHO,      TREVO,       VALE,        VEREDA,
      VIA,         VIADUTO,     VIELA,       VILA
    };

    public static final String AEROPORTO_AB   = "";//TODO
    public static final String ALAMEDA_AB     = "";//TODO
    public static final String AREA_AB        = "";
    public static final String AVENIDA_AB     = "Av";
    public static final String CAMPO_AB       = "";//TODO
    public static final String CHACARA_AB     = "";//TODO
    public static final String COLONIA_AB     = "";//TODO
    public static final String CONDOMINIO_AB  = "";//TODO
    public static final String CONJUNTO_AB    = "";//TODO
    public static final String DISTRITO_AB    = "";//TODO
    public static final String ESPLANADA_AB   = "";//TODO
    public static final String ESTACAO_AB     = "";//TODO
    public static final String ESTRADA_AB     = "Est";
    public static final String FAVELA_AB      = "";//TODO
    public static final String FAZENDA_AB     = "";//TODO
    public static final String FEIRA_AB       = "";//TODO
    public static final String JARDIM_AB      = "";//TODO
    public static final String LADEIRA_AB     = "";//TODO
    public static final String LAGO_AB        = "";//TODO
    public static final String LAGOA_AB       = "";//TODO
    public static final String LARGO_AB       = "";//TODO
    public static final String LOTEAMENTO_AB  = "";//TODO
    public static final String MORRO_AB       = "";//TODO
    public static final String NUCLEO_AB      = "";//TODO
    public static final String PARQUE_AB      = "";//TODO
    public static final String PASSARELA_AB   = "";//TODO
    public static final String PATIO_AB       = "";//TODO
    public static final String PRACA_AB       = "";//TODO
    public static final String QUADRA_AB      = "";//TODO
    public static final String RECANTO_AB     = "";//TODO
    public static final String RESIDENCIAL_AB = "";//TODO
    public static final String RODOVIA_AB     = "";//TODO
    public static final String RUA_AB         = "R";
    public static final String SETOR_AB       = "";//TODO
    public static final String SITIO_AB       = "";//TODO
    public static final String TRAVESSA_AB    = "";//TODO
    public static final String TRECHO_AB      = "";//TODO
    public static final String TREVO_AB       = "";//TODO
    public static final String VALE_AB        = "";//TODO
    public static final String VEREDA_AB      = "";//TODO
    public static final String VIA_AB         = "";//TODO
    public static final String VIADUTO_AB     = "";//TODO
    public static final String VIELA_AB       = "";//TODO
    public static final String VILA_AB        = "";//TODO    

    private static final String[] ABREVIATURAS = {
      AEROPORTO_AB,   ALAMEDA_AB,     AREA_AB,        AVENIDA_AB, 
      CAMPO_AB,       CHACARA_AB,     COLONIA_AB,     CONDOMINIO_AB,
      CONJUNTO_AB,    DISTRITO_AB,    ESPLANADA_AB,   ESTACAO_AB,
      ESTRADA_AB,     FAVELA_AB,      FAZENDA_AB,     FEIRA_AB,
      JARDIM_AB,      LADEIRA_AB,     LAGO_AB,        LAGOA_AB,
      LARGO_AB,       LOTEAMENTO_AB,  MORRO_AB,       NUCLEO_AB,
      PARQUE_AB,      PASSARELA_AB,   PATIO_AB,       PRACA_AB,
      QUADRA_AB,      RECANTO_AB,     RESIDENCIAL_AB, RODOVIA_AB,
      RUA_AB,         SETOR_AB,       SITIO_AB,       TRAVESSA_AB,
      TRECHO_AB,      TREVO_AB,       VALE_AB,        VEREDA_AB,
      VIA_AB,         VIADUTO_AB,     VIELA_AB,       VILA_AB
      };
    
    private List list;    
    private String tipo = "";
    private boolean normalize = false;
    
    public TipoLogradouro() {
        super();
        list = new ArrayList();
        for (int i=0; i < TIPOS.length; i++){
            list.add(TIPOS[i]);
        }
    }
    public boolean equals(Object obj) {
        return this.toString().equals(obj.toString());
    }

    public String getTipo() {
        return tipo;
    }
    
    public void setLogradouro(String logradouro){
        for (int i=0; i < logradouro.length(); i++){
            if (Character.isSpaceChar(logradouro.charAt(i))){
                break;
            } else {
                tipo = tipo + logradouro.charAt(i); 
            }
        }
        if (normalize) doNormalize();
    }
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }
    public String toString() {
        return getTipo();
    }
    
    public boolean isNormalize() {
        return normalize;
    }
    public void setNormalize(boolean normalize) {
        this.normalize = normalize;
    }
    
    private void doNormalize(){
        //TODO To Grivon Do!
    }

E uma para o nome do Logradouro:

public class NomeLogradouro {
    private String nome = "";
    public void setLogradouro(String logradouro){
        boolean afterSpace = false;
        for (int i=0; i < logradouro.length(); i++){
            if (Character.isSpaceChar(logradouro.charAt(i)) &&
                    !afterSpace){
                afterSpace = true;
            } else if (afterSpace){
                nome = nome + logradouro.charAt(i);
            }
        }
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public boolean equals(Object obj) {
        return this.toString().equals(obj.toString());
    }
    public String toString() {
        return getNome();
    }
}

Pra que vai ser usado os arrays TIPO e ABREVIATURA?

]['s

Possivelmente para correr o array procurando um tipo ou sua abreviatura. Também para facilitar a carga da List.

Se vai ser só neste caso para validar os tipos enviados, nao seria melhor colocar em um Map?

]['s

Provavelmente sim. Estou acostumado a usar arrays. Na classe UF acho que também tem uma alteração dessas para fazer. Vou dar uma olhada em Maps para fazer a modificação. :wink:

Se puder posta um código de como você pensou usar um map.

[quote=dsiviotti]Provavelmente sim. Estou acostumado a usar arrays. Na classe UF acho que também tem uma alteração dessas para fazer. Vou dar uma olhada em Maps para fazer a modificação. :wink:

Se puder posta um código de como você pensou usar um map.[/quote]

É, so nao comeca a largar Map pra tudo que é lado pq tem seu custo isso.

]['s

Pessoal, estava acertando algumas classes e me deparei com uma consequência da mistura de idiomas na criação das classes. Existem classes como CepBasico e CepValido. Hoje fui fazer o mesmo na Uf e ficou UfValida (com A no final). Não gostei muito. Gostaria da sugestões sobre qual padrão usar para os nomes das classes:
CepBasico, CeValido, UfBasica etc
ou
BasicCep, ValidCep, BasicUf etc
ou outra coisa…??
Por favor indiquem o porquê da opção.

Sobre o logradouro:Coloquei no método doNormalize() uma chamada a uma classe TipoNormalizer para facilitar a leitura e separar as tarefas.

Dsiviotti,

A suas classes de logradouro já estão prontas? Ou precisa adaptar mais alguma coisa?

Não. Só a estrutura básica. Aquela idéia de normalizar e transforma AV em Avenida está por fazer. Dá uma olhada no código e você vai ver uma classe chamada TipoNormalizer. Ela recebe o tipo do logradouro (AV, R. Rua, etc) e transforma no tipo padronizado. Na prática você pode pegar o seu código e colocar dentro dela. Basta manter o constructor recebendo um parâmetro (como está) e o método getNormalized() como saída para a transformação.

Tem alguma coisa no CVS? Dei uma navegada ontem e tava vazio…

VELO