[
https://issues.apache.org/jira/browse/SIS-178?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Martin Desruisseaux reopened SIS-178:
-------------------------------------
> First property red in a DenseFeature returns a null value, next ones are ok.
> ----------------------------------------------------------------------------
>
> Key: SIS-178
> URL: https://issues.apache.org/jira/browse/SIS-178
> Project: Spatial Information Systems
> Issue Type: Bug
> Components: Features
> Affects Versions: 0.5
> Environment: Seen on branch JDK 8, but should be the same everywhere.
> Reporter: M. Le Bihan
> Assignee: Martin Desruisseaux
> Priority: Minor
> Fix For: 0.5
>
>
> The first field value asked in a _DenseFeature_ is always returning a null
> value, the next calls on the same feature are successful.
> Loading a sample shapefile from here
> [http://export.openstreetmap.fr/contours-administratifs/communes/92-Hauts-de-Seine.shp.tar.gz]
>
> If I attempt to query the values of a Feature this way : "REF_INSEE",
> "COMMUNE", "CODE_POSTA",
> I will receive : null, “a city name”, “a zip code”.
>
> If I try to query this way : "CODE_POSTA", "REF_INSEE", "COMMUNE",
> I will receive : null, “an INSEE code”, “a city name”.
>
> *Involved method :*
> {code:title=DenseFeature.java}
> @Override
> public Property getProperty(final String name) throws
> IllegalArgumentException {
> ArgumentChecks.ensureNonNull("name", name);
> final int index = getIndex(name);
> if (properties instanceof Property[]) {
> final Property property = ((Property[]) properties)[index];
> if (property != null) {
> return property;
> }
> } else {
> wrapValuesInProperties();
> }
> final Property property = createProperty(name);
> properties[index] = property;
> return property;
> }
> {code}
> *hypothesis :*
> after the init call of
> {code}wrapValuesInProperties();{code}
> the method assumes that it has done the same work it would have done with
> {code}final Property property = ((Property[])
> properties)[index];{code}
> but it’s not the case.
> The following unit test will show the problem :
> {code:title=IssuesWithFeaturesTest.java}
> package org.apache.sis.storage.shapefile;
> import static org.junit.Assert.*;
> import java.io.*;
> import org.apache.sis.storage.*;
> import org.junit.*;
> import org.opengis.feature.*;
> import org.opengis.test.*;
> /**
> * Issues with features.
> */
> public class IssuesWithFeaturesTest extends TestCase
> {
> /**
> * Issue : the first property red by DenseFeature is null.
> * @throws DataStoreException if unable to find or read the shapefile.
> * @throws IOException if unable to find or read the shapefile.
> */
> @Test public void issueFirstPropertyNull() throws IOException,
> DataStoreException {
> ShapeFile shapefile = new
> ShapeFile("src/test/resources/org/apache/sis/storage/shapefile/92-Hauts-de-Seine.shp");
> Feature feature = shapefile.FeatureMap.values().iterator().next(); //
> The shapefile has 36 features, take the first one.
> String city = (String)feature.getProperty("COMMUNE\0\0\0\0").getValue();
> String refInsee =
> (String)feature.getProperty("REF_INSEE\0\0").getValue();
> String zipCode = (String)feature.getProperty("CODE_POSTA\0").getValue();
> // The first feature property you read (city here) will return a null
> value.
> assertNotNull("The city should have an INSEE reference.", refInsee);
> assertNotNull("The city should have a zip code.", zipCode);
> assertNotNull("The city should have a name.", city);
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)