Você acha desenvolver aplicações Swing uma tarefa chata, complicada, difícil, de fato esta tarefa se torna extremamente simples usando a porção cliente do Genesis Framework, no caso o Genesis Binder.
O binder é o mecanismo que torna o processo de visualização e controle dos dados em duas vias (two-way), ou seja, o que você altera, opera na interface visual, estará automaticamente se comunicando com o objeto que você de fato quer operar.
Em palavras mais simples seus usuários dos seus sistemas, verão as interfaces Swing como DE FATO apenas uma interface de acesso a informações, fazendo com que haja a real e total separação de lógica de negócios e visualização.
Vamos a um exemplo simples, vamos criar uma interface gráfica para gerenciar nossos DVDs, ou quem sabe até o controle de nossa locadora pessoal.
Conceitos do Genesis
O Genesis é um framework que visa tornar o desenvolvimento de soluções algo simples, escondendo toda a complexidade muitas vezes necessárias nas aplicações Java. O intuito do Genesis é fazer com que programadores Java tenham a mesma preocupação que em outras plataformas como .Net, Delphi, ou seja: Quase nenhuma, com o grande diferencial de oferecer soluções testadas e aprovadas por vários clientes do mercado.
POJO
Plain Old Java Objects, ou beans (como eu aprendi), representam nossas mais puras abstrações dos simples objetos do mundo real.
Genesis Form
Esse Objeto pode ser encarado por dois pontos de vista:
Programadores Struts - É como se fosse um Form do Struts, lembre-se que no Struts nem sempre a representação deste form representava o Bean, na essencia de seus atributos, em todo o caso as informações seriam depositadas e persistidas nos Beans de alguma forma. Além de informações para irem pro Bean, os métodos(ações) são representadas como métodos acessíveis para a interface Gráfica(DispathAction).
Programadores Java Server Faces - Para estes programadores podem observar o Genesis Form como o BackingBean, que geralmente pode extender o POJO, adicionando métodos de atividade(ações) que poderão ser acessíveis nas interfaces via tags JSF.
Como Java Server Faces é um framework recente e que várias pessoas estão aprendendo vou usar a visão JSF por enquanto.
Criando o POJO: Filmes
Veja a código fonte da classe Filmes.java :
[java]
package br.com.summatech.filmes.pojo;
import br.com.summatech.atores.Ator;
import java.util.List;
public class Filme {
private Integer codigo;
private String nome;
private String sinopse;
private String comentarios;
private List atores; // gere seus Gets e Sets por favor
[/java]
Observe que partimos do velho e simples POJO. Agora vamos criar o form, baseado na estratégia BackingBean:
[java]
package br.com.summatech.filmes.form;
import br.com.summatech.filmes.pojo.Filme;
import net.java.dev.genesis.annotation.Action;
import net.java.dev.genesis.annotation.EnabledWhen;
import net.java.dev.genesis.annotation.Form;
@Form
public class FilmeForm extends Filme{
@Action
public void salvar() {
System.out.println
(”Binder pra o objeto filme ” + this.toString() + “n Realizado com sucesso!”);
} } [/java]
Observe que esta classe apenas extendeu o pojo Filme, temos duas anotações:
-Form: diz que essa classe será tratada como um Form para o Genesis
-Action : diz que esse método é uma ação do Form
Criando a UI
Você pode usar várias alternativas, entre elas:
- JGoodies
- NetBeans Matisse
O JGoodies é definitivamente interessante, mas o Netbeans matisse de fato nos dá a produtividade em Java a mesma de ambientes como do Visual Studio ou Delphi.
Se você usar NetBeans crie um novo JFrame, e adicione:
-3 Labels (Nome, Sinopse e Comentárrios como rótulos respectvos)
-3 JTextFields (com a propriedade nome (setName(”xxx”) respectivamente: nome, sinopse, comentarios).
-1 JButton (label: Salvar nome “salvar”)
Promovendo a Ligação da UI e Form via o Genesis BinderObserve apenas a anotação ViewHandler , e no construtor do JFrame nós instanciamos o Binder e o Form respectivo, e após a chamada que o NetBeans gera o método initComponents(), que inicializa todos os componentes, nós ligamos o objeto form a intancia do JFrame via o SwingBinder. No final inicializamos o binder.Pronto, apenas isso, seja 3 campos, ou 200, você terá ligado seus componentes visuais aos componentes de Regras(Forms), e estes por suas vez podem se ligar a qualquer modelo de persistencia: JPA, Hibernate, JDBC ou qualquer outro.
Bibliotecas Requeridas pro Exemplo
No Geneis use a priori todos os .jars na pasta dist, além dos jars da pasta /lib/scripts , todos os commons /lib/commons e o jackpot145.jar
O Binder do Genesis
Se você usa SWT ou Thinlet, você também pode usar todas essa funcionalidades.
Download da ultima versão estável do Genesis
Vá até o site http://genesis.dev.java.net
September 21st, 2006 at 6:01 am
Só pra dar uma Idéia: Publiquei um plugin que usa o Engine de Syntax Highlighting do jEdit pra fazer Syntax-Highlighting em Posts no Windows Live Writer (uma aplicação de Blogging, Free as in Beer, da Microsoft).
http://www.leal.eng.br/mnemetica/2006/08/27/announcing-lighter-for-windows-live-writer.html
Tem também uns plugins do WP, mas eles nunca são estáveis
September 21st, 2006 at 1:51 pm
Pois é Aldrin, mas tinhas que fazer um desse pra WordPress…rs, acredito que haja uma forma legal de fazer isso até via CSS, vou caçar um plugin desse e te aviso! []’s
Edgar
September 21st, 2006 at 4:37 pm
http://codex.wordpress.org/FAQ_Layout_and_Design#Is_there_a_tool_to_encode_HTML_entities_and_tags_so_I_can_display_code_on_my_weblog.3F
Eu sou dedicado, mas não doido: O WordPress muda de arquitetura a cada 15 min, e é feito em PHP. Tá bom ficar no Java e no .NET (e dando as escapadinhas em Python)
September 22nd, 2006 at 2:16 am
Haahahahah… Pois é lembrei de vc outro dia com a nova onda sobre o JRuby
September 23rd, 2006 at 9:23 am
Ruby me soou legal, mas algumas coisinhas (tipo o engatinhar de encoding, coisa que já está sedimentadíssima em perl, python, java e C/C++) me desmotivaram. Acredita que anaprodégua php mediano ainda acredita que um caractere pode ser representado em apenas 8 bits? Santa ignorança.
May 12th, 2007 at 12:13 am
Caras, to impressionado!!!
O NB eu já conhecia, agora esse Genesis apavora!!!
Sou meio leigo em framework para desenvolvimento swing, mas e o Swing Application Framework? é bom tb? qual a diferencça?
May 13th, 2007 at 5:22 pm
SAF - Visa trazer algumas dessas coisas do Genesis como padrão dentro de futuros JDKs.
May 7th, 2008 at 5:53 pm
Olá Edgar,
Estou estudando Genesis no momento mas estou achando muito estranho o Form estender o Bean de entidade. A meu ver o Form deveria atuar como Controller e possuir referências ao Dao e ao Bean, e não estender este último diretamente. Também fica estranho utilizar um bean obtido via JPA desta forma. Como você conseguiria estender um Form que já está instanciado pelo próprio JPA/Hibernate? Impossível ou difícil.
A solução parece ser criar um par de setters/getters no form para replicar todas as propriedades do Bean referenciado, e apenas “postar” as propriedades no Bean dentro de um Action. Isto porque o hibernate salva os beans automaticamente, e as propriedades do Form são alteradas muito cedo (quando cada componente perde o foco). Ou seja, não há opção de cancelar a edição de um Form, pois o Genesis faz este “post” muito cedo e de forma atomica. Criar getters e setters para tudo invalida toda a automatização do binding, pois exigirá um controle manual de cada propriedade. Fazer este “rollback” com transactions também não parece ser o ideal, mas é esta a solução sugerida pelo Genesis?
Enfim, me parece que o Genesis não se encaixa perfeitamente na combinação JPA/Hibernate + Spring + Swing + DAOs.
Abraços,
Paulo Schlup
Diretor de Tecnologia
WIAXIS
May 7th, 2008 at 8:49 pm
Acredito que nao encaixe mesmo Paulo….
Consulte o site e a lista do projeto, já que o Genesis é um projeto da minha antiga empresa.
[]s
E