De Javier Onsurbe:
En mi opinión para entender bien una herramienta hay que meterse en harina, así que me he decido a realizar una addon de Spring ROO.
En esta primera parte veremos como funcionan los addons de ROO y como podemos manipularlos.
La consola nos permite superar lo que los escritores llaman el “reto de la hoja en blanco”. Ya que podemos generar un Addon basico desde la misma.
Para ello crearemos un directorio llamado “miPrimerAddon” y desde el mismo arrancaremos la consola, una vez en ella crearemos el proyecto de addon a partir del template que se nos proporciona a traves del comando:
>project –topLevelPackage org.unpocodejava.roo.addon –template ROO_ADDON_SIMPLE
Con esto tenemos creado el proyecto y las clases básicas, para continuar agregamos el soporte para eclipse:
>perform eclipse
Y lo importamos desde eclipse.
Lo primero que podemos observar es que se han creado 3 clases:
- Commands que implementa CommandMarker
- Operations
- PropertyName que implementa Comparable<PropertyName>.
Esta proyecto ya es un addon plenamente funcional, y para ver que hace cada clase lo mejor es instalar el addon tal cual, sin tocar nada. Para ello ensamblamos el addon
>perform assembly
Y lo instalamos
addon install –url file:/k:/Implementacion/miPrimerAddon/target/org.unpocodejava.roo.addon-0.1.0-SNAPSHOT.zip
![]() |
Ahora vamos a ver cual es la funcionalidad cubierta por este addon básico y que parte del código nos proporciona la misma.
Podemos observar que tenemos disponibles los comandos welcome:
- welcome property
- welcome write hello
- welcome write hej
Command
Si echamos un vistazo a la clase Command veremos que la misma nos ofrece la funcionalidad de estos comandos a partir de tres anotaciones:
@CliAvailabilityIndicator(”…”):
Que nos indica que este metodo es el encargado de comprobar la disponibilidad del comando en un momento dado, realizando las comprobaciones que sean necesarias. En este caso son muy básicas pero podríamos necesitar realizar una serie de chequeos para decidir si debemos permitir su ejecución o no.
@CliCommand(value=”…”,help=”…”,…):
Esta anotación nos indica el método que se va a ejecutar cuando llamemos a ese comando, dentro del mismo principalmente se utiliza la propiedad operations para llamar a las operaciones (métodos) declaradas en la clase Operations que explicaremos a continuación.
@CliOption:
Si echamos un vistazo al método property, podemos ver que se utiliza esta tercera anotación en el parámetro del método, de esta manera indicamos que el comando acepta una opción llamada name.
Veremos más claramente el funcionamiento de las opciones al repasar la clase PropertyName.
Operations
Esta clase contiene las operaciones que vamos a realizar en el addon, y las misma nos ofrece acceso a los managers o servicios que ROO nos proporciona para interactuar con el proyecto. La asignación de esos managers se realiza a través del constructor de la clase como podemos observar en el código:
public Operations(FileManager fileManager,
MetadataService metadataService) {
Assert.notNull(fileManager, «File manager required»);
Assert.notNull(metadataService, «Metadata service required»);
this.fileManager = fileManager;
this.metadataService = metadataService;
}
En este caso solo se esta cargando el manager de ficheros y servicio de metadatos, si necesitásemos alguno más solo tendríamos que agregarlo al constructor y cargarlo en una propiedad para tenerlo disponible.
Por ejemplo, si desde nuestro addon necesitásemos modificar las dependencias del proyecto lo incluiríamos en nuestro constructor:
public Operations(FileManager fileManager,
MetadataService metadataService,
ProjectOperations projectOperations)
Y haciendo uso del mismo podríamos manipular las dependencias según nuestras necesidades.
PropertyName
Para terminar esta la clase PropertyName, esta clase nos proporciona las diferentes opciones asociadas al @CliOption y su comportamiento es muy sencillo.
Si en este ejemplo el comando welcome property –name y pulsamos el tabulador vemos que tenemos las opciones USERNAME y HOME_DIRECTORY, los cuales se corresponden con los nombres de las constantes de esta clase a los cuales se les asocia un valor a través del constructor:
publicstaticfinal PropertyName USERNAME = new PropertyName(«Username»);
Si necesitamos agregar una nueva opción solo tendríamos que agregar otra linea en la clase, por ejemplo, para agregar la opción JAVA_HOME, introduciríamos:
publicstaticfinal PropertyName JAVA_HOME = new PropertyName(«Java Home»);
Y cuando instalemos el addon nuevamente esta opción estará disponible.
Continuará…


Replica a Spring Roo 1.1: addons con dependencias « Java Mania Cancelar la respuesta