Manual de desarrollo para la aplicación
A continuación se explican los pasos a seguir para añadir nuevas funcionalidades a la aplicación. Primeramente se explica cómo añadir nuevos tipos de componentes. A continuación se explica cómo desarrollar componentes para los tipos de componentes que la aplicación maneja en la versión actual, esto es, cómo desarrollar un plugin y un nuevo recurso. En cuanto al tipo de componentes "Logs", no tiene sentido el desarrollo de nuevos componentes de este tipo puesto que en este caso bastará con hacerlo desde la propia aplicación (cuando ésta funciona en standalone) ya que no hay escribir nada de código.
Es importante decir que la implementación de una nueva funcionalidad puede realizarse libremente. Tan sólo habrá que cumplir unos requisitos mínimos que se explican a continuación.
-
Desarrollo de nuevos tipos de componentes
Los pasos para el desarrollo de un nuevo tipo de componentes son los siguientes:
-
Crear una clase (por ejemplo la clase NuevoTipo) que implemente la interfaz TipoComponente del paquete es.agp.monitor.componentes. Por tanto, la clase deberá implementar el siguiente método:
-
public void obtenerComponentes(NodoArbol nodoArbol): Este método se encarga de obtener el árbol de componentes correspondiente al nuevo tipo de componentes que se está creando. Como parámetro recibe el nodo a partir del cual colgará el subárbol de componentes del nuevo tipo. Al implementar este método, será necesario crear nuevas clases que representen a los nodos propios de este tipo. Estas clases deberán heredar de la clase NodoArbol del paquete es.agp.monitor.componentes y por tanto implementar sus dos métodos abstractos:
-
public Componente obtenerComponente(): Este método se usa para obtener el componente asociado al nodo en cuestión y devuelve un objeto Componente, por tanto habrá que crear un nueva clase que implemente la interfaz Componente del paquete es.agp.monitor.componentes cuyos métodos son:
-
public void actualizarInformacion(): Este método se encarga de actualizar la información que almacena el componente.
-
public Informacion obtenerInformacion(): Este método obtiene la información que almacena el componente (no realiza una actualización de dicha información). Devuelve un objeto Informacion, por tanto habrá que crear una nueva clase que herede de la clase Informacion del paquete es.agp.monitor.componentes. Esta clase deberá implementar el siguiente método:
-
public InformacionTabla toInformacionTabla(): Este método transforma el objeto Informacion en un objeto InformacionTabla del paquete es.agp.monitor.componentes.
-
public InformacionTabla obtenerInformacionIntervalo(int segundosActualizacion, int numeroActualizaciones): Este método obtiene la información que el componente es capaz de mostrar durante un intervalo de tiempo. Este método es usado por la parte servidora de la aplicación (que funciona a través de servicios Web).
-
public void liberarRecursos(): Este método libera los recursos que están asociados a este nodo.
Esta nueva clase, además, debe tener dos métodos estáticos públicos:
-
public static NuevoTipo getInstance(): Este método se utiliza para obtener una instancia de la clase NuevoTipo creada.
-
public static NuevoTipo getInstance(String ficheroConfiguracion): Este método se utiliza para obtener una instancia de la clase NuevoTipo creada pasando como parámetro el fichero de configuración asociado al nuevo tipo de componentes. Hay que decir que no es obligatorio que el nuevo tipo de componente esté definido en un fichero XML, aunque los tipos de componentes definidos en la versión actual sí que lo están.
Todas las nuevas clases creadas hasta aquí pueden hacer uso de los métodos proporcionados por las clases de los paquetes es.agp.monitor.configuracion y es.agp.monitor.utilidades. En este punto, el nuevo tipo de componentes ya estaría preparado para ser utilizado en la aplicación distribuida. Bastaría con realizar lo planteado en el punto 3 para que funcionara. Pero si además se desea que el nuevo tipo de componente pueda ser utilizado en la aplicación standalone habría que realizar lo planteado en el punto 2.
-
Crear una clase (por ejemplo la clase NuevoTipoGrafico) que implemente la interfaz TipoComponenteGrafico del paquete es.agp.monitor.standalone.componentes. Esta clase deberá implementar los métodos:
-
public NodoArbolGrafico obtenerNodoArbolGrafico (NodoArbol nodo): Obtiene un NodoArbolGrafico a partir de un NodoArbol pasado como parámetro. Por tanto, aquí habrá que crear tantas clases que hereden de NodoArbolGrafico como clases que hereden de NodoArbol se hayan creado en el punto 1. Cada una de las clases que hereden de NodoArbolGrafico deberá implementar sus métodos abstractos que son:
-
public boolean isSeleccionable(): Devuelve si el nodo es seleccionable o no.
-
public String getNombreTab(): Devuelve el nombre que se le pondrá a la pestaña que muestra el componente asociado al nodo.
-
public Component getRepresentacion(): Devuelve la representación del nodo dentro del árbol de componentes. El nodo podrá ser representado como se desee siempre que herede de la clase java.awt.Component. Algunos ejemplos pueden ser JLabel, JCheckBox, etc.
-
public void cambiarSeleccion(): Cambia la selección del nodo, siempre que este nodo sea seleccionable, tanto de seleccionado a no seleccionado como al contrario.
-
public void setSeleccionado(boolean selección): Establece la selección del nodo a la nueva selección pasada como parámetro.
-
public void actualizar(): Actualiza la representación de lo que muestre el nodo.
-
public boolean buscarNuevosNodos(): Busca nuevos nodos hijos de este nodo y devuelve si ha cambiado o no la estructura.
-
public boolean borrarNodosNoDisponibles(): Borra los nodos hijos de este nodo que ya no estén disponibles y devuelve si ha cambiado o no la estructura.
-
public void inicializar(MonitorJTabbedPane contenedor): Inicializa el nodo para que sea capaz de mostrar información en el contenedor pasado como parámetro. En este método habrá que asociar al evento de seleccionar el nodo el mostrar el componente en el contenedor.
-
public void detenerActualizacion(): Detiene la actualización del componente asociado al nodo.
-
public void iniciarActualizacion(int milisegundos): Inicia la actualización del componente asociado cada número de milisegundos pasados como parámetro.
-
public Element exportarAXML(Document dom, File directorio): Exporta el contenido asociado al nodo a XML. Recibe como parámetro el DOM que se está creando y el directorio donde se está exportando para el caso de que la exportación requiera el crear nuevos archivos y devuelve un objeto Element, que representa un nodo del fichero XML.
-
public DatosXSL generarXSL(): Genera el XSL asociado al nodo (deberá ser coherente con exportarAXML) en forma de un objeto de la clase DatosXSL del paquete es.agp.monitor.standalone.componentes.
-
public JDialog obtenerDialogoConfiguracion(JFrame padre): Obtiene el diálogo que permite configurar el tipo de componente. Por tanto, habrá que crear los diálogos necesarios para configurar el tipo de componente. En caso de que no se quiera que el nuevo tipo de componentes pueda ser configurado desde la aplicación standalone habría que dejar este método sin implementar (devolviendo null).
La nueva clase creada, además, debe tener el siguiente método estático público:
-
public static NuevoTipoGrafico getInstance(): Este método se utiliza para obtener una instancia de la clase NuevoTipoGrafico creada.
Todas las clases creadas en este punto pueden hacer uso de los métodos que proporcionan las clases de los paquetes es.agp.monitor.configuracion, es.agp.monitor.utilidades y es.agp.monitor.standalone.utilidades.
-
Incluir el nuevo tipo de componente en cada uno de los ficheros XML de componentes correspondiente a cada idioma que soporta la aplicación (en la versión actual estos ficheros serían componentes_es.xml y componentes_en.xml).
-
Desarrollo de nuevos plugins
Los pasos para la creación de un nuevo plugin son los siguientes:
-
Crear una clase que herede de la clase ComponentePlugin del paquete es.agp.monitor.componentes.plugins y que implemente los siguientes métodos abstractos de dicha clase:
-
public void actualizarInformacion(): Este método se encarga de actualizar la información que almacena el plugin.
-
public Informacion obtenerInformacion(): Este método obtiene la información que almacena el plugin (no realiza una actualización de dicha información). Devuelve un objeto Informacion, por tanto habrá que crear una nueva clase que herede de la clase Informacion del paquete es.agp.monitor.componentes. Esta clase deberá implementar el siguiente método:
-
public InformacionTabla toInformacionTabla(): Este método transforma el objeto Informacion en un objeto InformacionTabla del paquete es.agp.monitor.componentes.
-
public InformacionTabla obtenerInformacionIntervalo(int segundosActualizacion, int numeroActualizaciones): Este método obtiene la información que el plugin es capaz de mostrar durante un intervalo de tiempo. Este método es usado por la parte servidora de la aplicación (que funciona a través de servicios Web).
Esta nueva clase, además, debe tener el siguiente método estático público:
-
public static ComponentePlugin getInstance(): Este método se utiliza para obtener una instancia del nuevo plugin creado.
Esta nueva clase creada y todas las posibles clases que se necesiten crear para implementar el plugin pueden hacer uso de los métodos proporcionados por las clases de los paquetes es.agp.monitor.configuracion y es.agp.monitor.utilidades. En este punto, el nuevo plugin ya estaría preparado para ser utilizado en la aplicación distribuida. Bastaría con realizar lo planteado en el punto 3 para que funcionara. Pero si además se desea que el nuevo plugin pueda ser utilizado en la aplicación standalone habría que realizar lo planteado en el punto 2.
-
Crear una clase (por ejemplo la clase PanelNuevoPlugin) que herede de la clase PanelPlugin del paquete es.agp.monitor.standalone.componentes.plugins y que implemente los métodos abstractos que están definidos en dicha clase:
-
public void detenerActualizacion(): Este método se usa para detener la actualización de la información mostrada por el plugin.
-
public void iniciarActualizacion(int tiempoActualizacion): Este método inicia la actualización de la información que muestra el plugin con un periodo de actualización que se pasa como parámetro.
-
public void actualizar(): Este método actualiza la información mostrada por el plugin.
-
public Element exportarAXML(Document dom): Este método se usa para exportar a XML la información mostrada por el plugin. Recibe como parámetro el DOM que se está creando y devuelve un objeto Element, que representa un nodo del fichero XML.
-
public DatosXSL generarXSL(): Genera el XSL asociado al nodo (deberá ser coherente con exportarAXML) en forma de un objeto de la clase DatosXSL del paquete es.agp.monitor.standalone.componentes.
Esta nueva clase debe implementar el siguiente método estático público:
-
public static PanelNuevoPlugin getInstance(ComponentePlugin plugin): Este método se utiliza para obtener una instancia de la clase PanelNuevoPlugin creada a partir de un objeto ComponentePlugin.
-
Incluir el nuevo plugin en cada uno de los ficheros XML que define el tipo de componentes "Plugins" correspondiente a cada idioma que soporta la aplicación (en la versión actual estos ficheros serían plugins_es.xml y plugins_en.xml).
-
Desarrollo de nuevos recursos
Los pasos para la creación de un nuevo recurso son los siguientes:
-
Crear una nueva clase que implemente la interfaz Recurso del paquete es.agp.monitor.componentes.recursos y que, por tanto, implemente los siguientes métodos:
-
public String[] obtenerNombresInstanciasRecurso(): Este método devuelve un array con los nombres de las instancias del nuevo recurso.
-
public ComponenteInstanciaRecurso obtenerInstanciaRecurso(String instancia): Este método devuelve un objeto de la clase ComponenteInstanciaRecurso a partir del nombre de la instancia pasado como parámetro. Aquí será necesario crear al menos una clase que herede de la clase ComponenteInstanciaRecurso la cual está definida en el paquete es.agp.monitor.componentes.recursos y que implemente los siguientes métodos:
-
Incluir el nuevo recurso (con todos sus parámetros) en cada uno de los ficheros XML que define el tipo de componentes "Recursos" correspondiente a cada idioma que soporta la aplicación (en la versión actual estos ficheros serían recursos_es.xml y recursos_en.xml).