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