El 15 de diciembre de 2016, 16:12, Iago Alonso Alonso <[email protected]>
escribió:
> Hola Joaquín,
>
> En el código he podido cambiar en algunos sitios y usar la interfaz de
> Envelope pero en otros, el que hizo antes el código puso:
>
> .getViewPort().setEnvelope(new Envelope2D(bboxMunicipio[0].doubleValue(),
> bboxMunicipio[1].doubleValue(),bboxMunicipio[2].doubleValue(),
> bboxMunicipio[3].doubleValue()));
>
> y la clase que implementa Envelope (org.gvsig.fmap.geometry.api ->
> org.gvsig.fmap.geom.primitive), DefaultEnvelope, sólo se le pueden pasar
> 2 parámetros en lugar de 4. En el caso de DynObjectFeatureFacade no consigo
> encontrar la versión del API.
>
A ver...
Los APIs en gvSIG estan compuestos todos por interface excepto por los
locators que son clases estaticas.
Eso quiere decir que nunca puedes instanciar, por ejemplo, un Envelope por
que es un interface.
Esta montado asi para que no tengas dependencias con una implementacion en
concreta y que posibles cambios en la implementacion afecten lo menos
posible al codigo que la usa.
Entonces... ¿ Como se obtiene una instancia de algo que esta en el API ?
Para cada API hay un locator y un manager.
Por ejemplo, en el API de geometrias existe el interface Envelope, que no
puedes instanciar.
Pero tienes un manager, el GeometryManager, que como todos los managers en
gvSIG hacen las veces de factorias de los elementos que hay en el API. Si
miras en el GeometryManager veras que tienes:
public Envelope createEnvelope(double minX, double minY, double maxX,
double maxY, int subType) throws CreateEnvelopeException;
public Envelope createEnvelope(int subType) throws CreateEnvelopeException;
Que son las formas de crear un Envelope sin que tengas que depender de una
implementacion en concreto.
Hay que tener en cuenta que GeometryManager es tambien una interface, asi
que tampoco puedes instanciarlo.
Para obtener una instancia de un manager, debes usar el locator. Por
ejemplo para obtener el manager
de geometrias tenemos el GeometryLocator. Y se haria con:
GeometryManager geomManager = GeometryLocator.getGeometryManager();
Todos los managers de gvSIG son singletons. Esto que quiere decir, pues que
solo existe una instancia de ese manager para todo gvSIG. La primera vez
que se pide, se crea y se guarda en la tabla de managers de gvSIG, y las
siguientes veces que se pide, simplemente se accede a ella, se recupera y
se devuelbe. Con esto quiero decir que en general no es preciso ir
guardandose los managers en atributos de las clases. Podemos pedirlo cuando
lo necesitemos, guardarlo en una variable local y destruirla cuando
terminemos de usarlo. El coste de volverlo a pedir es muy bajo.
Una vez tenemos el manager, ya lo podemos usar para crear elementos del API
sin tener que saber que clases hay por debajo para implementarlo, con lo
que si en un momento cambiamos algo de la implmentacion no deberia
afectarte.
¿ Como creariamos un Envelope ?
Envelope env = geomManager.createEnvelope(minX, minY, maxX, maxY,
Geometry.SUBTYPES.GEOM2D);
Y asi no dependerias para nada de la implementacion que exista en un
momento dado para un Envelope 2D y tu codigo nunca deberia depender de la
implementacion. Tu pom nisiquiera deberia referenciar a la implementacion.
Y en el caso de que lo necesite (muy desaconsejable) hay formas de poner la
dependencia en el pom sin que tengas que ir revisando a cada version de
gvSIG como se llama la nueva implementacion si es que esta ha cambiado.
Sobre el DynObjectFeatureFacade...
El API de DynObjectFeatureFacade es DynObject y FacadeOfAFeature. Si estas
viendo el codigo solo tienes que ver que implementa que este en el API.
Cuando tenemos una Feature de gvSIG, en ocasiones nos puede interesar verla
como un DynObject, por que tengamos que pasarsela a algun componente que
trabaja con DynObject pero no con Feature. En el API de Feature tenemos el
metodo:
public DynObject getAsDynObject();
Que nos devuelbe una envoltura de DynObject sobre la Feature, asi podemos
usar la feature por ejemplo para presentarla en un DynForm que solo acepta
DynObject.
No se en que contexto usas eso, pero supongo que lo que te pasara es que
tienes un DynObject que se ha obtenido a partir de la Feature y quieres
volver a acceder a la Feature. Lo primero es cerciorarse que ese DynObject
se ha obtenido de una Feature, hay muchos DynObject en gvSIG y los menos
son de una Feature. Y una vez lo sepamos usaremos el API de
FacadeOfAFeature para recuperarla.
DynObject obj;
if( obj instance of FacadeOfAFeature ) {
Feature f = ((obj)FacadeOfAFeature).getFeature();
}
Otra opcion podria ser usar el metodo getFeature del store en caso de que
sepamos de que store es.
DynObject obj;
FeatureStore store;
Feature f = store.getFeature(obj);
En general piensa que usar gvSIG deberia poder hacerse solo linkando con
los API para compilacion. El API deberia tener todo lo necesario y usar la
implementacion es la forma mas directa de hacer un software con gvSIG que
dejara de ir en la proxima version. Por desgracia aun quedan partes de
gvSIG en las que no esta separada la implementacion de su API.
Podria suceder que no supieses como hacer algo... pregunta, que si podemos
comentaremos como hacerlo.
Y si no se pude y es util veremos de introducir algo en el API para hacerlo
y que este disponible para la proxima version.
Ya de paso, y para todos los que desarrolan cosas en gvSIG...
Liberad vuestro software y contribuir con el proyecto.
Eso nos hace grandes a todos.
Un saludo
Joaquin
> En cuanto a los del los POM, los que tengo aquí no hacen nada de
> gmaven-plugin cuando cambiamos el padre del pom que compila las extensiones:
> <parent>
> <groupId>org.gvsig</groupId>
> <artifactId>org.gvsig.desktop.plugin</artifactId>
> <version>2.0.33</version>
> </parent>
>
> Así sí que ejecuta "gmaven-plugin:1.4:execute (install-plugin)", en cambio
> si lo cambiamos a:
>
> <parent>
> <groupId>org.gvsig</groupId>
> <artifactId>org.gvsig.desktop.plugin</artifactId>
> <version>2.0.157</version>
> </parent>
>
>
> ya no lo ejecuta, hace todos los build pero ningún gmaven-plugin. ¿A qué
> se puede deber?
>
> El 15-12-2016 11:36 AM, Joaquin Jose del Cerro Murciano escribió:
>
>
>
> El 14 de diciembre de 2016, 17:55, Iago Alonso Alonso <[email protected]>
> escribió:
>
>> Hola, estoy intentando actualizar unas extensiones de gisEIEL para gvSIG
>> pero al compilar con maven no se copian en "<workspace>\org.gvsig.desktop
>> \target\product\gvSIG\extensiones".
>>
>> Las extensiones actuales están en la versión 2.0.33 y al pasarlas a la
>> versión 2.0.157 haciendo estos cambios que se necesitan:
>>
>> - Dependencia "org.gvsig.fmap.geometry.impl" por
>> "org.gvsig.fmap.geometry.jts"
>>
>> - Imports "org.gvsig.fmap.geom.primitive.impl.Envelope2D" por
>> "org.gvsig.fmap.geom.jts.primitive.Envelope2D"
>>
>> - Imports "org.gvsig.fmap.dal.feature.impl.featureset.DynObjectFeatureFacade"
>> por "org.gvsig.fmap.dal.feature.impl.dynobjectutils.DynObjectFea
>> tureFacade"
>>
>
>
> Hola Iago,
> No deberias usar nunca nada que este en la parte de implementacion de una
> libreria.
> Ya bastante nos cuesta intentar no cambiar los APIs entre versiones como
> para que los entresijos de su implementacion se mantenga compatible de una
> version a otra.
>
> ¿ Por que usas un Envelope2D (de la implementacion) y no un Envelope (que
> esta en el API) ?
>
> Y lo mismo con DynObjectFeatureFacade. Se supone que hay interfaces que te
> permiten el acceso a esas clases y que intentamos mantener entre versiones.
>
> Mi consejo es que quites de los poms todos as dependencias con
> implementaciones (o las pases a dependencia de runtime) y compruebes que
> cosas estas usando que no debes. Probablemente haya otra forma de hacer lo
> que haces usando eso.
>
> al compilar con maven todo va bien y termina sin errores pero si vas a la
>> carpeta de extensiones no están copiadas.
>>
>> ¿Se ha modificado algo en algún POM de gvSIG que hace que ahora no se
>> copien ahora las extensiones? He
>>
>
> Que recuerde no se ha cambiado nada al respecto.
> Busca en la compiacion de tu plugin una linea con "execute
> (install-plugin)", deberias tener algo como:
>
> [INFO] --- gmaven-plugin:1.5:execute (install-plugin) @
> ARTIFACTID_DE_TU_PLUGIN ---
>
> Si aparece algo asi, deberia ir seguido por algo parecido a:
>
> [INFO] Removing plugin of XXXX
> [INFO] Install plugin to XXXX
> [unzip] Expanding: XXXXX into XXXX
> [INFO] Copy plugin package from XXX to XXXX
> [copy] Copying 1 file to XXX
> [INFO] Copy plugin package index from XXX to XXX
> [copy] Copying 1 file to XXX
> [INFO]
>
> Echa un vistazo a esas lineas a ver si ves algun error.
> Si no aparece lo mas normal es que no exista el fichero
> "buildNumber.properties" junto al "pom.xml" de tu plugin. El proceso de
> compilacion usa la existencia de ese fichero para determinar si esta
> compilando un plugin o una libreria y solo despliega el plugin si el
> fichero existe.
>
> Un saludo
> Joaquin
>
>
>
>> intentando buscar en la guía de desarrolladores pero no he encontrado
>> nada (http://docs.gvsig.org/plone/projects/gvsig-desktop/docs/devel) y
>> este fallo se escapa a mi alcance y conocimiento de Maven.
>>
>> Un saludo.
>>
>> _______________________________________________
>> gvSIG_desarrolladores mailing list
>> [email protected]
>> Para ver histórico de mensajes, editar sus preferencias de usuario o
>> darse de baja en esta lista, acuda a la siguiente dirección:
>> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>>
>>
>
>
> --
> --------------------------------------
> Joaquin Jose del Cerro Murciano
> Development and software arquitecture manager at gvSIG Team
> [email protected]
> [email protected]
> gvSIG Association
> www.gvsig.com
> www.gvsig.org
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> [email protected]
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> [email protected]
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>
--
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
[email protected]
[email protected]
gvSIG Association
www.gvsig.com
www.gvsig.org
_______________________________________________
gvSIG_desarrolladores mailing list
[email protected]
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de
baja en esta lista, acuda a la siguiente dirección:
https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores