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


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new 38a53c45ac Fix parameter aliases for making them compliant with EPSG 
definitions.
38a53c45ac is described below

commit 38a53c45ac5401cc71c64b7289935dc0d2abda36
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Thu Sep 11 11:05:07 2025 +0200

    Fix parameter aliases for making them compliant with EPSG definitions.
---
 .../sis/metadata/xml/SchemaComplianceTest.java     |  4 +-
 .../operation/provider/AbstractLambert.java        |  2 +
 .../operation/provider/AbstractMercator.java       |  2 +
 .../operation/provider/AbstractStereographic.java  |  2 +
 .../operation/provider/CassiniSoldner.java         |  4 ++
 .../operation/provider/Equirectangular.java        |  8 +++
 .../provider/FranceGeocentricInterpolation.java    |  4 --
 .../operation/provider/GeocentricAffine.java       | 31 ++++++---
 .../operation/provider/GeographicOffsets.java      |  3 +-
 .../provider/LambertAzimuthalEqualArea.java        |  4 ++
 .../operation/provider/LambertConformal1SP.java    |  2 +
 .../provider/LambertConformalMichigan.java         |  4 +-
 .../operation/provider/LambertConformalWest.java   |  1 +
 .../provider/LambertCylindricalEqualArea.java      |  4 ++
 .../operation/provider/MapProjection.java          | 16 +++--
 .../operation/provider/Mercator1SP.java            |  2 +
 .../provider/ModifiedAzimuthalEquidistant.java     |  4 ++
 .../operation/provider/ObliqueStereographic.java   |  2 +
 .../operation/provider/Orthographic.java           |  4 ++
 .../operation/provider/PolarStereographicA.java    |  2 +
 .../referencing/operation/provider/Polyconic.java  |  4 ++
 .../operation/provider/TransverseMercator.java     |  2 +
 .../provider/ParameterNameTableGenerator.java      |  2 +-
 .../operation/provider/ProvidersTest.java          | 36 +++++++---
 .../org/apache/sis/test/ProjectDirectories.java    | 79 ++++++----------------
 25 files changed, 135 insertions(+), 93 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/xml/SchemaComplianceTest.java
 
b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/xml/SchemaComplianceTest.java
index ae14e73538..fd401dc92f 100644
--- 
a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/xml/SchemaComplianceTest.java
+++ 
b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/xml/SchemaComplianceTest.java
@@ -61,8 +61,8 @@ public final class SchemaComplianceTest extends TestCase {
          * Locate the root of metadata class directory. In a Maven build:
          * "core/sis-metadata/target/classes/org/apache/sis/metadata/iso"
          */
-        final ProjectDirectories dir = new 
ProjectDirectories(ISOMetadata.class);
-        final SchemaCompliance checker = new 
SchemaCompliance(dir.classesRootDirectory, directory);
+        final var dir = new ProjectDirectories(ISOMetadata.class);
+        final var checker = new SchemaCompliance(dir.classesRootDirectory, 
directory);
         checker.loadDefaultSchemas();
         checker.verify(dir.classesPackageDirectory);
     }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractLambert.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractLambert.java
index cf1d00d4c6..4988725c30 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractLambert.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractLambert.java
@@ -44,6 +44,7 @@ class AbstractLambert extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -61,6 +62,7 @@ class AbstractLambert extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractMercator.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractMercator.java
index 8f504819aa..fe749a2e1b 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractMercator.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractMercator.java
@@ -46,6 +46,7 @@ class AbstractMercator extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -63,6 +64,7 @@ class AbstractMercator extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractStereographic.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractStereographic.java
index 1d2acc3ff5..44874032fc 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractStereographic.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/AbstractStereographic.java
@@ -44,6 +44,7 @@ abstract class AbstractStereographic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -61,6 +62,7 @@ abstract class AbstractStereographic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/CassiniSoldner.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/CassiniSoldner.java
index d2dd6df3a7..0a23ed2345 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/CassiniSoldner.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/CassiniSoldner.java
@@ -71,6 +71,8 @@ public class CassiniSoldner extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_central_meridian </td></tr>
@@ -106,6 +108,7 @@ public class CassiniSoldner extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -123,6 +126,7 @@ public class CassiniSoldner extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Equirectangular.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Equirectangular.java
index 7a70dae255..d8eca86aea 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Equirectangular.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Equirectangular.java
@@ -138,6 +138,8 @@ public final class Equirectangular extends AbstractProvider 
{
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
@@ -155,6 +157,7 @@ public final class Equirectangular extends AbstractProvider 
{
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -172,6 +175,7 @@ public final class Equirectangular extends AbstractProvider 
{
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
@@ -202,6 +206,8 @@ public final class Equirectangular extends AbstractProvider 
{
                 .addIdentifier("8802")
                 .addIdentifier(Citations.GEOTIFF, "3088")
                 .addName("Longitude of natural origin")
+                .addName("Central Meridian")
+                .addName("CM")
                 .addName(Citations.OGC,     Constants.CENTRAL_MERIDIAN)
                 .addName(Citations.ESRI,    "Central_Meridian")
                 .addName(Citations.NETCDF,  "longitude_of_projection_origin")
@@ -212,6 +218,7 @@ public final class Equirectangular extends AbstractProvider 
{
                 .addIdentifier("8806")
                 .addIdentifier(Citations.GEOTIFF, "3082")
                 .addName("False easting")
+                .addName("False westing")
                 .addName(Citations.OGC,     Constants.FALSE_EASTING)
                 .addName(Citations.ESRI,    "False_Easting")
                 .addName(Citations.NETCDF,  Constants.FALSE_EASTING)
@@ -222,6 +229,7 @@ public final class Equirectangular extends AbstractProvider 
{
                 .addIdentifier("8807")
                 .addIdentifier(Citations.GEOTIFF, "3083")
                 .addName("False northing")
+                .addName("False southing")
                 .addName(Citations.OGC,     Constants.FALSE_NORTHING)
                 .addName(Citations.ESRI,    "False_Northing")
                 .addName(Citations.NETCDF,  Constants.FALSE_NORTHING)
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
index 031ad2931d..920230ff01 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
@@ -153,7 +153,6 @@ public final class FranceGeocentricInterpolation extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> EPSG code for Interpolation CRS </td></tr>
-     *   <tr><td> EPSG:    </td><td> Interpolation CRS code </td></tr>
      * </table>
      * <b>Notes:</b>
      * <ul>
@@ -169,7 +168,6 @@ public final class FranceGeocentricInterpolation extends 
AbstractProvider {
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> EPSG code for standard transformation T0 
</td></tr>
      *   <tr><td> EPSG:    </td><td> EPSG code for "standard" CT </td></tr>
-     *   <tr><td> EPSG:    </td><td> Standard CT code </td></tr>
      * </table>
      * <b>Notes:</b>
      * <ul>
@@ -193,13 +191,11 @@ public final class FranceGeocentricInterpolation extends 
AbstractProvider {
         INTERPOLATION_CRS = builder
                 .addIdentifier("1048")
                 .addName("EPSG code for Interpolation CRS")
-                .addName("Interpolation CRS code")
                 .create(Integer.class, null);
         STANDARD_CT = builder
                 .addIdentifier("1062")
                 .addName("EPSG code for standard transformation T0")
                 .addName("EPSG code for \"standard\" CT")
-                .addName("Standard CT code")
                 .create(Integer.class, null);
         PARAMETERS = builder
                 .addIdentifier("1087").addName("Geocentric translation by Grid 
Interpolation (IGN)")
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeocentricAffine.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeocentricAffine.java
index 74ab1935d1..514499ad91 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeocentricAffine.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeocentricAffine.java
@@ -91,6 +91,7 @@ public abstract class GeocentricAffine extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> X-axis translation </td></tr>
+     *   <tr><td> EPSG:    </td><td> tX </td></tr>
      *   <tr><td> OGC:     </td><td> dx </td></tr>
      * </table>
      */
@@ -105,6 +106,7 @@ public abstract class GeocentricAffine extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Y-axis translation </td></tr>
+     *   <tr><td> EPSG:    </td><td> tY </td></tr>
      *   <tr><td> OGC:     </td><td> dy </td></tr>
      * </table>
      */
@@ -119,6 +121,7 @@ public abstract class GeocentricAffine extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Z-axis translation </td></tr>
+     *   <tr><td> EPSG:    </td><td> tZ </td></tr>
      *   <tr><td> OGC:     </td><td> dz </td></tr>
      * </table>
      */
@@ -133,6 +136,7 @@ public abstract class GeocentricAffine extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> X-axis rotation </td></tr>
+     *   <tr><td> EPSG:    </td><td> rX </td></tr>
      *   <tr><td> OGC:     </td><td> ex </td></tr>
      * </table>
      * <b>Notes:</b>
@@ -151,6 +155,7 @@ public abstract class GeocentricAffine extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Y-axis rotation </td></tr>
+     *   <tr><td> EPSG:    </td><td> rY </td></tr>
      *   <tr><td> OGC:     </td><td> ey </td></tr>
      * </table>
      * <b>Notes:</b>
@@ -169,6 +174,7 @@ public abstract class GeocentricAffine extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Z-axis rotation </td></tr>
+     *   <tr><td> EPSG:    </td><td> rZ </td></tr>
      *   <tr><td> OGC:     </td><td> ez </td></tr>
      * </table>
      * <b>Notes:</b>
@@ -188,26 +194,33 @@ public abstract class GeocentricAffine extends 
AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Scale difference </td></tr>
+     *   <tr><td> EPSG:    </td><td> dS </td></tr>
      *   <tr><td> OGC:     </td><td> ppm </td></tr>
      * </table>
      */
     static final ParameterDescriptor<Double> DS;
     static {
         final ParameterBuilder builder = builder();
-        TX = createShift(builder.addIdentifier("8605").addName("X-axis 
translation").addName(Citations.OGC, "dx"));
-        TY = createShift(builder.addIdentifier("8606").addName("Y-axis 
translation").addName(Citations.OGC, "dy"));
-        TZ = createShift(builder.addIdentifier("8607").addName("Z-axis 
translation").addName(Citations.OGC, "dz"));
-        RX = createRotation(builder.addIdentifier("8608"), "X-axis rotation", 
"ex");
-        RY = createRotation(builder.addIdentifier("8609"), "Y-axis rotation", 
"ey");
-        RZ = createRotation(builder.addIdentifier("8610"), "Z-axis rotation", 
"ez");
-        DS = builder.addIdentifier("8611").addName("Scale 
difference").addName(Citations.OGC, "ppm").create(0, Units.PPM);
+        TX = createShift(builder.addIdentifier("8605").addName("X-axis 
translation").addName("tX").addName(Citations.OGC, "dx"));
+        TY = createShift(builder.addIdentifier("8606").addName("Y-axis 
translation").addName("tY").addName(Citations.OGC, "dy"));
+        TZ = createShift(builder.addIdentifier("8607").addName("Z-axis 
translation").addName("tZ").addName(Citations.OGC, "dz"));
+        RX = createRotation(builder, "8608", "X-axis rotation", "rX", "ex");
+        RY = createRotation(builder, "8609", "Y-axis rotation", "rY", "ey");
+        RZ = createRotation(builder, "8610", "Z-axis rotation", "rZ", "ez");
+        DS = builder.addIdentifier("8611").addName("Scale 
difference").addName("dS").addName(Citations.OGC, "ppm").create(0, Units.PPM);
     }
 
     /**
      * Convenience method for building the rotation parameters.
      */
-    private static ParameterDescriptor<Double> createRotation(final 
ParameterBuilder builder, final String name, final String alias) {
-        return builder.addName(name).addName(Citations.OGC, 
alias).createBounded(-180*60*60, 180*60*60, 0, Units.ARC_SECOND);
+    private static ParameterDescriptor<Double> createRotation(final 
ParameterBuilder builder, final String identifier,
+            final String name, final String alias, final String ogc)
+    {
+        return builder.addIdentifier(identifier)
+                .addName(name)
+                .addName(alias)
+                .addName(Citations.OGC, ogc)
+                .createBounded(-180*60*60, 180*60*60, 0, Units.ARC_SECOND);
     }
 
     /**
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeographicOffsets.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeographicOffsets.java
index 3ea2c8bc32..522b6ab792 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeographicOffsets.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/GeographicOffsets.java
@@ -50,6 +50,7 @@ public class GeographicOffsets extends AbstractProvider {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude offset </td></tr>
+     *   <tr><td> EPSG:    </td><td> Longitude rotation </td></tr>
      * </table>
      */
     static final ParameterDescriptor<Double> TX;
@@ -83,7 +84,7 @@ public class GeographicOffsets extends AbstractProvider {
     static {
         final ParameterBuilder builder = builder();
         TY = builder.addIdentifier("8601").addName("Latitude offset") 
.create(0, Units.DEGREE);
-        TX = builder.addIdentifier("8602").addName("Longitude 
offset").create(0, Units.DEGREE);
+        TX = builder.addIdentifier("8602").addName("Longitude 
offset").addName("Longitude rotation").create(0, Units.DEGREE);
         TZ = builder.addIdentifier("8603").addName("Vertical Offset") 
.create(0, Units.METRE);
         PARAMETERS = builder.addIdentifier("9660").addName("Geographic3D 
offsets").createGroup(TY, TX, TZ);
     }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertAzimuthalEqualArea.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertAzimuthalEqualArea.java
index f9c873777a..df11bb7404 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertAzimuthalEqualArea.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertAzimuthalEqualArea.java
@@ -71,6 +71,8 @@ public class LambertAzimuthalEqualArea extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> longitude_of_center </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
@@ -88,6 +90,7 @@ public class LambertAzimuthalEqualArea extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -105,6 +108,7 @@ public class LambertAzimuthalEqualArea extends 
MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformal1SP.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformal1SP.java
index 57444bca81..e98d2ffa80 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformal1SP.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformal1SP.java
@@ -72,6 +72,8 @@ public final class LambertConformal1SP extends 
AbstractLambert {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalMichigan.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalMichigan.java
index 293d3df310..af543b8a05 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalMichigan.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalMichigan.java
@@ -48,6 +48,7 @@ public final class LambertConformalMichigan extends 
AbstractLambert {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Ellipsoid scaling factor </td></tr>
+     *   <tr><td> EPSG:    </td><td> K </td></tr>
      * </table>
      * <b>Notes:</b>
      * <ul>
@@ -63,8 +64,9 @@ public final class LambertConformalMichigan extends 
AbstractLambert {
     static {
         final ParameterBuilder builder = builder();
         SCALE_FACTOR = builder
-                .addIdentifier("1051")
+                .addIdentifier("1038")
                 .addName("Ellipsoid scaling factor")
+                .addName("K")
                 .createStrictlyPositive(Double.NaN, Units.UNITY);
 
         PARAMETERS = builder
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalWest.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalWest.java
index a933357d7c..bfd4e0fe5f 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalWest.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertConformalWest.java
@@ -59,6 +59,7 @@ public final class LambertConformalWest extends 
AbstractLambert {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertCylindricalEqualArea.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertCylindricalEqualArea.java
index e8b7758039..bcc6b89407 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertCylindricalEqualArea.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/LambertCylindricalEqualArea.java
@@ -73,6 +73,8 @@ public final class LambertCylindricalEqualArea extends 
MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
@@ -108,6 +110,7 @@ public final class LambertCylindricalEqualArea extends 
MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -125,6 +128,7 @@ public final class LambertCylindricalEqualArea extends 
MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/MapProjection.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/MapProjection.java
index 12431785d6..66ed6f2265 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/MapProjection.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/MapProjection.java
@@ -377,13 +377,15 @@ public abstract class MapProjection extends 
AbstractProvider {
             newCodes[i] = IdentifiedObjects.getIdentifier(replacement[i], 
toRename[i]);
         }
         for (GenericName alias : template.getAlias()) {
-            final Citation authority = ((Identifier) alias).getAuthority();
-            for (int i=0; i<toRename.length; i++) {
-                if (authority == toRename[i]) {
-                    if (newNames[i] == null) continue;
-                    alias = newNames[i];
-                    newNames[i] = null;
-                    break;
+            if (alias instanceof Identifier) {
+                final Citation authority = ((Identifier) alias).getAuthority();
+                for (int i=0; i<toRename.length; i++) {
+                    if (authority == toRename[i]) {
+                        if (newNames[i] == null) continue;
+                        alias = newNames[i];
+                        newNames[i] = null;
+                        break;
+                    }
                 }
             }
             builder.addName(alias);
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Mercator1SP.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Mercator1SP.java
index b46d138e33..a6750c3f00 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Mercator1SP.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Mercator1SP.java
@@ -80,6 +80,8 @@ public final class Mercator1SP extends AbstractMercator {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ModifiedAzimuthalEquidistant.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ModifiedAzimuthalEquidistant.java
index 416ac66be3..13dd6aff06 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ModifiedAzimuthalEquidistant.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ModifiedAzimuthalEquidistant.java
@@ -70,6 +70,8 @@ public final class ModifiedAzimuthalEquidistant extends 
MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> GeoTIFF: </td><td> CenterLong </td></tr>
      *   <tr><td> Proj4:   </td><td> lon_0 </td></tr>
@@ -85,6 +87,7 @@ public final class ModifiedAzimuthalEquidistant extends 
MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> GeoTIFF: </td><td> FalseEasting </td></tr>
      *   <tr><td> Proj4:   </td><td> x_0 </td></tr>
@@ -100,6 +103,7 @@ public final class ModifiedAzimuthalEquidistant extends 
MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> GeoTIFF: </td><td> FalseNorthing </td></tr>
      *   <tr><td> Proj4:   </td><td> y_0 </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ObliqueStereographic.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ObliqueStereographic.java
index b8cbe12fcc..75851c8e05 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ObliqueStereographic.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/ObliqueStereographic.java
@@ -64,6 +64,8 @@ public final class ObliqueStereographic extends 
AbstractStereographic {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Orthographic.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Orthographic.java
index 2ec2db59d7..fb2462d50c 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Orthographic.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Orthographic.java
@@ -66,6 +66,8 @@ public class Orthographic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Longitude_Of_Center </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
@@ -101,6 +103,7 @@ public class Orthographic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -118,6 +121,7 @@ public class Orthographic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/PolarStereographicA.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/PolarStereographicA.java
index e2de3ea7fa..907e08c923 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/PolarStereographicA.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/PolarStereographicA.java
@@ -85,6 +85,8 @@ public final class PolarStereographicA extends 
AbstractStereographic {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_projection_origin </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Polyconic.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Polyconic.java
index c0e60d3470..40174b17dd 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Polyconic.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/Polyconic.java
@@ -64,6 +64,8 @@ public class Polyconic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_central_meridian </td></tr>
@@ -81,6 +83,7 @@ public class Polyconic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False easting </td></tr>
+     *   <tr><td> EPSG:    </td><td> False westing </td></tr>
      *   <tr><td> OGC:     </td><td> false_easting </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Easting </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_easting </td></tr>
@@ -98,6 +101,7 @@ public class Polyconic extends MapProjection {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> False northing </td></tr>
+     *   <tr><td> EPSG:    </td><td> False southing </td></tr>
      *   <tr><td> OGC:     </td><td> false_northing </td></tr>
      *   <tr><td> ESRI:    </td><td> False_Northing </td></tr>
      *   <tr><td> NetCDF:  </td><td> false_northing </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/TransverseMercator.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/TransverseMercator.java
index 749c22e34e..8964d4cb0b 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/TransverseMercator.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/TransverseMercator.java
@@ -77,6 +77,8 @@ public final class TransverseMercator extends 
AbstractMercator {
      * <table class="sis">
      *   <caption>Parameter names</caption>
      *   <tr><td> EPSG:    </td><td> Longitude of natural origin </td></tr>
+     *   <tr><td> EPSG:    </td><td> Central Meridian </td></tr>
+     *   <tr><td> EPSG:    </td><td> CM </td></tr>
      *   <tr><td> OGC:     </td><td> central_meridian </td></tr>
      *   <tr><td> ESRI:    </td><td> Central_Meridian </td></tr>
      *   <tr><td> NetCDF:  </td><td> longitude_of_central_meridian </td></tr>
diff --git 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ParameterNameTableGenerator.java
 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ParameterNameTableGenerator.java
index d37068740d..cde607ddb8 100644
--- 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ParameterNameTableGenerator.java
+++ 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ParameterNameTableGenerator.java
@@ -88,7 +88,7 @@ public final class ParameterNameTableGenerator extends 
SimpleFileVisitor<Path> {
      * For {@link #main(String[])} only.
      */
     private ParameterNameTableGenerator() {
-        directory = new 
ProjectDirectories(getClass()).getSourcesPackageDirectory("core/sis-referencing");
+        directory = new 
ProjectDirectories(getClass()).getSourcesPackageDirectory();
         toSearch  = 
Pattern.compile(".*\\s+static\\s+.*ParameterDescriptor<\\w+>\\s*(\\w+)\\s*[=;].*");
         buffer    = new StringBuilder();
     }
diff --git 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ProvidersTest.java
 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ProvidersTest.java
index 19ba3a4126..f1c4f1e982 100644
--- 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ProvidersTest.java
+++ 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/ProvidersTest.java
@@ -271,9 +271,9 @@ public final class ProvidersTest extends TestCase {
         final var aliasUsageCount = new HashMap<String, Integer>(256);
         for (final Class<?> c : methods()) {
             final AbstractProvider method = instance(c);
-            final Identifier identifier = 
IdentifiedObjects.getIdentifier(method, Citations.EPSG);
+            final String identifier = getCodeEPSG(method);
             if (identifier != null) {
-                final OperationMethod authoritative = 
factory.createOperationMethod(identifier.getCode());
+                final OperationMethod authoritative = 
factory.createOperationMethod(identifier);
                 final String[] aliases = getAliases(authoritative);
                 for (final String alias : aliases) {
                     aliasUsageCount.merge(alias, 1, Math::addExact);
@@ -296,10 +296,23 @@ public final class ProvidersTest extends TestCase {
                     GeneralParameterDescriptor parameter;
                     do {
                         if (index >= parameters.size()) {
-                            fail("Parameter \"" + name + "\" not found or not 
in expected order in " + classe);
+                            fail("Parameter \"" + name + "\" not found or not 
in expected order in class " + classe);
                         }
                         parameter = parameters.get(index++);
                     } while (!name.equals(parameter.getName().getCode()));
+                    /*
+                     * Found a match. The EPSG code must be identical.
+                     * Check also the aliases, ignoring the deprecated ones.
+                     */
+                    assertEquals(getCodeEPSG(expected), 
getCodeEPSG(parameter), name);
+                    final var hardCoded = new 
HashSet<String>(Arrays.asList(getAliases(parameter)));
+                    for (final String alias : getAliases(expected)) {
+                        assertTrue(hardCoded.remove(alias),
+                                () -> "Alias \"" + alias + "\" not found in 
parameter \"" + name + "\" of class " + classe);
+                    }
+                    assertTrue(hardCoded.isEmpty(),
+                            () -> "Unexpected alias \"" + 
hardCoded.iterator().next()
+                                    + "\" in parameter \"" + name + "\" of 
class " + classe);
                 }
             }
         }
@@ -313,17 +326,22 @@ public final class ProvidersTest extends TestCase {
             final var hardCoded = new 
HashSet<String>(Arrays.asList(getAliases(method)));
             for (final String alias : entry.getValue()) {
                 if (aliasUsageCount.get(alias) == 1) {
-                    if (!hardCoded.remove(alias)) {
-                        fail("Alias \"" + alias + "\" not found or not in 
expected order in " + classe);
-                    }
+                    assertTrue(hardCoded.remove(alias), () -> "Alias \"" + 
alias + "\" not found in class " + classe);
                 }
             }
-            if (!hardCoded.isEmpty()) {
-                fail("Unexpected alias \"" + hardCoded.iterator().next() + "\" 
in " + classe);
-            }
+            assertTrue(hardCoded.isEmpty(),
+                    () -> "Unexpected alias \"" + hardCoded.iterator().next() 
+ "\" in " + classe);
         }
     }
 
+    /**
+     * Returns the identifier code in <abbr>EPSG</abbr> namespace for the 
given object, or {@code null} if none.
+     */
+    private static String getCodeEPSG(final IdentifiedObject object) {
+        Identifier identifier = IdentifiedObjects.getIdentifier(object, 
Citations.EPSG);
+        return (identifier != null) ? identifier.getCode() : null;
+    }
+
     /**
      * Returns the collection of <abbr>EPSG</abbr> aliases or abbreviations 
for the given object.
      */
diff --git 
a/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/ProjectDirectories.java
 
b/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/ProjectDirectories.java
index 97ae0de8d7..78cb1185d3 100644
--- 
a/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/ProjectDirectories.java
+++ 
b/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/ProjectDirectories.java
@@ -28,25 +28,23 @@ import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Provides methods that depend on assumption on the project directory layout.
- * We currently use Maven conventions, but this class provide a central place
- * to revisit if we want to change convention in the future.
+ * This class provideS a central place to revisit when the layout changes.
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
 public final class ProjectDirectories {
     /**
      * The directory where are stored the compiled Java classes for the 
package of the given class.
-     * The constructor used the given class as a sample member for getting 
this package directory.
+     * The constructor uses the given class as a sample member for getting 
this package directory.
      */
     public final Path classesPackageDirectory;
 
     /**
-     * The root directory where are stored the compiled Java classes.
-     * The constructor used the given class as a sample member for getting 
this directory.
-     *
-     * <p>If we are running the tests from another environment than Maven 
(e.g. from NetBeans project),
-     * then this directory may contain all modules instead of only the module 
of the class given to
-     * the constructor.</p>
+     * The root directory where are stored the compiled Java classes in the 
module.
+     * The constructor uses the given class as a sample member for getting 
this directory.
+     * This is the directory of the package hierarchy. For example, if the 
class is in the
+     * {@code org.apache.sis.referencing} module, then the filename (tip) of 
this directory
+     * is that module name.
      */
     public final Path classesRootDirectory;
 
@@ -87,34 +85,13 @@ public final class ProjectDirectories {
     /**
      * Returns the root directory of source Java code.
      *
-     * @param  module  module name, e.g. {@code "core/sis-referencing"}.
-     *                 Used only if the project is not a Maven project.
      * @return root directory of source Java files.
      */
-    public Path getSourcesRootDirectory(final String module) {
-        Path dir = getMavenModule();
-        if (dir == null) {
-            /*
-             * This block is executed only if the compiled class file was not 
found in the location
-             * that we would have expected for a Maven project. Maybe the 
class is in the NetBeans
-             * build directory instead.
-             */
-            dir = classesRootDirectory;
-            do {
-                if (dir == null) {
-                    throw new AssertionError("No more parent directory.");
-                }
-                dir = dir.getParent();
-            } while (!Files.exists(dir.resolve("pom.xml")));
-            dir = dir.resolve(module.replace('/', File.separatorChar));
-        }
-        /*
-         * At this point `dir` is the root of the Maven module
-         * which contains the class given to the constructor.
-         */
-        dir = dir.resolve("src").resolve("main").resolve("java");
+    public Path getSourcesRootDirectory() {
+        Path dir = getProjectDirectory();
+        dir = 
dir.resolve("src").resolve(classesRootDirectory.getFileName()).resolve("main");
         if (!Files.isDirectory(dir)) {
-            throw new AssertionError("Not a directory: " + dir);
+            throw new RuntimeException("Not a directory: " + dir);
         }
         return dir;
     }
@@ -122,39 +99,23 @@ public final class ProjectDirectories {
     /**
      * Returns the directory of source code for the package of the class given 
at construction time.
      *
-     * @param  module  module name, e.g. {@code "core/sis-referencing"}.
-     *                 Used only if the project is not a Maven project.
      * @return package directory of source Java files.
      */
-    public Path getSourcesPackageDirectory(final String module) {
-        return 
getSourcesRootDirectory(module).resolve(packageName.replace('.', 
File.separatorChar));
-    }
-
-    /**
-     * Returns whether the {@link #classesRootDirectory} is the sub-directory 
of a tree following Maven conventions.
-     * This method verifies that the parent directories are {@code 
"target/*classes"} and that the parent directory
-     * contains a {@code pom.xml} file.
-     *
-     * @return whether we are in a Maven module.
-     */
-    public boolean isMavenModule() {
-        return getMavenModule() != null;
+    public Path getSourcesPackageDirectory() {
+        return getSourcesRootDirectory().resolve(packageName.replace('.', 
File.separatorChar));
     }
 
     /**
-     * Returns the path to Maven module, or {@code null} if none.
+     * Returns the path to the sub-project.
      */
-    private Path getMavenModule() {
+    private Path getProjectDirectory() {
         Path dir = classesRootDirectory;
-        if (dir.getFileName().toString().endsWith("classes")) {
-            dir = dir.getParent();
-            if (dir != null && dir.getFileName().toString().equals("target")) {
-                dir = dir.getParent();
-                if (dir != null && 
Files.isRegularFile(dir.resolve("pom.xml"))) {
-                    return dir;
-                }
+        while ((dir = dir.getParent()) != null) {
+            Path p = dir.resolve("endorsed");
+            if (Files.exists(p)) {
+                return p;
             }
         }
-        return null;
+        throw new RuntimeException("Directory not found.");
     }
 }

Reply via email to