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 d5b9780190 Reduce the use of `null` as an enumeration value.
d5b9780190 is described below

commit d5b9780190c0f8da45c3bc6b727ff7bb4a2eed53
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Thu Apr 28 00:34:00 2022 +0200

    Reduce the use of `null` as an enumeration value.
---
 .../internal/referencing/provider/CassiniSoldner.java  |  9 ++++++++-
 .../provider/LambertCylindricalEqualArea.java          |  9 +++++++--
 .../internal/referencing/provider/ObliqueMercator.java |  6 ++++--
 .../operation/projection/CassiniSoldner.java           | 12 ++++++++----
 .../operation/projection/CylindricalEqualArea.java     | 18 ++++++++++++------
 .../operation/projection/NormalizedProjection.java     |  2 +-
 .../operation/projection/ObliqueMercator.java          |  2 +-
 .../operation/projection/ProjectionVariant.java        |  2 +-
 8 files changed, 42 insertions(+), 18 deletions(-)

diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/CassiniSoldner.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/CassiniSoldner.java
index 262f91be62..307b019cd8 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/CassiniSoldner.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/CassiniSoldner.java
@@ -43,6 +43,13 @@ public class CassiniSoldner extends MapProjection {
      */
     private static final long serialVersionUID = 7280273456465057368L;
 
+    /**
+     * The EPSG identifier, to be preferred to the name when available.
+     * The {@code IDENTIFIER_OF_BASE} name is for avoiding confusion with
+     * the {@code IDENTIFIER} name used in subclasses.
+     */
+    public static final String IDENTIFIER_OF_BASE = "9806";
+
     /**
      * The operation parameter descriptor for the <cite>Latitude of natural 
origin</cite> (φ₀) parameter value.
      * Valid values range is [-90 … 90]° and default value is 0°.
@@ -135,7 +142,7 @@ public class CassiniSoldner extends MapProjection {
     private static final ParameterDescriptorGroup PARAMETERS;
     static {
         PARAMETERS = builder()
-                .addIdentifier(              "9806")
+                .addIdentifier(              IDENTIFIER_OF_BASE)
                 .addName(                    "Cassini-Soldner")
                 .addName(Citations.OGC,      "Cassini_Soldner")
                 .addName(Citations.ESRI,     "Cassini_Soldner")
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/LambertCylindricalEqualArea.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/LambertCylindricalEqualArea.java
index 2124c04c7b..1491426773 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/LambertCylindricalEqualArea.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/LambertCylindricalEqualArea.java
@@ -30,7 +30,7 @@ import 
org.apache.sis.referencing.operation.projection.CylindricalEqualArea;
  * The provider for <cite>"Lambert Cylindrical Equal Area"</cite> projection 
(EPSG:9835).
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.2
  *
  * @see <a 
href="http://geotiff.maptools.org/proj_list/cylindrical_equal_area.html";>GeoTIFF
 parameters for Cylindrical Equal Area</a>
  *
@@ -44,6 +44,11 @@ public final class LambertCylindricalEqualArea extends 
MapProjection {
      */
     private static final long serialVersionUID = -672278344635217838L;
 
+    /**
+     * The EPSG identifier, to be preferred to the name when available.
+     */
+    public static final String IDENTIFIER = "9835";
+
     /**
      * The operation parameter descriptor for the <cite>Latitude of 1st 
standard parallel</cite> (φ₁) parameter value.
      * Valid values range is (-90 … 90)° and default value is 0°.
@@ -140,7 +145,7 @@ public final class LambertCylindricalEqualArea extends 
MapProjection {
     private static final ParameterDescriptorGroup PARAMETERS;
     static {
         PARAMETERS = builder()
-                .addIdentifier(             "9835")
+                .addIdentifier(             IDENTIFIER)
                 .addName(                   "Lambert Cylindrical Equal Area")
                 .addName(Citations.OGC,     "Cylindrical_Equal_Area")
                 .addName(Citations.ESRI,    "Cylindrical_Equal_Area")
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/ObliqueMercator.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/ObliqueMercator.java
index 323cddde7a..6a8ded58f9 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/ObliqueMercator.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/ObliqueMercator.java
@@ -50,8 +50,10 @@ public class ObliqueMercator extends AbstractMercator {
     /**
      * The {@value} EPSG identifier for <cite>"Hotine Oblique Mercator 
(variant A)"</cite>.
      * Should be preferred to the name when available.
+     * The {@code IDENTIFIER_OF_BASE} name is for avoiding confusion with
+     * the {@code IDENTIFIER} name used in subclasses.
      */
-    public static final String IDENTIFIER_A = "9812";
+    public static final String IDENTIFIER_OF_BASE = "9812";
 
     /**
      * The operation parameter descriptor for the <cite>Latitude of projection 
centre</cite> (φc) parameter value.
@@ -199,7 +201,7 @@ public class ObliqueMercator extends AbstractMercator {
                 .rename    (Citations.NETCDF));                                
 // Remove the netCDF name.
 
         PARAMETERS_A = builder
-                .addIdentifier(IDENTIFIER_A)
+                .addIdentifier(IDENTIFIER_OF_BASE)
                 .addName("Hotine Oblique Mercator (variant A)")                
 // Starting from EPSG version 7.6
                 .addName("Hotine Oblique Mercator")                            
 // Prior to EPSG version 7.6
                 .addName      (Citations.OGC,     "Hotine_Oblique_Mercator")
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CassiniSoldner.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CassiniSoldner.java
index 143fe0a8e5..aadd54246e 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CassiniSoldner.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CassiniSoldner.java
@@ -68,6 +68,9 @@ public class CassiniSoldner extends MeridianArcBased {
      * @see #variant
      */
     private enum Variant implements ProjectionVariant {
+        /** The <cite>Cassini-Soldner</cite> projection. */
+        DEFAULT(null, IDENTIFIER_OF_BASE),
+
         /**
          * The <cite>"Hyperbolic Cassini-Soldner"</cite> variant, which is 
non-invertible.
          */
@@ -147,7 +150,7 @@ public class CassiniSoldner extends MeridianArcBased {
      */
     @Workaround(library="JDK", version="1.7")
     private static Initializer initializer(final OperationMethod method, final 
Parameters parameters) {
-        final Variant variant = variant(method, new Variant[] 
{Variant.HYPERBOLIC}, null);
+        final Variant variant = variant(method, new Variant[] 
{Variant.HYPERBOLIC}, Variant.DEFAULT);
         final EnumMap<ParameterRole, ParameterDescriptor<Double>> roles = new 
EnumMap<>(ParameterRole.class);
         roles.put(ParameterRole.CENTRAL_MERIDIAN, LONGITUDE_OF_ORIGIN);
         roles.put(ParameterRole.SCALE_FACTOR,     SCALE_FACTOR);
@@ -163,14 +166,15 @@ public class CassiniSoldner extends MeridianArcBased {
         super(initializer);
         final double φ0 = 
toRadians(initializer.getAndStore(LATITUDE_OF_ORIGIN));
         M0 = distance(φ0, sin(φ0), cos(φ0));
-        if (initializer.variant == null) {
+        if (initializer.variant == Variant.DEFAULT) {
             final MatrixSIS denormalize = 
getContextualParameters().getMatrix(ContextualParameters.MatrixRole.DENORMALIZATION);
             denormalize.convertBefore(1, null, -distance(φ0, sin(φ0), 
cos(φ0)));
+            variant = null;
         } else if (abs(φ0 - VANUA_LATITUDE) <= ANGULAR_TOLERANCE) {
             variant = Variant.VANUA;
-            return;
+        } else {
+            variant = (Variant) initializer.variant;
         }
-        variant = (Variant) initializer.variant;
     }
 
     /**
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CylindricalEqualArea.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CylindricalEqualArea.java
index 5d5c9ef337..a7f808b015 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CylindricalEqualArea.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CylindricalEqualArea.java
@@ -74,16 +74,22 @@ public class CylindricalEqualArea extends 
EqualAreaProjection {
      * See {@link #variant} for the list of possible values.
      */
     private enum Variant implements ProjectionVariant {
+        /**
+         * The "Lambert Cylindrical Equal Area" case.
+         */
+        ELLIPSOIDAL(null, IDENTIFIER),
+
         /**
          * The "Lambert Cylindrical Equal Area (Spherical)" case.
          */
-        SPHERICAL(".*\\bSpherical\\b.*", 
LambertCylindricalEqualAreaSpherical.IDENTIFIER);
+        SPHERICAL(Pattern.compile(".*\\bSpherical\\b.*", 
Pattern.CASE_INSENSITIVE),
+                  LambertCylindricalEqualAreaSpherical.IDENTIFIER);
 
         /** Name pattern for this variant.    */ private final Pattern 
operationName;
         /** EPSG identifier for this variant. */ private final String  
identifier;
         /** Creates a new enumeration value.  */
-        private Variant(final String operationName, final String identifier) {
-            this.operationName = Pattern.compile(operationName, 
Pattern.CASE_INSENSITIVE);
+        private Variant(final Pattern operationName, final String identifier) {
+            this.operationName = operationName;
             this.identifier    = identifier;
         }
 
@@ -99,7 +105,7 @@ public class CylindricalEqualArea extends 
EqualAreaProjection {
 
         /** Requests the use of authalic radius. */
         @Override public boolean useAuthalicRadius() {
-            return true;
+            return this == SPHERICAL;
         }
     }
 
@@ -107,7 +113,7 @@ public class CylindricalEqualArea extends 
EqualAreaProjection {
      * The type of Cylindrical Equal Area projection. Possible values are:
      *
      * <ul>
-     *   <li>{@code null} if this projection is a default variant.</li>
+     *   <li>{@link Variant#ELLIPSOIDAL}  if this projection is a default 
variant.</li>
      *   <li>{@link Variant#SPHERICAL} if this projection is the "Lambert 
Cylindrical Equal Area (Spherical)" case,
      *       in which case the semi-major and semi-minor axis lengths should 
be replaced by the authalic radius
      *       (this replacement is performed by the {@link Initializer} 
constructor).</li>
@@ -134,7 +140,7 @@ public class CylindricalEqualArea extends 
EqualAreaProjection {
     @SuppressWarnings("fallthrough")
     @Workaround(library="JDK", version="1.7")
     private static Initializer initializer(final OperationMethod method, final 
Parameters parameters) {
-        final Variant variant = variant(method, Variant.values(), null);
+        final Variant variant = variant(method, Variant.values(), 
Variant.ELLIPSOIDAL);
         final EnumMap<ParameterRole, ParameterDescriptor<Double>> roles = new 
EnumMap<>(ParameterRole.class);
         /*
          * "Longitude of origin" and "scale factor" are intentionally omitted 
from this map because they will
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
index 9682cd4207..e56e70dbbd 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
@@ -472,7 +472,7 @@ public abstract class NormalizedProjection extends 
AbstractMathTransform2D imple
         final String name = method.getName().getCode().replace('_',' ');
         for (final V variant : variants) {
             final Pattern regex = variant.getOperationNamePattern();
-            if (regex.matcher(name).matches()) {
+            if (regex != null && regex.matcher(name).matches()) {
                 return variant;
             }
         }
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java
index 528763f215..061f58659f 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java
@@ -77,7 +77,7 @@ public class ObliqueMercator extends ConformalProjection {
      */
     private enum Variant implements ProjectionVariant {
         /** The <cite>Hotine Oblique Mercator (variant A)</cite> projection. */
-        DEFAULT(".*\\bvariant\\s*A\\b.*", IDENTIFIER_A, false, false),
+        DEFAULT(".*\\bvariant\\s*A\\b.*", IDENTIFIER_OF_BASE, false, false),
 
         /** The <cite>Hotine Oblique Mercator (variant B)</cite> projection. */
         CENTER(".*\\bvariant\\s*B\\b.*", IDENTIFIER, false, true),
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ProjectionVariant.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ProjectionVariant.java
index 9fa591ca68..82e0365463 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ProjectionVariant.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ProjectionVariant.java
@@ -33,7 +33,7 @@ interface ProjectionVariant {
      * Returns the regular expression pattern to use for determining if the 
name of an operation method
      * identifies this variant.
      *
-     * @return the operation name pattern for this variant.
+     * @return the operation name pattern for this variant, or {@code null} if 
none.
      */
     Pattern getOperationNamePattern();
 

Reply via email to