This is an automated email from the ASF dual-hosted git repository.

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

commit 8f57f757212c78e064f12190f3516000240b5da6
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Thu Apr 21 18:52:35 2022 +0200

    Move ASCII Grid store implementation to an "esri" package and rename as 
`AsciiGridStore`.
    This is in anticipation for the addition of other simple ESRI grid formats 
(BIL, BIP and BSQ).
---
 .../sis/internal/storage/ascii/package-info.java   | 113 ---------------------
 .../{ascii/Store.java => esri/AsciiGridStore.java} |  95 +++++++++++++++--
 .../AsciiGridStoreProvider.java}                   |  36 +++----
 .../storage/{ascii => esri}/CharactersView.java    |   6 +-
 .../storage/{ascii => esri}/WritableStore.java     |  10 +-
 .../sis/internal/storage/esri/package-info.java    |  40 ++++++++
 .../sis/internal/storage/image/package-info.java   |   3 +
 .../org.apache.sis.storage.DataStoreProvider       |   2 +-
 .../AsciiGridStoreTest.java}                       |  16 +--
 .../storage/{ascii => esri}/WritableStoreTest.java |   2 +-
 .../apache/sis/test/suite/StorageTestSuite.java    |   4 +-
 .../sis/internal/storage/{ascii => esri}/grid.asc  |   0
 .../sis/internal/storage/{ascii => esri}/grid.prj  |   0
 13 files changed, 167 insertions(+), 160 deletions(-)

diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/package-info.java
 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/package-info.java
deleted file mode 100644
index a4399ed435..0000000000
--- 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/package-info.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * {@link org.apache.sis.storage.DataStore} implementation for ESRI ASCII grid 
format.
- * This is a very simple format for reading and writing single-banded raster 
data.
- * As the "ASCII" name implies, files are text files in US-ASCII character 
encoding
- * no matter what the {@link org.apache.sis.setup.OptionKey#ENCODING} value is,
- * and numbers are parsed or formatted according the US locale no matter
- * what the {@link org.apache.sis.setup.OptionKey#LOCALE} value is.
- *
- * <p>ASCII grid files contains a header before the actual data.
- * The header contains (<var>key</var> <var>value</var>) pairs,
- * one pair per line and using spaces as separator between keys and values
- * (Apache SIS accepts also {@code '='} and {@code ':'} as separators).
- * The valid keys are listed in the table below
- * (note that some of them are extensions to the ESRI ASCII Grid format).</p>
- *
- * <table class="sis">
- *   <caption>Recognized keywords in ASCII Grid header</caption>
- *   <tr>
- *     <th>Keyword</th>
- *     <th>Value type</th>
- *     <th>Obligation</th>
- *   </tr>
- *   <tr>
- *     <td>{@code NCOLS}</td>
- *     <td>{@link java.lang.Integer}</td>
- *     <td>Mandatory</td>
- *   </tr>
- *   <tr>
- *     <td>{@code NROWS}</td>
- *     <td>{@link java.lang.Integer}</td>
- *     <td>Mandatory</td>
- *   </tr>
- *   <tr>
- *     <td>{@code XLLCORNER} or {@code XLLCENTER}</td>
- *     <td>{@link java.lang.Double}</td>
- *     <td>Mandatory</td>
- *   </tr>
- *   <tr>
- *     <td>{@code YLLCORNER} or {@code YLLCENTER}</td>
- *     <td>{@link java.lang.Double}</td>
- *     <td>Mandatory</td>
- *   </tr>
- *   <tr>
- *     <td>{@code CELLSIZE}</td>
- *     <td>{@link java.lang.Double}</td>
- *     <td>Mandatory, unless an alternative below is present</td>
- *   </tr>
- *   <tr>
- *     <td>{@code XCELLSIZE} and {@code YCELLSIZE}</td>
- *     <td>{@link java.lang.Double}</td>
- *     <td>Non-standard alternative to {@code CELLSIZE}</td>
- *   </tr>
- *   <tr>
- *     <td>{@code XDIM} and {@code YDIM}</td>
- *     <td>{@link java.lang.Double}</td>
- *     <td>Non-standard alternative to {@code CELLSIZE}</td>
- *   </tr>
- *   <tr>
- *     <td>{@code DX} and {@code DY}</td>
- *     <td>{@link java.lang.Double}</td>
- *     <td>Non-standard alternative to {@code CELLSIZE}</td>
- *   </tr>
- *   <tr>
- *     <td>{@code NODATA_VALUE}</td>
- *     <td>{@link java.lang.Double}</td>
- *     <td>Optional</td>
- *   </tr>
- * </table>
- *
- * <h2>Extensions</h2>
- * The implementation in this package adds the following extensions
- * (some of them are taken from GDAL):
- *
- * <ul class="verbose">
- *   <li>Coordinate reference system specified by auxiliary {@code *.prj} file.
- *       If the format is WKT 1, the GDAL variant is used (that variant 
differs from
- *       the OGC 01-009 standard in their interpretation of units of 
measurement).</li>
- *   <li>{@code DX} and {@code DY} parameters in the header are used instead 
of {@code CELLSIZE}
- *       if the pixels are non-square.</li>
- *   <li>Lines in the header starting with {@code '#'} are ignored as comment 
lines.</li>
- * </ul>
- *
- * <h2>Limitations</h2>
- * Current implementation loads and caches the full image no matter the 
subregion or subsampling
- * specified to the {@code read(…)} method. The image is loaded by {@code 
getSampleDimensions()}
- * call too, because there is no other way to build a reliable sample 
dimension.
- * Even the data type can not be determined for sure without loading the full 
image.
- * Loading the full image is reasonable if ASCII Grid files contain only small 
images,
- * which is usually the case given how inefficient this format is.
- *
- * @author  Martin Desruisseaux (Geomatys)
- * @version 1.2
- * @since   1.2
- * @module
- */
-package org.apache.sis.internal.storage.ascii;
diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/Store.java
 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/AsciiGridStore.java
similarity index 87%
rename from 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/Store.java
rename to 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/AsciiGridStore.java
index ead3dceeca..9fa01da1cc 100644
--- 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/Store.java
+++ 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/AsciiGridStore.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.ascii;
+package org.apache.sis.internal.storage.esri;
 
 import java.util.Map;
 import java.util.List;
@@ -55,10 +55,85 @@ import org.apache.sis.util.resources.Errors;
 
 
 /**
- * A data store which creates grid coverages from an ESRI ASCII grid file.
+ * Data store implementation for ESRI ASCII grid format.
+ * This is a very simple format for reading and writing single-banded raster 
data.
+ * As the "ASCII" name implies, files are text files in US-ASCII character 
encoding
+ * no matter what the {@link org.apache.sis.setup.OptionKey#ENCODING} value is,
+ * and numbers are parsed or formatted according the US locale no matter
+ * what the {@link org.apache.sis.setup.OptionKey#LOCALE} value is.
+ *
+ * <p>ASCII grid files contains a header before the actual data.
  * The header contains (<var>key</var> <var>value</var>) pairs,
  * one pair per line and using spaces as separator between keys and values.
- * The package javadoc lists the recognized keywords.
+ * The valid keys are listed in the table below
+ * (note that some of them are extensions to the ESRI ASCII Grid format).</p>
+ *
+ * <table class="sis">
+ *   <caption>Recognized keywords in ASCII Grid header</caption>
+ *   <tr>
+ *     <th>Keyword</th>
+ *     <th>Value type</th>
+ *     <th>Obligation</th>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code NCOLS}</td>
+ *     <td>{@link java.lang.Integer}</td>
+ *     <td>Mandatory</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code NROWS}</td>
+ *     <td>{@link java.lang.Integer}</td>
+ *     <td>Mandatory</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code XLLCORNER} or {@code XLLCENTER}</td>
+ *     <td>{@link java.lang.Double}</td>
+ *     <td>Mandatory</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code YLLCORNER} or {@code YLLCENTER}</td>
+ *     <td>{@link java.lang.Double}</td>
+ *     <td>Mandatory</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code CELLSIZE}</td>
+ *     <td>{@link java.lang.Double}</td>
+ *     <td>Mandatory, unless an alternative below is present</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code XCELLSIZE} and {@code YCELLSIZE}</td>
+ *     <td>{@link java.lang.Double}</td>
+ *     <td>Non-standard alternative to {@code CELLSIZE}</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code XDIM} and {@code YDIM}</td>
+ *     <td>{@link java.lang.Double}</td>
+ *     <td>Non-standard alternative to {@code CELLSIZE}</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code DX} and {@code DY}</td>
+ *     <td>{@link java.lang.Double}</td>
+ *     <td>Non-standard alternative to {@code CELLSIZE}</td>
+ *   </tr>
+ *   <tr>
+ *     <td>{@code NODATA_VALUE}</td>
+ *     <td>{@link java.lang.Double}</td>
+ *     <td>Optional</td>
+ *   </tr>
+ * </table>
+ *
+ * <h2>Extensions</h2>
+ * The implementation in this package adds the following extensions
+ * (some of them are taken from GDAL):
+ *
+ * <ul class="verbose">
+ *   <li>Coordinate reference system specified by auxiliary {@code *.prj} file.
+ *       If the format is WKT 1, the GDAL variant is used (that variant 
differs from
+ *       the OGC 01-009 standard in their interpretation of units of 
measurement).</li>
+ *   <li>{@code XCELLSIZE} and {@code YCELLSIZE} parameters in the header are 
used
+ *       instead of {@code CELLSIZE} if the pixels are non-square.</li>
+ *   <li>Lines in the header starting with {@code '#'} are ignored as comment 
lines.</li>
+ * </ul>
  *
  * <h2>Possible evolutions</h2>
  * If we allow subclasses in a future version, we could add a {@code 
processHeader(Map)} method
@@ -70,13 +145,15 @@ import org.apache.sis.util.resources.Errors;
  * specified to the {@code read(…)} method. The image is loaded by {@link 
#getSampleDimensions()}
  * call too, because there is no other way to build a reliable sample 
dimension.
  * Even the data type can not be determined for sure without loading the full 
image.
+ * Loading the full image is reasonable if ASCII Grid files contain only small 
images,
+ * which is usually the case given how inefficient this format is.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.2
  * @since   1.2
  * @module
  */
-class Store extends PRJDataStore implements GridCoverageResource {
+class AsciiGridStore extends PRJDataStore implements GridCoverageResource {
     /**
      * Keys of elements expected in the header. Must be in upper-case letters.
      */
@@ -161,13 +238,13 @@ class Store extends PRJDataStore implements 
GridCoverageResource {
      * @param  readOnly   whether to fail if the channel can not be opened at 
least in read mode.
      * @throws DataStoreException if an error occurred while opening the 
stream.
      */
-    Store(final StoreProvider provider, final StorageConnector connector, 
final boolean readOnly)
+    AsciiGridStore(final AsciiGridStoreProvider provider, final 
StorageConnector connector, final boolean readOnly)
             throws DataStoreException
     {
         super(provider, connector);
         final ChannelDataInput channel;
         if (readOnly) {
-            channel = connector.commit(ChannelDataInput.class, 
StoreProvider.NAME);
+            channel = connector.commit(ChannelDataInput.class, 
AsciiGridStoreProvider.NAME);
         } else {
             channel = connector.getStorageAs(ChannelDataInput.class);
             if (channel != null) {
@@ -334,7 +411,7 @@ cellsize:       if (value != null) {
             try {
                 builder.setPredefinedFormat("ASCGRD");
             } catch (MetadataStoreException e) {
-                builder.addFormatName(StoreProvider.NAME);
+                builder.addFormatName(AsciiGridStoreProvider.NAME);
                 listeners.warning(e);
             }
             builder.addEncoding(encoding, MetadataBuilder.Scope.METADATA);
@@ -342,7 +419,7 @@ cellsize:       if (value != null) {
             try {
                 builder.addExtent(gridGeometry.getEnvelope());
             } catch (TransformException e) {
-                throw new DataStoreReferencingException(getLocale(), 
StoreProvider.NAME, getDisplayName(), null).initCause(e);
+                throw new DataStoreReferencingException(getLocale(), 
AsciiGridStoreProvider.NAME, getDisplayName(), null).initCause(e);
             }
             /*
              * Do not add the sample dimension, because in current version 
computing the sample dimension
@@ -524,7 +601,7 @@ cellsize:       if (value != null) {
     final CharactersView input() throws DataStoreException {
         final CharactersView in = input;
         if (in == null) {
-            throw new DataStoreClosedException(getLocale(), 
StoreProvider.NAME, StandardOpenOption.READ);
+            throw new DataStoreClosedException(getLocale(), 
AsciiGridStoreProvider.NAME, StandardOpenOption.READ);
         }
         return in;
     }
diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/StoreProvider.java
 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/AsciiGridStoreProvider.java
similarity index 76%
rename from 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/StoreProvider.java
rename to 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/AsciiGridStoreProvider.java
index 7e625150c9..de9151bb4b 100644
--- 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/StoreProvider.java
+++ 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/AsciiGridStoreProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.ascii;
+package org.apache.sis.internal.storage.esri;
 
 import java.util.Map;
 import java.nio.ByteBuffer;
@@ -30,23 +30,23 @@ import org.apache.sis.internal.storage.PRJDataStore;
 
 
 /**
- * The provider of {@link Store} instances.
- * Given a {@link StorageConnector} input, this class tries to instantiate an 
ESRI ASCII Grid {@code Store}.
+ * The provider of {@link AsciiGridStore} instances.
+ * Given a {@link StorageConnector} input, this class tries to instantiate an 
ESRI ASCII Grid {@code AsciiGridStore}.
  *
  * <h2>Thread safety</h2>
- * The same {@code StoreProvider} instance can be safely used by many threads 
without synchronization on
- * the part of the caller. However the {@link Store} instances created by this 
factory are not thread-safe.
+ * The same {@code AsciiGridStoreProvider} instance can be safely used by many 
threads without synchronization on
+ * the part of the caller. However the {@link AsciiGridStore} instances 
created by this factory are not thread-safe.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.2
  * @since   1.2
  * @module
  */
-@StoreMetadata(formatName    = StoreProvider.NAME,
+@StoreMetadata(formatName    = AsciiGridStoreProvider.NAME,
                fileSuffixes  = {"asc", "grd", "agr", "aig"},
                capabilities  = {Capability.READ, Capability.WRITE, 
Capability.CREATE},
                resourceTypes = GridCoverageResource.class)
-public final class StoreProvider extends PRJDataStore.Provider {
+public final class AsciiGridStoreProvider extends PRJDataStore.Provider {
     /**
      * The format names for ESRI ASCII grid files.
      */
@@ -55,7 +55,7 @@ public final class StoreProvider extends 
PRJDataStore.Provider {
     /**
      * Creates a new provider.
      */
-    public StoreProvider() {
+    public AsciiGridStoreProvider() {
     }
 
     /**
@@ -69,7 +69,7 @@ public final class StoreProvider extends 
PRJDataStore.Provider {
     }
 
     /**
-     * Returns the MIME type if the given storage appears to be supported by 
ASCII Grid {@link Store}.
+     * Returns the MIME type if the given storage appears to be supported by 
ASCII Grid {@link AsciiGridStore}.
      * A {@linkplain ProbeResult#isSupported() supported} status does not 
guarantee that reading
      * or writing will succeed, only that there appears to be a reasonable 
chance of success
      * based on a brief inspection of the file header.
@@ -97,15 +97,15 @@ public final class StoreProvider extends 
PRJDataStore.Provider {
             final CharactersView view = new CharactersView(null, buffer);
             try {
                 final Map<String, String> header = view.readHeader();
-                if (header.containsKey(Store.NROWS)     && 
header.containsKey(Store.NCOLS) &&
-                   (header.containsKey(Store.XLLCORNER) || 
header.containsKey(Store.XLLCENTER)) &&
-                   (header.containsKey(Store.YLLCORNER) || 
header.containsKey(Store.YLLCENTER)))
+                if (header.containsKey(AsciiGridStore.NROWS)     && 
header.containsKey(AsciiGridStore.NCOLS) &&
+                   (header.containsKey(AsciiGridStore.XLLCORNER) || 
header.containsKey(AsciiGridStore.XLLCENTER)) &&
+                   (header.containsKey(AsciiGridStore.YLLCORNER) || 
header.containsKey(AsciiGridStore.YLLCENTER)))
                 {
-cellsize:           if (!header.containsKey(Store.CELLSIZE)) {
+cellsize:           if (!header.containsKey(AsciiGridStore.CELLSIZE)) {
                         int def = 0;
-                        for (int i=0; i < Store.CELLSIZES.length;) {
-                            if (header.containsKey(Store.CELLSIZES[i++])) def 
|= 1;
-                            if (header.containsKey(Store.CELLSIZES[i++])) def 
|= 2;
+                        for (int i=0; i < AsciiGridStore.CELLSIZES.length;) {
+                            if 
(header.containsKey(AsciiGridStore.CELLSIZES[i++])) def |= 1;
+                            if 
(header.containsKey(AsciiGridStore.CELLSIZES[i++])) def |= 2;
                             if (def == 3) break cellsize;
                         }
                         return ProbeResult.UNSUPPORTED_STORAGE;
@@ -122,7 +122,7 @@ cellsize:           if 
(!header.containsKey(Store.CELLSIZE)) {
     }
 
     /**
-     * Returns a CSV {@link Store} implementation associated with this 
provider.
+     * Returns a CSV {@link AsciiGridStore} implementation associated with 
this provider.
      *
      * @param  connector  information about the storage (URL, stream, 
<i>etc</i>).
      * @return a data store implementation associated with this provider for 
the given storage.
@@ -133,7 +133,7 @@ cellsize:           if 
(!header.containsKey(Store.CELLSIZE)) {
         if (isWritable(connector)) {
             return new WritableStore(this, connector);
         } else {
-            return new Store(this, connector, true);
+            return new AsciiGridStore(this, connector, true);
         }
     }
 }
diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/CharactersView.java
 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/CharactersView.java
similarity index 97%
rename from 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/CharactersView.java
rename to 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/CharactersView.java
index 47851621c2..4ccc6fb392 100644
--- 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/CharactersView.java
+++ 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/CharactersView.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.ascii;
+package org.apache.sis.internal.storage.esri;
 
 import java.util.Map;
 import java.util.HashMap;
@@ -48,8 +48,8 @@ final class CharactersView implements CharSequence {
 
     /**
      * The object to use for reading data, or {@code null} if unavailable.
-     * This is null during {@linkplain StoreProvider#probeContent probe} 
operation.
-     * Shall never be null when this instance is the {@link Store#input} 
instance.
+     * This is null during {@linkplain AsciiGridStoreProvider#probeContent 
probe} operation.
+     * Shall never be null when this instance is the {@link 
AsciiGridStore#input} instance.
      */
     final ChannelDataInput input;
 
diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/WritableStore.java
 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/WritableStore.java
similarity index 96%
rename from 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/WritableStore.java
rename to 
storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/WritableStore.java
index e2085e7241..2ee47ae26e 100644
--- 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ascii/WritableStore.java
+++ 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/WritableStore.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.ascii;
+package org.apache.sis.internal.storage.esri;
 
 import java.util.Map;
 import java.util.LinkedHashMap;
@@ -51,7 +51,7 @@ import org.apache.sis.util.StringBuilders;
  * @since   1.2
  * @module
  */
-final class WritableStore extends Store implements 
WritableGridCoverageResource {
+final class WritableStore extends AsciiGridStore implements 
WritableGridCoverageResource {
     /**
      * The line separator for writing the ASCII file.
      */
@@ -70,11 +70,11 @@ final class WritableStore extends Store implements 
WritableGridCoverageResource
      * @param  connector  information about the storage (URL, stream, 
<i>etc</i>).
      * @throws DataStoreException if an error occurred while opening the 
stream.
      */
-    public WritableStore(final StoreProvider provider, final StorageConnector 
connector) throws DataStoreException {
+    public WritableStore(final AsciiGridStoreProvider provider, final 
StorageConnector connector) throws DataStoreException {
         super(provider, connector, false);
         lineSeparator = System.lineSeparator();
         if (!super.canReadOrWrite(false)) {
-            output = connector.commit(ChannelDataOutput.class, 
StoreProvider.NAME);
+            output = connector.commit(ChannelDataOutput.class, 
AsciiGridStoreProvider.NAME);
         }
     }
 
@@ -132,7 +132,7 @@ final class WritableStore extends Store implements 
WritableGridCoverageResource
         }
         final AffineTransform at = h.getAffineTransform2D(gg.getExtent(), 
gridToCRS);
         if (at.getShearX() != 0 || at.getShearY() != 0) {
-            throw new 
IncompatibleResourceException(h.rotationNotSupported(StoreProvider.NAME));
+            throw new 
IncompatibleResourceException(h.rotationNotSupported(AsciiGridStoreProvider.NAME));
         }
         double scaleX =  at.getScaleX();
         double scaleY = -at.getScaleY();
diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/package-info.java
 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/package-info.java
new file mode 100644
index 0000000000..c32a629d97
--- /dev/null
+++ 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/package-info.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Simple data store implementations for some ESRI grid formats (ASCII and 
binary).
+ * The data formats supported by this package are relatively simple.
+ * Values are stored either in plain ASCII text or in RAW binary encoding 
(without compression).
+ *
+ * <h2>Extensions</h2>
+ * The implementation in this package adds the following extensions
+ * (some of them are taken from GDAL):
+ *
+ * <ul class="verbose">
+ *   <li>Coordinate reference system specified by auxiliary {@code *.prj} file.
+ *       If the format is WKT 1, the GDAL variant is used (that variant 
differs from
+ *       the OGC 01-009 standard in their interpretation of units of 
measurement).</li>
+ *   <li>ASCII Grid reader accepts also some metadata defined for the binary 
formats
+ *       ({@code XDIM}, {@code YDIM}, color file, statistics file, 
<i>etc.</i>).</li>
+ * </ul>
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.2
+ * @since   1.2
+ * @module
+ */
+package org.apache.sis.internal.storage.esri;
diff --git 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/package-info.java
 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/package-info.java
index de642ab341..d5768d82dd 100644
--- 
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/package-info.java
+++ 
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/package-info.java
@@ -36,6 +36,9 @@
  *       because image indices are no longer stable identifiers in such 
case.</li>
  * </ul>
  *
+ * <p><b>TODO:</b> avoid extending internal classes directly,
+ * then move in a public package with {@code imageio} package name.</p>
+ *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.2
  *
diff --git 
a/storage/sis-storage/src/main/resources/META-INF/services/org.apache.sis.storage.DataStoreProvider
 
b/storage/sis-storage/src/main/resources/META-INF/services/org.apache.sis.storage.DataStoreProvider
index e907801595..c240859b32 100644
--- 
a/storage/sis-storage/src/main/resources/META-INF/services/org.apache.sis.storage.DataStoreProvider
+++ 
b/storage/sis-storage/src/main/resources/META-INF/services/org.apache.sis.storage.DataStoreProvider
@@ -1,5 +1,5 @@
 org.apache.sis.internal.storage.image.WorldFileStoreProvider
-org.apache.sis.internal.storage.ascii.StoreProvider
+org.apache.sis.internal.storage.esri.AsciiGridStoreProvider
 org.apache.sis.internal.storage.csv.StoreProvider
 org.apache.sis.internal.storage.xml.StoreProvider
 org.apache.sis.internal.storage.wkt.StoreProvider
diff --git 
a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/StoreTest.java
 
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/esri/AsciiGridStoreTest.java
similarity index 90%
rename from 
storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/StoreTest.java
rename to 
storage/sis-storage/src/test/java/org/apache/sis/internal/storage/esri/AsciiGridStoreTest.java
index 5e253e7617..ee5d64bd2a 100644
--- 
a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/StoreTest.java
+++ 
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/esri/AsciiGridStoreTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.ascii;
+package org.apache.sis.internal.storage.esri;
 
 import java.util.List;
 import java.awt.image.Raster;
@@ -35,29 +35,29 @@ import static 
org.apache.sis.test.TestUtilities.getSingleton;
 
 
 /**
- * Tests {@link Store} and {@link StoreProvider}.
+ * Tests {@link AsciiGridStore} and {@link AsciiGridStoreProvider}.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.2
  * @since   1.2
  * @module
  */
-public final strictfp class StoreTest extends TestCase {
+public final strictfp class AsciiGridStoreTest extends TestCase {
     /**
      * Returns a storage connector with the URL to the test data.
      */
     private static StorageConnector testData() {
-        return new StorageConnector(StoreTest.class.getResource("grid.asc"));
+        return new 
StorageConnector(AsciiGridStoreTest.class.getResource("grid.asc"));
     }
 
     /**
-     * Tests {@link StoreProvider#probeContent(StorageConnector)} method.
+     * Tests {@link AsciiGridStoreProvider#probeContent(StorageConnector)} 
method.
      *
      * @throws DataStoreException if en error occurred while reading the CSV 
file.
      */
     @Test
     public void testProbeContent() throws DataStoreException {
-        final StoreProvider p = new StoreProvider();
+        final AsciiGridStoreProvider p = new AsciiGridStoreProvider();
         final ProbeResult r = p.probeContent(testData());
         assertTrue(r.isSupported());
         assertEquals("text/plain", r.getMimeType());
@@ -72,7 +72,7 @@ public final strictfp class StoreTest extends TestCase {
      */
     @Test
     public void testMetadata() throws DataStoreException {
-        try (Store store = new Store(null, testData(), true)) {
+        try (AsciiGridStore store = new AsciiGridStore(null, testData(), 
true)) {
             assertEquals("grid", store.getIdentifier().get().toString());
             final Metadata metadata = store.getMetadata();
             /*
@@ -105,7 +105,7 @@ public final strictfp class StoreTest extends TestCase {
      */
     @Test
     public void testRead() throws DataStoreException {
-        try (Store store = new Store(null, testData(), true)) {
+        try (AsciiGridStore store = new AsciiGridStore(null, testData(), 
true)) {
             final List<Category> categories = 
getSingleton(store.getSampleDimensions()).getCategories();
             assertEquals(2, categories.size());
             assertEquals(   -2, 
categories.get(0).getSampleRange().getMinDouble(), 1);
diff --git 
a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/WritableStoreTest.java
 
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/esri/WritableStoreTest.java
similarity index 99%
rename from 
storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/WritableStoreTest.java
rename to 
storage/sis-storage/src/test/java/org/apache/sis/internal/storage/esri/WritableStoreTest.java
index 36e68ebd66..a589191d3d 100644
--- 
a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/ascii/WritableStoreTest.java
+++ 
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/esri/WritableStoreTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.ascii;
+package org.apache.sis.internal.storage.esri;
 
 import java.nio.file.Path;
 import java.nio.file.Files;
diff --git 
a/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
 
b/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
index 1bdf997a3f..2a5e64104e 100644
--- 
a/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
+++ 
b/storage/sis-storage/src/test/java/org/apache/sis/test/suite/StorageTestSuite.java
@@ -59,8 +59,8 @@ import org.junit.BeforeClass;
     org.apache.sis.internal.storage.csv.StoreTest.class,
     org.apache.sis.internal.storage.image.WorldFileStoreTest.class,
     org.apache.sis.internal.storage.image.SelfConsistencyTest.class,
-    org.apache.sis.internal.storage.ascii.StoreTest.class,
-    org.apache.sis.internal.storage.ascii.WritableStoreTest.class,
+    org.apache.sis.internal.storage.esri.AsciiGridStoreTest.class,
+    org.apache.sis.internal.storage.esri.WritableStoreTest.class,
     org.apache.sis.internal.storage.folder.StoreTest.class,
     org.apache.sis.internal.storage.JoinFeatureSetTest.class,
     org.apache.sis.internal.storage.ConcatenatedFeatureSetTest.class,
diff --git 
a/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.asc
 
b/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/esri/grid.asc
similarity index 100%
rename from 
storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.asc
rename to 
storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/esri/grid.asc
diff --git 
a/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.prj
 
b/storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/esri/grid.prj
similarity index 100%
rename from 
storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/ascii/grid.prj
rename to 
storage/sis-storage/src/test/resources/org/apache/sis/internal/storage/esri/grid.prj

Reply via email to