1o Seminário do Projeto VAS – Verificação de Arquiteturas de Software 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 zObjetivo zVisão geral de um plugin no Eclipse zMigração (swing SWT + JFace + plugin) zFerramentas e Técnicas usadas
Objetivo Fase 1 zMapear a ferramenta Repository Explorer de CBabel para a plataforma Eclipse ySwing -> SWT + Jface + plugin yImplementar um editor highlight syntax para CBabel yIntegrar o compilador CBabel Fase 2 zCom o resultado da fase 1, propor a migração do repositório de CBabel para EMF (Eclipse Modeling Framework) yModelo de CBabel -> EMF yArquiteturas descritas -> XML / XMI Fase 3 zPreparar a tradução dos modelos de CBabel para Maude e vice-versa zPreparar 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 <library name= Cbabel.jar Platform Runtime WorkBench JFace SWT Outras Ferramentas Compilador CBabel Ferramenta XPTO Plataforma Eclipse Workspace Projeto Eclipse
Migração (swing SWT + JFace + plugin) zProcesso 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 zA interface gráfica do Repository Explorer foi modificada para se adaptar ao ambiente do Eclipse. As modificações principais foram: yBarra de tools substituída por um menu na View; yAs tables foram colocadas uma ao lado da outra, diferente da interface original; yA 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 zParte do arquivo de Manifest (em XML) yUma view Ponto de extensão <extension point="org.eclipse.ui.views"> <category name="Compiladores" id="org.eclipse.CBabel"> <view name="CBabel Repository Explorer" icon="icons/tree20.gif" category="org.eclipse.CBabel" class="org.eclipse.Arvores.TDCB" id="org.eclipse.Arvores.TDCB">
Plugins contribuídos zPlugins utilizados zClasses utilizadas de cada plugin zIndicação no Manifest z Org.eclipse.ui; - ViewPart Class z Org.eclipse.jface - Actions Package - IMenuManager Class - Action Class - Viewers Package - TableViewer Class z Org.eclipse.swt - Widgets Package - Custon Package - Layout Package
Declaração dos Plugins no arquivo de Manifest org.eclipse.core.swt org.eclipse.resources org.eclipse.jface org.eclipse.ui </requires
A Classe TDCB zArquivo 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 zPesquisa em interface gráfica, tanto em Swing como em Swt, bem como o aprendizado na plataforma Eclipse de desenvolvimento. zNoções de descrição de arquitetura (mais especificamente a linguagem CBabel) para realizar o trabalho. zA implementação da interface gráfica em SWT no Eclipse ainda esta em andamento. yA 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. zApó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 zwww-106.ibm.com/developerworks/opensource/library/os-ecgui1/www-106.ibm.com/developerworks/opensource/library/os-ecgui1/ zwww.swt-designer.com/ zwww.eclipse.org/TreeViewerArticle.htm+MovingBox+plugin&hl=pt&ie=UTF-8