Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Introdução ao Eclipse RCP

Veja neste artigo de Ricardo Lecheta uma ótimo introdução ao Eclipse RCP.

 

O popular Eclipse, é sem dúvida uma das IDE’s (Integrated Development Environment) mais utilizadas para desenvolvimento Java. O Eclipse se tornou famoso por utilizar SWT (Standard Widget Toolkit ) e por ser baseado numa arquitetura de plugins.

 

Porém o que poucos sabem é que é possível desenvolver aplicações “Rich Client” utilizando toda a arquitetura do Eclipse, de forma totalmente independente dele.

O Eclipse possui um ambiente chamado PDE (Plug-in Development Environment), que pode ser utilizado para desenvolver plugins ou aplicações Rich Client standalone.

 

Para entender melhor a aplicação que será construída neste artigo, nada melhor do que visualizar a imagem abaixo:

 

fig01RCP.JPG

Figura 1. Hello RCP.

 

Ao clicar no aplicativo “eclipse.exe” a aplicação Hello RCP será iniciada. Note que a estrutura de diretórios é a mesma utilizada pelo eclipse, como a pasta plugins e workspace. Na pasta plugins estão os plugins obrigatórios para a aplicação, assim como o próprio plugin que será construído neste artigo. No exemplo da imagem acima, foram construídas 2 Views, mas outros componentes do Eclipse também poderiam ser utilizados, como por exemplo (Actions, Editors, Perspectives, Preferences, etc).


Criando o projeto

Crie um novo projeto do tipo “plugin” utilizado o wizard: File -> New -> Project -> Plug-in Project, digite “Login” no nome do projeto e clique em Next. Selecione “Yes” para desenvolver uma aplicação Rich Client, e clique Next.

 

Na próxima tela são exibidos alguns templates de aplicações pré-definidas, selecione o template “Hello RCP” e clique em Finish.

 

O wizard vai criar um projeto do tipo Plugin que pode ser disponibilizado como uma aplicação Rich Client standalone. Automaticamente após a criação do projeto, o arquivo MANIFEST.MF será aberto no editor. Para iniciar a aplicação basta clicar em “Launch an Eclipse application”.

 

fig02RCP.JPG

Figura 2. MANIFEST.MF

 

Note que algumas classes foram criadas automaticamente pelo wizard:

 

  1. Activator: Classe que representa o plugin. Contém o método getImageDescriptor() que é útil para obter imagens.
  2. Application: Implementa a interface IplatformRunnable e representa a aplicação. Não é necessário alterar esta classe.
  3. ApplicationActionBarAdvisor: Classe responsável por construir os menus da aplicação, botões na barra de ferramentas, e definir as Actions responsáveis por executar as ações da aplicação. Posteriormente neste artigo, esta classe será alterada para criar o menu e Actions da aplicação de exemplo.
  4. ApplicationWorkbenchAdvisor: Classe que controla qual perspectiva deve ser exibida na tela.
  5. ApplicationWorkbenchWindowAdvisor: Contém configurações da aplicação, como o nome e tamanho da Janela, e alguns flags que indicam quais recursos estão habilitados, como por exemplo, se a barra de status será visível.
  6. Perspective: Classe que definie o layout das Views da aplicação. Conforme mostrado na Figura 1, a aplicação de exemplo define 2 Views, uma em cada lado da tela.

 

Desenvolvendo a aplicação

Conforme visualizado na Figura 1, a aplicação desenvolvida contém 2 Views, CadastroView e TabelaView.  Cada View precisa herdar de “org.eclipse.ui.part.ViewPart”, e sobrescrever o método “createPartControl” para desenhar os componentes na tela utilizado SWT.

 

Também é necessário declarar a View no arquivo plugin.xml, conforme visualizado abaixo:

 

figcod01RCP.JPG 

 

Note que a tag “class” no plugin.xml declara o nome completo da classe. Desta forma as Views precisam estar no pacote “login.view”, conforme declarado no arquivo.

 

Abaixo pode-se verificar o código fonte da classe CadastroView:

 

public class CadastroView extends ViewPart {

 

      public static final String ID = "CadastroView";

 

      public Text nome = null;

      public Text fone   = null;

 

      public void createPartControl(Composite parent) {

            parent.setLayout(new GridLayout(2,true));

 

            new Label(parent,SWT.NONE).setText("Nome: ");

            this.nome = new Text(parent, SWT.BORDER);

            new Label(parent,SWT.NONE).setText("Fone: ");

            this.fone = new Text(parent, SWT.BORDER);

 

            Button b = new Button(parent,SWT.PUSH);

            b.setText("Salvar");

            b.addSelectionListener(new SelectionAdapter() {

                  public void widgetSelected(SelectionEvent e) {

                        //Adicionar no Resultado

                        TabelaView.addColumn(nome.getText(),fone.getText());

                  }

            });

      }

 

      public void setFocus() {

      }

}

 

E a seguir o código da classe TabelaView:

 

public class TabelaView extends ViewPart {

 

      public static final String ID = "TabelaView";

      private static Table t;

 

      public void createPartControl(Composite parent) {

            t = new Table(parent, SWT.NONE);

            t.setHeaderVisible(true);

            t.setLinesVisible(true);

 

            TableColumn c = new TableColumn(t, SWT.NONE);

            c.setText("     Nome     ");

            c = new TableColumn(t, SWT.NONE);

            c.setText("     Fone     ");

 

            // mostrar as colunas

            for (int i = 0; i < t.getColumnCount(); i++) {

                  t.getColumn(i).pack();

            }

            populateTable();

      }

 

      private void populateTable() {

            addColumn("Pessoa A", "111-1111");

            addColumn("Pessoa B", "222-2222");

            addColumn("Pessoa C", "333-3333");

      }

 

      // Adicionar valores na Tabela

      public static void addColumn(String nome, String fone) {

            TableItem item = new TableItem(t, SWT.NONE);

            item.setText(0, nome);

            item.setText(1, fone);

      }

 

      public void setFocus() {

      }

}

 

Note que ambas as classes CadastroView e TabelaView declaram uma constante ID, onde o valor deve ser o mesmo declarado no  “plugin.xml”. Este ID é utilizado pela classe “Perspective” para posicionar as Views na janela. No código abaixo, cada View foi configurada para ocupar 50% da tela, e as constantes LEFT e RIGHT são utilizadas para controlar o layout.

 

public class Perspective implements IPerspectiveFactory {

      public void createInitialLayout(IPageLayout layout) {

            String editorArea = layout.getEditorArea();

            layout.setEditorAreaVisible(false);

 

            layout.addStandaloneView(CadastroView.ID,  true, IPageLayout.LEFT, 0.50f, editorArea);

            layout.addStandaloneView(TabelaView.ID,  true, IPageLayout.RIGHT, 0.50f, editorArea);

 

            layout.getViewLayout(TabelaView.ID).setCloseable(true);

            layout.getViewLayout(CadastroView.ID).setCloseable(true);

      }

}

 

A classe ApplicationActionBarAdvisor é responsável por declarar as Actions e também montar o menu da aplicação. Esta classe foi criada automaticamente pelo Wizard, basta alterar o código fonte, conforme abaixo:

 

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

    private IWorkbenchAction exitAction;

    private OpenViewAction openTableViewAction;

    private OpenViewAction openCadastroViewAction;

   

    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {

        super(configurer);

    }

   

    protected void makeActions(final IWorkbenchWindow window) {

        exitAction = ActionFactory.QUIT.create(window);

        register(exitAction);

 

        openCadastroViewAction = new OpenViewAction(window, "Abrir Cadastro", CadastroView.ID);

        register(openCadastroViewAction);

 

        openTableViewAction = new OpenViewAction(window, "Abrir Resultado", TabelaView.ID);

        register(openTableViewAction);

     }

   

    protected void fillMenuBar(IMenuManager menuBar) {

        MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);       

        menuBar.add(fileMenu);

 

        // File

        fileMenu.add(openTableViewAction);

        fileMenu.add(openCadastroViewAction);

        fileMenu.add(new Separator());

        fileMenu.add(exitAction);       

    }

}

 

Note que o código utiliza uma Action chamada “OpenViewAction”, que pode ser visualizada abaixo. O código fonte simplesmente chama o método “showView” passando como argumento o ID da View desejada.

 

public class OpenViewAction extends Action {

     

      private final IWorkbenchWindow window;

      private final String viewId;

 

      public OpenViewAction(IWorkbenchWindow window, String label, String viewId) {

            this.window = window;

            this.viewId = viewId;

 

        setText(label);

            setId("OpenView");

      }

 

      public void run() {

            if(window != null) {   

                  try {

                        window.getActivePage().showView(viewId);

                  } catch (PartInitException e) {

                        MessageDialog.openError(window.getShell(), "Error", "Error opening view:" + e.getMessage());

                  }

            }

      }

}

 

Agora que todo o código fonte está completo, é possível utilizar o editor do MANIFEST.MF para executar e debugar a aplicação dentro do Eclipse, conforme visualizado na Figura 2.

 

Criando o Produto (aplicação RCP)

O arquivo MANIFEST.MF pode ser utilizado para executar a aplicação e debugar o código dentro do ambiente do Eclipse. Porém a aplicação final, precisa rodar de forma totalmente independente. Para isto, é necessário criar uma configuração de “produto”, e exportá-la utilizando um wizard.

 

Clique em File -> New -> Other -> Product Configuration, digite “login.product” e selecione a pasta META-INF. Clique em Finish.

 

O editor de configuração do produto será aberto automaticamente quando o Wizard terminar. Através do Editor é possível exportar a aplicação clicando em “Eclipse Product export wizard”.

 

fig03RCP.JPG

Figura 3. login.product (utilizado para exportar a aplicação)

        

Antes de exportar o produto para o usuário final, é necessário criar um novo ID para o produto desenvolvido. Para isto clique em “New” no canto superior direito do editor. Selecione o Plugin “Login” que foi criado anteriormente, e digite “LoginID” no campo Product ID. Clique em Finish.

 

Agora clique na aba “Configuration” e clique em “Add”. Selecione o plugin “Login” criado anteriormente, e clique em “Add Required Plug-ins”. A imagem abaixo demonstra as configurações necesárias:

 

fig04RCP.JPG

Figura 4. Configurações dos plugins obrigatórios

 

A configuração acima é utilizada no momento de exportar a aplicação RCP. Todos os plugins utilizados serão exportados na pasta “plugins” da aplicação.

 

Desta forma, uma estrutura de diretórios simular a Figura 1 será criada.

 

É recomendável sempre apagar o diretório antigo (caso existir) quando exportar o produto.

 

Editor visual para SWT

 

Dica: O VEP (Visual Editor Project) pode ser utilizado para construir as telas em SWT visualmente. Abaixo pode-se verificar a classe CadastroView mostrada neste artigo, sendo construída com o editor do VEP:

 

http://www.eclipse.org/vep/WebContent/main.php

 

fig05RCP.JPG

 

Conclusão

Neste artigo foi apresentado como construir aplicações Rich Client usufruindo de alguns recursos disponíveis na plataforma Eclipse.

 

Confira mais sobre o Eclipse RCP no site oficial:

 

http://wiki.eclipse.org/index.php/Rich_Client_Platform

 

Alguns exemplos de aplicações RCP podem ser encontrados aqui:

 

Þ      http://www.eclipse.org/community/rcpos.php

Þ      http://www.eclipse.org/community/rcpcp.php

 





    4 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Marcio
O assunto é interessante, mas o artigo foi muito mal escrito. Faltou didática e clareza nas explicações.


em 16/11/2007 13:31 - Responder

 

Alexandre Thiel
Ricardo,

Tem como enviar ou disponibilizar os fontes deste projeto?

Grato,

Alexandre Thiel


em 12/9/2008 16:15 - Responder

 

Carlos Henrique

amigo não  consigo incluir o ve ao eclipse de   jeito nenhum 

fica dando  erro nas dependências  e uns códigos q eu não entendo

segui  o site deles para instalar mas não esta funcionando 

qual é  a instalação minima  q eu tenho q fazer para  usar ele ?



em 20/3/2010 08:22 - Responder

 

  Edgard Rosberg Duarte Leal
No momento de selecionar os plugins que serão adicionados, não selecione todos, selecione apenas o VE


em 9/2/2012 11:05 - Responder
 



[Este post ainda não foi associado a uma sequência]
Autor
Ricardo Rodrigues Lecheta

Ricardo Rodrigues Lecheta (ricardolecheta@terra.com.br), é autor do livro “Google Android” - Aprenda a criar aplicações para dispositivos móveis utilizando o Android SDK e possui as certificações SCJP, SCWCD, SCBCD, SCMAD, SCEA.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
2   2
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível para assinantes da Java Magazine ou para quem possui Créditos DevMedia.

  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03