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();