VAS - Verificação de Arquiteturas de Software CBDT – CBabel Development Tools Integração do compilador CBabel e do Repository Explorer ao Eclipse Julio Heitor Silva Nóbrega Bolsista ITI - UERJ 19 de Março de 2004 UFF/Niterói 1o Seminário do Projeto VAS – Verificação de Arquiteturas de Software Integração do compilador Cbabel para a plataforma Eclipse Objetivo Visão geral de um plugin no Eclipse Migração (swing SWT + JFace + plugin) Ferramentas e Técnicas usadas 1o Seminário do Projeto VAS – Verificação de Arquiteturas de Software Objetivo Fase 1 Mapear a ferramenta Repository Explorer de CBabel para a plataforma Eclipse Swing -> SWT + Jface + plugin Implementar um editor highlight syntax para CBabel Integrar o compilador CBabel Fase 2 Com o resultado da fase 1, propor a migração do repositório de CBabel para EMF (Eclipse Modeling Framework) Modelo de CBabel -> EMF Arquiteturas descritas -> XML / XMI Fase 3 Preparar a tradução dos modelos de CBabel para Maude e vice-versa Preparar a geração de código Java a partir do modelo de CBabel em EMF Visão geral de um plugin no Eclipse <plugin id= “org.eclipse.Cbabel” name= “Cbabel Example” class= “org.eclipse.Cbabel.CBabelPlugin”> <requires <import plugin= “org.eclipse.core.resources”/> <import plugin= “org.eclipse.ui”/> </requires> <runtime> <library name= “Cbabel.jar” </runtime> </plugin> Projeto Eclipse Plataforma Eclipse WorkBench Outras Ferramentas JFace Compilador SWT CBabel Workspace Ferramenta Platform Runtime XPTO Migração (swing SWT + JFace + plugin) Processo de transferência do Repository Explorer CBabel/Swing para Eclipse. 1. Nova interface gráfica 2. O arquivo de Manifest 3. Plugins contribuídos 1. Conteúdo 2. Classes herdadas e métodos sobrescritos de outros plugins (contribuição) 3. Declaração dos plugins no arquivo XML 4. Adaptações do código original Nova interface gráfica A interface gráfica do Repository Explorer foi modificada para se adaptar ao ambiente do Eclipse. As modificações principais foram: Barra de tools substituída por um menu na View; As tables foram colocadas uma ao lado da outra, diferente da interface original; A maioria dos ícones foram removidos já que a barra de tools foi eliminada. Interface original do Repository Explorer Interface preliminar do Repository Explorer O arquivo de Manifest do novo plugin Parte do arquivo de Manifest (em XML) Uma view Ponto de extensão <extension point="org.eclipse.ui.views"> <category name="Compiladores" id="org.eclipse.CBabel"> </category> <view name="CBabel Repository Explorer" icon="icons/tree20.gif" category="org.eclipse.CBabel" class="org.eclipse.Arvores.TDCB" id="org.eclipse.Arvores.TDCB"> </view> </extension> Plugins contribuídos Plugins utilizados Classes utilizadas de cada plugin Indicação no Manifest Org.eclipse.ui; - ViewPart Class Org.eclipse.jface - Actions Package - IMenuManager Class - Action Class - Viewers Package - TableViewer Class Org.eclipse.swt - Widgets Package - Custon Package - Layout Package Declaração dos Plugins no arquivo de Manifest <requires> <import plugin=“org.eclipse.core.swt” /> <import plugin=“org.eclipse.resources”/> <import plugin=“org.eclipse.jface” /> <import plugin=“org.eclipse.ui” /> </requires A Classe TDCB Arquivo principal da view org.eclipse.CBabel.TDCB public class TDCB extends ViewPart { private CBabelAPI cbapi; . .// declarações de variáveis . public void createPartControl(Composite parent) { . . createActions(); createMenus(); createInterface(parent); . . } } Os Métodos createActions(), createMenu() e createInterface() protected void createMenus() { IMenuManager rootMenuManager = getViewSite().getActionBars().getMenuManager(); rootMenuManager.setRemoveAllWhenShown(true); rootMenuManager.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager mgr) { fillMenu(mgr); } }); fillMenu(rootMenuManager); } protected void fillMenu(IMenuManager rootMenuManager) { IMenuManager filterSubmenu = new MenuManager("File"); rootMenuManager.add(filterSubmenu); filterSubmenu.add(openRepository); filterSubmenu.add(save); filterSubmenu.add(close); } Os Métodos createActions(), createMenu() e createInterface() protected void createActions() { openRepository = new Action("Open Repository") { public void run() { String arquivo; FileDialog dialog = new FileDialog (shell,SWT.OPEN); dialog.setFilterNames (new String [] {"CBO Files", "All Files (*.*)"}); dialog.setFilterExtensions (new String [] {"*.cbo", "*.*"}); dialog.setFilterPath ("c:\\"); //Windows path dialog.setFileName ("pc5.cbo"); arquivo=dialog.open(); if(arquivo.length() != 0){ MessageDialog.openInformation(shell,"arquivo",arquivo); } } }; openRepository.setChecked(false); Os Métodos createActions(), createMenu() e createInterface() save = new Action("Save") { public void run() { String arquivo; FileDialog dialog = new FileDialog (shell,SWT.SAVE); dialog.setFilterNames (new String [] {"CBO Files", "All Files (*.*)"}); dialog.setFilterExtensions (new String [] {"*.cbo", "*.*"}); dialog.setFilterPath ("c:\\"); //Windows path dialog.setFileName ("pc5.cbo"); arquivo=dialog.open(); if(arquivo.length() != 0){ try{ FileOutputStream fos = new FileOutputStream(arquivo); PrintWriter pw = new PrintWriter(fos,true); pw.close(); // se nao colocar isto - nao grava... fos.close(); }//end try catch(Exception ex) { System.out.println(ex); } } }; save.setChecked(false); Os Métodos createActions(), createMenu() e createInterface() close=new Action("Close"){ public void run(){ } }; close.setChecked(false); } Conclusão Pesquisa em interface gráfica, tanto em Swing como em Swt, bem como o aprendizado na plataforma Eclipse de desenvolvimento. Noções de descrição de arquitetura (mais especificamente a linguagem CBabel) para realizar o trabalho. A implementação da interface gráfica em SWT no Eclipse ainda esta em andamento. A maior dificuldade está em substituir a arvore de repositório de Swing para SWT, já que a forma de construção da mesma no Eclipse é incompatível. Após a transferência do Repository Explorer, o próximo passo será colocar o próprio compilador CBabel no Eclipse com um editor de texto highlight syntax. Referências www-106.ibm.com/developerworks/opensource/library/os-ecgui1/ www.swt-designer.com/ www.eclipse.org/TreeViewerArticle.htm+MovingBox+plugin&hl=pt&ie=UTF-8