A definição de um plug-in de aplicação cliente complexa começa de modo semelhante à dos outros plug-ins que temos vindo a estudar. A única diferença no ficheiro MANIFEST.MF é que a lista de plug-ins necessários é muito mais curta do que estamos habituados.
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.ui.examples.rcp.browser; singleton:=true Bundle-Version: 3.2.0.qualifier Bundle-ClassPath: browser.jar Bundle-Activator: org.eclipse.ui.examples.rcp.browser.BrowserPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin Require-Bundle: org.eclipse.core.runtime, org.eclipse.uiEclipse-AutoStart: true Eclipse-AutoStart-comment: Use Eclipse-AutoStart instead of Eclipse-LazyStart because the browser example should run against 3.1 as well as 3.2.
Até agora, contribuímos com funcionalidades para a área de trabalho da plataforma ao declararmos extensões que adicionam elementos à área de trabalho. Em todo o conteúdo do ficheiro plugin.xml que revimos até agora, só abordámos contributos individuais para uma área de trabalho que se presume esteja lá. Na aplicação cliente complexa, não existe aplicação alguma já definida. O plug-in de cliente complexo é o único responsável por especificar a classe que deve ser executada quando a plataforma for iniciada. Tal efectua-se no ponto de extensão org.eclipse.core.runtime.applications.
<extension point="org.eclipse.core.runtime.applications" id="app" name="%appName"> <application> <run class="org.eclipse.ui.examples.rcp.browser.BrowserApp"> </run> </application> </extension>
Nesta extensão, especificamos a classe que deve ser executada quando primeiro se iniciar a plataforma. Esta classe deve implementar IPlatformRunnable, o que significa simplesmente que deve implementar um método run. O método run é responsável por criar o ecrã de SWT e por iniciar com uma área de trabalho. A classe PlatformUI implementa métodos de conveniência para realizar estas tarefas.
public Object run(Object args) throws Exception { Display display = PlatformUI.createDisplay(); try { int code = PlatformUI.createAndRunWorkbench(display, new BrowserAdvisor()); // exit the application with an appropriate return code return code == PlatformUI.RETURN_RESTART ? EXIT_RESTART : EXIT_OK; } finally { if (display != null) display.dispose(); } }
A chamada de createAndRunWorkbench só devolve quando a área de trabalho estiver fechada. O ciclo de eventos de SWT e outra logística de baixo nível são tratados dentro deste método. Nesta fase, não é importante que compreenda os mecanismos subjacentes à execução de uma aplicação de SWT. Este código pode ser copiado para a aplicação cliente complexa com alterações mínimas. Aliás, o gancho com que se adiciona funcionalidades próprias é o WorkbenchAdvisor que é transmitido como argumento quando a área de trabalho é criada. Vejamos em mais pormenor.