Extensión de gvSIG
Paso de parámetros
Para cada histograma que le pasemos podemos visualizarlo de distintas formas. Inicialmente los tipos implementados son Normal, acumulado y logarítmico. Estos tipos están definidos en la clase Histograma de la librería. Esta clase tiene definido de forma estática un vector de Strings con el identificador de cada tipo de histograma que puede calcular. Cuando se implemente uno nuevo no hará falta modificar la funcionalidad. Simplemente lo añadiremos a esta lista y crearemos el método que lo calcula. El interfaz gráfico cargará los tipos directamente desde esta lista.
Para lanzar un histograma tendremos que instanciar la clase HistogramDialog. A esta clase se le pasarán por parámetro los histograma que se quieran visualizar. Por ejemplo, si deseamos abrir un histograma que sea capaz de visualizar un histograma de un dataset completo y otro de la capa que hay en una vista de gvSIG primeramente instanciaremos la clase
histogramDialog = new HistogramDialog();
después eliminaremos punteros a histogramas anteriores y añadiremos los nuestros
histogramDialog.clearSource();
histogramDialog.setHistogramableSource(IHistogramable datasetHist, String id);
histogramDialog.setHistogramableSource(IHistogramable viewHist, String id);
Ya podemos lanzar la ventana
PluginServices.getMDIManager().addWindow(histogramDialog);
Incremento de la tarea
Para la barra de progreso utilizamos el objeto IncrementableTask de la librería libUIComponents. Este es un componente general para visualizar el incremento de una tarea. Tiene un interfaz IIncrementable con los métodos necesarios para actualizar el panel de incremento. IncrementableTask consultará las funciones de IIncrementable cada 100ms. En este caso el proceso de calculo de histograma debe implementar este interfaz y ser pasado a IncrementableTask en su creación.
Desde el proceso de calculo de histograma (HistogramProcess) capturaremos los eventos de la ventana de incremento para poder responder a la acción de cancelado del proceso. Para esto nuestro HistogramProcess implementa el interfaz IncrementableListener que tiene los métodos para dar respuesta a este y otros eventos.
Proceso de calculo
La clase HistogramProcess contiene el Thread encargado de realizar el proceso de calculo de histograma. Para esto recibe el evento de calculo desde HistogramPanelListener, haciendo este la petición del tipo de histograma adecuado (normal, acumulado o logaritmico). Este listener es el encargado de crear el objeto para el incremento de la tarea y pasarselo al proceso de calculo. Además también le proporciona los objetos IHistogramable que son sobre los que se calculan histogramas. Cualquier objeto que implemente Ihistogramable contiene un método getHistogram para devolver el histograma asociado, así que el proceso de calculo lo que tendrá que hacer es llamar a este método para obtener el histograma del objeto en cuestión.