sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject [sis] 01/02: Force the use of `Vector` (i.e. make sure that we don't get a `List<String>`) when reading coordinate variables. If the variable contains texts, those texts will be parsed as numbers.
Date Wed, 28 Oct 2020 13:46:56 GMT
This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 4f89f2abc21a0c4406f27dd9c7e6a79b26d34569
Author: Martin Desruisseaux <martin.desruisseaux@geomatys.com>
AuthorDate: Wed Oct 28 10:35:17 2020 +0100

    Force the use of `Vector` (i.e. make sure that we don't get a `List<String>`) when
reading coordinate variables.
    If the variable contains texts, those texts will be parsed as numbers.
---
 .../java/org/apache/sis/internal/netcdf/FeatureSet.java  | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/FeatureSet.java
b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/FeatureSet.java
index c6cd189..7af08a2 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/FeatureSet.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/FeatureSet.java
@@ -722,7 +722,7 @@ skip:           for (final Variable v : properties) {
          */
         private void readNextPage() throws IOException, DataStoreException {
             final int length = Math.min(size - currentLowerIndex, PAGE_SIZE);
-            read(properties, currentLowerIndex, length, propertyValues);
+            read(properties, propertyIndexOffset, currentLowerIndex, length, propertyValues);
             currentUpperIndex = currentLowerIndex + length;
         }
 
@@ -777,8 +777,9 @@ skip:           for (final Variable v : properties) {
                 final int n = dynamicProperties.length;
                 if (n != 0) {
                     final List<?>[] target = new List<?>[n];
-                    read(dynamicProperties, dynamicPropertyPosition, length, target);
-                    for (int i=getReferencingDimension(true); i<n; i++) {
+                    int i = getReferencingDimension(true);
+                    read(dynamicProperties, i, dynamicPropertyPosition, length, target);
+                    for (/* i = first property after coordinate vectors */; i<n; i++)
{
                         feature.setPropertyValue(dynamicProperties[i].getName(), target[i]);
                     }
                     if (isTrajectory) {
@@ -874,12 +875,13 @@ makeGeom:   if (!isEmpty) {
          * The same sub-region is read for all variables.
          *
          * @param  variables   the variables to read.
+         * @param  refdim      number of referencing dimensions in {@code variables}.
          * @param  position    position of the first value to read in the netCDF variables.
          * @param  length      number of property values to read.
          * @param  target      where to store the results of read operations.
          */
-        private void read(final Variable[] variables, final long position, final int length,
final List<?>[] target)
-                throws IOException, DataStoreException
+        private void read(final Variable[] variables, final int refdim, final long position,
final int length,
+                          final List<?>[] target) throws IOException, DataStoreException
         {
             final GridExtent extent = extent(null, 1, position, length);
             List<Dimension> textDimensions = null;
@@ -895,8 +897,10 @@ makeGeom:   if (!isEmpty) {
                             textDimensions = dimensions;
                         }
                         value = p.readAnyType(textExtent, null);
+                    } else if (i >= refdim) {
+                        value = p.readAnyType(extent, null);        // May be `Vector` or
`List<String>`.
                     } else {
-                        value = p.readAnyType(extent, null);
+                        value = p.read(extent, null);               // Force the type to
`Vector`.
                     }
                     if (p.isEnumeration() && value instanceof Vector) {
                         final Vector data = (Vector) value;


Mime
View raw message