Definir una aplicación cliente rica

El proceso de definir un conector de aplicación cliente rica se inicia de forma parecida a la de los demás conectores que hemos estudiado. La única diferencia en la primera parte del código consiste en que la lista de conectores necesarios es mucho más reducida que las que hemos utilizado hasta ahora.

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin
   id="org.eclipse.ui.examples.rcp.browser"
   name="%pluginName"
   version="3.0.0"
   provider-name="%providerName">

      <runtime>
      <library name="browser.jar">
      </library>
      </runtime>
   <requires>
      <import plugin="org.eclipse.core.runtime"/>
      <import plugin="org.eclipse.ui"/>
   </requires>

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 conector 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.