Boas práticas com parse em string.  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Bom dia senhores
Estou desenvolvendo uma aplicação que recebe os dados em um arquivo texto separado por ponto-e-virgula. Tipo um CSV.
Tenho que pegar essa string, quebrar e jogar os dados no meu bean.
Estou usando java 1.4, fiz algo desse tipo:


O problema é que é muito braçal a rotina de setar os valores no bean.
Pergunto:
O que poderia fazer para contornar isso? Se não me engano, em C#.net dá pra fazer via anotations um esquema que você mapeia o token com uma propriedade.
Alguem que já trabalhou com integrações em mainframe já deve ter passado por isso.
Existe alguma maneira de automatizar isso?

Obrigado

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Bom, se você não tiver problemas de desempenho, pode tentar usar o BeanUtils para acessar os campos por nome via reflection, e você poderia especificar em um arquivo (properties?) a sequência dos campos. Talvez como:

br.com.suaEmpresa.SeuBean=nome;endereco;telefone;cpf;;residencia

para indicar que na hora de preencher os dados, nome = fields[0], ... cpf = fields[3], residencia = fields[5] (note que pulei um field de propósito para indicar que ele não é usado).

Ou então gerar código (a partir desse mesmo arquivo properties), o que não dá problemas de desempenho mas sim de manutenção (a menos que você tenha um script ANT bom para compilar seu código).

Mas acho que isso é o menor dos seus problemas.

This message was edited 1 time. Last update was at 25/10/2007 10:31:43

[WWW]
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Boa thingol... gostei da idéia de reflection e do properties.
Acho que vai funcionar bem, mas ainda tem uma coisinha.
Tem campos que devem ser tratados.
Por exemplo:


Nesse caso, acho que atrapalha um pouco a automação, certo ?

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Com properties dá pra brincar à vontade. É só você ter paciência (daqui a pouco você vai criar um XML que é tão complicado de preencher quanto você escrever você mesmo o programa - não seja ambicioso demais.)

br.com.suaEmpresa.SeuBean=nome;endereco;telefone;cpf;;residencia;dataFormalizacao
br.com.suaEmpresa.SeuBean-dataFormalizacao=dd/MM/yyyy

(note que # é especial em um arquivo .properties, assim como ":", por isso usei um "-" mesmo.
[WWW]
rodrigoallemand
GUJ Ranger
[Avatar]

Membro desde: 21/02/2005 20:19:47
Mensagens: 972
Localização: Rio de Janeiro, Recreio!!!
Offline

Vc pode passar a linha toda para um construtor e fazer o tratamento dentro dele, não seria uma boa ideia?

Rodrigo Allemand

A culpa é minha e eu a coloco em quem eu quizer!. (Homer Simpson)
http://blog.rodrigoallemand.com.br
[WWW] [MSN]
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

É verdade... tem que tomar cuidado com a complexidade que isso vai ficar.
Mas legal thingol... muito obrigado, ajudou bastante!

This message was edited 1 time. Last update was at 25/10/2007 12:53:22


Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

rodrigoallemand wrote:Vc pode passar a linha toda para um construtor e fazer o tratamento dentro dele, não seria uma boa ideia?


Até aí isso é o de menos (se é em um construtor ou em um método).
Ele está reclamando é do trabalho braçal (e sujeito a erros bobos) que é desmontar a string e preencher os campos.
Eu sei bem disso, e sei que é fácil resolver isso com @Annotations (java 5.0 - se quiser fazer as coisas em tempo de execução)) ou XDoclet (1.4 ou anteriores - se quiser efetuar geração de código).


[WWW]
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Como você faria isso com Annotations ?

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
rodrigoallemand
GUJ Ranger
[Avatar]

Membro desde: 21/02/2005 20:19:47
Mensagens: 972
Localização: Rio de Janeiro, Recreio!!!
Offline

thingol wrote:Até aí isso é o de menos (se é em um construtor ou em um método).
Ele está reclamando é do trabalho braçal (e sujeito a erros bobos) que é desmontar a string e preencher os campos.


Resta saber se este trabalho braçal é alterado constantemente ou se é totalmente estático e maduro. Acho que se ele sempre receber esta string, no mesmo formato, sem muitas alterações ao longo do sistema, existem maneiras mais faceis de fazer isso...

Rodrigo Allemand

A culpa é minha e eu a coloco em quem eu quizer!. (Homer Simpson)
http://blog.rodrigoallemand.com.br
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

É meio chato (e um pouco pesado) porque você tem de fazer algo como:


e a classe Util (o nome não é legal; escolha um nome adequado...) tem de pegar a instância que você disponibilizou para o método inicializar, a string que você pediu para efetuar o split, e procurar os métodos que têm a anotação MinhaAnotacao; para cada um desses métodos, efetuar as conversões adequadas, e chamar o tal método. É braçal (e um pouco pesado) mas dá para fazer.

[WWW]
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Interessante.
É um pocuo trabalhoso, mas acho que depois fica fácil pra dar manutenção.
Mesmo assim, obrigado pelas dicas.
Vou bolar algo e assim que estiver pronto e funcionando eu posto aqui

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Só pra aproveitar o tópico falando sobre Annotations

Como eu faço que um atributo da anotação possa ser preenchido ou não.

Como as anotações do Hibernate que posso setar em @Column o name ou não.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Exemplo:
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Era isso mesmo obrigado.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team