[Gvsig_desarrolladores] como cambiar la fuente de datos de las capas de un proyecto

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Lun Nov 9 17:07:05 CET 2015


El 9 de noviembre de 2015, 9:20, Tomás Cabezudo <tcabezudo en gmail.com>
escribió:

> buenos días,
> necesito poder cambiar de manera automática la fuente de datos de las
> capas de un proyecto. Hacer una especie de 'setDataSource' de las capas,
> para que apunten a shapefiles ubicados en otras carpetas.
> No se si alguien ha necesitado esto y me puede echar una mano.
>
>

Hola Tomás,
Uff, hace tiempo que consideramos que podia ser peligroso hacerlo ya que
si, por ejemplo,  la fuente de datos pasa de ser un shape de puntos a uno
de lineas la capa podia quedar inconsistente. Un FLyrVect tiene un metodo
setDataStore que te permitiria hacerlo ahora mismo, pero esta deprecated, y
no seria de estrañar que en alguna version futura desapareciese. De todos
modos, echando un vistazo al metodo, no creo que te sirva, ya que se carga
la leyenda y el etiquetado al asignarle una nueva fuente de datos.

Dos cosas...
Uno, podias contar algo mas de tu problema a ver si realmente precisas
hacer eso o hay alguna otra forma de hacerlo en gvSIG, o se puede preparar
alguna otra forma de hacer algo que ti sirva.

Dos, forzando un poco las cosas y sin saber si funcionaria y teniendo en
cuenta que podria dejar de ir mas adelante, podrias aprovechar alguna
rendijita del API actual para hacerlo. A ver te cuento...

 FLyrVect layer ...;

 FilesystemStoreParameters params = (FilesystemStoreParameters)
layer.getFeatureStore().getParameters()
 params.setFile(...)
 layer.reload()

No se si realmente algo asi puede llegar a funcionar pero puedes probarlo.
Tendrias que comprobar que los parametros son de tipo
FilesystemStoreParameters antes de asignarlos a una variable de ese tipo.
Aunque vaya si es algo que tu aplicacion va a usar de forma "cotidiana" te
aconsejo que busques otra solucion que no sea cambiar la fuente de datos al
vuelo, seguramente la halla, danos mas pistas y igual te podemos echar una
mano. Si solo es una cosa temporal para no tenere que recrear un montos de
proyectos en los que han cambiado las rutas, aun podrias hacerlo, aunque
seguramente, como te digo hayan otras soluciones.

...
Pensando un poco en esto...
si lo que pasa es que algunos ficheros han cambiado de ruta, igual podria
servirte el metodo "setOpenErrorHandler" del DataManager. Aqui puedes
establecer un "hook" que sera invocado en la apertura de una fuente de
datos cuando esta no se pueda abrir. Si es una fuente de datos de fichero y
este por ejemplo no existe, en lugar de fallar sin mas, se invocaria al
metodo canRetryOpen del OpenErrorHandler. Tendrias de tener cuidado al
usarlo, y de momento (me acabo de dar cuenta que no hay un
getOpenErrorHandler, tomo nota para añadirlo ya mismo), instanciar un
BaseOpenErrorHandler y delegar en el cuando no sea tu caso.

Ya cuentas algo mas y segun por donde vayan los tiros vemos como podemos
echarte una mano.

Un saludo
Joaquin




> Gracias de antemano y saludos
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro en gvsig.com
jjdelcerro en gvsig.org
gvSIG Association
www.gvsig.com
www.gvsig.org
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20151109/4731eb68/attachment.htm 


Más información sobre la lista de distribución gvSIG_desarrolladores