Olá, pessoal!
Estou desenvolvendo um projeto em Grails no qual tenho que lidar com a leitura e correção de vários registros provenientes de diversas fontes (txt, csv, etc...) e popular diversas tabelas em minha base de dados. Para que isto seja possível, preciso fazer uma série de validações, como extrair acentos, verificar existência de espaços em branco, etc. Ou seja, várias dessas minhas entidades compartilham os mesmos métodos.
Inicialmente, criei os método em uma classe de serviço genérica:
static String removeAcentos(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD)
str = str.replaceAll("[^\p{ASCII}]", "")
return str
}
O que eu queria fazer mesmo, era injetar o método acima (e diversos outros) diretamente na classe String, utilizando meta-programação, como abaixo:
String.metaClass.removeAcentos = {->
delegate = Normalizer.normalize(delegate, Normalizer.Form.NFD)
delegate = delegate.replaceAll("[^\p{ASCII}]", "")
return delegate
}
Minhas dúvidas são:
1) Onde crio esses métodos para que fiquem disponíveis em todos os escopos do sistema (inclusive no Bootstrap e, se possível, em ambiente de teste);
2) Existe impacto na produtividade de alguma forma ao utilizar essa abordagem?
Muito obrigado!