Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework.

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Desenvolvimento de Plug-ins Orientado a Testes
Programação em Java Prof. Maurício Braga
Sistemas distribuídos
Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005
Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Iniciando na plataforma Eclipse
Prof. Thiago Pereira Rique
Creating IDEs for the Eclipse Platform Survey de Introdução à Investigação.
Projeto de Sistemas de Software
PRDS - Programa de Residência em Desenvolvimento de Software Laboratório de Engenharia de Software (LES) da PUC-Rio Carlos Lucena
Singleton.
Programação Concorrente
Wagner Santos C. de Jesus
Tutorial II: Tratando eventos em Java
Tutorial I: Criando a interface de uma aplicação em Java
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
Classes & Objectos em JAVA5
Componentes GUI GUI – Grafical User Interface – São construídas a partir de componentes GUI chamados de controles ou widgets (windows gadgets – engenhocas.
CRIANDO OBJETOS EM JAVA
O Mecanismo de Threads em Java 2. Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends.
Concorrência em Java Threads em Java.
Threads: Introdução e Implementação
Programação Orientada a Objetos com Java
JAVA Linguagem Ambiente de Desenvolvimento
Introdução a Java: Classes, métodos e variáveis Eduardo Figueiredo 24 de Março de 2010 POOAula 05.
Java – Programação Gráfica
Paradigmas da Programação – Semestre 2 – Aula 2 Introdução ao VS.Net Professores: Fábio de Paula Santos Eduardo Mantovani.
Linguagem de Programação III
Chamada Remota de Procedimentos
Interface Gráfica (material da Profa. Luciana Nedel - www. inf. pucrs
Desenvolvimento para Android Aula 7 - Services
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
Cristiano Soares Rafael di Lego Roberto Nemirovsky Thiago Nascimento
Orientação a Objetos e Java Graduação em Ciência da Computação
Pilhas Profa. Nádia Félix.
Wagner Santos C. de Jesus
Implementação MVC Pedro Antonino.
Tratamento de Exceções
POO Interface Gráfica - Swing
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Polimorfismo.
Bruno Inojosa MCP.NET Framework.NET com C#. Aula V  Tópicos abordados:  Desenvolvendo para internet (Parte III) Gerenciamento de Estados User Controls.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
CAD AutoCAD Mouse Menu de barras.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Eclipse Extensibility João Paulo –jpsm Mário Barbosa - mbaj.
Programação para Dispositivos Móveis Prof. Wallace Borges Cristo.
JavaServer Faces Rapid Web Application Development em Java Ricardo Cavalcanti Jobson Ronan
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Socket em Java.
Programação Prof.: Bruno Rafael de Oliveira Rodrigues.
POO - II PROF.: JEAN CARLO MENDES
1 Visual Basic Maria Alice Grigas Varella Ferreira EP-USP Abril 2003.
Modificadores Programação II.
1 Baseado em whitepapers/eclipse-overview.pdf Nelson Lago IME/USP 04/2003 A Plataforma Eclipse.
Programação Gráfica em Java Introdução
Coordenação Regional de Tecnologia na Educação
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Java Módulo II Projeto Final.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
ASP.NET Passo a Passo Controles com Processamento Personalizado Criando um controle personalizado 1. Abra ou copie a solução ControlORama desenvolvido.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
ProgramaçãoConcorrente Glêdson Elias
Primeiros passeios no código Java para Android. Manifest
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Eclipse RCP Felype Santiago

Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework padrão para construção; –Um toolkit de desenvolvimento portável; –Manipulação de arquivos, gerenciamento e edição de texto; –Workbench (views, editores, perspectivas, wizards); –Gerenciador de atualizações

Eclipse Rich Client Plataform Components Middleware and infrastructure Native user experience Portability Intelligent install and update Disconnected operation Development tooling support Component librarires

Uses of Eclipse RCP IBM Lotus Workspace Maestro

Uses of Eclipse RCP TAFPlus2 TaRGeT

Perspectivas, Views e Editores O usuário pode organizar o conteúdo das perspectivas das seguintes formas: –Pilha de editores com outros editores; –Pilha de views com outras views; –Desencaixar views da janela principal do Workbench; –Redimensionar views e editores e minimizar/maximizar pilhas de views e editores

Application Java Application -> main() Eclipse Application -> Application public class Application implements IPlatformRunnable { public Object run(Object args) throws Exception { Display display = PlatformUI.createDisplay();... int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); } Cria um display e inicia um Workbench Eclipse, que ficará em loop manuseando eventos. O loop só é encerrado quando a última janela é fechada. Precisa implementar

Workbench Advisor Diz ao Workbench como se comportar –O que desenhar –Como desenhar public String getInitialWindowPerspectiveId() { return PERSPECTIVE_ID; } Informa a perspectiva inicial que será mostrada

Perspective A classe precisa implementar IPerspectiveFactory

WorkbenchWindowAdvisor Toda janela da aplicação tem um advisor que é consultado durante vários pontos do ciclo de vida dela; public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setInitialSize(new Point(250, 300)); configurer.setShowCoolBar(false); configurer.setShowStatusLine(false); configurer.setTitle("Hyperbola"); }

ActionBarAdvisor Cria e posiciona ações no MenuBar da janela; É instanciado no WorkbenchWindowAdvisor; public class ApplicationActionBarAdvisor extends ActionBarAdvisor {... protected void makeActions(IWorkbenchWindow window) { } protected void fillMenuBar(IMenuManager menuBar) { }... }

Criando uma aplicação

Hello RCP

Save and Restore public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor public void initialize(IWorkbenchConfigurer configurer) { configurer.setSaveAndRestore(true); }... } O método inicialize marca o início de ciclo de vida do advisor.

Adicionando uma View

public class ContactsView extends ViewPart { public static final String ID = "org.eclipsercp.hyperbola.views.contacts"; }

Adicionando uma View public class Perspective implements IPerspectiveFactory {... public void createInitialLayout(IPageLayout layout) { layout.setEditorAreaVisible(false); layout.addView(ContactsView.ID, IPageLayout.LEFT, 1.0f, layout.getEditorArea()); }... }

View adicionada! :D

Mas e se... Nada acontecer?

Save and Restore, lembra?

Somente uma view...

Pra que tab? public class Perspective implements IPerspectiveFactory {... public void createInitialLayout(IPageLayout layout) { layout.setEditorAreaVisible(false); layout.addStandaloneView(ContactsView.ID, false, IPageLayout.LEFT, 1.0f, layout.getEditorArea()); }... }

Adicionando Menus e ToolBar public void ApplicationWorkbenchWindowAdvisor.preWindowOpen() {... configurer.setShowMenuBar(true); configurer.setShowCoolBar(true);... }

Criando ações protected void ApplicationActionBarAdvisor.makeActions(IWorkbenchWindow window) { exitAction = ActionFactory.QUIT.create(window); register(exitAction); aboutAction = ActionFactory.ABOUT.create(window); register(aboutAction); } Na seqüência de chamada do ActionBarAdvisor, o makeActions() é chamado antes do fillMenuBar(), o que permite que uma mesma ação seja colocada em vários locais diferentes.

Populando o MenuBar protected void ApplicationActionBarAdvisor.fillMenuBar(IMenuManager menuBar) { MenuManager hyperbolaMenu = new MenuManager("&Hyperbola", "hyperbola"); hyperbolaMenu.add(exitAction); MenuManager helpMenu = new MenuManager("&Help", "help"); helpMenu.add(aboutAction); menuBar.add(hyperbolaMenu); menuBar.add(helpMenu); }

Resultado

Adicionando actions à ToolBar public class AddContactAction extends Action implements ISelectionListener, ActionFactory.IWorkbenchAction {... public void run() { AddContactDialog d = new AddContactDialog(window.getShell()); int code = d.open(); if (code == Window.OK) { Object item = selection.getFirstElement(); ContactsGroup group = (ContactsGroup) item; ContactsEntry entry = new ContactsEntry(group, d.getUserId(), d.getNickname(), d.getServer()); group.addEntry(entry); }... }

Adicionando actions à ToolBar protected void makeActions(IWorkbenchWindow window) {... addContactAction = new AddContactAction(window); register(addContactAction);... }

Adicionando actions à ToolBar protected void fillCoolBar(ICoolBarManager coolBar) { IToolBarManager toolbar = new ToolBarManager(coolBar.getStyle()); coolBar.add(toolbar); toolbar.add(addContactAction); }

Reusando um action protected void fillMenuBar(IMenuManager menuBar) {... hyperbolaMenu.add(addContactAction);... } Uma mesma ação pode ser colocada em vários locais diferentes.

Adicionando barra de status public void preWindowOpen() {... configurer.setShowStatusLine(true);... }

Adicionando barra de status public void postWindowOpen() {... statusImage = AbstractUIPlugin.imageDescriptorFromPlugin( "org.eclipsercp.hyperbola", IImageKeys.ONLINE).createImage(); IStatusLineManager statusline = getWindowConfigurer().getActionBarConfigurer(). getStatusLineManager(); statusline.setMessage(statusImage, "Online"); } public void dispose() {statusImage.dispose();}

Barra de status IStatusLineManagers: Manager específico para barra de status –setMessage(Image, String); –setErrorMessage(Image, String); –getProgressMonitor; Esses métodos só podem ser chamados após a criação dos controles da barra de status. Uma vez que ActionBarAdvisor.fillStatusLine() é chamado antes da criação da barra de status, esses métodos não podem ser usados nele; Um bom local para efetuar essas chamadas é WorkbenchWindowAdvisor.postWindowOpen()

Integração com a bandeja do sistema (system tray) public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {... private TrayItem initTaskItem(IWorkbenchWindow window) { final Tray tray = window.getShell().getDisplay().getSystemTray(); if (tray == null) return null; trayItem = new TrayItem(tray, SWT.NONE); trayImage = AbstractUIPlugin.imageDescriptorFromPlugin( "org.eclipsercp.hyperbola", IImageKeys.ONLINE).createImage(); trayItem.setImage(trayImage); trayItem.setToolTipText("Hyperbola"); return trayItem; }... } O SO não dá suporte a system tray.

Adicionando funcionalidade ao tray item public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {... public void postWindowOpen() { … final IWorkbenchWindow window = getWindowConfigurer().getWindow(); trayItem = initTaskItem(window); if (trayItem != null) { hookPopupMenu(window); hookMinimize(window); } Adiciona listener ao popup. Adiciona ação para minimizar.

Adicionando listener ao popup do menu private void hookPopupMenu(final IWorkbenchWindow window) { // Add listener for menu pop-up trayItem.addListener(SWT.MenuDetect, new Listener() { public void handleEvent(Event event) { MenuManager trayMenu = new MenuManager(); Menu menu = trayMenu.createContextMenu( window.getShell()); actionBarAdvisor.fillTrayItem(trayMenu); menu.setVisible(true); } }); } protected void ApplicationActionBarAdvisor. fillTrayItem(IMenuManager trayItem) {trayItem.add(aboutAction);trayItem.add(exitAction);}

Ação para maximizar private void hookMinimize(final IWorkbenchWindow window) { window.getShell().addShellListener(new ShellAdapter() { public void shellIconified(ShellEvent e) { window.getShell().setVisible(false); } }); trayItem.addListener(SWT.DefaultSelection, new Listener() { public void handleEvent(Event event) { Shell shell = window.getShell(); if (!shell.isVisible()) { shell.setVisible(true); window.getShell().setMinimized(false); } }); }

Views e Editores Editores focam na função principal da aplicação; Views provêem suporte a uma dada tarefa; Editores são compartilhados por múltiplas perspectivas em uma mesma janela; Editores e views não podem ser misturados em uma mesma pilha; Views podem ser extraídas da janela do Workbench; Views podem ser mostradas sem título;

Adicionando um Editor

public class ChatEditor extends EditorPart { public static String ID = "org.eclipsercp.hyperbola.editors.chat"; }

Criando o produto Configurações do produto; Splash screen; Informações no About Dialog; etc

Configuração do produto File -> New -> Other...

Configuração do produto Especifica a aplicação e o nome que será mostrado na barra de título dela.

Program Launcher

Referências "Eclipse Rich Client Platform - Designing, Coding and Packaging Java Applications" by Jeff McAffer and Jean-Michel Lemieux."Eclipse Rich Client Platform - Designing, Coding and Packaging Java Applications" atformhttp://en.wikipedia.org/wiki/Rich_Client_Pl atform Con_RCP_Tutorial_2006.pdfhttp://wiki.eclipse.org/images/d/d9/Eclipse Con_RCP_Tutorial_2006.pdf