DBeaver integra un motor de visualización gráfico que permite convertir directamente los conjuntos de resultados de bases de datos en representaciones visuales interactivas. Esta capacidad se construye sobre el ecosistema de Eclipse, utilizando componentes SWT y la biblioteca JFreeChart para manejar el renderizado y la manipulación de datos. El flujo de trabajo elimina la necesidad de scripts externos, gestionando internamente el mapeo de filas a series de datos.
Arquitectura del Componente Gráfico
El núcleo de la interacción visual reside en un composite personalizado que encapsula el panel de JFreeChart. Este contenedor gestiona los eventos de entrada, la transformación de coordenadas y la gestión del ciclo de vida del gráfico. La lógica principal delega la representación visual al motor de trazado, mientras que el composite se encarga de la comunicación con la interfaz de usuario.
Mapeo de Resultados y Renderizado
La conversión de un conjunto de resultados tabular a una estructura compatible con JFreeChart requiere extraer los metadatos de las columnas y proyectar los valores en un dataset categorizado. El proceso sigue una secuencia de extracción, validación de tipos y asignación secuencial.
// Lógica de proyección de datos a dataset categorizado
private void proyectarResultados(ResultSetController ctrl, CategoryDataset ds) {
var registroInicial = ctrl.obtenerModelo().extraerPrimerRegistro();
var columnasVisibles = ctrl.obtenerModelo().filtrarAtributosActivos();
for (int idx = 0; idx < columnasVisibles.size(); idx++) {
var definicionCol = columnasVisibles.get(idx);
Object datoCruudo = registroInicial.extraerColumna(idx);
String valorFormateado = ConvertidorTiposDB.formatearParaUI(datoCruudo);
if (EsNumerico(valorFormateado)) {
ds.addValue(Double.parseDouble(valorFormateado), "Serie Principal", definicionCol.getEtiqueta());
}
}
}
Esta arquitectura permite detectar automáticamente si los campos contienen métricas cuantitativas, fechas o porcentajes, ajustando el tipo de eje y la escala según corresponda.
Patrones de Interacción Implementados
1. Control de Escala y Navegación
La capacidad de acercar o alejar la vista se implementa interceptando eventos de entrada sobre el área de trazado. El sistema calcula el punto de anclaje en coordenadas Java2D y aplica el factor de escala a los ejes dominantes y de rango de forma independiente.
// Gestión de transformación de escala en ejes
private void aplicarEscala(InterfaceZoomable componente, Punto origenClick, double multiplicador) {
InfoRenderizadoTramo infoTramo = obtenerInfoRenderizado().recuperarInfoTramo();
Punto2D focoCartesiano = sistemaCoordenadas.pantallaACartesiano(origenClick.toAwtPoint());
if (componente.permiteZoomDominio()) {
componente.escalarEjesDominio(multiplicador, infoTramo, focoCartesiano, true);
}
if (componente.permiteZoomRango()) {
componente.escalarEjesRango(multiplicador, infoTramo, focoCartesiano, true);
}
invalidarRegion();
}
El usuario activa esta funcionalidad mediante el menú contextual sobre el área de trazado, seleccionando las opciones de aumento, reducción o restauración de la vista predeterminada.
2. Panel de Configuración Dinámica
La apertura del formulario de personalización se vincula al evento de doble clic sobre el contenedor principal. Este mecanismo permite modificar atributos visuales sin alterar los datos subyacentes.
// Interceptor de eventos de ratón para configuración
@Override
public void procesarDobleClic(EventoMouse evt) {
if (diagnosticoPermiteConfiguracion()) {
mostrarDialogoOpcionesVisualizacion();
forzarActualizacionBuenos();
}
}
Entre los parámetros ajustables se encuentran las etiquetas de los ejes, la paleta de colores (con soporte para modos oscuros del sistema operativo) y la visibilidad condicional de series específicas.
3. Agregación Estadística Automática
Al solicitar una vista visual, el moter analiza el tipo de dato de cada columna. Si detecta campos numéricos, calcula instantáneamente promedios, totales y desviaciones estándar, permitiendo comparativas multidimensionales directamente vinculadas al grid de resultados.
Caso de Uso Práctico
Para analizar el volumen de transacciones completadas, se ejecuta una consulta SQL estándar que recupera fechas y montos. Una vez obtenidos los datos en el panel inferior, se accede al icono de visualización y se selecciona un gráfico de barras. El sistema asigna automáticamente la columna temporal al eje horizontal y la monetaria al vertical. La exportación a formatos de imagen vectorial o rasterizada se realiza directamente desde el menú contextual del gráfico.
Extensión y Personalización
Los desarrolladores que necesiten incorporar tipos de gráficos no estándar pueden extender la clase base del composite gráfico. La implementación requiere sobrescribir tres métodos fundamentales: la fábrica del objeto gráfico, la población del menú contextual y el controlador del diálogo de opciones. Los textos de la interfaz se cargan desde archivos de propiedades OSGi, facilitando la internacionalización y la adaptación a entornos corporativos específicos sin modificar la lógica de negocio.