Migração Java para Grails
12/08/2014 10:29
0
Vamos la, esse tal de grails não sai da minha cabeça e decidi migrar uma aplicação java para grails. Este sistema tem como foco realizar a importação de um arquivo texto padrão (cabeçalho, detalhe, rodapé) com um layout definindo os seus campos por tamanho, então comecei a brincadeira.
Criei dois domínios descritos abaixo

//representa o cabeçalho do arquivo
class Desconto {
String empresa
Date dataImportacao
String usuario//será mapeado para outro dominio posteriormente
String referencia

//RELACIONAMENTO COM OS REGISTROS DETALHE
static hasMany = [parcelas:Parcela]

//REESCREVI PARA CADA ATRIBUTO SEU METODO SET, ELE RECEBE A LINHA DO ARQUIVO E PEGA A PARTE NECESSÁRIA
public void setVerba(String verba) {
this.verba = verba.substring(0, 10)
}
....OUTROS SETS

static constraints = {
}

//REPRESENTA O DETALHE DO ARQUIVO
class Parcela {
String inscricao
Integer sequencial
String verba
Double valor
String referencia
String prioridade
Date dataOperacao
String referenciaSoma
String calculo
String numeroAutorizacao
String parcela
String totalParcela
String convenio
String registro

//RELACIONAMENTO COM O ARQUIVO DE DESCONTO DE EMPRÉSTIMO
static belongsTo = [desconto:Desconto]

//REESCREVI PARA CADA ATRIBUTO SEU METODO SET, ELE RECEBE A LINHA DO ARQUIVO E PEGA A PARTE NECESSÁRIA
public void setSequencial(String sequencial) {
def tempSeq = sequencial.substring(24, 37).trim()
this.sequencial = Integer.parseInt(tempSeq.substring(tempSeq.length()-3, tempSeq.length()))
}
....OUTROS SETS

static constraints = {
inscricao(nullable:false, blank:false, maxSize:9)
}
}

Agora as dúvidas:
Onde colocar o resto da lógica da leitura do arquivo, no diretório grails/services?
Já li e não ficou claro como faço a associação (mestre/detalhe) do meu domínio Desconto (mestre) com o domínio Parcela(detalhe)?
Tags: #relacionamento: #estrutura de diretório


0
Oi Alexandre,

a lógica você incluí em uma classe de serviço mesmo. É lá aonde definimos nossa lógica de negócio por tornar mais fácil testar aquele código, separando-o das camadas de visualização e controle.

A associação é exatamente como você fez. Um desconto pode ter n parcelas, certo? Então ficaria assim:


class Desconto {
static hasMany = [parcelas:Parcela]
}

class Parcela {
static belongsTo = [desconto:Desconto]
}


0
Com o mapeamento desta forma não conseguia usar o metodo desconto.addToParcelas(parcela), tomava um erro referente a este metodo. Para funcionar tive que adicionar um atributo Desconto na classe Parcela, a classe Parcela ficou assim:

class Parcela {
..demais atributos
Desconto desconto
static belongsTo = [desconto:Desconto]
}

Desta forma consigo persistir o relacionamento um para muitos com sucesso, mas quando tento realizar a leitura de um arquivo texto, popular a instancia de Desconto e as diversas instancias de parcela não consigo persistir nada. Exemplo usado

def arquivo = new File("caminho_arquivo")
def desconto = new Desconto()
//seto atributos
//varre o arquivo texto obtendo as linhas da parcela
arquivo.eachLine {
if (it.substring(0, 1).equals("2")){
def parcela = new Parcela()
parcela.inscricao = it.substring(24, 37)
//adiciono a parcela ao desconto
desconto.addToParcelas(parcela)
desconto.save()
}
}
Alguma dica do erro na lógica, o problema seria tentar persistir de dentro da estrutura de repetição?


0
Olá Alexandre,
Quando a domain que você está tentando salvar possui "errors" ela não é salva, use o método validate e em seguida faça

if(desconto.hasErrors()){
println desconto.errors
}else{
desconto.save()
}

assim vc saberá que existe erro na domain e quais erros são. Outra opção é verificar em modo debug a variável "errors" da sua domain.

Espero que ajude.
Abs.
18/08/2014 09:23



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto