Definir una aplicación cliente rica

El proceso de definir un plug-in de aplicación cliente rica se inicia de forma parecida a la de los demás plug-ins que hemos estudiado. La única diferencia en el archivo MANIFEST.MF consiste en que la lista de plug-ins necesarios es mucho más reducida que las que hemos utilizado hasta ahora.

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.ui
Eclipse-AutoStart: true
Eclipse-AutoStart-comment: Utilizar Eclipse-AutoStart en lugar de Eclipse-LazyStart, ya que el ejemplo de navegador debe ejecutarse en 3.1 además de en 3.2.

Hasta ahora, hemos añadido funciones al entorno de trabajo de la plataforma declarando extensiones que añaden elementos al entorno de trabajo. En todo el contenido de plugin.xml que hemos examinado hasta ahora, sólo hemos observado contribuciones individuales a un entorno de trabajo que se presupone que está allí. En la plataforma cliente rica, aún no hay ninguna aplicación definida. El plug-in cliente rico es el responsable de especificar la clase que debe ejecutarse cuando se inicie la plataforma. Esta operación se realiza en la extensión 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>

En esta extensión, se especifica la clase que debe ejecutarse cuando la plataforma se inicia por primera vez. Esta clase debe implementar IPlatformRunnable, lo que simplemente significa que debe implementar un método run. El método run es responsable de crear la pantalla SWT e iniciar un entorno de trabajo. La clase PlatformUI implementa métodos de conveniencia para realizar estas tareas.

	public Object run(Object args) throws Exception {
		Display display = PlatformUI.createDisplay();
		try {
			int code = PlatformUI.createAndRunWorkbench(display,
					new BrowserAdvisor());
			// salir de la aplicación con un código de retorno adecuado
			return code == PlatformUI.RETURN_RESTART
					? EXIT_RESTART
					: EXIT_OK;
} finally {
			if (display != null)
				display.dispose();
		}
	}

La llamada a createAndRunWorkbench no efectuará el retorno hasta que se cierre el entorno de trabajo. El bucle de eventos de SWT y otra logística de bajo nivel se maneja dentro de este método. En esta fase, no es tan importante comprender los mecanismos subyacentes a la ejecución de una aplicación SWT. Este código puede copiarse en la aplicación cliente rica con cambios mínimos. De hecho, el gancho para que el usuario añada sus propias funciones es el WorkbenchAdvisor que se pasa como argumento cuando se crea el entorno de trabajo. Vamos a observarlo con mayor detalle.