[Gvsig_desarrolladores] [gvSIG-devel] Adding new type of layer

Joaquin del Cerro jjdelcerro.gvsig en gmail.com
Lun Ago 6 11:11:47 CEST 2012


El 05/08/12 17:56, Fernando Gonzalez escribió:
> Hi, I'm creating a new type of layer based on a folder containing
> georreferenced files (for example, photos). I'm able to add a new tab
> in the "Add layer" dialog and I'm also able to show the points
> representing the locations of each of the files in the folder.
> 
> However, I haven't been able to load a previously saved project with
> such a layer. I've tried two approaches:
> 
> A. FLyrVect over custom driver implementing IPersistence
> B. Custom FLayer implementation
> 
> On both approaches I'm facing NoClassDefFoundErrors at load. In
> general, this is due to the fact that the project loading is triggered
> by the com.iver.cit.gvsig plugin and the classes in my plugin are not
> visible from there.
> 
> In the case A (custom driver) I can add a folder in the "drivers"
> directory of the com.iver.cit.gvsig plugin so that it has access to
> the necessary classes, but I get NoClassDefFoundErrors about
> java.lang.Object.
> 
> Has anyone faced such a problem before? Any hint?
> 
> I have taken a look at the annotation extension, which does pretty the
> same as I want to do. The solution adopted there is to drop a
> gvsig-annotation.jar in com.iver.cit.gvsig's "lib" folder !!
> 

Hola Fernando,
mi ingles deja mucho que desear, asi que te contesto en castellano, que
supongo que sera mejor que nada.

Hace mucho que no trabajo con la version 1.X de gvSIG pero hasta donde
recuerdo, lo que cuentas parece que tiene que ver con el ClassLoader.
El levantar un proyecto persistente se hace desde el plugin de gvSIG,
y las clases se levantan por nombre con un Class.forName, con lo que las
clases que no se encuentran en el classpath de este plugin no se pueden
levantar. La solucion simple es dejar las clases que se precisen para
levantar tu proyecto desde el gvp en el lib del plugin de gvSIG, como
bien comentas. En la version 2, esto ya ha sido solucionado...
en la 1, creo que se hizo algo para declarar alias de las clases, la utilidad
para la que se creo era otra a la que tu quieres, pero igual te sirbe, a ver si puedo
encontrarlo (hace demasiado tiempo y la memoria me falla de vez en cuando
con detalles tan concretos , jejeje)

...

Vale creo que ya lo he encontrado, a ver si te sirve.

En la clase LayerFactory tienes un metodo:

public static void registerLayerClassForName (String originalLayerClassName, Class layerClassToUse)

Puedes probar a registrar en el initialize de tu extension la clase
layer tuya con su nombre original. Se supone que desde tu extension/plugin
si que tienes acceso a la clase, asi que deberias poder registrarlo, y luego
cuando tire a usarse, con un poco de suerte, te la encuentra a traves del
metodo getLayerClassForLayerClassName del LayerFactory y como ya esta levantada
la clase te funciona.

Es solo una idea, hace mucho que no toco cosas de la 1, a ver si te sirve.

Y disculpad todos por el castellano.
Si te sirve podias ver de ponerlo en ingles para que llegue a todos ;)

Un saludo
Joaquin



> Regards.
> 
> _______________________________________________
> gvSIG-desktop-devel mailing list
> http://joinup.ec.europa.eu/mailman/listinfo/gvsig-desktop-devel
> 


-- 
--------------------------------------
Joaquin Jose del Cerro
Development and software arquitecture manager.
jjdelcerro en gvsig.com
gvSIG Association
www.gvsig.com
www.gvsig.org


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