Groovy no dia-a-dia
Este blog deixou de ser mantido, mas o autor continua escrevendo aqui. Não deixe de assinar o novo feed!
Indo no embalo do post anterior.
Neste fim de semana eu resolvi implementar a parte de Help em um projeto através do uso da API JavaHelp. Quem já conhece o JavaHelp sabe que os arquivos de Help precisam ser indexados por uma ferramenta chamada jhindexer no caso do Help precisar suportar pesquisas. Por esse motivo, achei que seria interessante escrever um script para fazer a indexação, uma vez que o jhindexer não me fornecia opções úteis quanto a seleção dos arquivos a indexar.
E não, o script não precisava ser ninja; ele apenas tinha de ignorar arquivos ocultos e arquivos situados dentro de pastas CVS.
Resumo da ópera: fiz o script em Groovy e o código ficou assim:
Apenas para que você saiba o que foi feito, no código eu percorro recursivamente todos os arquivos contidos no diretório html e filtro os arquivos de acordo com os requisitos explicados anteriormente através do uso de Regular Expressions. Por fim, invoco o método execute() no objeto List<String> resultante, fazendo com que um processo jhindexer seja disparado, indexando os arquivos que passaram pela filtragem.
Cara… sete linhas de código! E melhor que isso: são seis linhas fáceis de entender. Se eu tivesse feito isso em Java, certamente o código de tratamento das exceções ocuparia sozinho mais linhas de código que isso.
A verificação do índice gerado pode ser feita da seguinte forma:
$ groovy IndexHelp.groovy
html/license.html
html/welcome.html
html/product/ui/dialogs/main/menus/options.html
html/product/ui/dialogs/main/menus/index.html
...
$ jhsearch JavaHelpSearch/
initialized; enter query
public
query 0
0.0 html/license.html [28, 34], {public}
0.0 html/license.html [227, 233], {public}
0.0 html/license.html [307, 313], {public}
0.0 html/license.html [572, 578], {public}
...
Por fim, segue uma imagem do sistema de Help após uma pesquisa pelo termo “public”:
É isso o que Polyglot Programming significa… é escolher a linguagem mais adequada ao problema, facilitando a obtenção de resultados melhores com um nível mais baixo de esforço.
Não sei se este tema está se mostrando mais interessante para mim do que para você, mas é bem provável que este assunto apareça mais algumas vezes por aqui. ![]()

