sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1803070 [14/20] - in /sis/branches/JDK9: ./ application/sis-console/src/main/java/org/apache/sis/console/ core/sis-build-helper/ core/sis-build-helper/src/main/java/org/apache/sis/internal/book/ core/sis-build-helper/src/main/java/org/apac...
Date Wed, 26 Jul 2017 16:14:14 GMT
Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/MathFunctionsTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/MathFunctionsTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/MathFunctionsTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/MathFunctionsTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -33,7 +33,7 @@ import static org.apache.sis.internal.ut
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Johann Sorel (Geomatys)
- * @version 0.7
+ * @version 0.8
  * @since   0.3
  * @module
  */
@@ -243,6 +243,7 @@ public final strictfp class MathFunction
      * Tests the {@link MathFunctions#toNanFloat(int)} method. This will indirectly test the
      * converse {@link MathFunctions#toNanOrdinal(float)} method through Java assertions.
      */
+    @Test
     public void testToNanFloat() {
         final int standardNaN = Float.floatToRawIntBits(Float.NaN);
         for (int ordinal = 0; ordinal < MathFunctions.MAX_NAN_ORDINAL; ordinal += 256) {
@@ -257,6 +258,15 @@ public final strictfp class MathFunction
     }
 
     /**
+     * Tests a part of the {@link MathFunctions#toNanOrdinal(float)} method contract.
+     * More extensive tests is performed indirectly by the {@link #testToNanFloat()} method.
+     */
+    @Test
+    public void testToNanOrdinal() {
+        assertEquals(0, toNanOrdinal(Float.NaN));
+    }
+
+    /**
      * Tests the {@link MathFunctions#quadrupleToDouble(long, long)} method. Values used in this test are taken from
      * <a href="https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format">Quadruple-precision
      * floating-point format</a> on Wikipedia.

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/VectorTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/VectorTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/VectorTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/math/VectorTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -44,7 +44,7 @@ public final strictfp class VectorTest e
     @Test
     public void testSequenceOfBytes() {
         vector = Vector.createSequence(100, 2, 10);
-        assertEquals(Long.class, vector.getElementType());
+        assertEquals(Integer.class, vector.getElementType());
         assertEquals(10, vector.size());
         for (int i=0; i<vector.size(); i++) {
             assertEquals(100 + 2*i, vector.byteValue(i));
@@ -370,14 +370,16 @@ public final strictfp class VectorTest e
          */
         vec =  Vector.create(new double[] {30, 120, -50, -120}, false);
         assertNotSame(vec, compressed = vec.compress(0));
+        assertInstanceOf("vector.compress(0)", ArrayVector.class, compressed);
         assertEquals("elementType", Byte.class, compressed.getElementType());
         assertFalse("isUnsigned()", compressed.isUnsigned());
         assertContentEquals(vec, compressed);
         /*
-         * Values that can be compressed as unsigned signed bytes.
+         * Values that can be compressed as unsigned bytes.
          */
         vec =  Vector.create(new float[] {30, 120, 250, 1}, false);
         assertNotSame(vec, compressed = vec.compress(0));
+        assertInstanceOf("vector.compress(0)", ArrayVector.class, compressed);
         assertEquals("elementType", Byte.class, compressed.getElementType());
         assertTrue("isUnsigned()", compressed.isUnsigned());
         assertContentEquals(vec, compressed);
@@ -386,6 +388,7 @@ public final strictfp class VectorTest e
          */
         vec =  Vector.create(new long[] {32000, 120, -25000, 14}, false);
         assertNotSame(vec, compressed = vec.compress(0));
+        assertInstanceOf("vector.compress(0)", ArrayVector.class, compressed);
         assertEquals("elementType", Short.class, compressed.getElementType());
         assertFalse("isUnsigned()", compressed.isUnsigned());
         assertContentEquals(vec, compressed);
@@ -394,14 +397,36 @@ public final strictfp class VectorTest e
          */
         vec =  Vector.create(new float[] {3, 60000, 25, 4}, false);
         assertNotSame(vec, compressed = vec.compress(0));
+        assertInstanceOf("vector.compress(0)", ArrayVector.class, compressed);
         assertEquals("elementType", Short.class, compressed.getElementType());
         assertTrue("isUnsigned()", compressed.isUnsigned());
         assertContentEquals(vec, compressed);
         /*
          * Values that can be compressed in a PackedVector.
          * Values below require less bits than the 'byte' type.
+         * Note that we need at least PackedVector.MINIMAL_SIZE data for enabling this test.
          */
-        vec =  Vector.create(new double[] {30, 27, 93, 72, -8}, false);
+        vec =  Vector.create(new double[] {30, 27, 93, 72, -8, -3, 12, 4, 29, -5}, false);
+        assertTrue(vec.size() >= PackedVector.MINIMAL_SIZE);
+        assertNotSame(vec, compressed = vec.compress(0));
+        assertInstanceOf("vector.compress(0)", PackedVector.class, compressed);
+        assertContentEquals(vec, compressed);
+        /*
+         * Vector that could be compressed in a PackedVector, but without advantage
+         * because the number of bits required for storing the values is exactly 8.
+         */
+        vec =  Vector.create(new double[] {200, 100, 20, 80, 180, 10, 11, 12}, false);
+        assertTrue(vec.size() >= PackedVector.MINIMAL_SIZE);
+        assertNotSame(vec, compressed = vec.compress(0));
+        assertInstanceOf("vector.compress(0)", ArrayVector.class, compressed);
+        assertEquals("elementType", Byte.class, compressed.getElementType());
+        assertTrue("isUnsigned()", compressed.isUnsigned());
+        assertContentEquals(vec, compressed);
+        /*
+         * Vector that can be compressed in a PackedVector as bytes with a factor of 20.
+         */
+        vec =  Vector.create(new double[] {200, 100, 20, 80, 180, 2000, 500, 120}, false);
+        assertTrue(vec.size() >= PackedVector.MINIMAL_SIZE);
         assertNotSame(vec, compressed = vec.compress(0));
         assertInstanceOf("vector.compress(0)", PackedVector.class, compressed);
         assertContentEquals(vec, compressed);
@@ -410,6 +435,7 @@ public final strictfp class VectorTest e
          */
         vec =  Vector.create(new double[] {3.10, 60.59, -25.32, 4.78}, false);
         assertNotSame(vec, compressed = vec.compress(0));
+        assertInstanceOf("vector.compress(0)", ArrayVector.class, compressed);
         assertEquals("elementType", Float.class, compressed.getElementType());
         assertFalse("isUnsigned()", compressed.isUnsigned());
         assertContentEquals(vec, compressed);

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/ConventionalUnitTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/ConventionalUnitTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/ConventionalUnitTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/ConventionalUnitTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -17,8 +17,10 @@
 package org.apache.sis.measure;
 
 import java.lang.reflect.Field;
+import javax.measure.IncommensurableException;
 import javax.measure.Unit;
 import javax.measure.UnitConverter;
+import javax.measure.quantity.Volume;
 import org.apache.sis.test.DependsOn;
 import org.apache.sis.test.DependsOnMethod;
 import org.apache.sis.test.TestCase;
@@ -30,7 +32,7 @@ import static org.apache.sis.test.Assert
 /**
  * Tests the {@link ConventionalUnit} class. This class tests also the {@link SystemUnit#multiply(double)} and
  * {@link SystemUnit#divide(double)} methods since they are used for creating {@code ConventionalUnit} instances,
- * but those methods just delegate to {@link ConventionalUnit#create(SystemUnit, UnitConverter)}.
+ * but those methods just delegate to {@link ConventionalUnit#create(AbstractUnit, UnitConverter)}.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 0.8
@@ -69,8 +71,10 @@ public final strictfp class Conventional
         verify(Units.SECOND,            Units.HOUR,                   "h",  3600);
         verify(Units.PASCAL,            Units.PASCAL,                "Pa",     1);
         verify(Units.PASCAL,            Units.HECTOPASCAL,          "hPa",   100);
-        verify(Units.METRES_PER_SECOND, Units.KILOMETRES_PER_HOUR, "km∕h",  0.06);
+        verify(Units.METRES_PER_SECOND, Units.KILOMETRES_PER_HOUR, "km∕h",  1/3.6);
+        verify(Units.CUBIC_METRE,       Units.LITRE,                  "L",  1E-3);
         verify(Units.KILOGRAM,          Units.KILOGRAM,              "kg",     1);
+        verify(Units.KILOGRAM,          Units.GRAM,                   "g",  1E-3);
         verify(Units.UNITY,             Units.UNITY,                   "",     1);
         verify(Units.UNITY,             Units.PERCENT,                "%",  1E-2);
         verify(Units.UNITY,             Units.PPM,                  "ppm",  1E-6);
@@ -186,6 +190,9 @@ public final strictfp class Conventional
         assertSame(Units.GRAD,        Units.RADIAN.multiply(Math.PI/200));
         assertSame(Units.ARC_SECOND,  Units.RADIAN.multiply(Math.PI / (180*60*60)));
         assertSame(Units.MICRORADIAN, Units.RADIAN.divide(1E6));
+
+        assertSame(Units.GRAM, Units.KILOGRAM.divide(1E+3));
+        verify(Units.KILOGRAM, Units.KILOGRAM.divide(1E+6), "mg", 1E-6);
     }
 
     /**
@@ -240,6 +247,68 @@ public final strictfp class Conventional
     }
 
     /**
+     * Verifies that the given units derived from litres ({@code u1}) is equivalent to the given units derived
+     * from cubic metres ({@code u2}). The conversion between those two units is expected to be identity.
+     */
+    private static void assertEquivalent(final String s1, final Unit<Volume> u1,
+                                         final String s2, final Unit<Volume> u2)
+            throws IncommensurableException
+    {
+        assertEquals("unit1.symbol", s1, u1.getSymbol());
+        assertEquals("unit2.symbol", s2, u2.getSymbol());
+        assertTrue("getConverterTo(…).isIdentity", u1.getConverterTo(u2).isIdentity());
+        assertTrue("getConverterTo(…).isIdentity", u2.getConverterTo(u1).isIdentity());
+        assertTrue("getConverterTo(…).isIdentity", u1.getConverterToAny(u2).isIdentity());
+        assertTrue("getConverterTo(…).isIdentity", u2.getConverterToAny(u1).isIdentity());
+    }
+
+    /**
+     * Tests the equivalence between litres and cubic metres.
+     * The litre unit is handled as a special case, since it is not a SI unit but can have SI prefix.
+     *
+     * @throws IncommensurableException if {@link Unit#getConverterToAny(Unit)} failed.
+     */
+    @Test
+    @DependsOnMethod("verifyPrefixes")
+    public void testVolumeEquivalences() throws IncommensurableException {
+        assertEquivalent(  "L", Units.LITRE.divide  (1E+00),  "dm³", Units.CUBIC_METRE.divide  (1E+03));
+        assertEquivalent( "mL", Units.LITRE.divide  (1E+03),  "cm³", Units.CUBIC_METRE.divide  (1E+06));
+        assertEquivalent( "µL", Units.LITRE.divide  (1E+06),  "mm³", Units.CUBIC_METRE.divide  (1E+09));
+        assertEquivalent( "fL", Units.LITRE.divide  (1E+15),  "µm³", Units.CUBIC_METRE.divide  (1E+18));
+        assertEquivalent( "yL", Units.LITRE.divide  (1E+24),  "nm³", Units.CUBIC_METRE.divide  (1E+27));
+        assertEquivalent( "kL", Units.LITRE.multiply(1E+03),   "m³", Units.CUBIC_METRE.divide  (1E+00));
+        assertEquivalent( "ML", Units.LITRE.multiply(1E+06), "dam³", Units.CUBIC_METRE.multiply(1E+03));
+        assertEquivalent( "GL", Units.LITRE.multiply(1E+09),  "hm³", Units.CUBIC_METRE.multiply(1E+06));
+        assertEquivalent( "TL", Units.LITRE.multiply(1E+12),  "km³", Units.CUBIC_METRE.multiply(1E+09));
+        assertEquivalent( "ZL", Units.LITRE.multiply(1E+21),  "Mm³", Units.CUBIC_METRE.multiply(1E+18));
+        assertEquals    ( "dL", Units.LITRE.divide  (1E+01).getSymbol());
+        assertEquals    ( "cL", Units.LITRE.divide  (1E+02).getSymbol());
+        assertEquals    ( "nL", Units.LITRE.divide  (1E+09).getSymbol());
+        assertEquals    ( "pL", Units.LITRE.divide  (1E+12).getSymbol());
+        assertEquals    ( "aL", Units.LITRE.divide  (1E+18).getSymbol());
+        assertEquals    ( "zL", Units.LITRE.divide  (1E+21).getSymbol());
+        assertEquals    ("daL", Units.LITRE.multiply(1E+01).getSymbol());
+        assertEquals    ( "hL", Units.LITRE.multiply(1E+02).getSymbol());
+        assertEquals    ( "PL", Units.LITRE.multiply(1E+15).getSymbol());
+        assertEquals    ( "EL", Units.LITRE.multiply(1E+18).getSymbol());
+        assertEquals    ( "YL", Units.LITRE.multiply(1E+24).getSymbol());
+    }
+
+    /**
+     * Tests conversion between litres and cubic metres.
+     */
+    @Test
+    @DependsOnMethod("testVolumeEquivalences")
+    public void testVolumeConversions() {
+        final Unit<Volume>  l  = Units.LITRE;
+        final Unit<Volume> cl  = Units.LITRE.divide(100);
+        final Unit<Volume> ml  = Units.LITRE.divide(1000);
+        final Unit<Volume> cm3 = Units.CUBIC_METRE.divide(1E+06);
+        assertEquals("4 L to ml", 4000,  l.getConverterTo(ml) .convert(4), STRICT);
+        assertEquals("4 cL to cm³", 40, cl.getConverterTo(cm3).convert(4), STRICT);
+    }
+
+    /**
      * Serializes some units, deserializes them and verifies that we get the same instance.
      */
     @Test

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/SystemUnitTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -53,7 +53,7 @@ public final strictfp class SystemUnitTe
      *
      * @throws ReflectiveOperationException if an error occurred while iterating over the field values.
      *
-     * @see ConventionalUnit#create(SystemUnit, UnitConverter)
+     * @see ConventionalUnit#create(AbstractUnit, UnitConverter)
      */
     @Test
     public void verifyRelatedUnits() throws ReflectiveOperationException {

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -74,6 +74,7 @@ public final strictfp class UnitFormatTe
         verify(declared, "SQUARE_METRE",        "L²",           "m²",    "square metre",            Units.SQUARE_METRE);
         verify(declared, "HECTARE",             "L²",           "ha",    "hectare",                 Units.HECTARE);
         verify(declared, "CUBIC_METRE",         "L³",           "m³",    "cubic metre",             Units.CUBIC_METRE);
+        verify(declared, "LITRE",               "L³",           "L",     "litre",                   Units.LITRE);
         verify(declared, "STERADIAN",           "",             "sr",    "steradian",               Units.STERADIAN);
         verify(declared, "MICRORADIAN",         "",             "µrad",  "microradian",             Units.MICRORADIAN);
         verify(declared, "RADIAN",              "",             "rad",   "radian",                  Units.RADIAN);
@@ -115,6 +116,7 @@ public final strictfp class UnitFormatTe
         verify(declared, "LUMEN",               "J",            "lm",    "lumen",                   Units.LUMEN);
         verify(declared, "LUX",                 "J∕L²",         "lx",    "lux",                     Units.LUX);
         verify(declared, "KILOGRAM",            "M",            "kg",    "kilogram",                Units.KILOGRAM);
+        verify(declared, "GRAM",                "M",            "g",     "gram",                    Units.GRAM);
         verify(declared, "MOLE",                "N",            "mol",   "mole",                    Units.MOLE);
         verify(declared, "UNITY",               "",             "",       null,                     Units.UNITY);
         verify(declared, "PERCENT",             "",             "%",     "percentage",              Units.PERCENT);
@@ -209,9 +211,13 @@ public final strictfp class UnitFormatTe
         f.setStyle(UnitFormat.Style.UCUM);
         assertEquals("m",   f.format(Units.METRE));
         assertEquals("km",  f.format(Units.KILOMETRE));
+        assertEquals("g",   f.format(Units.GRAM));
+        assertEquals("kg",  f.format(Units.KILOGRAM));
         assertEquals("s",   f.format(Units.SECOND));
         assertEquals("min", f.format(Units.MINUTE));
         assertEquals("m2",  f.format(Units.SQUARE_METRE));
+        assertEquals("m3",  f.format(Units.CUBIC_METRE));
+        assertEquals("L",   f.format(Units.LITRE));
         assertEquals("Cel", f.format(Units.CELSIUS));
         assertEquals("K",   f.format(Units.KELVIN));
     }
@@ -225,9 +231,13 @@ public final strictfp class UnitFormatTe
         f.setStyle(UnitFormat.Style.NAME);
         assertEquals("metre",        f.format(Units.METRE));
         assertEquals("kilometre",    f.format(Units.KILOMETRE));
+        assertEquals("gram",         f.format(Units.GRAM));
+        assertEquals("kilogram",     f.format(Units.KILOGRAM));
         assertEquals("second",       f.format(Units.SECOND));
         assertEquals("minute",       f.format(Units.MINUTE));
         assertEquals("square metre", f.format(Units.SQUARE_METRE));
+        assertEquals("cubic metre",  f.format(Units.CUBIC_METRE));
+        assertEquals("litre",        f.format(Units.LITRE));
         assertEquals("Celsius",      f.format(Units.CELSIUS));          // Really upper-case "C" - this is a SI exception.
 
         f.setLocale(Locale.US);
@@ -235,6 +245,8 @@ public final strictfp class UnitFormatTe
         assertEquals("kilometer",    f.format(Units.KILOMETRE));
         assertEquals("second",       f.format(Units.SECOND));
         assertEquals("square meter", f.format(Units.SQUARE_METRE));
+        assertEquals("cubic meter",  f.format(Units.CUBIC_METRE));
+        assertEquals("liter",        f.format(Units.LITRE));
         assertEquals("Celsius",      f.format(Units.CELSIUS));
 
         f.setLocale(Locale.FRANCE);
@@ -242,6 +254,8 @@ public final strictfp class UnitFormatTe
         assertEquals("kilomètre",    f.format(Units.KILOMETRE));
         assertEquals("seconde",      f.format(Units.SECOND));
         assertEquals("mètre carré",  f.format(Units.SQUARE_METRE));
+        assertEquals("mètre cube",   f.format(Units.CUBIC_METRE));
+        assertEquals("litre",        f.format(Units.LITRE));
         assertEquals("Celsius",      f.format(Units.CELSIUS));
     }
 
@@ -262,6 +276,13 @@ public final strictfp class UnitFormatTe
         assertSame(Units.KILOMETRE,     f.parse("kilometers"));
         assertSame(Units.SQUARE_METRE,  f.parse("square metre"));
         assertSame(Units.SQUARE_METRE,  f.parse("square_meters"));
+        assertSame(Units.CUBIC_METRE,   f.parse("cubic_metres"));
+        assertSame(Units.LITRE,         f.parse("litre"));
+        assertSame(Units.LITRE,         f.parse("liters"));
+        assertSame(Units.GRAM,          f.parse("gram"));
+        assertSame(Units.GRAM,          f.parse("grams"));
+        assertSame(Units.KILOGRAM,      f.parse("kilogram"));
+        assertSame(Units.KILOGRAM,      f.parse("kilograms"));
         assertSame(Units.DEGREE,        f.parse("degree"));
         assertSame(Units.DEGREE,        f.parse("degrees"));
         assertSame(Units.DEGREE,        f.parse("decimal degrees"));
@@ -271,8 +292,12 @@ public final strictfp class UnitFormatTe
         assertSame(Units.DEGREE,        f.parse("degrees_east"));
         assertSame(Units.DEGREE,        f.parse("degree_east"));
         assertSame(Units.DEGREE,        f.parse("Degree West"));
+        assertSame(Units.DEGREE,        f.parse("degrees N"));
+        assertSame(Units.DEGREE,        f.parse("degE"));
+        assertSame(Units.DEGREE,        f.parse("Deg_E"));
         assertSame(Units.KELVIN,        f.parse("degree Kelvin"));
         assertSame(Units.CELSIUS,       f.parse("degree Celsius"));
+        assertSame(Units.CELSIUS,       f.parse("degrees C"));
         assertSame(Units.KELVIN,        f.parse("degK"));
         assertSame(Units.CELSIUS,       f.parse("degC"));
         assertSame(Units.CELSIUS,       f.parse("deg C"));
@@ -326,6 +351,9 @@ public final strictfp class UnitFormatTe
         assertSame(Units.METRE,         f.parse("m01"));
         assertSame(Units.SQUARE_METRE,  f.parse("m2"));
         assertSame(Units.CUBIC_METRE,   f.parse("m3"));
+        assertSame(Units.LITRE,         f.parse("L"));
+        assertSame(Units.LITRE,         f.parse("l"));
+        assertSame(Units.LITRE,         f.parse("ℓ"));
         assertSame(Units.HERTZ,         f.parse("s-1"));
     }
 
@@ -337,9 +365,14 @@ public final strictfp class UnitFormatTe
     @DependsOnMethod("testParseSymbol")
     public void testParsePrefix() {
         final UnitFormat f = new UnitFormat(Locale.UK);
-        ConventionalUnitTest.verify(Units.JOULE,  f.parse("kJ"),   "kJ",  1E+3);
-        ConventionalUnitTest.verify(Units.HERTZ,  f.parse("MHz"),  "MHz", 1E+6);
-        ConventionalUnitTest.verify(Units.PASCAL, f.parse("daPa"), "daPa",  10);
+        ConventionalUnitTest.verify(Units.JOULE,       f.parse("kJ"),   "kJ",   1E+3);
+        ConventionalUnitTest.verify(Units.HERTZ,       f.parse("MHz"),  "MHz",  1E+6);
+        ConventionalUnitTest.verify(Units.PASCAL,      f.parse("daPa"), "daPa", 1E+1);
+        ConventionalUnitTest.verify(Units.CUBIC_METRE, f.parse("mL"),   "mL",   1E-6);
+        ConventionalUnitTest.verify(Units.CUBIC_METRE, f.parse("ml"),   "mL",   1E-6);
+        ConventionalUnitTest.verify(Units.KILOGRAM,    f.parse("kg"),   "kg",   1E+0);
+        ConventionalUnitTest.verify(Units.KILOGRAM,    f.parse("g"),    "g",    1E-3);
+        ConventionalUnitTest.verify(Units.KILOGRAM,    f.parse("mg"),   "mg",   1E-6);
         /*
          * Verify that prefix are not accepted for conventional units. It would either be illegal prefix duplication
          * (for example we should not accept "kkm" as if it was "k" + "km") or confusing (for example "a" stands for
@@ -382,10 +415,26 @@ public final strictfp class UnitFormatTe
         assertSame(Units.KILOMETRE,  f.parse( "1000.0*m"));
         ConventionalUnitTest.verify(Units.METRE, f.parse("10*-6⋅m"),   "µm", 1E-6);
         ConventionalUnitTest.verify(Units.METRE, f.parse("10*-6.m"),   "µm", 1E-6);
+        ConventionalUnitTest.verify(Units.METRE, f.parse("10^-3.m"),   "mm", 1E-3);
         ConventionalUnitTest.verify(Units.METRE, f.parse( "100 feet"), null, 30.48);
     }
 
     /**
+     * Tests parsing of symbols containing an explicit exponentiation operation.
+     * Usually the exponentiation is implicit, as in {@code "m*s-1"}.
+     * However some formats write it explicitely, as in {@code "m*s^-1"}.
+     */
+    @Test
+    @DependsOnMethod("testParseMultiplier")
+    public void testParseExponentiation() {
+        final UnitFormat f = new UnitFormat(Locale.UK);
+        assertSame(Units.HERTZ,             f.parse("s^-1"));
+        assertSame(Units.HERTZ,             f.parse("s**-1"));
+        assertSame(Units.METRES_PER_SECOND, f.parse("m*s^-1"));
+        assertSame(Units.METRES_PER_SECOND, f.parse("m*s**-1"));
+    }
+
+    /**
      * Tests parsing expressions containing parenthesis.
      */
     @Test

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitsTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitsTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitsTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/measure/UnitsTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -187,6 +187,15 @@ public final strictfp class UnitsTest ex
     }
 
     /**
+     * Verifies some conversion factors.
+     */
+    @Test
+    public void testConversionFactors() {
+        assertEquals(1000, KILOMETRE        .getConverterTo(METRE)              .convert(1), STRICT);
+        assertEquals( 3.6, METRES_PER_SECOND.getConverterTo(KILOMETRES_PER_HOUR).convert(1), STRICT);
+    }
+
+    /**
      * Tests getting a unit for a given quantity type.
      */
     @Test
@@ -305,24 +314,24 @@ public final strictfp class UnitsTest ex
         assertSame(METRE,  valueOf("http://schemas.opengis.net/iso/19139/20070417/resources/uom/gmxUom.xml#xpointer(//*[@gml:id='m'])"));
         assertSame(METRE,  valueOf("gmxUom.xml#m"));
 
-        assertSame(TROPICAL_YEAR,   valueOfEPSG(1029));
-        assertSame(SECOND,          valueOfEPSG(1040));
-        assertSame(FOOT,            valueOfEPSG(9002));
-        assertSame(US_SURVEY_FOOT,  valueOfEPSG(9003));
-        assertSame(NAUTICAL_MILE,   valueOfEPSG(9030));
-        assertSame(KILOMETRE,       valueOfEPSG(9036));
-        assertSame(RADIAN,          valueOfEPSG(9101));
-        assertSame(ARC_MINUTE,      valueOfEPSG(9103));
-        assertSame(ARC_SECOND,      valueOfEPSG(9104));
-        assertSame(GRAD,            valueOfEPSG(9105));
-        assertSame(MICRORADIAN,     valueOfEPSG(9109));
+        assertSame(TROPICAL_YEAR,                   valueOfEPSG(1029));
+        assertSame(SECOND,                          valueOfEPSG(1040));
+        assertSame(FOOT,                            valueOfEPSG(9002));
+        assertSame(US_SURVEY_FOOT,                  valueOfEPSG(9003));
+        assertSame(NAUTICAL_MILE,                   valueOfEPSG(9030));
+        assertSame(KILOMETRE,                       valueOfEPSG(9036));
+        assertSame(RADIAN,                          valueOfEPSG(9101));
+        assertSame(ARC_MINUTE,                      valueOfEPSG(9103));
+        assertSame(ARC_SECOND,                      valueOfEPSG(9104));
+        assertSame(GRAD,                            valueOfEPSG(9105));
+        assertSame(MICRORADIAN,                     valueOfEPSG(9109));
         assertSame(SexagesimalConverter.DMS_SCALED, valueOfEPSG(9107));
         assertSame(SexagesimalConverter.DMS_SCALED, valueOfEPSG(9108));
         assertSame(SexagesimalConverter.DMS,        valueOfEPSG(9110));
         assertSame(SexagesimalConverter.DM,         valueOfEPSG(9111));
-        assertSame(UNITY,           valueOfEPSG(9203));
-        assertSame(UNITY,           valueOfEPSG(9201));
-        assertSame(PPM,             valueOfEPSG(9202));
+        assertSame(UNITY,                           valueOfEPSG(9203));
+        assertSame(UNITY,                           valueOfEPSG(9201));
+        assertSame(PPM,                             valueOfEPSG(9202));
     }
 
     /**

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -93,7 +93,8 @@ import org.junit.BeforeClass;
     org.apache.sis.util.iso.SimpleInternationalStringTest.class,
     org.apache.sis.util.iso.DefaultInternationalStringTest.class,
     org.apache.sis.internal.util.LocalizedParseExceptionTest.class,
-    org.apache.sis.util.iso.AbstractNameTest.class,
+    org.apache.sis.util.iso.DefaultLocalNameTest.class,
+    org.apache.sis.util.iso.DefaultScopedNameTest.class,
     org.apache.sis.util.iso.DefaultNameFactoryTest.class,
     org.apache.sis.util.iso.NamesTest.class,
     org.apache.sis.util.iso.TypeNamesTest.class,

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/CacheTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -25,6 +25,7 @@ import java.io.PrintWriter;
 
 import org.apache.sis.math.Statistics;
 import org.apache.sis.math.StatisticsFormat;
+import org.apache.sis.internal.util.StandardDateFormat;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.test.TestUtilities;
 import org.apache.sis.test.TestCase;
@@ -284,7 +285,8 @@ public final strictfp class CacheTest ex
         long time = System.nanoTime();
         for (int i=0; i<10; i++) {
             final long t = System.nanoTime();
-            out.printf("Cache size: %4d (after %3d ms)%n", cache.size(), round((t - time) / 1E+6));
+            out.printf("Cache size: %4d (after %3d ms)%n", cache.size(),
+                       round((t - time) / (double) StandardDateFormat.NANOS_PER_MILLISECOND));
             time = t;
             Thread.sleep(250);
             if (i >= 2) {

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/RangeSetTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/RangeSetTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/RangeSetTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/collection/RangeSetTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -35,6 +35,7 @@ import org.junit.Test;
 
 import static org.apache.sis.test.Assert.*;
 import static org.apache.sis.internal.util.StandardDateFormat.MILLISECONDS_PER_DAY;
+import static org.apache.sis.internal.util.StandardDateFormat.NANOS_PER_SECOND;
 
 
 /**
@@ -559,7 +560,7 @@ public final strictfp class RangeSetTest
                     set.remove(lower, upper);
                 }
             }
-            out.print((System.nanoTime() - start) / 1E9);
+            out.print((System.nanoTime() - start) / (float) NANOS_PER_SECOND);
             out.print(" seconds for a size of ");
             out.println(set.size());
             Thread.sleep(1000);

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/DefaultNameFactoryTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/DefaultNameFactoryTest.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/DefaultNameFactoryTest.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/DefaultNameFactoryTest.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -16,12 +16,16 @@
  */
 package org.apache.sis.util.iso;
 
-import org.junit.runner.RunWith;
-import org.junit.BeforeClass;
-import org.junit.AfterClass;
+import org.opengis.util.GenericName;
 import org.opengis.test.util.NameTest;
 import org.apache.sis.test.DependsOn;
 import org.apache.sis.test.TestRunner;
+import org.junit.runner.RunWith;
+import org.junit.BeforeClass;
+import org.junit.AfterClass;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 
 /**
@@ -29,12 +33,12 @@ import org.apache.sis.test.TestRunner;
  * a {@link DefaultNameFactory} instance shared for all tests in this class.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @version 0.8
  * @since   0.3
  * @module
  */
 @RunWith(TestRunner.class)
-@DependsOn(AbstractNameTest.class)
+@DependsOn({DefaultLocalNameTest.class, DefaultScopedNameTest.class})
 public final strictfp class DefaultNameFactoryTest extends NameTest {
     /**
      * The factory to test.
@@ -63,4 +67,33 @@ public final strictfp class DefaultNameF
     public static void disposeFactory() {
         factorySIS = null;
     }
+
+    /**
+     * Tests navigation in a name parsed from a string.
+     */
+    @Test
+    public void testNavigation() {
+        final GenericName name = factory.parseGenericName(null, "codespace:subspace:name");
+        assertEquals("codespace:subspace:name", name.toString());
+        assertEquals("codespace:subspace",      name.tip().scope().name().toString());
+        assertEquals("codespace",               name.tip().scope().name().tip().scope().name().toString());
+        assertSame(name, name.toFullyQualifiedName());
+        assertSame(name, name.tip().toFullyQualifiedName());
+    }
+
+    /**
+     * Tests the creation of scoped names where different parts of the name are {@link SimpleInternationalString}
+     * instances. The implementation should be able to detect that the names and their hash codes are equal.
+     *
+     * @see DefaultScopedNameTest#testSimpleInternationalString()
+     */
+    @Test
+    public void testSimpleInternationalString() {
+        GenericName n1 = factory.createGenericName(null, "ns1", "Route");
+        GenericName n2 = factory.createGenericName(null, new SimpleInternationalString("ns1"), "Route");
+        GenericName n3 = factory.createGenericName(null, "ns1", new SimpleInternationalString("Route"));
+        assertSame(n1, n2);
+        assertSame(n1, n3);
+        assertSame(n2, n3);
+    }
 }

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/SerializableRecordSchema.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/SerializableRecordSchema.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/SerializableRecordSchema.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/iso/SerializableRecordSchema.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -48,7 +48,7 @@ final class SerializableRecordSchema ext
     /**
      * On serialization, returns a proxy which will be resolved as {@link #INSTANCE} on deserialization.
      */
-    Object writeReplace() throws ObjectStreamException {
+    protected Object writeReplace() throws ObjectStreamException {
         return new Proxy();
     }
 

Modified: sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/logging/EmptyWarningListeners.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/logging/EmptyWarningListeners.java?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/logging/EmptyWarningListeners.java [UTF-8] (original)
+++ sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/logging/EmptyWarningListeners.java [UTF-8] Wed Jul 26 16:14:09 2017
@@ -24,7 +24,7 @@ import org.apache.sis.util.resources.Err
 
 /**
  * A unmodifiable empty list of listeners. Calls to {@link #addWarningListener(WarningListener) addWarningListener(…)}
- * will throw {@link UnsupportedOperationException}. Since this listener list is empty, it doesn't need a source.
+ * will throw {@link UnsupportedOperationException}. Since this listener list is empty, it does not need a source.
  *
  * <p>This class is used in some modules like {@code sis-netcdf}, when a JUnit test is testing some low-level
  * component where the real {@link WarningListeners} instance is not yet available.</p>

Modified: sis/branches/JDK9/ide-project/NetBeans/build.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/ide-project/NetBeans/build.xml?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/build.xml (original)
+++ sis/branches/JDK9/ide-project/NetBeans/build.xml Wed Jul 26 16:14:09 2017
@@ -60,7 +60,7 @@
       </fileset>
       -->
 
-      <!-- Other resources (properties files, SQL scripts). -->
+      <!-- Other resources (properties files, SQL scripts, native libraries). -->
       <fileset dir="${project.root}/core/sis-utility/src/main/resources">
         <include name="**/*.properties"/>
       </fileset>
@@ -70,6 +70,13 @@
       <fileset dir="${project.root}/core/sis-referencing/src/main/resources">
         <include name="**/*.sql"/>
       </fileset>
+      <fileset dir="${project.root}/storage/sis-xmlstore/src/main/resources">
+        <include name="**/*.properties"/>
+      </fileset>
+      <fileset dir="${project.root}/storage/sis-gdal/src/main/resources">
+        <include name="**/*.dll"/>
+        <include name="**/*.so"/>
+      </fileset>
       <fileset dir="${project.root}/application/sis-console/src/main/resources">
         <include name="**/*.properties"/>
       </fileset>
@@ -185,6 +192,13 @@
       </fileset>
     </concat>
 
+    <!-- SpecializedOperationFactory implementations to be loaded by ServiceLoader. -->
+    <concat destfile="${build.classes.dir}/META-INF/services/org.apache.sis.internal.referencing.SpecializedOperationFactory" encoding="UTF-8" fixlastline="yes">
+      <fileset dir="${project.root}">
+        <include name="*/*/src/main/resources/META-INF/services/org.apache.sis.internal.referencing.SpecializedOperationFactory"/>
+      </fileset>
+    </concat>
+
     <!-- DataStoreProvider implementations to be loaded by ServiceLoader. -->
     <concat destfile="${build.classes.dir}/META-INF/services/org.apache.sis.storage.DataStoreProvider" encoding="UTF-8" fixlastline="yes">
       <fileset dir="${project.root}">

Modified: sis/branches/JDK9/ide-project/NetBeans/nbproject/build-impl.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/ide-project/NetBeans/nbproject/build-impl.xml?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/nbproject/build-impl.xml (original)
+++ sis/branches/JDK9/ide-project/NetBeans/nbproject/build-impl.xml Wed Jul 26 16:14:09 2017
@@ -19,7 +19,7 @@ is divided into following sections:
   - cleanup
 
         -->
-<project xmlns:if="ant:if" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" xmlns:unless="ant:unless" basedir=".." default="default" name="Apache_SIS_for_JDK9-impl">
+<project xmlns:if="ant:if" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" xmlns:unless="ant:unless" basedir=".." default="default" name="Apache_SIS_for_JDK8-impl">
     <fail message="Please build using Ant 1.8.0 or higher.">
         <condition>
             <not>
@@ -90,7 +90,7 @@ is divided into following sections:
                 </not>
             </condition>
         </fail>
-        <j2seproject3:modulename property="module.name" sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}"/>
+        <j2seproject3:modulename property="module.name" sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}"/>
         <condition property="named.module.internal">
             <and>
                 <isset property="module.name"/>
@@ -242,6 +242,7 @@ is divided into following sections:
                 <available file="${test.metadata.dir}"/>
                 <available file="${test.utility.dir}"/>
                 <available file="${test.fra-profile.dir}"/>
+                <available file="${test.gdal.dir}"/>
             </or>
         </condition>
         <condition property="have.sources">
@@ -261,6 +262,8 @@ is divided into following sections:
                 <available file="${src.metadata.dir}"/>
                 <available file="${src.utility.dir}"/>
                 <available file="${src.fra-profile.dir}"/>
+                <available file="${src.gdal.dir}"/>
+                <available file="${src.c.gdal.dir}"/>
             </or>
         </condition>
         <condition property="netbeans.home+have.tests">
@@ -364,6 +367,8 @@ is divided into following sections:
         <fail unless="src.metadata.dir">Must set src.metadata.dir</fail>
         <fail unless="src.utility.dir">Must set src.utility.dir</fail>
         <fail unless="src.fra-profile.dir">Must set src.fra-profile.dir</fail>
+        <fail unless="src.gdal.dir">Must set src.gdal.dir</fail>
+        <fail unless="src.c.gdal.dir">Must set src.c.gdal.dir</fail>
         <fail unless="test.webapp.dir">Must set test.webapp.dir</fail>
         <fail unless="test.console.dir">Must set test.console.dir</fail>
         <fail unless="test.earth-obs.dir">Must set test.earth-obs.dir</fail>
@@ -378,6 +383,7 @@ is divided into following sections:
         <fail unless="test.metadata.dir">Must set test.metadata.dir</fail>
         <fail unless="test.utility.dir">Must set test.utility.dir</fail>
         <fail unless="test.fra-profile.dir">Must set test.fra-profile.dir</fail>
+        <fail unless="test.gdal.dir">Must set test.gdal.dir</fail>
         <fail unless="build.dir">Must set build.dir</fail>
         <fail unless="dist.dir">Must set dist.dir</fail>
         <fail unless="build.classes.dir">Must set build.classes.dir</fail>
@@ -398,7 +404,7 @@ is divided into following sections:
     </target>
     <target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="modules.supported.internal" name="-init-macrodef-javac-with-module">
         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.modulepath}" name="modulepath"/>
@@ -410,7 +416,7 @@ is divided into following sections:
             <attribute default="${excludes}" name="excludes"/>
             <attribute default="${javac.debug}" name="debug"/>
             <attribute default="${empty.dir}" name="sourcepath" unless:set="named.module.internal"/>
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" if:set="named.module.internal" name="sourcepath"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" if:set="named.module.internal" name="sourcepath"/>
             <attribute default="${empty.dir}" name="gensrcdir"/>
             <element name="customize" optional="true"/>
             <sequential>
@@ -465,7 +471,7 @@ is divided into following sections:
     </target>
     <target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors" unless="modules.supported.internal">
         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.modulepath}" name="modulepath"/>
@@ -508,7 +514,7 @@ is divided into following sections:
     </target>
     <target depends="-init-ap-cmdline-properties,-init-source-module-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.modulepath}" name="modulepath"/>
@@ -543,7 +549,7 @@ is divided into following sections:
     </target>
     <target depends="-init-macrodef-javac-with-module,-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
         <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <sequential>
@@ -718,6 +724,9 @@ is divided into following sections:
                             <fileset dir="${test.fra-profile.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                                 <filename name="@{testincludes}"/>
                             </fileset>
+                            <fileset dir="${test.gdal.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                <filename name="@{testincludes}"/>
+                            </fileset>
                             <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
                                 <filename name="${test.binarytestincludes}"/>
                             </fileset>
@@ -783,9 +792,12 @@ is divided into following sections:
                     <fileset dir="${test.fra-profile.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
+                    <fileset dir="${test.gdal.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
                 </union>
                 <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
-                <testng classfilesetref="test.set" failureProperty="tests.failed" jvm="${platform.java}" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="Apache_SIS_for_JDK9" testname="TestNG tests" workingDir="${work.dir}">
+                <testng classfilesetref="test.set" failureProperty="tests.failed" jvm="${platform.java}" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="Apache_SIS_for_JDK8" testname="TestNG tests" workingDir="${work.dir}">
                     <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
                     <propertyset>
                         <propertyref prefix="test-sys-prop."/>
@@ -882,7 +894,7 @@ is divided into following sections:
                 <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
                     <isset property="test.method"/>
                 </condition>
-                <condition else="-suitename Apache_SIS_for_JDK9 -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                <condition else="-suitename Apache_SIS_for_JDK8 -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
                     <matches pattern=".*\.xml" string="@{testClass}"/>
                 </condition>
                 <delete dir="${build.test.results.dir}" quiet="true"/>
@@ -1226,7 +1238,7 @@ is divided into following sections:
         <delete file="${built-jar.properties}" quiet="true"/>
     </target>
     <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
-        <echo level="warn" message="Cycle detected: Apache SIS for JDK9 was already built"/>
+        <echo level="warn" message="Cycle detected: Apache SIS for JDK8 was already built"/>
     </target>
     <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
         <mkdir dir="${build.dir}"/>
@@ -1268,7 +1280,7 @@ is divided into following sections:
                 <include name="*"/>
             </dirset>
         </pathconvert>
-        <j2seproject3:depend srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${build.generated.subdirs}"/>
+        <j2seproject3:depend srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}:${build.generated.subdirs}"/>
     </target>
     <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
         <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
@@ -1288,6 +1300,8 @@ is divided into following sections:
             <fileset dir="${src.metadata.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.utility.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.fra-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${src.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${src.c.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
         </copy>
     </target>
     <target if="has.persistence.xml" name="-copy-persistence-xml">
@@ -1308,7 +1322,7 @@ is divided into following sections:
     <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
         <j2seproject3:force-recompile/>
-        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}, module-info.java" sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}"/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}, module-info.java" sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}"/>
     </target>
     <target name="-post-compile-single">
         <!-- Empty placeholder for easier customization. -->
@@ -1734,6 +1748,12 @@ is divided into following sections:
             <fileset dir="${src.fra-profile.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
+            <fileset dir="${src.gdal.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${src.c.gdal.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
             <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
                 <include name="**/*.java"/>
                 <exclude name="*.java"/>
@@ -1787,6 +1807,12 @@ is divided into following sections:
             <fileset dir="${src.fra-profile.dir}" excludes="${excludes}" includes="${includes}">
                 <filename name="**/doc-files/**"/>
             </fileset>
+            <fileset dir="${src.gdal.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${src.c.gdal.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
             <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
                 <include name="**/doc-files/**"/>
             </fileset>
@@ -1809,14 +1835,14 @@ is divided into following sections:
         <!-- You can override this target in the ../build.xml file. -->
     </target>
     <target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-javac-module-properties-with-module">
-        <j2seproject3:modulename property="test.module.name" sourcepath="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
-        <condition else="${empty.dir}" property="javac.test.sourcepath" value="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}">
+        <j2seproject3:modulename property="test.module.name" sourcepath="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.gdal.dir}"/>
+        <condition else="${empty.dir}" property="javac.test.sourcepath" value="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.gdal.dir}">
             <and>
                 <isset property="test.module.name"/>
                 <length length="0" string="${test.module.name}" when="greater"/>
             </and>
         </condition>
-        <condition else="--patch-module ${module.name}=${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir} --add-reads ${module.name}=ALL-UNNAMED" property="javac.test.compilerargs" value="--add-reads ${test.module.name}=ALL-UNNAMED">
+        <condition else="--patch-module ${module.name}=${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.gdal.dir} --add-reads ${module.name}=ALL-UNNAMED" property="javac.test.compilerargs" value="--add-reads ${test.module.name}=ALL-UNNAMED">
             <and>
                 <isset property="test.module.name"/>
                 <length length="0" string="${test.module.name}" when="greater"/>
@@ -1857,10 +1883,10 @@ is divided into following sections:
     </target>
     <target depends="-init-test-javac-module-properties-with-module,-init-test-module-properties-without-module" name="-init-test-module-properties"/>
     <target if="do.depend.true" name="-compile-test-depend">
-        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.gdal.dir}"/>
     </target>
     <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${javac.test.sourcepath}" srcdir="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${javac.test.sourcepath}" srcdir="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.gdal.dir}">
             <customize>
                 <compilerarg line="${javac.test.compilerargs}"/>
             </customize>
@@ -1880,6 +1906,7 @@ is divided into following sections:
             <fileset dir="${test.metadata.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.utility.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.fra-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${test.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
         </copy>
     </target>
     <target name="-post-compile-test">
@@ -1894,7 +1921,7 @@ is divided into following sections:
     <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
         <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}, module-info.java" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}" srcdir="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}, module-info.java" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.gdal.dir}" srcdir="${test.webapp.dir}:${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.gdal.dir}">
             <customize>
                 <compilerarg line="${javac.test.compilerargs}"/>
             </customize>
@@ -1914,6 +1941,7 @@ is divided into following sections:
             <fileset dir="${test.metadata.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.utility.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.fra-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${test.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
         </copy>
     </target>
     <target name="-post-compile-test-single">
@@ -2018,7 +2046,7 @@ is divided into following sections:
         <delete file="${built-clean.properties}" quiet="true"/>
     </target>
     <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
-        <echo level="warn" message="Cycle detected: Apache SIS for JDK9 was already built"/>
+        <echo level="warn" message="Cycle detected: Apache SIS for JDK8 was already built"/>
     </target>
     <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
         <mkdir dir="${build.dir}"/>

Modified: sis/branches/JDK9/ide-project/NetBeans/nbproject/genfiles.properties
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/ide-project/NetBeans/nbproject/genfiles.properties?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/nbproject/genfiles.properties [ISO-8859-1] (original)
+++ sis/branches/JDK9/ide-project/NetBeans/nbproject/genfiles.properties [ISO-8859-1] Wed Jul 26 16:14:09 2017
@@ -3,6 +3,6 @@
 build.xml.data.CRC32=58e6b21c
 build.xml.script.CRC32=462eaba0
 build.xml.stylesheet.CRC32=28e38971@1.53.1.46
-nbproject/build-impl.xml.data.CRC32=71ecf9a8
-nbproject/build-impl.xml.script.CRC32=163cda63
+nbproject/build-impl.xml.data.CRC32=b05d9ae6
+nbproject/build-impl.xml.script.CRC32=29cf4517
 nbproject/build-impl.xml.stylesheet.CRC32=bade6ae5@1.88.0.48

Modified: sis/branches/JDK9/ide-project/NetBeans/nbproject/project.properties
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/ide-project/NetBeans/nbproject/project.properties?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/nbproject/project.properties [ISO-8859-1] (original)
+++ sis/branches/JDK9/ide-project/NetBeans/nbproject/project.properties [ISO-8859-1] Wed Jul 26 16:14:09 2017
@@ -38,8 +38,9 @@ source.encoding      = UTF-8
 javac.source         = 9
 javac.target         = 9
 platform.active      = JDK_9
-run.jvmargs          = -ea -Dorg.apache.sis.test.verbose=true -Dorg.apache.sis.test.extensive=true
 junit.forkmode       = once
+run.jvmargs          = -ea -Dorg.apache.sis.test.verbose=true -Dorg.apache.sis.test.extensive=true
+#                      -Dderby.drda.startNetworkServer=true -Dderby.drda.portNumber=1527
 
 #
 # Source directories.
@@ -60,6 +61,9 @@ src.shapefile.dir    = ${project.root}/s
 test.shapefile.dir   = ${project.root}/storage/sis-shapefile/src/test/java
 src.xmlstore.dir     = ${project.root}/storage/sis-xmlstore/src/main/java
 test.xmlstore.dir    = ${project.root}/storage/sis-xmlstore/src/test/java
+src.gdal.dir         = ${project.root}/storage/sis-gdal/src/main/java
+src.c.gdal.dir       = ${project.root}/storage/sis-gdal/src/main/c
+test.gdal.dir        = ${project.root}/storage/sis-gdal/src/test/java
 src.storage.dir      = ${project.root}/storage/sis-storage/src/main/java
 test.storage.dir     = ${project.root}/storage/sis-storage/src/test/java
 src.feature.dir      = ${project.root}/core/sis-feature/src/main/java
@@ -96,7 +100,7 @@ jdom1.version        = 1.0
 jdom2.version        = 2.0.4
 jee.version          = 7.0
 osgi.version         = 6.0.0
-netcdf.version       = 4.6.8
+netcdf.version       = 4.6.9
 joda-time.version    = 2.8.1
 httpclient.version   = 4.5.1
 httpcore.version     = 4.4.4
@@ -105,8 +109,8 @@ slf4j.version        = 1.7.7
 junit.version        = 4.12
 hamcrest.version     = 1.3
 jaxb-ns-mapper       = 2.2.4
-hsqldb.version       = 2.3.4
-postgresql.version   = 42.0.0
+hsqldb.version       = 2.4.0
+postgresql.version   = 42.1.1
 
 #
 # Classpaths for compilation, execution and tests.
@@ -132,6 +136,8 @@ javac.test.classpath=\
     ${javac.classpath}:\
     ${maven.repository}/junit/junit/${junit.version}/junit-${junit.version}.jar:\
     ${maven.repository}/org/hamcrest/hamcrest-core/${hamcrest.version}/hamcrest-core-${hamcrest.version}.jar:\
+    ${maven.repository}/org/postgresql/postgresql/${postgresql.version}/postgresql-${postgresql.version}.jar:\
+    ${maven.repository}/org/hsqldb/hsqldb/${hsqldb.version}/hsqldb-${hsqldb.version}.jar:\
     ${maven.repository}/gov/nist/math/jama/${jama.version}/jama-${jama.version}.jar:\
     ${project.GeoAPI}/dist/geoapi-tests.jar:\
     ${build.classes.dir}
@@ -149,8 +155,6 @@ run.modulepath=\
 run.test.classpath=\
     ${javac.test.classpath}:\
     ${build.test.classes.dir}:\
-    ${maven.repository}/org/hsqldb/hsqldb/${hsqldb.version}/hsqldb-${hsqldb.version}.jar:\
-    ${maven.repository}/org/postgresql/postgresql/${postgresql.version}/postgresql-${postgresql.version}.jar:\
     ${maven.repository}/org/jdom/jdom2/${jdom2.version}/jdom2-${jdom2.version}.jar:\
     ${maven.repository}/edu/ucar/udunits/${netcdf.version}/udunits-${netcdf.version}.jar:\
     ${maven.repository}/edu/ucar/httpservices/${netcdf.version}/httpservices-${netcdf.version}.jar:\
@@ -177,6 +181,7 @@ debug.test.modulepath=\
 javac.compilerargs                       = -Xdoclint:syntax,html,reference,missing/protected,accessibility/protected
 javac.deprecation                        = true
 javac.external.vm                        = false
+javadoc.html5                            = true
 javadoc.windowtitle                      = Apache SIS
 javadoc.encoding                         = ${source.encoding}
 javadoc.author                           = true
@@ -218,6 +223,8 @@ dist.dir
 dist.jar                                 = ${dist.dir}/SIS.jar
 dist.javadoc.dir                         = ${dist.dir}/javadoc
 mkdist.disabled                          = true
+jlink.launcher                           = false
+jlink.launcher.name                      = ApacheSIS
 
 #
 # Editor

Modified: sis/branches/JDK9/ide-project/NetBeans/nbproject/project.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/ide-project/NetBeans/nbproject/project.xml?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/nbproject/project.xml (original)
+++ sis/branches/JDK9/ide-project/NetBeans/nbproject/project.xml Wed Jul 26 16:14:09 2017
@@ -21,7 +21,7 @@
     <type>org.netbeans.modules.java.j2seproject</type>
     <configuration>
         <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
-            <name>Apache SIS for JDK9</name>
+            <name>Apache SIS for JDK8</name>
             <explicit-platform explicit-source-supported="true"/>
             <source-roots>
                 <root id="src.local-src.dir" name="Local sources (unversioned)"/>
@@ -39,6 +39,8 @@
                 <root id="src.metadata.dir" name="Metadata"/>
                 <root id="src.utility.dir" name="Utility"/>
                 <root id="src.fra-profile.dir" name="French profile"/>
+                <root id="src.gdal.dir" name="GDAL/Proj4"/>
+                <root id="src.c.gdal.dir" name="GDAL/Proj4 JNI"/>
             </source-roots>
             <test-roots>
                 <root id="test.webapp.dir" name="Test web application"/>
@@ -55,6 +57,7 @@
                 <root id="test.metadata.dir" name="Test Metadata"/>
                 <root id="test.utility.dir" name="Test Utility"/>
                 <root id="test.fra-profile.dir" name="Test French profile"/>
+                <root id="test.gdal.dir" name="Test GDAL/Proj4"/>
             </test-roots>
         </data>
         <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
@@ -95,6 +98,8 @@
             <word>namespaces</word>
             <word>orthodromic</word>
             <word>parsable</word>
+            <word>polyline</word>
+            <word>polylines</word>
             <word>spliterator</word>
             <word>timezone</word>
             <word>Unicode</word>

Modified: sis/branches/JDK9/pom.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/pom.xml?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/pom.xml (original)
+++ sis/branches/JDK9/pom.xml Wed Jul 26 16:14:09 2017
@@ -24,10 +24,6 @@
          xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
                                http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
-  <prerequisites>
-    <maven>3.5.0</maven>
-  </prerequisites>
-
   <parent>
     <groupId>org.apache</groupId>
     <artifactId>apache</artifactId>
@@ -413,6 +409,7 @@ Apache SIS is a free software, Java lang
         <groupId>com.esri.geometry</groupId>
         <artifactId>esri-geometry-api</artifactId>
         <version>1.2.1</version>
+        <optional>true</optional>
       </dependency>
       <dependency>
         <groupId>gov.nist.math</groupId>
@@ -429,20 +426,20 @@ Apache SIS is a free software, Java lang
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-compress</artifactId>
-        <version>1.13</version>
+        <version>1.14</version>
       </dependency>
 
       <!-- Databases -->
       <dependency>
         <groupId>org.hsqldb</groupId>
         <artifactId>hsqldb</artifactId>
-        <version>2.3.4</version>
+        <version>2.4.0</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.postgresql</groupId>
         <artifactId>postgresql</artifactId>
-        <version>42.0.0</version>
+        <version>42.1.1</version>
         <scope>test</scope>
       </dependency>
 
@@ -488,7 +485,7 @@ Apache SIS is a free software, Java lang
          The last properties in this list depend on the Apache SIS branch.
        =================================================================== -->
   <properties>
-    <netcdf.version>4.6.8</netcdf.version>
+    <netcdf.version>4.6.9</netcdf.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <website.encoding>UTF-8</website.encoding>
     <website.locale>en</website.locale>
@@ -558,6 +555,7 @@ Apache SIS is a free software, Java lang
             <arg>-Xlint:all</arg>
             <arg>-Xdoclint:syntax,html,missing/protected,accessibility/protected</arg>
             <arg>--add-modules</arg> <arg>java.xml.bind,java.xml.ws.annotation</arg>
+            <arg>-h</arg> <arg>${project.build.sourceDirectory}/../c</arg>
           </compilerArgs>
         </configuration>
       </plugin>
@@ -676,6 +674,10 @@ Apache SIS is a free software, Java lang
                   <module name="FileTabCharacter"/>                 <!-- No tab characters in the file. -->
                   <module name="NewlineAtEndOfFile"/>               <!-- Newline at the end of each file. -->
                   <module name="TreeWalker">
+                    <module name="RegexpSinglelineJava">
+                      <property name="format" value="\s+$"/>
+                      <property name="message" value="Trailing spaces not allowed."/>
+                    </module>
                     <module name="NoLineWrap"/>                     <!-- Imports and package statements are not line-wrapped. -->
                     <module name="RedundantImport"/>                <!-- No redundant import statements. -->
                     <module name="GenericWhitespace"/>              <!-- Whitespace around the Generic tokens follow typical convention. -->
@@ -753,6 +755,7 @@ Apache SIS is a free software, Java lang
       <!-- JavaDoc configuration. -->
       <plugin>
         <artifactId>maven-javadoc-plugin</artifactId>
+        <version>2.10.4</version>
         <configuration>
           <source>${maven.compile.source}</source>              <!-- Enables javadoc to handle language constructs present in target JDK. -->
           <encoding>${project.build.sourceEncoding}</encoding>  <!-- Encoding of Java source file. -->
@@ -769,6 +772,7 @@ Apache SIS is a free software, Java lang
           <links>
             <link>http://unitsofmeasurement.github.io/unit-api/site/apidocs</link>
             <link>http://www.geoapi.org/snapshot/pending</link>
+            <link>http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/javadoc</link>
           </links>
 
           <additionalparam>

Modified: sis/branches/JDK9/src/main/javadoc/stylesheet.css
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/src/main/javadoc/stylesheet.css?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/src/main/javadoc/stylesheet.css (original)
+++ sis/branches/JDK9/src/main/javadoc/stylesheet.css Wed Jul 26 16:14:09 2017
@@ -212,6 +212,37 @@ div.block center {
 }
 
 /*
+ * Text similar to <pre> but without monospace font.
+ */
+div.preformat {
+  margin: 15px 30px;
+  line-height: 100%;
+  white-space: pre-wrap;
+}
+
+/*
+ * Output of {@preformat} inline tag.
+ */
+pre.code-sample {
+  margin-left:   40px;
+  margin-right:  40px;
+  margin-top:    12px;
+  margin-bottom: 12px;
+}
+
+td > pre.code-sample {
+  margin: 9px;
+}
+
+:not(td) > pre.code-sample {
+  padding:      9px;
+  border-style: solid;
+  border-width: 1px;
+  border-color: gray;
+  background-color: rgba(200, 200, 200, 0.1);
+}
+
+/*
  * Miscellaneous.
  */
 span.deprecated {

Modified: sis/branches/JDK9/storage/pom.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK9/storage/pom.xml?rev=1803070&r1=1803069&r2=1803070&view=diff
==============================================================================
--- sis/branches/JDK9/storage/pom.xml (original)
+++ sis/branches/JDK9/storage/pom.xml Wed Jul 26 16:14:09 2017
@@ -164,6 +164,7 @@
     <module>sis-geotiff</module>
     <module>sis-xmlstore</module>
     <module>sis-earth-observation</module>
+    <module>sis-gdal</module>
   </modules>
 
 </project>



Mime
View raw message