Olá,
Estou há algum tempo (2 a 3 anos) pesquisando e implementando técnicas que permitem gerar interfaces (GUI) Swing para aplicações de banco de dados de forma automática em tempo de execução.
Diferente das propostas de wizards e outros utilitários (geralmente de empresas que vendem IDEs ou softwares proprietários - PeopleSoft, SAP, etc. têm essa abordagem), as técnicas que uso objetivam gerar telas como um todo, em parte, plugar pedações escritos na mão com pedaços gerados, adicionar listeners se necessário e outros recursos que, de forma geral, os tais wizards e utilitários não permitem, pois geram um código que não pode (ou não deve) ser editado ou geram construções proprietárias que guardam meta-informações em arquivos binários (…)
Como disse, estou há tempo trabalhando e teorizando sobre o assunto. Minha idéia é que o desenvolvedor modele em UML, gerando as classes e depois, bem, depois está pronto!
Bem, não é tão fácil assim, precisamos algumas linhas de configuração (nota 1) por enquanto hoje preciso 3 + n linhas de configuração por classe, onde n é o número de atributos da classe.
Em http://rocket.via.com.br/imagens/cadastrosxxx.png tem um exemplo de tela gerada automáticamente (na verdade o tab com o table e o panel de edição foram gerados).
Nessa tela tem-se implementado, sem nenhum código adicional, (1) controle de acesso (nota 2), (2) busca performática de dados, (3) ordenação multi-coluna, (3) renderização de controles de edição de dados [txtfields, combos, labels, etc.), (4) controle de campos obrigatórios [com borda em vermelho], (5) validadores de preenchimento, (6) listeners para validadores, busca de objetos para comboxes, etc. (6) tooltips, (7) telas mestre-detalhes 1-1, 1-n dependente, 1-n independente e n-n e outras features que não aparecem.
Não obstante, a idéia é criar aplicações profissionais, com desempenho e segurança.
Essa imagem é uma parte de uma aplicação (as tarjas pretas preservam a identidade do software, que atualmente está sendo desenvolvido para uso comercial) J2EE, com acesso à EJBs 2.0, Hibernate 2, L&F, JMS e autenticação baseada na nota 2.
Enfim, na verdade estou a fim de criar um projeto aberto com essa tecnologia, pois quero a médio/longo prazo transformar isso em um case, ao invés de ficar criando configuração na mão (…)
Assim, este post é para ver quem tem interesse em ajudar…preciso informações de todo o tipo, onde hospedar, como gerenciar, como documentar, … tanta coisa. Tenho um monte de material (slides, artigos, documentos) e código, muito código-fonte (documentado em parte…).
Se alguem se interessar, mande um mail para rocket@via.com.br ou marcelo@3layer.com.br
nota 1: A configuração é salva em objetos que são persistidos, via hibernate, junto no BD. Toda a configuração é chamada de metamodelo e é a base de um antigo projeto em Delphi que eu fiz, o Metagen - http://www.rocket.via.com.br/downloads/sist_din_bas_metam.zip
nota 2: O sistema de autenticação (e autorização) é outro projeto que eu implementei e queria ter publicado alguns artigos (é tanta coisa que a gente não consegue acabar as coisas). Por cima, o sistema de autenticação é independente de ambiente operacional e integra-se à sistemas existentes no cliente (RH, por exemplo) ou diretórios (Active Directory, LDAP), arquivos de configuração (XML, texto, etc.) ou mesmo no novo(?) JAAS. De forma geral, ele é baseado no conceito de perfis (parecido com roles), mas esses perfis podem formar hierarquias (roles não). Cada perfil pode ser associado a 1 ou mais usuários ou grupos. E cada usuário (ou grupo) pode ter n perfis. Cada perfil tem acesso a um conjunto de Ações. Ações são agrupamentos e Operações (ver, executar) sobre Objetos. Cada objeto pode ser tanto um Sistema, uma tela (JFrame, JDialog); um Módulo (conjunto de telas); um Controle (qualquer controle dentro de uma tela - JPanel, JTextField, JCombox, JTable, JMenuItem, etc…) ou Atributo (um field de uma classe - uma Action, por exemplo).
Nesse sistema de autenticação é possível definir permissões em nível de linha e coluna (particionamento vertical e horizontal de dados). Em outras palavras é possível dar acesso a um usuário (ou melhor perfil) à somente uma célula em um grid de registros, por exemplo.
Também é possível ligar regras sobre dados e exibir informações somente se essas regras forem satisfeitas (ou usuário só vê os dados da classe Curso que tenham mais de 50 alunos, por exemplo).
Finalmente, tudo isso é baseado em reflexão e conta com recursos de performance e acesso muito rápidos. Assim, tão logo o programador atualize o software, adicionando um botão em uma tela X, o administrador do sistema (que pode ser um usuário avançado que tenha o perfil de administrador) já estará enxergando esse novo botão nessa tela e pode dar acesso a esse botão para quem ele quiser!
Mas isso é outro projeto…