Gracias por los comentarios Joaquín.

En este caso tengo mucho código de antes acoplado a FeaturePagingHelper y
prefiero no refactorizar pero lo tendré en cuenta para cuando tenga que
hacer cambios o escribir nuevo código.

Joaquin Jose del Cerro Murciano <jjdelce...@gvsig.org> escreveu no dia
domingo, 25/10/2020 à(s) 09:30:

>
>
> El lun., 19 oct. 2020 a las 21:23, Francisco Puga (<fp...@icarto.es>)
> escribió:
>
>> Hola,
>>
>> Antes con una tabla alfanumérica proveniente de postgres usaba un código
>> como este para filtrar algunas features de la tabla que me interesaban, y
>> estas features tenían todos los atributos:
>>
>> ```java
>> FeatureStore store = my_get_feature_store_from_the_tabledocument() // no
>> relevante. capa con al menos columnas: gid, bar, foo
>> boolean hasFilter = si_tiene_que_tener_filtro(); // no relevante
>> DataManager dataManager = DALLocator.getDataManager();
>> FeatureQuery query = store.createFeatureQuery();
>> if (hasFillter()) {
>>     String where = "foo = 5";
>>     Evaluator evaluator = dataManager.createExpresion(where) // ahora
>> sería createFilter
>>     query.addFilter(evaluator);
>> }
>> FeaturePagingHelper set = manager.createFeaturePagingHelper(store, query,
>> 10); // tenía todos los atributos
>>
>> Feature feat = set.getFeatureAt(position);
>> feat.get("bar"); // IllegalArgumentException: Attribute name 'bar' not
>> found in the feature.
>> ```
>>
>> Pero ahora al intentar acceder a un atributo de la feature que no está
>> definido en el filtro obtengo un error. En otros métodos
>> de store.createFeatureQuery(xxxx); veo que al final se hace un
>> "query.retrievesAllAttributes();". ¿Este es el comportamiento esperado? Lo
>> comento por si es un bug.
>>
>> He cambiado del siguiente modo y parece funcionar:
>>
>> ```java
>> FeatureStore store = my_get_feature_store_from_the_tabledocument() // no
>> relevante. capa con al menos columnas: gid, bar, foo
>> boolean hasFilter = si_tiene_que_tener_filtro(); // no relevante
>> DataManager dataManager = DALLocator.getDataManager();
>> FeatureQuery query = null;
>> if (hasFillter()) {
>>     String where = "foo = 5";
>>     store.createFeatureQuery(where, "", false);
>> } else {
>>      store.createFeatureQuery("", "", false);
>> }
>> FeaturePagingHelper set = manager.createFeaturePagingHelper(store, query,
>> 10);
>>
>> Feature feat = set.getFeatureAt(position);
>> feat.get("bar"); // It works!
>> ```
>>
>>
> Hola Francisco.
>
> Cuando contruyes una consulta con el FeatureQuery, solo se trae los campos
> que ha de usar en el filtro, mas los que se indiquen con el metodo
> "addAttributeName".
> Si te interesan todos los campos de la feature, cuando termines de
> configurar
> el FeatureQuery y antes de usarla llama al metodo "retrievesAllAttributes".
>
>   FeatureQuery query = store.createFeatureQuery();
>   if (hasFillter()) {
>       query.addFilter("foo = 5");
>       query.retrieveAllFeatures();
>   }
>   List<Feature> features = store.getFeatures(query,10);
>
>   ...
>   features.get(position).get("bar")
>   ...
>
>   DisposeUtils.disposeQuietly(features);
>
> Cuando construyes un FeatureQuery vacio, es cosa tuya configurarlo todo
> correctamente.
> Si lo construyes a partir de un filtro u orden, automaticamente te marca
> que
> debe recuperar todos los atributos. Lo dejamos asi por que consideramos
> que una consulta
> simple salga directamente, pero si quieres algo mas complejo, es cosa tuya
> configurarlo todo.
>
>   String where = ... null/""/"foo = 5"...;
>   List<Feature> features = store.getFeatures(where);
>   ...
>   features.get(position).get("bar")
>   ...
>   DisposeUtils.disposeQuietly(features);
>
>
> Si utilizas el metodo getFeatures La lista que devuelve no esta en
> memoria,
> por debajo usa PagingHelper. Puedes hacer casting a cualquiera de estos
> interfaces
> en caso de que lo necesites:
>
> - FacadeOfAFeaturePagingHelper. Por si necesitas acceder al PagingHelper
> - UnmodifiableBasicList. Una lista, no te hara falta, ya la tienes un
> lista.
> - UnmodifiableBasicList64. Por si la consulta crees que pueda devolver mas
> elementos de los que caben en un int.
> - Disposable. Para hacer un dispose cuando termines, o un bind si fuese
> necesario.
>
>
> Un saludo
> Joaquin
>
>
>>
>>
>> --
>> Francisco Puga
>> iCarto | Innovación, Cooperación, Cartografía y Territorio S.L.
>> http://www.icarto.es/
>> _______________________________________________
>> gvSIG_desarrolladores mailing list
>> gvSIG_desarrolladores@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:
>> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>>
>
>
> --
> --------------------------------------
> Joaquin Jose del Cerro Murciano
> Development and software arquitecture manager at gvSIG Team
> jjdelce...@gvsig.com
> gvSIG Association
> www.gvsig.com
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores@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:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>


-- 
Francisco Puga
iCarto | Innovación, Cooperación, Cartografía y Territorio S.L.
http://www.icarto.es/

c/ Rafael Alberti nº 13 – 1º D
15008 A Coruña
Galicia (Spain)
+34 881927808

Este correo electrónico contiene información estrictamente confidencial y
es de uso exclusivo del destinatario, quedando prohibida a cualquier otra
persona su revelación, copia, distribución, o el ejercicio de cualquier
acción relativa a su contenido. Si ha recibido este mensaje por error, por
favor conteste a su remitente mediante correo electrónico y proceda a
borrarlo de su sistema.

Sus datos personales serán tratados de forma confidencial y no serán
cedidos a terceros ajenos a ICARTO. En cualquier caso, podrá ejercer los
derecho de oposición, acceso, rectificación y cancelación de acuerdo con lo
establecido en la Ley Orgánica 15/99, de 13 de diciembre, de Protección de
Datos de Carácter Personal dirigiéndose a Innovación, Cooperación,
Cartografía e Territorio, SL. (ICARTO) en la dirección postal a C/ Rafael
Alberti, nº 13, 1ºD, 15.008 – (A Coruña).
_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores@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: 
https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores

Responder a