Eclipse Extensibility João Paulo –jpsm Mário Barbosa - mbaj O Que é o Eclipse ? • Plataforma Open Source • Baseada em um sistema de plug-ins • Doada para o Eclipse Foundation pela IBM em 2004 • Inicialmente IDE Java • Multiplataforma Eclipse Public License (EPL) Desenvolvimento do Eclipse • Arquivos fontes de Java: 9.689 • Linhas de código em Java: 1.903.219 • JUnits usados automaticamente em cada Build: 21.332 • Instâncias da palavra “foo”: 224 • Número de rosquinhas comidas: 1120 Arquitetura IDE´s do Eclipse • JDT (Java Development Tooling) • PDE (Plug-in Development Environment) • CDT (C/C++ Development Tools) • AJDT (AspectJ Development Tools) • COBOL • VE (Visual Editor) • WTP (Web Tools Platform) • WST(Web Standard Tools) • JST (J2EE Standard Tools) • Pollinate • WSVT ( Web Service Validation Tools) • Hyades • OMONDO RCP • RCP (Rich Client Plataform) ▫ Plataforma para construir aplicações de Clientes com uma rica funcionalidade • Open Source/Free • Iniciada em 2003 (desde o Eclipse 2.1) Dentro do RCP • Runtime Components ▫ OSGi – Open System Gateway initiative Aplicações/Bundles ▫ Extensões • UI Components ▫ SWT – Standard Widget Toolkit ▫ Jface – Framework de abstração de UI ▫ Workbench View/ Editors/ Actions/ Perspective … ▫ Text/ Form/ GEM Dentro do RCP • User Experience/ Assistence ▫ Introdução ao plugin “Bem vindo ao nosso produto” ▫ Dicas “Mostre me como fazer” ▫ Ajuda do Eclipse Baseada em XML/ XHTML Dentro do RCP • Disponibilização/ Updates ▫ Disponibilização Suporta JNLP (webstart) ▫ Update de programas ▫ Update de UI ▫ Update de Funcionalidades Arquitetura RCP Platform architecture Platform Runtime • Descobre dinamicamente os plug-ins instalados • Plug-ins são ativados após ação do usuário OSGi • • • • Open Service Gateway initiative Pequena camada runtime Procurar e ativa plugins Maior compatibilidade e portabilidade ▫ Hardware ▫ Systemas Operacionais JDT (Java Development tooling) • Utilizam extension points. Frameworks ▫ Conjunto de plug-ins • Contribuições no desenvolvimento de programas ▫ ▫ ▫ ▫ Escrita Compilação Teste Debug PDE (Plug-in development environment) • Possui um conjunto de ferramentas para o desenvolvimento de plug-ins ▫ ▫ ▫ ▫ ▫ ▫ New Project Creation Wizards Import wizards Export wizards Views Conversion tools ... SWT • SWT (Standard Widget Toolkit) • IBM desenvolveu o VisualAge ▫ IDE desenvolvida em Smalltalk ▫ Virou um projeto OpenSource • Uma nova GUI Toolkit ▫ Look and Feel Nativo ▫ Performance Nativa JFace • Framework orientado a objeto • SWT Widgets Workbench UI • Implementam o “cockpit” do usuário • Define extension points para UI components ▫ ▫ ▫ ▫ ▫ Menu and tool bar actions Drag and drop Dialogs Viewers ... Workbench Plug-ins são componentes • Cada plug-in representa um conjunto de funcionalidades que podem ou não ser extendidas de outros plug-ins • Possuem um ou mais extension points • Cada plug-in é definido em seu próprio arquivo plugin.xml e se encontra em seu próprio subdiretório ou jar Plugin.xml Desenvolvendo um Plug-in • Decidir como ele será integrado a plataforma • Identificar os extensions-points a serem utilizados • Implementar os extension-points de acordo com sua especificação • Prover um manifest file (manifest.mf) e um plugin-manifest (plugin.xml) HelloWorld – Plug in Project • Selecione File -> New Project • Escolha a opção Plug-in project • Insira o nome do projeto HelloWorld – Plug-in Content • Digite o id, versão e nome do plug-in Hello World - Templates • Selecione o template Plug-in with a view e clique next HelloWorld – Main View Settings • Mude os nomes gerados automaticamente e clique em Finish Código simplificado Substitua o código da classe do plugin pelo código abaixo package com.example.helloworld; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.SWT; import org.eclipse.ui.part.ViewPart; public class HelloWorldView extends ViewPart { Label label; public HelloWorldView() { } public void createPartControl(Composite parent) { label = new Label(parent, SWT.WRAP); label.setText("Hello World"); } public void setFocus() { // set focus to my widget. For a label, this doesn't // make much sense, but for more complex sets of widgets // you would decide which one gets the focus. } } plugin.xml gerado Dê dois cliques em plugin.xml no Package Explorer e selecione a aba plugin.xml <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.2"?> <plugin> <extension point="org.eclipse.ui.views"> -> única extensão utilizada <category name="Hello Category“ id="com.example.helloworld"> </category> <view name="Hello View" icon="icons/sample.gif" category="com.example.helloworld" class="com.example.helloworld.views.HelloWorldView" id="com.example.helloworld.views.HelloWorldView"> </view> </extension> </plugin> Manifest.mf gerado • Possui meta dados do plug-in (clique na aba manifest.mf para visualizá-lo) Rodando o plug-in • Na aba overview clique em Launch an Eclipse application ou rode a aplicação normalmente como eclipse application Referências • http://pesquompile.wikidot.com/eclipse-n • http://www.slideshare.net/vijaykiran/eclipse-rcp • http://www.slideshare.net/joomlatools/joomladay-nl-2008debugging-joomla-in-eclipse-338480 • http://www.slideshare.net/ciukes/introduction-to-the-eclipseplatform-141827 • http://www.slideshare.net/neerajbhusare/eclipse-modelingframework • http://www.slideshare.net/fbahr/introduction-to-the-graphicalmodeling-framework-gmf • http://www.cjug.org/presentations/2005/Sep01west/eclipse_rcp.p df • http://wiki.eclipse.org/index.php/Rich_Client_Platform • http://wiki.eclipse.org/RCP_FAQ • Eclipse HELP Dúvidas