sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1793457 - in /sis/branches/JDK8: core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ core/sis-referencing/src/main/java/org/apache/sis/referencing/ core/sis-utility/src/main/java/org/apache/sis/util/logging/ core/sis-ut...
Date Tue, 02 May 2017 10:18:34 GMT
Author: desruisseaux
Date: Tue May  2 10:18:33 2017
New Revision: 1793457

URL: http://svn.apache.org/viewvc?rev=1793457&view=rev
Log:
Addition of a CRS.fromAuthority(...) method. Since that new method is likely to need to log warnings, this commit contains consolidation (especially in documentation) of the way some warnings are handled.

Modified:
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DefinitionVerifier.java
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListener.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java
    sis/branches/JDK8/core/sis-utility/src/test/java/org/apache/sis/util/logging/EmptyWarningListeners.java
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java
    sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
    sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java
    sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
    sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/LogAdapter.java
    sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java
    sis/branches/JDK8/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java
    sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java

Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DefinitionVerifier.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DefinitionVerifier.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DefinitionVerifier.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DefinitionVerifier.java [UTF-8] Tue May  2 10:18:33 2017
@@ -41,21 +41,21 @@ import org.apache.sis.util.Utilities;
 
 
 /**
- * Verifies the conformance of a given CRS with an authoritative definition.
+ * Verifies the conformance of a given CRS with an authoritative description.
  * For example if a Well Known Text (WKT) contains an EPSG code, this class verifies that
  * the CRS created from the WKT is equivalent to the CRS identified by the authority code.
  * {@code DefinitionVerifier} contains two informations:
  *
  * <ul>
  *   <li>The recommended CRS to use. May be the given CRS or a CRS created from the authority factory.</li>
- *   <li>Warnings if the given CRS does not match the authoritative definition.</li>
+ *   <li>Warnings if the given CRS does not match the authoritative description.</li>
  * </ul>
  *
  * <b>Note:</b> ISO 19162 said about the {@code Identifier} keyword:  <cite>"In the event of conflict in values given
  * in the CRS WKT string and given by an authority through an object’s name or an identifier, reading software should
  * throw an exception or give users a warning message. The WKT values should be assumed to prevail."</cite>
  * In practice when such conflicts happen, we often see that the given WKT string contains mistakes and the
- * provider intended to use the authoritative definition. We nevertheless comply with ISO 19162 requirement,
+ * provider intended to use the authoritative description. We nevertheless comply with ISO 19162 requirement,
  * but provide a "recommended CRS" field for what we think is the intended CRS.
  *
  * @author  Martin Desruisseaux (Geomatys)
@@ -65,7 +65,7 @@ import org.apache.sis.util.Utilities;
  */
 public final class DefinitionVerifier {
     /**
-     * List of CRS variants to try if the given CRS does not match the expected definition.
+     * List of CRS variants to try if the given CRS does not match the expected description.
      * For performance reason, this list should be ordered with most probable variant first
      * and less probable variant last.
      */
@@ -104,10 +104,10 @@ public final class DefinitionVerifier {
     }
 
     /**
-     * Compares the given CRS definition with the authoritative definition.
+     * Compares the given CRS description with the authoritative description.
      * If the comparison produces a warning, a message will be recorded to the given logger.
      *
-     * @param  crs     the CRS to compare with the authoritative definition.
+     * @param  crs     the CRS to compare with the authoritative description.
      * @param  logger  the logger where to report warnings, if any.
      * @param  classe  the class to declare as the source of the warning.
      * @param  method  the method to declare as the source of the warning.
@@ -127,11 +127,11 @@ public final class DefinitionVerifier {
     }
 
     /**
-     * Compares the given CRS definition with the authoritative definition.
-     * The authoritative definition is inferred from the identifier, if any.
+     * Compares the given CRS description with the authoritative description.
+     * The authoritative description is inferred from the identifier, if any.
      *
-     * @param  crs      the CRS to compare with the authoritative definition.
-     * @param  factory  the factory to use for fetching authoritative definition, or {@code null} for the default.
+     * @param  crs      the CRS to compare with the authoritative description.
+     * @param  factory  the factory to use for fetching authoritative description, or {@code null} for the default.
      * @param  lookup   whether this method is allowed to use {@link IdentifiedObjectFinder}.
      * @return verification result, or {@code null} if the given CRS should be used as-is.
      * @throws FactoryException if an error occurred while querying the authority factory.
@@ -144,7 +144,7 @@ public final class DefinitionVerifier {
         final String identifier = IdentifiedObjects.toString(IdentifiedObjects.getIdentifier(crs, authority));
         if (identifier != null) try {
             /*
-             * An authority code was explicitly given in the CRS definition. Create a CRS for that code
+             * An authority code was explicitly given in the CRS description. Create a CRS for that code
              * (do not try to guess it). If the given code is unknown, we will report a warning and use
              * the given CRS as-is.
              */
@@ -159,7 +159,7 @@ public final class DefinitionVerifier {
             return verifier;
         } else if (lookup) {
             /*
-             * No authority code was given in the CRS definition. Try to guess the code with IdentifiedObjectFinder,
+             * No authority code was given in the CRS description. Try to guess the code with IdentifiedObjectFinder,
              * ignoring axis order. If we can not guess a code or if we guess wrongly, use the given CRS silently
              * (without reporting any warning) since there is apparently nothing wrong in the given CRS.
              */
@@ -170,7 +170,6 @@ public final class DefinitionVerifier {
                 finder = IdentifiedObjects.newFinder(Citations.getIdentifier(authority, false));
             }
             finder.setIgnoringAxes(true);
-            finder.setSearchDomain(IdentifiedObjectFinder.Domain.DECLARATION);
             final IdentifiedObject ref = finder.findSingleton(crs);
             if (ref instanceof CoordinateReferenceSystem) {
                 authoritative = (CoordinateReferenceSystem) ref;
@@ -181,8 +180,8 @@ public final class DefinitionVerifier {
             return null;
         }
         /*
-         * At this point we found an authoritative definition (typically from EPSG database) for the given CRS.
-         * Verify if the given CRS is equal to the authoritative definition, or a variant of it. The similarity
+         * At this point we found an authoritative description (typically from EPSG database) for the given CRS.
+         * Verify if the given CRS is equal to the authoritative description, or a variant of it. The similarity
          * variable tells us if we have equality (0), mismatch (-), or equality when using a variant (+).
          */
         int similarity = 0;
@@ -192,9 +191,9 @@ public final class DefinitionVerifier {
             if (similarity < VARIANTS.length) {
                 variant = ca.forConvention(VARIANTS[similarity++]);
             } else if (identifier == null) {
-                return null;        // Mismatched CRS, but our "authoritative" definition was only a guess. Ignore.
+                return null;        // Mismatched CRS, but our "authoritative" description was only a guess. Ignore.
             } else {
-                similarity = -1;    // Mismatched CRS and our authoritative definition was not a guess. Need warning.
+                similarity = -1;    // Mismatched CRS and our authoritative description was not a guess. Need warning.
                 break;
             }
         }
@@ -203,19 +202,21 @@ public final class DefinitionVerifier {
             /*
              * Warning message (from Resources.properties):
              *
-             *     The coordinate system axes in the given “{0}” definition do not conform to the expected axes
-             *     according “{1}” authoritative definition.
+             *     The coordinate system axes in the given “{0}” description do not conform to the expected axes
+             *     according “{1}” authoritative description.
              */
             verifier = new DefinitionVerifier(variant);
-            verifier.resourceKey = Resources.Keys.NonConformAxes_2;
-            verifier.arguments   = new String[2];
+            if (identifier != null) {
+                verifier.resourceKey = Resources.Keys.NonConformAxes_2;
+                verifier.arguments   = new String[2];
+            }
         } else {
             verifier = new DefinitionVerifier(authoritative);
             if (similarity != 0) {
                 /*
                  * Warning message (from Resources.properties):
                  *
-                 *     The given “{0}” definition does not conform to the “{1}” authoritative definition.
+                 *     The given “{0}” description does not conform to the “{1}” authoritative description.
                  *     Differences are found in {2,choice,0#method|1#conversion|2#coordinate system|3#datum|4#CRS}.
                  */
                 verifier.resourceKey  = Resources.Keys.NonConformCRS_3;
@@ -232,7 +233,7 @@ public final class DefinitionVerifier {
     }
 
     /**
-     * Indicates in which part of CRS definition a difference has been found. Numerical values must match the number
+     * Indicates in which part of CRS description a difference has been found. Numerical values must match the number
      * in the {@code {choice}} instruction in the message associated to {@link Resources.Keys#NonConformCRS_3}.
      */
     private static final int METHOD=0, CONVERSION=1, CS=2, DATUM=3, OTHER=4;

Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java [UTF-8] Tue May  2 10:18:33 2017
@@ -321,14 +321,14 @@ public final class Resources extends Ind
         public static final short NoSuchOperationMethod_1 = 50;
 
         /**
-         * The coordinate system axes in the given “{0}” definition do not conform to the expected axes
-         * according “{1}” authoritative definition.
+         * The coordinate system axes in the given “{0}” description do not conform to the expected
+         * axes according “{1}” authoritative description.
          */
         public static final short NonConformAxes_2 = 72;
 
         /**
-         * The given “{0}” definition does not conform to the “{1}” authoritative definition.
-         * Differences are found in {2,choice,0#conversion method|1#conversion definition|2#coordinate
+         * The given “{0}” description does not conform to the “{1}” authoritative description.
+         * Differences are found in {2,choice,0#conversion method|1#conversion description|2#coordinate
          * system|3#datum|4#CRS}.
          */
         public static final short NonConformCRS_3 = 73;

Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties [ISO-8859-1] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties [ISO-8859-1] Tue May  2 10:18:33 2017
@@ -35,9 +35,9 @@ MismatchedEllipsoidAxisLength_3   = The
 MismatchedOperationFactories_2    = No coordinate operation from \u201c{0}\u201d to \u201c{1}\u201d because of mismatched factories.
 MisnamedParameter_1               = Despite its name, this parameter is effectively \u201c{0}\u201d.
 NotFormalProjectionParameter_1    = This parameter borrowed from the \u201c{0}\u201d projection is not formally a parameter of this projection.
-NonConformAxes_2                  = The coordinate system axes in the given \u201c{0}\u201d definition do not conform to the expected axes according \u201c{1}\u201d authoritative definition.
-NonConformCRS_3                   = The given \u201c{0}\u201d definition does not conform to the \u201c{1}\u201d authoritative definition. \
-                                    Differences are found in {2,choice,0#conversion method|1#conversion definition|2#coordinate system|3#datum|4#CRS}.
+NonConformAxes_2                  = The coordinate system axes in the given \u201c{0}\u201d description do not conform to the expected axes according \u201c{1}\u201d authoritative description.
+NonConformCRS_3                   = The given \u201c{0}\u201d description does not conform to the \u201c{1}\u201d authoritative description. \
+                                    Differences are found in {2,choice,0#conversion method|1#conversion description|2#coordinate system|3#datum|4#CRS}.
 
 #
 # Error messages (to be used in exceptions)

Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties [ISO-8859-1] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties [ISO-8859-1] Tue May  2 10:18:33 2017
@@ -40,9 +40,9 @@ MismatchedEllipsoidAxisLength_3   = Le p
 MismatchedOperationFactories_2    = Il n\u2019y a pas d\u2019op\u00e9rations allant de \u00ab\u202f{0}\u202f\u00bb vers \u00ab\u202f{1}\u202f\u00bb parce que ces derniers sont associ\u00e9s \u00e0 deux fabriques diff\u00e9rentes.
 MisnamedParameter_1               = Malgr\u00e9 son nom, ce param\u00e8tre produit en r\u00e9alit\u00e9 l\u2019effet d\u2019un \u00ab\u202f{0}\u202f\u00bb.
 NotFormalProjectionParameter_1    = Ce param\u00e8tre emprunt\u00e9 \u00e0 la projection \u00ab\u202f{0}\u202f\u00bb n\u2019est pas formellement un param\u00e8tre de cette projection.
-NonConformAxes_2                  = Les axes du syst\u00e8me de coordonn\u00e9es d\u00e9finis dans \u00ab\u202f{0}\u202f\u00bb ne sont pas conformes aux axes attendus d\u2019apr\u00e8s la d\u00e9finition officielle de \u00ab\u202f{1}\u202f\u00bb.
-NonConformCRS_3                   = La d\u00e9finition donn\u00e9e pour \u00ab\u202f{0}\u202f\u00bb n\u2019est pas conforme \u00e0 la d\u00e9finition officielle de \u00ab\u202f{1}\u202f\u00bb. \
-                                    Des diff\u00e9rences ont \u00e9t\u00e9 trouv\u00e9es dans {2,choice,0#la m\u00e9thode de conversion|1#la d\u00e9finition de la conversion|2#le syst\u00e8me de coordonn\u00e9es|3#le r\u00e9f\u00e9rentiel|4#le CRS}.
+NonConformAxes_2                  = Les axes du syst\u00e8me de coordonn\u00e9es d\u00e9finis dans \u00ab\u202f{0}\u202f\u00bb ne sont pas conformes aux axes attendus d\u2019apr\u00e8s la description officielle de \u00ab\u202f{1}\u202f\u00bb.
+NonConformCRS_3                   = La description donn\u00e9e pour \u00ab\u202f{0}\u202f\u00bb n\u2019est pas conforme \u00e0 la description officielle de \u00ab\u202f{1}\u202f\u00bb. \
+                                    Des diff\u00e9rences ont \u00e9t\u00e9 trouv\u00e9es dans {2,choice,0#la m\u00e9thode de conversion|1#la description de la conversion|2#le syst\u00e8me de coordonn\u00e9es|3#le r\u00e9f\u00e9rentiel|4#le CRS}.
 
 #
 # Error messages (to be used in exceptions)

Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java [UTF-8] Tue May  2 10:18:33 2017
@@ -20,6 +20,7 @@ import java.util.Map;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.logging.LogRecord;
 import org.opengis.util.FactoryException;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.NoSuchAuthorityCodeException;
@@ -72,6 +73,7 @@ import org.apache.sis.metadata.iso.exten
 import org.apache.sis.metadata.iso.extent.Extents;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.logging.Logging;
+import org.apache.sis.util.logging.WarningListener;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.Utilities;
 import org.apache.sis.util.Static;
@@ -235,10 +237,14 @@ public final class CRS extends Static {
      * </div>
      *
      * If the parsing produced warnings, they will be reported in a logger named {@code "org.apache.sis.io.wkt"}.
-     * In particular, this method verifies if the definition provided by the WKT matches the definition provided
+     * In particular, this method verifies if the description provided by the WKT matches the description provided
      * by the authority ({@code "EPSG:5641"} in above example) and reports discrepancies.
+     * Note that this comparison between parsed CRS and authoritative CRS is specific to this convenience method;
+     * other APIs documented in <cite>see also</cite> section do not perform this comparison automatically.
+     * Should the WKT description and the authoritative description be in conflict, the WKT description prevails
+     * as mandated by ISO 19162 standard (see {@link #fromAuthority fromAuthority(…)} if a different behavior is needed).
      *
-     * <div class="note"><b>Usage and performance considerations</b>
+     * <div class="section">Usage and performance considerations</div>
      * This convenience method delegates to
      * {@link org.apache.sis.referencing.factory.GeodeticObjectFactory#createFromWKT(String)}
      * using a default factory instance. This is okay for occasional use, but has the following limitations:
@@ -250,13 +256,14 @@ public final class CRS extends Static {
      * </ul>
      *
      * Applications which need to parse a large amount of WKT strings should consider to use
-     * the {@link org.apache.sis.io.wkt.WKTFormat} class instead than this method.</div>
+     * the {@link org.apache.sis.io.wkt.WKTFormat} class instead than this method.
      *
      * @param  text  coordinate system encoded in Well-Known Text format (version 1 or 2).
      * @return the parsed Coordinate Reference System.
      * @throws FactoryException if the given WKT can not be parsed.
      *
-     * @see org.apache.sis.io.wkt
+     * @see org.apache.sis.io.wkt.WKTFormat
+     * @see org.apache.sis.referencing.factory.GeodeticObjectFactory#createFromWKT(String)
      * @see org.apache.sis.geometry.Envelopes#fromWKT(CharSequence)
      * @see <a href="http://docs.opengeospatial.org/is/12-063r5/12-063r5.html">WKT 2 specification</a>
      *
@@ -275,10 +282,19 @@ public final class CRS extends Static {
      * For reading XML documents from readers or input streams,
      * see static methods in the {@link org.apache.sis.xml.XML} class.
      *
+     * <p>If the unmarshalling produced warnings, they will be reported in a logger named {@code "org.apache.sis.xml"}.
+     * In particular, this method verifies if the description provided by the XML matches the description provided by
+     * the authority code given in {@code <gml:identifier>} element, and reports discrepancies.
+     * Note that this comparison between unmarshalled CRS and authoritative CRS is specific to this convenience method;
+     * other APIs documented in <cite>see also</cite> section do not perform this comparison automatically.
+     * Should the XML description and the authoritative description be in conflict, the XML description prevails
+     * (see {@link #fromAuthority fromAuthority(…)} if a different behavior is needed).</p>
+     *
      * @param  xml  coordinate reference system encoded in XML format.
      * @return the unmarshalled Coordinate Reference System.
      * @throws FactoryException if the object creation failed.
      *
+     * @see org.apache.sis.referencing.factory.GeodeticObjectFactory#createFromXML(String)
      * @see org.apache.sis.xml.XML#unmarshal(String)
      *
      * @since 0.7
@@ -290,6 +306,94 @@ public final class CRS extends Static {
         return crs;
     }
 
+    /**
+     * Replaces the given coordinate reference system by an authoritative description, if one can be found.
+     * This method can be invoked after constructing a CRS in a context where the EPSG (or other authority)
+     * code is suspected more reliable than the rest of the description. A common case is a <cite>Well Known
+     * Text</cite> (WKT) string declaring wrong projection method or parameter values for the EPSG code that
+     * it pretends to describe. For example:
+     *
+     * <blockquote>
+     *   {@code PROJCS["WGS 84 / Pseudo-Mercator",}<br>
+     *   {@code   }(…base CRS omitted for brevity…)<br>
+     *   {@code   PROJECTION["Mercator (variant A)"],} — <em><b>wrong:</b> shall be "Popular Visualisation Pseudo Mercator"</em><br>
+     *   {@code   }(…parameters and axes omitted for brevity…)<br>
+     *   {@code   AUTHORITY["EPSG", "3857"]]}
+     * </blockquote>
+     *
+     * In such cases, Apache SIS behavior in {@link #fromWKT(String)}, {@link #fromXML(String)} and other methods is
+     * conform to the <a href="http://docs.opengeospatial.org/is/12-063r5/12-063r5.html">ISO 19162 specification</a>:
+     *
+     * <blockquote><cite>"Should any attributes or values given in the cited identifier be in conflict with attributes
+     * or values given explicitly in the WKT description, the WKT values shall prevail."</cite></blockquote>
+     *
+     * In situations where the opposite behavior is desired (i.e. to make the authority identifier prevails),
+     * this method can be invoked. This method performs the following actions:
+     *
+     * <ul>
+     *   <li>If the given CRS has an {@linkplain AbstractIdentifiedObject#getIdentifiers() identifier} and if the authority factory can
+     *     {@linkplain org.apache.sis.referencing.factory.GeodeticAuthorityFactory#createCoordinateReferenceSystem(String) create a CRS}
+     *     for that identifier, then:
+     *     <ul>
+     *       <li>If the CRS defined by the authority is {@linkplain Utilities#equalsIgnoreMetadata equal, ignoring metadata},
+     *         to the given CRS, then this method returns silently the <em>authoritative</em> CRS.</li>
+     *       <li>Otherwise if the CRS defined by the authority is equal, ignoring axis order and units, to the given CRS,
+     *         then this method returns a <em>new</em> CRS derived from the authoritative one but with same
+     *         {@linkplain org.apache.sis.referencing.cs.AxesConvention axes convention} than the given CRS.
+     *         A warning is emitted.</li>
+     *       <li>Otherwise this method discards the given CRS and returns the <em>authoritative</em> CRS.
+     *         A warning is emitted with a message indicating where a difference has been found.</li>
+     *     </ul>
+     *   </li>
+     *   <li>Otherwise if the given CRS does not have identifier, then this method
+     *       {@linkplain org.apache.sis.referencing.factory.IdentifiedObjectFinder searches for an equivalent CRS}
+     *       defined by the authority factory. If such CRS is found, then:
+     *     <ul>
+     *       <li>If the CRS defined by the authority is {@linkplain Utilities#equalsIgnoreMetadata equal, ignoring metadata},
+     *         to the given CRS, then this method returns silently the <em>authoritative</em> CRS.</li>
+     *       <li>Otherwise if the CRS defined by the authority is equal, ignoring axis order and units, to the given CRS,
+     *         then this method returns silently a <em>new</em> CRS derived from the authoritative one but with same
+     *         {@linkplain org.apache.sis.referencing.cs.AxesConvention axes convention} than the given CRS.</li>
+     *     </ul>
+     *   </li>
+     *   <li>Otherwise this method silently returns the given CRS as-is.</li>
+     * </ul>
+     *
+     * <b>Note:</b> the warnings emitted by this method are redundant with the warnings emitted by
+     * {@link #fromWKT(String)} and {@link #fromXML(String)}, so the {@code warnings} argument should be {@code null}
+     * when {@code fromAuthority(…)} is invoked for the CRS parsed by one of above-mentioned methods.
+     * A non-null {@code warnings} argument is more useful for CRS parsed by {@link org.apache.sis.io.wkt.WKTFormat}
+     * or {@link org.apache.sis.xml.XML#unmarshal(String)} for instance.
+     *
+     * @param  crs       the CRS to replace by an authoritative CRS, or {@code null}.
+     * @param  factory   the factory where to search for authoritative definitions, or {@code null} for the default.
+     * @param  listener  where to send warnings, or {@code null} for ignoring warnings.
+     * @return the suggested CRS to use (may be the {@code crs} argument itself), or {@code null} if the given CRS was null.
+     * @throws FactoryException if an error occurred while querying the authority factory.
+     *
+     * @since 0.8
+     */
+    public static CoordinateReferenceSystem fromAuthority(CoordinateReferenceSystem crs,
+            final CRSAuthorityFactory factory, final WarningListener<?> listener) throws FactoryException
+    {
+        if (crs != null) {
+            final DefinitionVerifier verification = DefinitionVerifier.withAuthority(crs, factory, true);
+            if (verification != null) {
+                crs = verification.authoritative;
+                if (listener != null) {
+                    final LogRecord record = verification.warning(false);
+                    if (record != null) {
+                        record.setLoggerName(Modules.REFERENCING);
+                        record.setSourceClassName(CRS.class.getName());
+                        record.setSourceMethodName("fromAuthority");
+                        listener.warningOccured(null, record);
+                    }
+                }
+            }
+        }
+        return crs;
+    }
+
     /**
      * Suggests a coordinate reference system which could be a common target for coordinate operations having the
      * given sources. This method compares the {@linkplain #getGeographicBoundingBox(CoordinateReferenceSystem)

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListener.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListener.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListener.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListener.java [UTF-8] Tue May  2 10:18:33 2017
@@ -24,15 +24,16 @@ import java.util.logging.LogRecord;
 /**
  * Intercepts non-fatal error messages logged by {@link org.apache.sis.storage.DataStore} or other SIS objects.
  * Warnings are encapsulated in {@link LogRecord} objects and logged at {@link Level#WARNING} if the emitter does not
- * have any registered any {@code WarningListener}. This listener allows applications to intercept warning records for:
+ * have registered any {@code WarningListener}. This listener allows applications to intercept warning records for
+ * displaying them in a dialog (or any other action that the application may choose) instead than logging them.
  *
- * <ul>
- *   <li>displaying the warning in a dialog or performing any other action that the application may choose,</li>
- *   <li>reducing the amount of records to be logged.</li>
- * </ul>
- *
- * The difference between using this listener or configuring the logging {@link java.util.logging.Handler} is
- * that listeners allow to handle the warnings on a per-{@code DataStore} (or any other emitter) instance.
+ * <div class="note"><b>Comparison with alternative approaches:</b>
+ * it is also possible to listen to login events by registering a custom {@link java.util.logging.Handler} to the logger.
+ * But {@code Handler} instances are registered on a per-logger basis and receive all messages sent to that logger
+ * regardless their emitter. By contrast, {@code WarningListener} instances are registered on a per-{@code DataStore}
+ * basis (or any other emitter) and receive all messages sent by that emitter regardless the destination logger.
+ * The emitter is part of the information given to the {@link #warningOccured(Object, LogRecord)} method,
+ * in addition to the log record.</div>
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 0.3

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java [UTF-8] Tue May  2 10:18:33 2017
@@ -32,15 +32,22 @@ import org.apache.sis.internal.util.Unmo
 
 /**
  * Holds a list of {@link WarningListener} instances and provides convenience methods for emitting warnings.
- * The convenience {@code warning(…)} methods can build {@code LogRecord} from an exception or from a string.
- *
- * <p>In the default implementation, all {@code warning(…)} methods delegate to {@link #warning(LogRecord)},
- * thus providing a single point that subclasses can override for intercepting all warnings.
- * The default behavior is:</p>
+ * This is a helper class for {@link org.apache.sis.storage.DataStore} implementations or for other services
+ * susceptible to emit warnings.
+ * Observers can {@linkplain #addWarningListener can add listeners} for being notified about warnings, and
+ * processes can invoke one of the {@code warning(…)} methods for emitting warnings. All warnings are given
+ * to the listeners as {@link LogRecord} instances (this allows localizable messages and additional information
+ * like {@linkplain LogRecord#getMillis() timestamp} and {@linkplain LogRecord#getThrown() stack trace}).
+ * This {@code WarningListeners} class provides convenience methods like {@link #warning(String, Exception)},
+ * which builds {@code LogRecord} from an exception or from a string, but all those {@code warning(…)} methods
+ * ultimately delegate to {@link #warning(LogRecord)}, thus providing a single point that subclasses can override.
+ * When a warning is emitted, the default behavior is:
  *
  * <ul>
  *   <li>If at least one {@link WarningListener} is registered,
  *       then all listeners are notified and the warning is <strong>not</strong> logged.
+ *   <li>Otherwise if the value returned by {@link LogRecord#getLoggerName()} is non-null,
+ *       then the warning will be logged to that named logger.</li>
  *   <li>Otherwise the warning is logged to the logger returned by {@link #getLogger()}.</li>
  * </ul>
  *
@@ -83,7 +90,8 @@ public class WarningListeners<S> impleme
 
     /**
      * Creates a new instance with initially no listener.
-     * Warnings will be logger to the logger, unless at least one listener is registered.
+     * Warnings will be logger to the destination given by {@link #getLogger()},
+     * unless at least one listener is {@linkplain #addWarningListener registered}.
      *
      * @param source  the declared source of warnings. This is not necessarily the real source,
      *                but this is the source that the implementor wants to declare as public API.
@@ -95,6 +103,8 @@ public class WarningListeners<S> impleme
 
     /**
      * Creates a new instance initialized with the same listeners than the given instance.
+     * This constructor is useful when a {@code DataStore} or other data producer needs to
+     * be duplicated for concurrency reasons.
      *
      * @param source  the declared source of warnings. This is not necessarily the real source,
      *                but this is the source that the implementor wants to declare as public API.
@@ -128,7 +138,7 @@ public class WarningListeners<S> impleme
      *   <li>the {@code LogRecord} does not {@linkplain LogRecord#getLoggerName() specify a logger}.</li>
      * </ul>
      *
-     * The default implementation derives a logger for the package name of the {@code source} object.
+     * The default implementation infers a logger name from the package name of the {@code source} object.
      * Subclasses should override this method if they can provide a more determinist logger instance,
      * typically from a static final constant.
      *
@@ -139,20 +149,16 @@ public class WarningListeners<S> impleme
     }
 
     /**
-     * Reports a warning represented by the given log record.
-     * The default implementation performs the following choice:
+     * Reports a warning represented by the given log record. The default implementation forwards
+     * the given record to <strong>one</strong> of the following destinations, in preference order:
      *
-     * <ul>
-     *   <li>If at least one listener has been {@linkplain #addWarningListener registered}, then those listeners
-     *       will be notified by a call to {@link WarningListener#warningOccured(Object, LogRecord)}.</li>
-     *   <li>Otherwise:
-     *     <ul>
-     *       <li>If the value returned by {@link LogRecord#getLoggerName()} is non-null,
-     *           then the warning will be logged to that named logger.</li>
-     *       <li>Otherwise the warning will be logged to the logger given by {@link #getLogger()}.</li>
-     *     </ul>
-     *   </li>
-     * </ul>
+     * <ol>
+     *   <li><code>{@linkplain WarningListener#warningOccured WarningListener.warningOccured}(source, record)</code>
+     *       on all {@linkplain #addWarningListener registered listeners} it at least one such listener exists.</li>
+     *   <li><code>{@linkplain Logging#getLogger(String) Logging.getLogger}(record.{@linkplain LogRecord#getLoggerName
+     *       getLoggerName()}).{@linkplain Logger#log(LogRecord) log}(record)</code> if the logger name is non-null.</li>
+     *   <li><code>{@linkplain #getLogger()}.{@linkplain Logger#log(LogRecord) log}(record)</code> otherwise.</li>
+     * </ol>
      *
      * @param record  the warning as a log record.
      */

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

Modified: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java [UTF-8] Tue May  2 10:18:33 2017
@@ -50,6 +50,7 @@ import org.apache.sis.metadata.iso.conte
 import org.apache.sis.metadata.sql.MetadataStoreException;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreReferencingException;
 import org.apache.sis.util.Characters;
@@ -220,7 +221,7 @@ final class LandsatReader {
     /**
      * Where to send the warnings.
      */
-    private final WarningListeners<?> listeners;
+    private final WarningListeners<DataStore> listeners;
 
     /**
      * Group in process of being parsed, or {@code null} if none.
@@ -297,7 +298,7 @@ final class LandsatReader {
      * @param  filename   an identifier of the file being read, or {@code null} if unknown.
      * @param  listeners  where to sent warnings that may occur during the parsing process.
      */
-    LandsatReader(final String filename, final WarningListeners<?> listeners) {
+    LandsatReader(final String filename, final WarningListeners<DataStore> listeners) {
         this.filename  = filename;
         this.listeners = listeners;
         this.metadata  = new MetadataBuilder();

Modified: sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java [UTF-8] Tue May  2 10:18:33 2017
@@ -23,6 +23,7 @@ import java.io.IOException;
 import javax.measure.Unit;
 import javax.measure.format.ParserException;
 import org.apache.sis.measure.Units;
+import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.util.logging.WarningListeners;
 
@@ -42,7 +43,7 @@ public abstract class Decoder implements
     /**
      * Where to send the warnings.
      */
-    public final WarningListeners<?> listeners;
+    public final WarningListeners<DataStore> listeners;
 
     /**
      * Sets to {@code true} for canceling a reading process.
@@ -55,7 +56,7 @@ public abstract class Decoder implements
      *
      * @param  listeners  where to send the warnings.
      */
-    protected Decoder(final WarningListeners<?> listeners) {
+    protected Decoder(final WarningListeners<DataStore> listeners) {
         Objects.requireNonNull(listeners);
         this.listeners = listeners;
     }

Modified: sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java [UTF-8] Tue May  2 10:18:33 2017
@@ -45,6 +45,7 @@ import org.apache.sis.internal.netcdf.Re
 import org.apache.sis.internal.storage.io.ChannelDataInput;
 import org.apache.sis.internal.util.CollectionsExt;
 import org.apache.sis.internal.util.StandardDateFormat;
+import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.util.iso.DefaultNameSpace;
@@ -222,7 +223,7 @@ public final class ChannelDecoder extend
      * @throws IOException if an error occurred while reading the channel.
      * @throws DataStoreException if the content of the given channel is not a NetCDF file.
      */
-    public ChannelDecoder(final WarningListeners<?> listeners, final ChannelDataInput input)
+    public ChannelDecoder(final WarningListeners<DataStore> listeners, final ChannelDataInput input)
             throws IOException, DataStoreException
     {
         super(listeners);

Modified: sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java [UTF-8] Tue May  2 10:18:33 2017
@@ -43,6 +43,7 @@ import org.apache.sis.internal.netcdf.De
 import org.apache.sis.internal.netcdf.Variable;
 import org.apache.sis.internal.netcdf.GridGeometry;
 import org.apache.sis.internal.netcdf.DiscreteSampling;
+import org.apache.sis.storage.DataStore;
 
 
 /**
@@ -100,7 +101,7 @@ public final class DecoderWrapper extend
      * @param listeners  where to send the warnings.
      * @param file       the NetCDF file from which to read data.
      */
-    public DecoderWrapper(final WarningListeners<?> listeners, final NetcdfFile file) {
+    public DecoderWrapper(final WarningListeners<DataStore> listeners, final NetcdfFile file) {
         super(listeners);
         this.file = file;
     }
@@ -113,7 +114,7 @@ public final class DecoderWrapper extend
      * @throws IOException if an error occurred while opening the NetCDF file.
      */
     @SuppressWarnings("ThisEscapedInObjectConstruction")
-    public DecoderWrapper(final WarningListeners<?> listeners, final String filename) throws IOException {
+    public DecoderWrapper(final WarningListeners<DataStore> listeners, final String filename) throws IOException {
         super(listeners);
         file = NetcdfDataset.openDataset(filename, false, this);
     }

Modified: sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/LogAdapter.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/LogAdapter.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/LogAdapter.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/LogAdapter.java [UTF-8] Tue May  2 10:18:33 2017
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.internal.netcdf.ucar;
 
+import org.apache.sis.storage.DataStore;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.logging.WarningListeners;
 
@@ -40,12 +41,12 @@ final class LogAdapter implements Append
     /**
      * Where to sends the warning messages.
      */
-    private final WarningListeners<?> listeners;
+    private final WarningListeners<DataStore> listeners;
 
     /**
      * Creates a new adapter which will send lines to the given listeners.
      */
-    LogAdapter(final WarningListeners<?> listeners) {
+    LogAdapter(final WarningListeners<DataStore> listeners) {
         this.listeners = listeners;
     }
 

Modified: sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java [UTF-8] Tue May  2 10:18:33 2017
@@ -237,7 +237,7 @@ public class NetcdfStoreProvider extends
      * @throws IOException if an error occurred while opening the NetCDF file.
      * @throws DataStoreException if a logical error (other than I/O) occurred.
      */
-    static Decoder decoder(final WarningListeners<?> listeners, final StorageConnector storage)
+    static Decoder decoder(final WarningListeners<DataStore> listeners, final StorageConnector storage)
             throws IOException, DataStoreException
     {
         Decoder decoder;
@@ -276,7 +276,7 @@ public class NetcdfStoreProvider extends
      * @throws IOException if an error occurred while opening the NetCDF file.
      * @throws DataStoreException if a logical error (other than I/O) occurred.
      */
-    private static Decoder createByReflection(final WarningListeners<?> listeners, final Object input, final boolean isUCAR)
+    private static Decoder createByReflection(final WarningListeners<DataStore> listeners, final Object input, final boolean isUCAR)
             throws IOException, DataStoreException
     {
         ensureInitialized(true);

Modified: sis/branches/JDK8/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java [UTF-8] Tue May  2 10:18:33 2017
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.io.IOException;
 import java.lang.reflect.UndeclaredThrowableException;
+import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.util.logging.EmptyWarningListeners;
 import org.apache.sis.internal.netcdf.ucar.DecoderWrapper;
@@ -47,7 +48,7 @@ public abstract strictfp class TestCase
     /**
      * A dummy list of listeners which can be given to the {@link Decoder} constructor.
      */
-    public static EmptyWarningListeners<Decoder> LISTENERS = new EmptyWarningListeners<>(null, Modules.NETCDF);
+    public static EmptyWarningListeners<DataStore> LISTENERS = new EmptyWarningListeners<>(null, Modules.NETCDF);
 
     /**
      * The {@code searchPath} argument value to be given to the {@link Decoder#setSearchPath(String[])}

Modified: sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java?rev=1793457&r1=1793456&r2=1793457&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java [UTF-8] Tue May  2 10:18:33 2017
@@ -41,12 +41,10 @@ import org.apache.sis.internal.referenci
 import org.apache.sis.metadata.iso.DefaultMetadata;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.CharSequences;
-import org.apache.sis.referencing.CRS;
 
 
 /**
  * A data store which creates data objects from a WKT definition.
- * This {@code DataStore} implementation is basically a facade for the {@link CRS#fromWKT(String)} method.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 0.8



Mime
View raw message