Modified: 
sis/branches/JDK9/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -143,6 +143,7 @@ public final strictfp class CoordinateRe
         rd("Deutsches Haupthoehennetz 1912",                              
"Deutsches Haupthoehennetz");
         rd("Deutsches Haupthoehennetz 1985",                              
"Deutsches Haupthoehennetz");
         rd("Deutsches Haupthoehennetz 1992",                              
"Deutsches Haupthoehennetz");
+        rd("Deutsches Haupthoehennetz 2016",                              
"Deutsches Haupthoehennetz");
         rd("Douala 1948",                                                 
"Douala");
         rd("Dunedin 1958",                                                
"Dunedin");
         rd("Dunedin-Bluff 1960",                                          
"Dunedin");
@@ -159,6 +160,15 @@ public final strictfp class CoordinateRe
         rd("European Datum 1950(1977)",                                   
"European Datum");
         rd("European Datum 1979",                                         
"European Datum");
         rd("European Datum 1987",                                         
"European Datum");
+        rd("European Terrestrial Reference Frame 1989",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 1990",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 1991",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 1992",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 1993",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 1994",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 1996",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 1997",                   
"European Terrestrial Reference Frame");
+        rd("European Terrestrial Reference Frame 2000",                   
"European Terrestrial Reference Frame");
         rd("European Vertical Reference Frame 2000",                      
"European Vertical Reference Frame");
         rd("European Vertical Reference Frame 2007",                      
"European Vertical Reference Frame");
         rd("Fahud Height Datum",                                          
"Fahud");
@@ -220,8 +230,11 @@ public final strictfp class CoordinateRe
         rd("International Terrestrial Reference Frame 2000",              
"International Terrestrial Reference Frame");
         rd("International Terrestrial Reference Frame 2005",              
"International Terrestrial Reference Frame");
         rd("International Terrestrial Reference Frame 2008",              
"International Terrestrial Reference Frame");
+        rd("International Terrestrial Reference Frame 2014",              
"International Terrestrial Reference Frame");
         rd("Islands Net 1993",                                            
"Islands Net");
         rd("Islands Net 2004",                                            
"Islands Net");
+        rd("Israeli Geodetic Datum 2005",                                 
"Israeli Geodetic Datum");
+        rd("Israeli Geodetic Datum 2005(2012)",                           
"Israeli Geodetic Datum");
         rd("Jamaica 1875",                                                
"Jamaica");
         rd("Jamaica 1969",                                                
"Jamaica");
         rd("Jamaica 2001",                                                
"Jamaica");
@@ -294,16 +307,24 @@ public final strictfp class CoordinateRe
         rd("NAD83 (National Spatial Reference System 2011)",              
"North American Datum 1983 — National Spatial Reference System 2011");
         rd("NAD83 (National Spatial Reference System MA11)",              
"North American Datum 1983 — National Spatial Reference System MA11 / PA11");
         rd("NAD83 (National Spatial Reference System PA11)",              
"North American Datum 1983 — National Spatial Reference System MA11 / PA11");
+        rd("New Zealand Vertical Datum 2009",                             "New 
Zealand Vertical Datum");
+        rd("New Zealand Vertical Datum 2016",                             "New 
Zealand Vertical Datum");
         rd("Norway Normal Null 1954",                                     
"Norway Normal Null");
         rd("Norway Normal Null 2000",                                     
"Norway Normal Null");
+        rd("Ordnance Datum Newlyn (Offshore)",                            
"Ordnance Datum Newlyn");
         rd("Ordnance Datum Newlyn (Orkney Isles)",                        
"Ordnance Datum Newlyn");
         rd("OSGB 1936",                                                   
"OSGB");
         rd("OSGB 1970 (SN)",                                              
"OSGB");
         rd("Padang 1884 (Jakarta)",                                       
"Padang 1884");
+        rd("Parametry Zemli 1990",                                        
"Parametry Zemli 1990");
+        rd("Parametry Zemli 1990.02",                                     
"Parametry Zemli 1990");
+        rd("Parametry Zemli 1990.11",                                     
"Parametry Zemli 1990");
         rd("PDO Height Datum 1993",                                       "PDO 
Survey / Height Datum 1993");
         rd("PDO Survey Datum 1993",                                       "PDO 
Survey / Height Datum 1993");
         rd("Pitcairn 1967",                                               
"Pitcairn");
         rd("Pitcairn 2006",                                               
"Pitcairn");
+        rd("Port Moresby 1996",                                           
"Port Moresby");
+        rd("Port Moresby 2008",                                           
"Port Moresby");
         rd("Porto Santo 1936",                                            
"Porto Santo");
         rd("Porto Santo 1995",                                            
"Porto Santo");
         rd("Posiciones Geodésicas Argentinas 1994",                       
"Posiciones Geodésicas Argentinas");
@@ -423,10 +444,10 @@ public final strictfp class CoordinateRe
         " tm",                      // "ETRS89 / TM35FIN(E,N)" — we want to 
not interleave them between "TM35" and "TM36".
         " dktm",                    // "ETRS89 / DKTM1 + DVR90 height"
         "-gk",                      // "ETRS89 / ETRS-GK19FIN"
-//      " philippines zone ",       // "Luzon 1911 / Philippines zone IV"
-//      " california zone ",        // "NAD27 / California zone V"
-//      " ngo zone ",               // "NGO 1948 (Oslo) / NGO zone I"
-//      " lambert zone ",           // "NTF (Paris) / Lambert zone II + NGF 
IGN69 height"
+        " philippines zone ",       // "Luzon 1911 / Philippines zone IV"
+        " california zone ",        // "NAD27 / California zone V"
+        " ngo zone ",               // "NGO 1948 (Oslo) / NGO zone I"
+        " lambert zone ",           // "NTF (Paris) / Lambert zone II + NGF 
IGN69 height"
         "fiji 1956 / utm zone "     // Two zones: 60S and 1S with 60 before 1.
     };
 
@@ -459,7 +480,7 @@ public final strictfp class CoordinateRe
         properties.setProperty("PRODUCT.URL",     "http://sis.apache.org";);
         properties.setProperty("JAVADOC.GEOAPI",  
"http://www.geoapi.org/snapshot/javadoc";);
         properties.setProperty("FACTORY.NAME",    "EPSG");
-        properties.setProperty("FACTORY.VERSION", "9.0");
+        properties.setProperty("FACTORY.VERSION", "9.1");
         properties.setProperty("FACTORY.VERSION.SUFFIX", ", together with 
other sources");
         properties.setProperty("PRODUCT.VERSION.SUFFIX", " (provided that <a 
href=\"http://sis.apache.org/epsg.html\";>a connection to an EPSG database 
exists</a>)");
         properties.setProperty("DESCRIPTION", "<p><b>Notation:</b></p>\n" +
@@ -469,7 +490,7 @@ public final strictfp class CoordinateRe
                 "  <li>The <del>codes with a strike</del> 
(${PERCENT.DEPRECATED} of them) identify deprecated CRS." +
                 " In some cases, the remarks column indicates the 
replacement.</li>\n" +
                 "</ul>");
-        factory = org.apache.sis.referencing.CRS.getAuthorityFactory(null);
+        factory = CRS.getAuthorityFactory(null);
         add(factory);
     }
 

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/DateAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/DateAdapter.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/DateAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/DateAdapter.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -26,7 +26,7 @@ import org.apache.sis.internal.jaxb.XmlU
 
 /**
  * JAXB adapter wrapping the date value (as milliseconds elapsed since January 
1st, 1970) in a
- * {@link XMLGregorianCalendar} for the {@code xsd:date} type. Hours, minutes 
and seconds are
+ * {@link XMLGregorianCalendar} for the {@code xs:date} type. Hours, minutes 
and seconds are
  * discarded.
  *
  * <p>Using this adapter is equivalent to apply the following annotation on a 
{@code Date} field:</p>
@@ -81,7 +81,7 @@ public final class DateAdapter extends X
             final Context context = Context.current();
             try {
                 final XMLGregorianCalendar gc = XmlUtilities.toXML(context, 
value);
-                XmlUtilities.trimTime(gc, true);        // Type is xsd:date 
without time.
+                XmlUtilities.trimTime(gc, true);        // Type is xs:date 
without time.
                 return gc;
             } catch (DatatypeConfigurationException e) {
                 Context.warningOccured(context, XmlAdapter.class, "marshal", 
e, true);

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/Measure.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/Measure.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/Measure.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/Measure.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -58,7 +58,7 @@ import org.apache.sis.measure.Units;
  *   <gml:semiMajorAxis 
uom="urn:ogc:def:uom:EPSG::9001">6378137</gml:semiMajorAxis>
  * }
  *
- * Both have a value of type {@code xsd:double} and a {@code uom} attribute 
(without namespace)
+ * Both have a value of type {@code xs:double} and a {@code uom} attribute 
(without namespace)
  * of type {@code gml:UomIdentifier}. Those two informations are represented 
by this class.
  *
  * @author  Cédric Briançon (Geomatys)

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/UniversalTimeAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/UniversalTimeAdapter.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/UniversalTimeAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/UniversalTimeAdapter.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -32,7 +32,7 @@ import static org.apache.sis.internal.ja
 
 /**
  * JAXB adapter wrapping the date value (as milliseconds elapsed since January 
1st, 1970) in a
- * {@link XMLGregorianCalendar} for the {@code xsd:dateTime} type with the 
timezone forced to UTC.
+ * {@link XMLGregorianCalendar} for the {@code xs:dateTime} type with the 
timezone forced to UTC.
  * The milliseconds are omitted if not different than zero.
  *
  * @author  Martin Desruisseaux (Geomatys)

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmx/Anchor.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmx/Anchor.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmx/Anchor.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmx/Anchor.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -21,6 +21,7 @@ import java.util.Locale;
 import java.util.Objects;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
+import javax.xml.bind.annotation.XmlRootElement;
 import org.opengis.util.InternationalString;
 import org.apache.sis.xml.XLink;
 
@@ -36,11 +37,13 @@ import org.apache.sis.xml.XLink;
  *
  * @author  Guilhem Legal (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @author  Cullen Rombach (Image Matters)
+ * @version 0.8
  * @since   0.3
  * @module
  */
 @XmlType(name = "Anchor_Type")
+@XmlRootElement(name = "Anchor")
 public final class Anchor extends XLink implements InternationalString {
     /**
      * Defined as a matter of principle (this class is not expected to be 
serialized).

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/system/Modules.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/system/Modules.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/system/Modules.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/system/Modules.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -60,6 +60,11 @@ public final class Modules {
     /**
      * The {@value} module name.
      */
+    public static final String FEATURE = "org.apache.sis.feature";
+
+    /**
+     * The {@value} module name.
+     */
     public static final String STORAGE = "org.apache.sis.storage";
 
     /**

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -46,14 +46,14 @@ public final class Utilities extends Sta
      *
      * <div class="section">Relationship with {@code gml:id}</div>
      * This method may be invoked for building {@code gml:id} values. Strictly 
speaking this is not appropriate
-     * since the {@code xsd:ID} type defines valid identifiers as containing 
only letters, digits, underscores,
+     * since the {@code xs:ID} type defines valid identifiers as containing 
only letters, digits, underscores,
      * hyphens, and periods. This differ from Unicode identifier in two ways:
      *
      * <ul>
      *   <li>Unicode identifiers accept Japanese or Chinese ideograms for 
instance, which are considered as letters.</li>
      *   <li>Unicode identifiers do not accept the {@code '-'} and {@code ':'} 
characters. However this restriction
      *       fits well our need, since those characters are typical values for 
the {@code separator} argument.</li>
-     *   <li>Note that {@code '_'} is valid both in {@code xsd:ID} and Unicode 
identifier.</li>
+     *   <li>Note that {@code '_'} is valid both in {@code xs:ID} and Unicode 
identifier.</li>
      * </ul>
      *
      * @param  appendTo     the buffer where to append the valid characters.

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/UnitRegistry.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/UnitRegistry.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/UnitRegistry.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/UnitRegistry.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -121,22 +121,34 @@ final class UnitRegistry implements Syst
      */
     static <Q extends Quantity<Q>> SystemUnit<Q> init(final SystemUnit<Q> 
unit) {
         assert !Units.initialized : unit;        // This assertion happens 
during Units initialization, but it is okay.
-        boolean existed;
-        existed  = HARD_CODED.put(unit.dimension,   unit) != null;
-        existed |= HARD_CODED.put(unit.quantity,    unit) != null;
-        existed |= HARD_CODED.put(unit.getSymbol(), unit) != null;
+        int existed;
+        existed  = (HARD_CODED.put(unit.dimension,   unit) == null) ? 0 : 1;
+        existed |= (HARD_CODED.put(unit.quantity,    unit) == null) ? 0 : 2;
+        existed |= (HARD_CODED.put(unit.getSymbol(), unit) == null) ? 0 : 4;
         if (unit.epsg != 0) {
-            existed |= HARD_CODED.put(unit.epsg, unit) != null;
+            existed |= (HARD_CODED.put(unit.epsg, unit) == null) ? 0 : 8;
         }
         /*
          * Key collision on dimension and quantity tolerated for dimensionless 
units only, with an
          * an exception for "candela" because "lumen" is candela divided by a 
dimensionless unit.
+         * Another exception is "Hz" because it come after rad/s, which has 
the same dimension.
          */
-        assert !existed || unit.dimension.isDimensionless() || 
"cd".equals(unit.getSymbol()) : unit;
+        assert filter(existed, unit) == 0 : unit;
         return unit;
     }
 
     /**
+     * Clears the {@code existed} bits for the cases where we allow dimension 
or quantity type collisions.
+     * This method is invoked for assertions only.
+     */
+    private static int filter(int existed, final SystemUnit<?> unit) {
+        final String s = unit.getSymbol();
+        if (unit.dimension.isDimensionless()) existed &= ~(1 | 2);      // 
Accepts dimension and quantity collisions.
+        if (s.equals("cd") || s.equals("Hz")) existed &= ~(1    );      // 
Accepts dimension collisions only;
+        return s.isEmpty() ? 0 : existed;
+    }
+
+    /**
      * Invoked by {@link Units} static class initializer for registering SI 
conventional units.
      * This method shall be invoked in a single thread by the {@code Units} 
class initializer only.
      */

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -371,7 +371,7 @@ public final class Units extends Static
      * <table class="compact" summary="Related units" style="margin-left:30px; 
line-height:1.25">
      *   <tr><td>SI angle units:</td>   <td style="word-spacing:1em">{@link 
#MICRORADIAN}, <u><b>{@code RADIAN}</b></u>.</td></tr>
      *   <tr><td>In other systems:</td> <td style="word-spacing:1em">{@link 
#DEGREE}, {@link #ARC_MINUTE}, {@link #ARC_SECOND}, {@link #GRAD}.</td></tr>
-     *   <tr><td>Derived units:</td>    <td style="word-spacing:1em">{@link 
#STERADIAN}.</td></tr>
+     *   <tr><td>Derived units:</td>    <td style="word-spacing:1em">{@link 
#STERADIAN}, {@link #RADIANS_PER_SECOND}.</td></tr>
      * </table></div>
      *
      * @since 0.8
@@ -582,6 +582,19 @@ public final class Units extends Static
     public static final Unit<Frequency> HERTZ;
 
     /**
+     * The unit for angular velocity (rad/s).
+     * The identifier is EPSG:1035.
+     *
+     * <div class="note"><p class="simpleTagLabel" 
style="margin-bottom:0">Related units:</p>
+     * <table class="compact" summary="Related units" style="margin-left:30px; 
line-height:1.25">
+     *   <tr><td>Components:</td> <td style="word-spacing:0.5em">{@link 
#RADIAN} ∕ {@link #SECOND}</td></tr>
+     * </table></div>
+     *
+     * @since 0.8
+     */
+    public static final Unit<AngularVelocity> RADIANS_PER_SECOND;
+
+    /**
      * The SI derived unit for speed (m/s).
      * The unlocalized name is “metres per second” and the identifier is 
EPSG:1026.
      *
@@ -1020,10 +1033,9 @@ public final class Units extends Static
      * Salinity measured using PSS-78. While this is a dimensionless 
measurement, the {@code "psu"} symbol
      * is sometime added to PSS-78 measurement. However this is officially 
discouraged.
      *
-     * <p>If we make this field public in a future SIS version, we should 
consider introducing a
-     * {@code Salinity} quantity type.</p>
+     * @since 0.8
      */
-    static final Unit<Dimensionless> PSU;
+    public static final Unit<Salinity> PSU;
 
     /**
      * Sigma-level, used in oceanography. This is a way to measure a depth as 
a fraction of the sea floor depth.
@@ -1069,6 +1081,7 @@ public final class Units extends Static
         final UnitDimension temperature   = new UnitDimension('Θ');
         final UnitDimension amount        = new UnitDimension('N');
         final UnitDimension luminous      = new UnitDimension('J');
+        final UnitDimension frequency     = time.pow(-1);
         final UnitDimension area          = length.pow(2);
         final UnitDimension speed         = length.divide(time);
         final UnitDimension force         = mass.multiply(speed).divide(time);
@@ -1143,11 +1156,19 @@ public final class Units extends Static
         WEEK           = add(s, LinearConverter.scale( 7*24*60*60,      1), 
"wk",  OTHER,    (short) 0);
         TROPICAL_YEAR  = add(s, LinearConverter.scale(31556925445.0, 1000), 
"a",   OTHER,    (short) 1029);
         /*
-         * All Unit<Speed>.
-         */
+         * All Unit<Speed>, Unit<AngularVelocity> and Unit<ScaleRateOfChange>.
+         * The 'unityPerSecond' unit is not added to the registry because it 
is specific to the EPSG database,
+         * has no clear symbol and is easy to confuse with Hertz. We create 
that unit only for allowing us to
+         * create the "ppm/a" units.
+         */
+        final SystemUnit<ScaleRateOfChange> unityPerSecond;
+        unityPerSecond = new SystemUnit<>(ScaleRateOfChange.class, frequency, 
null, OTHER, (short) 1036, null);
+        unityPerSecond.related(1);
         mps.related(1);
         METRES_PER_SECOND   = mps;
-        KILOMETRES_PER_HOUR = add(mps, LinearConverter.scale(10, 36), "km∕h", 
ACCEPTED, (short) 0);
+        KILOMETRES_PER_HOUR = add(mps, LinearConverter.scale(10, 36),     
"km∕h",  ACCEPTED, (short) 0);
+        RADIANS_PER_SECOND  = add(AngularVelocity.class, null, frequency, 
"rad∕s", SI,       (short) 1035);
+        add(unityPerSecond, LinearConverter.scale(1, 31556925445E6),      
"ppm∕a", OTHER,    (short) 1030);
         /*
          * All Unit<Pressure>.
          */
@@ -1177,8 +1198,9 @@ public final class Units extends Static
         GRAM         = add(kg, milli, "g", (byte) (ACCEPTED | PREFIXABLE), 
(short) 0);
         /*
          * Force, energy, electricity, magnetism and other units.
+         * Frequency must be defined after angular velocities.
          */
-        HERTZ      = add(Frequency.class,           Scalar.Frequency::new, 
time.pow(-1),                 "Hz",  (byte) (SI | PREFIXABLE), (short) 0);
+        HERTZ      = add(Frequency.class,           Scalar.Frequency::new, 
frequency,                    "Hz",  (byte) (SI | PREFIXABLE), (short) 0);
         NEWTON     = add(Force.class,               Scalar.Force::new,     
force,                        "N",   (byte) (SI | PREFIXABLE), (short) 0);
         JOULE      = add(Energy.class,              Scalar.Energy::new,    
energy,                       "J",   (byte) (SI | PREFIXABLE), (short) 0);
         WATT       = add(Power.class,               Scalar.Power::new,     
power,                        "W",   (byte) (SI | PREFIXABLE), (short) 0);
@@ -1201,7 +1223,7 @@ public final class Units extends Static
          */
         PERCENT = add(one, centi,                                              
      "%",     OTHER, (short) 0);
         PPM     = add(one, micro,                                              
      "ppm",   OTHER, (short) 9202);
-        PSU     = add(Dimensionless.class, Scalar.Dimensionless::new, 
dimensionless, "psu",   OTHER, (short) 0);
+        PSU     = add(Salinity.class,      null,                      
dimensionless, "psu",   OTHER, (short) 0);
         SIGMA   = add(Dimensionless.class, Scalar.Dimensionless::new, 
dimensionless, "sigma", OTHER, (short) 0);
         PIXEL   = add(Dimensionless.class, Scalar.Dimensionless::new, 
dimensionless, "px",    OTHER, (short) 0);
         UNITY   = UnitRegistry.init(one);  // Must be last in order to take 
precedence over all other units associated to UnitDimension.NONE.

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -46,7 +46,8 @@ import static org.apache.sis.util.collec
  * }
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 0.4
+ * @author  Cullen Rombach (Image Matters)
+ * @version 0.8
  * @since   0.3
  * @module
  */
@@ -275,11 +276,11 @@ filter: for (final Locale locale : local
             return unique(new Locale.Builder().setLanguageTag(code).build());
         }
         /*
-         * Old syntax (e.g. "en_US"). Split in (language, country, variant) 
components,
+         * Old syntax (e.g. "en_US" or "eng; USA"). Split in (language, 
country, variant) components,
          * then convert the 3-letters codes to the 2-letters ones.
          */
         String language, country = "", variant = "";
-        if (p1 < 0) {
+        if (p1 < 0 && (p1 = code.indexOf(';', fromIndex)) < 0) {
             p1 = code.length();
         } else {
             final int s = p1 + 1;

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecord.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -53,7 +53,8 @@ import org.apache.sis.internal.util.Abst
  * </ul>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 0.8
  *
  * @see DefaultRecordType
  * @see DefaultRecordSchema
@@ -96,6 +97,65 @@ public class DefaultRecord implements Re
     }
 
     /**
+     * Creates a new record initialized to a shallow copy of the given record.
+     * The members contained in the given record are <strong>not</strong> 
recursively copied.
+     *
+     * @param  record  the record to copy (can not be null).
+     *
+     * @since 0.8
+     */
+    @SuppressWarnings("SuspiciousSystemArraycopy")
+    public DefaultRecord(final Record record) {
+        this(record.getRecordType());
+        if (record instanceof DefaultRecord) {
+            final Object source = ((DefaultRecord) record).values;
+            System.arraycopy(source, 0, values, 0, Array.getLength(source));
+        } else {
+            for (final Map.Entry<MemberName,Integer> entry : 
definition.memberIndices().entrySet()) {
+                final MemberName name = entry.getKey();
+                final Object value = record.locate(name);
+                if (value != null) {
+                    final int index = entry.getValue();
+                    final Class<?> valueClass = 
definition.getValueClass(index);
+                    if (valueClass != null && !valueClass.isInstance(value)) {
+                        throw new 
ClassCastException(Errors.format(Errors.Keys.IllegalPropertyValueClass_3,
+                                name, valueClass, value.getClass()));
+                    }
+                    Array.set(values, index, value);
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a SIS implementation with the name and members of the given 
arbitrary implementation.
+     * This method performs the first applicable action in the following 
choices:
+     *
+     * <ul>
+     *   <li>If the given object is {@code null}, then this method returns 
{@code null}.</li>
+     *   <li>Otherwise if the given object is already an instance of {@code 
DefaultRecord},
+     *       then it is returned unchanged.</li>
+     *   <li>Otherwise a new {@code DefaultRecord} instance is created using 
the
+     *       {@linkplain #DefaultRecord(Record) copy constructor} and returned.
+     *       Note that this is a shallow copy operation, since the members 
contained
+     *       in the given object are not recursively copied.</li>
+     * </ul>
+     *
+     * @param  other The object to get as a SIS implementation, or {@code 
null} if none.
+     * @return A SIS implementation containing the members of the given object
+     *         (may be the given object itself), or {@code null} if the 
argument was {@code null}.
+     *
+     * @since 0.8
+     */
+    public static DefaultRecord castOrCopy(final Record other) {
+        if (other == null || other instanceof DefaultRecord) {
+            return (DefaultRecord) other;
+        } else {
+            return new DefaultRecord(other);
+        }
+    }
+
+    /**
      * Returns the type definition of this record.
      *
      * @return the type definition of this record.

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -446,6 +446,7 @@ public class DefaultRecordType extends R
     /**
      * Empty constructor only used by JAXB.
      */
+    @SuppressWarnings("unused")
     private DefaultRecordType() {
         typeName  = null;
         container = null;

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -189,7 +189,7 @@ public final class Namespaces extends St
     private static final Map<String,String> SPECIFIC_URLS;
     static {
         final Map<String,String> p = new HashMap<>(40);
-        p.put(XMLConstants.W3C_XML_SCHEMA_NS_URI,                         
"xsd");
+        p.put(XMLConstants.W3C_XML_SCHEMA_NS_URI,                         
"xsd");   // TODO: should be "xs".
         p.put(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI,                
"xsi");
         p.put("http://www.w3.org/2004/02/skos/core#";,                    
"skos");
         p.put("http://www.w3.org/1999/02/22-rdf-syntax-ns#";,              
"rdf");

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties
 [ISO-8859-1] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties
 [ISO-8859-1] Mon Aug 21 01:03:12 2017
@@ -45,6 +45,7 @@ psu=practical salinity unit
 pt=point
 px=pixel
 rad=radian
+rad\u2215s=radians per second
 s=second
 S=siemens
 sr=steradian

Modified: 
sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties
 [ISO-8859-1] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties
 [ISO-8859-1] Mon Aug 21 01:03:12 2017
@@ -24,6 +24,7 @@ mm=millimètre
 ms=milliseconde
 nm=nanomètre
 ppm=parties par million
+rad\u2215s=radians par seconde
 s=seconde
 sr=stéradian
 unity=unité

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=1805590&r1=1805589&r2=1805590&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] Mon Aug 21 01:03:12 2017
@@ -186,9 +186,9 @@ public final strictfp class Conventional
         verify    (Units.CUBIC_METRE,  Units.CUBIC_METRE .divide  (1E+9), 
"mm³", 1E-9);
 
         assertSame(Units.HOUR,        Units.SECOND.multiply(3600));
-        assertSame(Units.DEGREE,      Units.RADIAN.multiply(Math.PI/180));
-        assertSame(Units.GRAD,        Units.RADIAN.multiply(Math.PI/200));
-        assertSame(Units.ARC_SECOND,  Units.RADIAN.multiply(Math.PI / 
(180*60*60)));
+        assertSame(Units.DEGREE,      
Units.RADIAN.multiply(StrictMath.PI/180));
+        assertSame(Units.GRAD,        
Units.RADIAN.multiply(StrictMath.PI/200));
+        assertSame(Units.ARC_SECOND,  Units.RADIAN.multiply(StrictMath.PI / 
(180*60*60)));
         assertSame(Units.MICRORADIAN, Units.RADIAN.divide(1E6));
 
         assertSame(Units.GRAM, Units.KILOGRAM.divide(1E+3));

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=1805590&r1=1805589&r2=1805590&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] Mon Aug 21 01:03:12 2017
@@ -90,6 +90,7 @@ public final strictfp class UnitFormatTe
         verify(declared, "WEEK",                "T",            "wk",    
"week",                    Units.WEEK);
         verify(declared, "TROPICAL_YEAR",       "T",            "a",     
"year",                    Units.TROPICAL_YEAR);
         verify(declared, "HERTZ",               "∕T",           "Hz",    
"hertz",                   Units.HERTZ);
+        verify(declared, "RADIANS_PER_SECOND",  "∕T",           "rad∕s", 
"radians per second",      Units.RADIANS_PER_SECOND);
         verify(declared, "METRES_PER_SECOND",   "L∕T",          "m∕s",   
"metres per second",       Units.METRES_PER_SECOND);
         verify(declared, "KILOMETRES_PER_HOUR", "L∕T",          "km∕h",  
"kilometres per hour",     Units.KILOMETRES_PER_HOUR);
         verify(declared, "PASCAL",              "M∕(L⋅T²)",     "Pa",    
"pascal",                  Units.PASCAL);

Modified: 
sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -30,7 +30,7 @@ import static org.junit.Assert.*;
  * Tests the {@link Locales} class.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.4
+ * @version 0.8
  * @since   0.3
  * @module
  */
@@ -82,6 +82,7 @@ public final strictfp class LocalesTest
         assertSame(Locale.CANADA_FRENCH, Locales.parse("fr_CAN"));
         assertSame(Locale.CANADA_FRENCH, Locales.parse("fra_CAN"));
         assertSame(Locale.JAPAN,         Locales.parse("ja_JP"));
+        assertSame(Locale.US,            Locales.parse("en; USA"));
 
         assertEquals(new Locale("de", "DE"),            
Locales.parse("de_DE"));
         assertEquals(new Locale("",   "GB"),            Locales.parse("_GB"));

Modified: sis/branches/JDK9/ide-project/NetBeans/build.xml
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/ide-project/NetBeans/build.xml?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/build.xml (original)
+++ sis/branches/JDK9/ide-project/NetBeans/build.xml Mon Aug 21 01:03:12 2017
@@ -45,6 +45,9 @@
       <fileset 
dir="${project.root}/core/sis-feature/target/generated-resources">
         <include name="**/*.utf"/>
       </fileset>
+      <fileset 
dir="${project.root}/core/sis-raster/target/generated-resources">
+        <include name="**/*.utf"/>
+      </fileset>
       <fileset 
dir="${project.root}/storage/sis-storage/target/generated-resources">
         <include name="**/*.utf"/>
       </fileset>

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=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/nbproject/build-impl.xml (original)
+++ sis/branches/JDK9/ide-project/NetBeans/nbproject/build-impl.xml Mon Aug 21 
01:03:12 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_JDK8-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_JDK9-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.javafx.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}"/>
+        <j2seproject3:modulename property="module.name" 
sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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"/>
@@ -238,6 +238,7 @@ is divided into following sections:
                 <available file="${test.xmlstore.dir}"/>
                 <available file="${test.storage.dir}"/>
                 <available file="${test.feature.dir}"/>
+                <available file="${test.raster.dir}"/>
                 <available file="${test.referencing.dir}"/>
                 <available file="${test.ref-by-id.dir}"/>
                 <available file="${test.metadata.dir}"/>
@@ -259,6 +260,7 @@ is divided into following sections:
                 <available file="${src.xmlstore.dir}"/>
                 <available file="${src.storage.dir}"/>
                 <available file="${src.feature.dir}"/>
+                <available file="${src.raster.dir}"/>
                 <available file="${src.referencing.dir}"/>
                 <available file="${src.ref-by-id.dir}"/>
                 <available file="${src.metadata.dir}"/>
@@ -365,6 +367,7 @@ is divided into following sections:
         <fail unless="src.xmlstore.dir">Must set src.xmlstore.dir</fail>
         <fail unless="src.storage.dir">Must set src.storage.dir</fail>
         <fail unless="src.feature.dir">Must set src.feature.dir</fail>
+        <fail unless="src.raster.dir">Must set src.raster.dir</fail>
         <fail unless="src.referencing.dir">Must set src.referencing.dir</fail>
         <fail unless="src.ref-by-id.dir">Must set src.ref-by-id.dir</fail>
         <fail unless="src.metadata.dir">Must set src.metadata.dir</fail>
@@ -382,6 +385,7 @@ is divided into following sections:
         <fail unless="test.xmlstore.dir">Must set test.xmlstore.dir</fail>
         <fail unless="test.storage.dir">Must set test.storage.dir</fail>
         <fail unless="test.feature.dir">Must set test.feature.dir</fail>
+        <fail unless="test.raster.dir">Must set test.raster.dir</fail>
         <fail unless="test.referencing.dir">Must set 
test.referencing.dir</fail>
         <fail unless="test.ref-by-id.dir">Must set test.ref-by-id.dir</fail>
         <fail unless="test.metadata.dir">Must set test.metadata.dir</fail>
@@ -408,7 +412,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.javafx.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="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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"/>
@@ -420,7 +424,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.javafx.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="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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>
@@ -475,7 +479,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.javafx.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="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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"/>
@@ -518,7 +522,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.javafx.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="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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"/>
@@ -553,7 +557,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.javafx.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="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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>
@@ -716,6 +720,9 @@ is divided into following sections:
                             <fileset dir="${test.feature.dir}" 
excludes="@{excludes},${excludes}" includes="@{includes}">
                                 <filename name="@{testincludes}"/>
                             </fileset>
+                            <fileset dir="${test.raster.dir}" 
excludes="@{excludes},${excludes}" includes="@{includes}">
+                                <filename name="@{testincludes}"/>
+                            </fileset>
                             <fileset dir="${test.referencing.dir}" 
excludes="@{excludes},${excludes}" includes="@{includes}">
                                 <filename name="@{testincludes}"/>
                             </fileset>
@@ -787,6 +794,9 @@ is divided into following sections:
                     <fileset dir="${test.feature.dir}" 
excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
+                    <fileset dir="${test.raster.dir}" 
excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
                     <fileset dir="${test.referencing.dir}" 
excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
@@ -807,7 +817,7 @@ is divided into following sections:
                     </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_JDK8" 
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_JDK9" 
testname="TestNG tests" workingDir="${work.dir}">
                     <xmlfileset dir="${build.test.classes.dir}" 
includes="@{testincludes}"/>
                     <propertyset>
                         <propertyref prefix="test-sys-prop."/>
@@ -904,7 +914,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_JDK8 -testname 
@{testClass} ${test.class.or.method}" property="testng.cmd.args" 
value="@{testClass}">
+                <condition else="-suitename Apache_SIS_for_JDK9 -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"/>
@@ -1248,7 +1258,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 JDK8 was 
already built"/>
+        <echo level="warn" message="Cycle detected: Apache SIS for JDK9 was 
already built"/>
     </target>
     <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
         <mkdir dir="${build.dir}"/>
@@ -1290,7 +1300,7 @@ is divided into following sections:
                 <include name="*"/>
             </dirset>
         </pathconvert>
-        <j2seproject3:depend 
srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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}"/>
+        <j2seproject3:depend 
srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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}"/>
@@ -1306,6 +1316,7 @@ is divided into following sections:
             <fileset dir="${src.xmlstore.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.storage.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.feature.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${src.raster.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.referencing.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.ref-by-id.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.metadata.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -1333,7 +1344,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.javafx.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}"/>
+        <j2seproject3:javac excludes="" 
gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}, 
module-info.java" 
sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.javafx.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.raster.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. -->
@@ -1747,6 +1758,9 @@ is divided into following sections:
             <fileset dir="${src.feature.dir}" 
excludes="${bug5101868workaround},${excludes}" includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
+            <fileset dir="${src.raster.dir}" 
excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
             <fileset dir="${src.referencing.dir}" 
excludes="${bug5101868workaround},${excludes}" includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
@@ -1809,6 +1823,9 @@ is divided into following sections:
             <fileset dir="${src.feature.dir}" excludes="${excludes}" 
includes="${includes}">
                 <filename name="**/doc-files/**"/>
             </fileset>
+            <fileset dir="${src.raster.dir}" excludes="${excludes}" 
includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
             <fileset dir="${src.referencing.dir}" excludes="${excludes}" 
includes="${includes}">
                 <filename name="**/doc-files/**"/>
             </fileset>
@@ -1852,14 +1869,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.javafx.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.javafx.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}">
+        <j2seproject3:modulename property="test.module.name" 
sourcepath="${test.webapp.dir}:${test.javafx.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.raster.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.javafx.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.raster.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.javafx.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">
+        <condition else="--patch-module 
${module.name}=${test.webapp.dir}:${test.javafx.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.raster.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"/>
@@ -1900,10 +1917,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.javafx.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}"/>
+        <j2seproject3:depend classpath="${javac.test.classpath}" 
destdir="${build.test.classes.dir}" 
srcdir="${test.webapp.dir}:${test.javafx.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.raster.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.javafx.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}">
+        <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.javafx.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.raster.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>
@@ -1919,6 +1936,7 @@ is divided into following sections:
             <fileset dir="${test.xmlstore.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.storage.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.feature.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${test.raster.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.referencing.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.ref-by-id.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.metadata.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -1939,7 +1957,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.javafx.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.javafx.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}">
+        <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.javafx.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.raster.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.javafx.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.raster.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>
@@ -1955,6 +1973,7 @@ is divided into following sections:
             <fileset dir="${test.xmlstore.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.storage.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.feature.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${test.raster.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.referencing.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.ref-by-id.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.metadata.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -2065,7 +2084,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 JDK8 was 
already built"/>
+        <echo level="warn" message="Cycle detected: Apache SIS for JDK9 was 
already built"/>
     </target>
     <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
         <mkdir dir="${build.dir}"/>

Propchange: sis/branches/JDK9/ide-project/NetBeans/nbproject/cfg_hints.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK9/ide-project/NetBeans/nbproject/cfg_hints.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

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=1805590&r1=1805589&r2=1805590&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] Mon Aug 21 01:03:12 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=a1a46a16
-nbproject/build-impl.xml.script.CRC32=11a71633
+nbproject/build-impl.xml.data.CRC32=66778a60
+nbproject/build-impl.xml.script.CRC32=92503123
 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=1805590&r1=1805589&r2=1805590&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] Mon Aug 21 01:03:12 2017
@@ -70,6 +70,8 @@ src.storage.dir      = ${project.root}/s
 test.storage.dir     = ${project.root}/storage/sis-storage/src/test/java
 src.feature.dir      = ${project.root}/core/sis-feature/src/main/java
 test.feature.dir     = ${project.root}/core/sis-feature/src/test/java
+src.raster.dir       = ${project.root}/core/sis-raster/src/main/java
+test.raster.dir      = ${project.root}/core/sis-raster/src/test/java
 src.referencing.dir  = ${project.root}/core/sis-referencing/src/main/java
 test.referencing.dir = ${project.root}/core/sis-referencing/src/test/java
 src.ref-by-id.dir    = 
${project.root}/core/sis-referencing-by-identifiers/src/main/java

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=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- sis/branches/JDK9/ide-project/NetBeans/nbproject/project.xml (original)
+++ sis/branches/JDK9/ide-project/NetBeans/nbproject/project.xml Mon Aug 21 
01:03:12 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 JDK8</name>
+            <name>Apache SIS for JDK9</name>
             <explicit-platform explicit-source-supported="true"/>
             <source-roots>
                 <root id="src.local-src.dir" name="Local sources 
(unversioned)"/>
@@ -35,6 +35,7 @@
                 <root id="src.xmlstore.dir" name="XMLStore"/>
                 <root id="src.storage.dir" name="Storage"/>
                 <root id="src.feature.dir" name="Feature"/>
+                <root id="src.raster.dir" name="Raster"/>
                 <root id="src.referencing.dir" name="Referencing"/>
                 <root id="src.ref-by-id.dir" name="Referencing by 
identifiers"/>
                 <root id="src.metadata.dir" name="Metadata"/>
@@ -54,6 +55,7 @@
                 <root id="test.xmlstore.dir" name="Test XMLStore"/>
                 <root id="test.storage.dir" name="Test Storage"/>
                 <root id="test.feature.dir" name="Test Feature"/>
+                <root id="test.raster.dir" name="Test Raster"/>
                 <root id="test.referencing.dir" name="Test Referencing"/>
                 <root id="test.ref-by-id.dir" name="Test Referencing by 
identifiers"/>
                 <root id="test.metadata.dir" name="Test Metadata"/>

Modified: sis/branches/JDK9/pom.xml
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/pom.xml?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- sis/branches/JDK9/pom.xml (original)
+++ sis/branches/JDK9/pom.xml Mon Aug 21 01:03:12 2017
@@ -545,7 +545,7 @@ Apache SIS is a free software, Java lang
       <!-- Compile -->
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.6.2-SNAPSHOT</version>
+        <version>3.6.2</version>
         <configuration>
           <source>${maven.compile.source}</source>
           <target>${maven.compile.target}</target>
@@ -794,6 +794,10 @@ Apache SIS is a free software, Java lang
               
<packages>org.apache.sis.storage*:org.apache.sis.index*</packages>
             </group>
             <group>
+              <title>Coverage and raster</title>
+              
<packages>org.apache.sis.coverage*:org.apache.sis.image*</packages>
+            </group>
+            <group>
               <title>Feature and Geometry</title>
               
<packages>org.apache.sis.feature*:org.apache.sis.geometry*</packages>
             </group>

Modified: sis/branches/JDK9/src/main/javadoc/overview.html
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/src/main/javadoc/overview.html?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- sis/branches/JDK9/src/main/javadoc/overview.html [UTF-8] (original)
+++ sis/branches/JDK9/src/main/javadoc/overview.html [UTF-8] Mon Aug 21 
01:03:12 2017
@@ -28,7 +28,7 @@
     Overview of <a href="http://sis.apache.org";>Apache SIS™ (Spatial 
Information System)</a>.
 
     <h3>Requirements</h3>
-    <p>SIS requires Java 6 Standard Edition.</p>
+    <p>SIS requires Java 7 Standard Edition.</p>
 
     <h3>Classes naming</h3>
     <p>Implementations of <a href="http://www.geoapi.org/";>GeoAPI 
interfaces</a> usually (but not always)

Modified: 
sis/branches/JDK9/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -28,6 +28,7 @@ import org.apache.sis.storage.DataStoreR
 import org.apache.sis.storage.UnsupportedStorageException;
 import org.apache.sis.storage.StorageConnector;
 import org.apache.sis.setup.OptionKey;
+import org.apache.sis.storage.Resource;
 import org.apache.sis.util.Debug;
 
 
@@ -106,7 +107,7 @@ public class LandsatStore extends DataSt
     public synchronized Metadata getMetadata() throws DataStoreException {
         if (metadata == null && source != null) try {
             try (BufferedReader reader = (source instanceof BufferedReader) ? 
(BufferedReader) source : new LineNumberReader(source)) {
-                source = null;      // Will be closed at the end of this 
try-catch block.
+                source = null;      // Will be closed at the end of this 
try-finally block.
                 final LandsatReader parser = new 
LandsatReader(getDisplayName(), listeners);
                 parser.read(reader);
                 metadata = parser.getMetadata();
@@ -120,6 +121,18 @@ public class LandsatStore extends DataSt
     }
 
     /**
+     * Current implementation does not provide any resource yet.
+     * Future versions may return an aggregate of all raster data in the 
GeoTIFF files associated with this metadata.
+     *
+     * @return the starting point of all resources in this data store.
+     * @throws DataStoreException if an error occurred while reading the data.
+     */
+    @Override
+    public Resource getRootResource() throws DataStoreException {
+        return null;
+    }
+
+    /**
      * Closes this Landsat store and releases any underlying resources.
      *
      * @throws DataStoreException if an error occurred while closing the 
Landsat file.

Propchange: sis/branches/JDK9/storage/sis-gdal/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK9/storage/sis-gdal/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: 
sis/branches/JDK9/storage/sis-gdal/src/main/c/org_apache_sis_storage_gdal_PJ.c
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/storage/sis-gdal/src/main/c/org_apache_sis_storage_gdal_PJ.c?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/storage/sis-gdal/src/main/c/org_apache_sis_storage_gdal_PJ.c 
[UTF-8] (original)
+++ 
sis/branches/JDK9/storage/sis-gdal/src/main/c/org_apache_sis_storage_gdal_PJ.c 
[UTF-8] Mon Aug 21 01:03:12 2017
@@ -106,7 +106,9 @@ JNIEXPORT jstring JNICALL Java_org_apach
     if (pj) {
         const char *desc = pj_get_def(pj, 0);
         if (desc) {
-            jstring str = (*env)->NewStringUTF(env, desc);
+            const char *trim = desc;
+            if (*trim == ' ') trim++;
+            jstring str = (*env)->NewStringUTF(env, trim);
             pj_dalloc((char*) desc);
             return str;
         }
@@ -281,12 +283,14 @@ JNIEXPORT void JNICALL Java_org_apache_s
 JNIEXPORT jstring JNICALL Java_org_apache_sis_storage_gdal_PJ_getLastError
   (JNIEnv *env, jobject object)
 {
-    projPJ pj = getPJ(env, object);
-    if (pj) {
-        int err = *pj_get_errno_ref();
-        if (err) {
-            return (*env)->NewStringUTF(env, pj_strerrno(err));
-        }
+    /*
+     * For now we ignore the object reference, but a future version may use it 
if
+     * we make this method thread-safe with the use of a Proj.4 context 
parameter.
+     * Note that this method needs to work even if getPJ(env, object) returns 
NULL.
+     */
+    int err = *pj_get_errno_ref();
+    if (err) {
+        return (*env)->NewStringUTF(env, pj_strerrno(err));
     }
     return NULL;
 }

Modified: 
sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/PJ.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/PJ.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/PJ.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/PJ.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -27,12 +27,10 @@ import org.opengis.metadata.citation.Cit
 import org.opengis.referencing.datum.Ellipsoid;
 import org.opengis.referencing.datum.GeodeticDatum;
 import org.opengis.referencing.datum.PrimeMeridian;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.referencing.factory.InvalidGeodeticParameterException;
 import org.apache.sis.referencing.IdentifiedObjects;
 import org.apache.sis.metadata.iso.citation.Citations;
-import org.apache.sis.util.resources.Errors;
 import org.apache.sis.internal.util.Constants;
 import org.apache.sis.internal.system.OS;
 
@@ -81,8 +79,8 @@ final class PJ implements Identifier, Se
         Objects.requireNonNull(definition);
         ptr = allocatePJ(definition);
         if (ptr == 0) {
-            throw new 
InvalidGeodeticParameterException(Errors.format(Errors.Keys.UnparsableStringForClass_2,
-                    CoordinateReferenceSystem.class, definition));
+            // Note: our getLastError() implementation is safe even if pts == 
0.
+            throw new InvalidGeodeticParameterException(getLastError());
         }
     }
 
@@ -286,6 +284,7 @@ final class PJ implements Identifier, Se
      * @return the last error that occurred, or {@code null}.
      *
      * @todo this method is not thread-safe. Proj.4 provides a better 
alternative using a context parameter.
+     *       Note that this method needs to be safe even if {@link #ptr} is 0.
      */
     native String getLastError();
 

Modified: 
sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4.java?rev=1805590&r1=1805589&r2=1805590&view=diff
==============================================================================
--- 
sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4.java
 [UTF-8] (original)
+++ 
sis/branches/JDK9/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4.java
 [UTF-8] Mon Aug 21 01:03:12 2017
@@ -42,7 +42,10 @@ import org.opengis.referencing.operation
 import org.apache.sis.referencing.operation.AbstractCoordinateOperation;
 import org.apache.sis.referencing.factory.UnavailableFactoryException;
 import org.apache.sis.referencing.factory.InvalidGeodeticParameterException;
+import org.apache.sis.referencing.datum.DefaultGeodeticDatum;
+import org.apache.sis.referencing.datum.BursaWolfParameters;
 import org.apache.sis.referencing.IdentifiedObjects;
+import org.apache.sis.referencing.CommonCRS;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.metadata.iso.citation.Citations;
 import org.apache.sis.internal.metadata.AxisDirections;
@@ -51,6 +54,7 @@ import org.apache.sis.internal.system.OS
 import org.apache.sis.util.logging.Logging;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.util.Utilities;
 import org.apache.sis.util.Static;
 import org.apache.sis.util.iso.Types;
 import org.apache.sis.measure.Units;
@@ -162,22 +166,13 @@ public final class Proj4 extends Static
          * Append the map projection parameters. Those parameters may include 
axis lengths (a and b),
          * but not necessarily. If axis lengths are specified, then we will 
ignore the Ellipsoid instance
          * associated to the CRS.
-         *
-         * The "+over" option is for disabling the default wrapping of output 
longitudes in the -180 to 180 range.
-         * We do that for having the same behavior between Proj.4 and Apache 
SIS. No wrapping reduce discontinuity
-         * problems with geometries that cross the anti-meridian.
-         *
-         * The "+no_defs" option is for ensuring that no defaults are read 
from "/usr/share/proj/proj_def.dat" file.
-         * That file contains default values for various map projections, for 
example "+lat_1=29.5" and "+lat_2=45.5"
-         * for the "aea" projection. Those defaults are assuming that users 
want Conterminous U.S. map.
-         * This may cause surprising behavior for users outside USA.
          */
         final StringBuilder definition = new StringBuilder(100);
         definition.append(Proj4Factory.PROJ_PARAM).append(method);
         boolean hasSemiMajor = false;
         boolean hasSemiMinor = false;
         if (parameters != null) {
-            definition.append(" +over +no_defs");                              
         // See above comment
+            definition.append(Proj4Factory.STANDARD_OPTIONS);
             for (final GeneralParameterValue parameter : parameters.values()) {
                 if (parameter instanceof ParameterValue<?>) {
                     final ParameterValue<?> pv = (ParameterValue<?>) parameter;
@@ -255,7 +250,23 @@ public final class Proj4 extends Static
                 
definition.append("to_meter=").append(Units.toStandardUnit(unit));
             }
         }
+        /*
+         * Append the "+towgs84" element if any. This is the last piece of 
information.
+         * Note that the use of a "+towgs84" parameter is an "early binding" 
approach,
+         * which is usually not recommended. But Proj4 works that way.
+         */
         if (validCS) {
+            if (datum instanceof DefaultGeodeticDatum) {
+                for (final BursaWolfParameters bwp : ((DefaultGeodeticDatum) 
datum).getBursaWolfParameters()) {
+                    if 
(Utilities.equalsIgnoreMetadata(CommonCRS.WGS84.datum(), bwp.getTargetDatum())) 
{
+                        definition.append(" 
+towgs84=").append(bwp.tX).append(',').append(bwp.tY).append(',').append(bwp.tZ);
+                        if (!bwp.isTranslation()) {
+                            
definition.append(',').append(bwp.rX).append(',').append(bwp.rY).append(',').append(bwp.rZ).append(',').append(bwp.dS);
+                        }
+                        break;
+                    }
+                }
+            }
             return definition.toString();
         }
         /*
@@ -288,7 +299,7 @@ public final class Proj4 extends Static
      * Creates a new CRS from the given {@literal Proj.4} definition string.
      * Some examples of definition strings are:
      * <ul>
-     *   <li>{@code "+init=epsg:3395"} (see warning below)</li>
+     *   <li>{@code "+init=epsg:3395 +over"} (see warning below)</li>
      *   <li>{@code "+proj=latlong +datum=WGS84 +ellps=WGS84 
+towgs84=0,0,0"}</li>
      *   <li>{@code "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 
+units=m +ellps=WGS84 +towgs84=0,0,0"}</li>
      * </ul>


Reply via email to