Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En este tutorial introductorio se crear un plugin siguiendo una de las plantillas que
ofrece Eclipse. Concretamente se extender una vista para mostrar cierta informacin de
la plataforma.
Crear el proyecto
Se crear un proyecto de plugin con nombre org.example.demo y la informacin del
plugin se introducir como aparece en la imagen.
Tras esto, se nos indicar si deseamos crear el plugin siguiendo una plantilla,
escojeremos Plugin with a view. A continuacin se nos pedirn algunos datos para
generar el cdigo que crear el asistente.
Examinar la descripcin del plugin y la auyda de la extensin.
Descargar http://www.dsic.upv.es/~pginer/download/eclipse/tutorial1/tutorial1.java y
completar el cdigo de DemoView.java.
Crear un fichero en text/info.txt en el proyecto. Este fichero deber aadirse como parte
de la exportacin en la seccin Build Configuration.
Exportar como Deployable plugins and Fragments e indicar que se genere un fichero
Ant con nombre build-demo.xml.
Copiar el plugin en la carpeta plugins de eclipse y comprobar que funciona.
En este tutorial se mostrar como definir puntos de extensin y cmo crear extensiones
para stos. Como ejemplo se crear un sistema extensible de funciones aritmticas. El
usuario podr aplicar distintas funciones matemticas a un valor introducido (por
simplicidad, solo se consideran funciones con un parmetro de entrada). El sistema
estar formado por:
Un plugin que proporcionar la interfaz grfica que permita al usuario introducir
los datos, visualizar los resultados y ejecutar las distintas funciones.
Varios plugins que aportan las funciones aritmticas que se desea poder aplicar.
Las funciones que se pueden aadir debern tener un parmetro de entrada y podrn
acceder a un parmetro opcional de configuracin.
Este ejemplo ha sido tomado del artculo Notes on the Eclipse Plug-in Architecture1
actualizndolo a la nueva versin de Eclipse.
Plugin base
Fragmento 1: IFunction.java
La interfaz mostrada indica que los objetos que la implementen debern poseer un
mtodo compute que reciba un entero de tipo long y devuelva otro.
Copiar FunctionsGrid al proyecto
Descargar FunctionsGrid.java de:
http://www.dsic.upv.es/~pginer/download/eclipse/tutorial2/FunctionsGrid.java
FunctionsGrid es la definicin de la interfaz grfica de la aplicacin. Hay algunos
aspectos a destacar:
El constructor de FunctionsGrid recibe como parmetro un objeto de tipo Composite
sobre el que agrega los elementos de la interfaz. El mtodo addFunction se usar para
aadir nuevos botones que permitan invocar las nuevas funciones aritmticas. Recibe
como parmetro el objeto IFunction a invocar as como datos de la funcin para
presentarlos al usuario como un nombre, etiqueta y el valor de la constante de
configuracin usado.
http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html
package org.example.calculator.ui;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
Fragmento 2 CalculatorViewPart.java
Extensiones
Con esto hemos especificado que la extensin consistir en una secuencia de una o ms
funciones y estas funciones estarn definidas por un nombre, una clase que las
implementar y una constante que se podr indicar en tiempo de extensin
parametrizando esta.
Procesar las exensiones desde el plugin base
El plugin base necesita tener algn tipo de acceso a las extensiones ya que en funcin de
estas deber crear un nmero variable de botones, sin embargo estas solo se conocen en
7
org.eclipse.core.runtime.CoreException;
org.eclipse.core.runtime.IConfigurationElement;
org.eclipse.core.runtime.IExtension;
org.eclipse.core.runtime.IExtensionPoint;
org.eclipse.core.runtime.Platform;
org.eclipse.ui.WorkbenchException;
Fragmento 3 ProcessServiceMembers.java
Fragmento 4 CalculatorViewPart.java
Plugin Simple
Crear proyecto de plugin: org.example.calculator.copia
En la seccin Dependencias aadir org.example.calculator.ui como dependencia.
Crear una clase Copia que implemente la interfaz IFunction.
package org.example.calculator.copia;
import org.example.calculator.ui.IFunction;
public class Copia implements IFunction {
@Override
public long compute(long x) throws ArithmeticException {
return x;
}
}
con
ID:
Plugin Avanzado
Los plugins pueden aportar mltiples extensiones a otros plugins, en este ejemplo se
crear un plugin que defina dos extensiones: doble y triple. El plugin contendr una
nica funcin, multiplicar, que har uso el parmetro constant definido para las
extensiones.
Crear un proyecto de plugin con nombre org.example.calculator.multiplicar
En la seccin Dependencias aadir org.example.calculator.ui como dependencia.
La Funcin a aadir se definir en una clase. Esta deber implementar la interfaz
IFunction y IExecutableExtension.
10
La interfaz IFunction exige definir el mtodo que especificar la operacin. En este caso
el valor devuelto ser el resultado de multiplicar el parmetro de entrada por la
constante de configuracin.
La interfaz IExecutableExtension fuerza a implementar el mtodo setInitializationData,
que servir para obtener precisamente el valor de la constante introducida en la
definicin de la extensin.
package org.example.calculator.multiplicar;
import
import
import
import
org.eclipse.core.runtime.CoreException;
org.eclipse.core.runtime.IConfigurationElement;
org.eclipse.core.runtime.IExecutableExtension;
org.example.calculator.ui.IFunction;
11
Fragmento 5 Multiplicar.java
Consideraciones importantes
La clase ProcessServiceMembers encargada de aadir para cada extensin la parte de
interfaz grfica correspondiente. En el cdigo presentado, el objeto que implementa la
funcin es recuperado. Sin embargo para evitar un derroche innecesario de recursos, la
estratgia habitual es crear un Proxy.
Los proxies son representantes locales (ms ligeros) de un objeto. De este modo el
Proxy se crear a partir de la informacin de la extensin y solo se instanciar el objeto
correspondiente cuando sea necesario utilizar el objeto. Adems por brevedad se habian
eliminado algunas comprobaciones relativas a la gestin de excepciones. ste cdigo es
especialmente importante ya que permite detectar errores en la especificacin de
extensiones y garantizar que solo se consideren las extensiones correctas. El cdigo
completo se recoge a continuacin:
package org.example.calculator.ui;
import
import
import
import
import
import
org.eclipse.core.runtime.CoreException;
org.eclipse.core.runtime.IConfigurationElement;
org.eclipse.core.runtime.IExtension;
org.eclipse.core.runtime.IExtensionPoint;
org.eclipse.core.runtime.Platform;
org.eclipse.ui.WorkbenchException;
12
Fragmento 6 ProcessServiceMembers
13