You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2022/04/27 22:34:23 UTC
[sis] branch geoapi-4.0 updated: Reduce the use of `null` as an enumeration value.
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 <ma...@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();