miércoles, noviembre 05, 2008

Más allá de los ficheros

La concepción de SEXTANTE era hasta ahora muy fichero-céntrica. Esto se podía entender estando dentro del contexto de un SIG como gvSIG (a pesar de que gvSIG se conecta a bases de datos e incluso ya tiene capacidades para publicar cartografía), pero en la actual situación de librería es necesario que las salidas se puedan manejar de un modo más flexible, no necesariamente metiéndolas en un fichero.

Andrea Aime (GeoTools/GeoServer) está trabajando en integrar GeoServer y SEXTANTE, y apuntaba hace algunos días que él necesitaría poder hacer algún tipo de streaming con los resultados que va generando SEXTANTE, a medida que éstos se van calculando. Con todo esto, estaba claro que había llegado el momento de darle una nueva visión a SEXTANTE en lo que a gestión de salidas respecta.

He sustituido el nombre de fichero que iba asociado a cada salida (y que si era nulo implicaba que se guardaría en un archivo temporal) por un objecto que implementa la interfaz IOutputChannel. Básicamente se trata de un objecto que dice "dónde" hay que poner los datos. Hay un FileOutputChannel, que replica el comportamiento anterior, pero la arquitectura permite ya desarrollar muchos otros, según las necesidades.

En los bindings de GeoTools hay una clase de prueba que testea la clase StreamOutputChannel, la cual define la salida con un simple PrintStream. El ejecutar alguna operación que vaya generando entidades vectoriales, a medida que éstas se añaden a la capa correspondiente, en lugar de añadirlas a un archivo lo que hace es imprimirlas al PrintStream, imprimiendo la descripción WKT de la geometría y después los valores de los atributos.

Es un cambio pequeño que no ha de afectar nada a los antiguos usuarios, pero que abre muchas nuevas posibilidades para otros, que espero sepan aprovecharlas.

No hay comentarios: