gvSIG bugs #4370

Excepción al ordenar la tabla de atributos con la capa en edición

Added by Francisco Puga over 7 years ago. Updated almost 7 years ago.

Status:Outdated% Done:

0%

Priority:NormalSpent time:-
Assignee:-
Category:Document table
Target version:2.4.0-2822 (rev. org.gvsig.desktop-2.0.188)
Severity:Minor Add-on version:
gvSIG version:2.3.0 Add-on build:
gvSIG build: Add-on resolve version:
Operative System: Add-on resolve build:
Keywords: Proyecto:
Has patch: Hito:
Add-on name:Unknown

Description

Si se ordena la tabla de atributos después de haber añadido una nueva feature (geométricamente) y se ordena la tabla se produce una extensión por consola.

Por lo que he podido ver, el problema de fondo está en que cuando al FeaturePagingHelper se le pasa una query donde se le especifica un FeatureQueryOrder, ninguna de las features devueltas tiene el isNewFeature a true. Cuando se intenta usar el equals/hashCode sobre una feature nueva pero que no tiene isNew = true, se produce un NullPointerException.

History

#1 Updated by Álvaro Anguix over 7 years ago

  • Category set to Document table

#2 Updated by Francisco Puga over 7 years ago

  • Status changed from New to Awaiting response

El bug no afecta solamente a la tabla. Es un problema del iterador. Afecta a todo el código que pida los datos ordenados (FastOrderedIterator) cuando haya nuevas features creadas (teniendo la capa en edición). Creo que es un problema grave porque muchas aplicaciones pueden depender de recorrer los datos en un determinado orden, incluso cuando se hayan insertado nuevas features.

En DefaultFeatureSet.fastIterator, cuando estamos en el caso de ORDERD_EDITED (no he comprado si sucede también con ORDERED_EDITED_FILTER) se crea un FastOrderedIterator que tiene dentro un FastEditedIterator.

Cuando se va a devolver una Feature, llamando al createFeature, el FastEditedIterator setea correctamente el isNew del FeatureProvider. Pero hay un momento del flujo en que se acaba llamando a FastOrderedIterator.createFeature(FeatureProvider fData). En este método no se respecta el fData original si no que se hace ```fData.setNew(false)``` cargándose el valor original que viene del FastEditedIterator y que si que es correcto. Eliminando esa llamada todo parece funcionar (adjunto parche).

He tratado de ver si eso se había introducido hace poco por algún motivo pero la clase parece no haberse tocado en varios años.

#3 Updated by Francisco Puga over 7 years ago

Al subir el fichero del parche me da un "Server internal error" pero vamos el cambio es trivial:

Index: src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java
===================================================================
--- src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java    (revision 43073)
+++ src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java    (working copy)
@@ -88,7 +88,6 @@
     }

     protected DefaultFeature createFeature(FeatureProvider fData) {
-        fData.setNew(false);
         this.myFeature.setData(fData);
         return this.myFeature;
     }

#4 Updated by Joaquín del Cerro Murciano almost 7 years ago

  • Target version set to 2.4.0-2821 (rev. org.gvsig.desktop-2.0.187)

#5 Updated by Joaquín del Cerro Murciano almost 7 years ago

  • Target version changed from 2.4.0-2821 (rev. org.gvsig.desktop-2.0.187) to 2.4.0-2822 (rev. org.gvsig.desktop-2.0.188)

#6 Updated by Francisco Díaz Carsí almost 7 years ago

  • Status changed from Awaiting response to Outdated

Lo paso a "outdated" porque en el build 2021 esto ya no ocurre.

Also available in: Atom PDF