[ 
http://jira.codehaus.org/browse/GEOT-2050?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gabriel Roldán reopened GEOT-2050:
----------------------------------


> IndexexShapefileDataStore produces inaccurate results with fid filters
> ----------------------------------------------------------------------
>
>                 Key: GEOT-2050
>                 URL: http://jira.codehaus.org/browse/GEOT-2050
>             Project: GeoTools
>          Issue Type: Bug
>          Components: data shapefile
>    Affects Versions: 2.5-RC0
>            Reporter: Gabriel Roldán
>            Assignee: Gabriel Roldán
>             Fix For: 2.5.0
>
>
> IndexedShapefileDataStore does not handle fid filters correctly.
> Added the below test case which exposes the defect and produces the following 
> failure:
> AssertionFailedError: lacking fids: [statepop.20, statepop.30, statepop.31, 
> statepop.32, statepop.40, statepop.41, statepop.42, statepop.43]. Unexpected 
> ones: [] expected:<49> but was:<41>
> {code}
>     public void testFidFilter() throws Exception {
>         URL url;
>         {
>             File shpFile = copyShapefiles(STATE_POP);
>             url = shpFile.toURL();
>             String filename = url.getFile();
>             filename = filename.substring(0, filename.lastIndexOf("."));
>             // force creating the index
>             File file = new File(filename + ".qix");
>             if (file.exists()) {
>                 file.delete();
>             }
>             file.deleteOnExit();
>         }
>         IndexedShapefileDataStore ds = new IndexedShapefileDataStore(url, 
> null, true, true,
>                 IndexType.QIX);
>         FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = 
> ds.getFeatureSource();
>         FeatureCollection<SimpleFeatureType, SimpleFeature> features = 
> featureSource.getFeatures();
>         FeatureIterator<SimpleFeature> indexIter = features.features();
>         Set<String> expectedFids = new HashSet<String>();
>         final Filter fidFilter;
>         try {
>             FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
>             Set<FeatureId> fids = new HashSet<FeatureId>();
>             while (indexIter.hasNext()) {
>                 SimpleFeature newFeature = indexIter.next();
>                 String id = newFeature.getID();
>                 expectedFids.add(id);
>                 fids.add(ff.featureId(id));
>             }
>             fidFilter = ff.id(fids);
>         } finally {
>             indexIter.close();
>         }
>         Set<String> actualFids = new HashSet<String>();
>         {
>             features = featureSource.getFeatures(fidFilter);
>             indexIter = features.features();
>             while (indexIter.hasNext()) {
>                 SimpleFeature next = indexIter.next();
>                 String id = next.getID();
>                 actualFids.add(id);
>             }
>         }
>         TreeSet<String> lackingFids = new TreeSet<String>(expectedFids);
>         lackingFids.removeAll(actualFids);
>         
>         TreeSet<String> unexpectedFids = new TreeSet<String>(actualFids);
>         unexpectedFids.removeAll(expectedFids);
>         String lacking = String.valueOf(lackingFids);
>         String unexpected = String.valueOf(unexpectedFids);
>         String failureMsg = "lacking fids: " + lacking + ". Unexpected ones: 
> " + unexpected;
>         assertEquals(failureMsg, expectedFids.size(), actualFids.size());
>         assertEquals(failureMsg, expectedFids, actualFids);
>     }
> {code}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to