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 8032c960ae `ControlledVocabulary.identifier()` become optional. This change helped to see potential NullPointerException. 8032c960ae is described below commit 8032c960ae4f14c19b8e4dadf784f22ff1f1934a Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Tue Jun 25 16:05:59 2024 +0200 `ControlledVocabulary.identifier()` become optional. This change helped to see potential NullPointerException. --- .../main/org/apache/sis/coverage/grid/PixelInCell.java | 5 +++-- .../main/org/apache/sis/temporal/DefaultInstant.java | 2 +- .../main/org/apache/sis/util/iso/Types.java | 9 +++------ .../main/org/apache/sis/xml/bind/gml/TimePeriodBound.java | 5 ++++- .../main/org/apache/sis/geometry/CoordinateFormat.java | 4 ++-- .../main/org/apache/sis/referencing/privy/AxisDirections.java | 3 +-- .../main/org/apache/sis/util/privy/MetadataServices.java | 2 +- geoapi/snapshot | 2 +- .../main/org/apache/sis/cql/FilterToCQLVisitor.java | 4 ++-- .../test/org/apache/sis/cql/FilterReadingTest.java | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/PixelInCell.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/PixelInCell.java index 5b2b7a1f8d..13ebad22fd 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/PixelInCell.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/PixelInCell.java @@ -16,6 +16,7 @@ */ package org.apache.sis.coverage.grid; +import java.util.Optional; import org.opengis.metadata.spatial.PixelOrientation; // Specific to the geoapi-3.1 and geoapi-4.0 branches: @@ -103,8 +104,8 @@ public enum PixelInCell implements ControlledVocabulary { * @return the legacy ISO/OGC identifier for this constant. */ @Override - public String identifier() { - return identifier; + public Optional<String> identifier() { + return Optional.of(identifier); } /** diff --git a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/temporal/DefaultInstant.java b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/temporal/DefaultInstant.java index 0eb5682cbe..77cdcc2d1c 100644 --- a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/temporal/DefaultInstant.java +++ b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/temporal/DefaultInstant.java @@ -324,7 +324,7 @@ cmp: if (canTestBefore | canTestAfter | canTestEqual) { public String toString() { final var s = new StringBuilder(); if (indeterminate != null) { - s.append(indeterminate.identifier()); + s.append(indeterminate.identifier().orElse(indeterminate.name())); if (position != null) { s.append(' ').append(position); } diff --git a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java index fabfd4b0d5..1214ab578d 100644 --- a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java +++ b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java @@ -222,8 +222,8 @@ public final class Types extends Static { if (code == null) { return null; } - final String id = code.identifier(); - return (id != null && !id.isEmpty()) ? id : code.name(); + String id = code.identifier().orElse(""); + return id.isEmpty() ? code.name() : id; } /** @@ -254,11 +254,8 @@ public final class Types extends Static { if (code == null) { return null; } - String id = code.identifier(); final String name = code.name(); - if (id == null) { - id = name; - } + String id = code.identifier().orElse(name); for (final String candidate : code.names()) { if (!candidate.equals(name) && candidate.length() >= id.length()) { id = candidate; diff --git a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TimePeriodBound.java b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TimePeriodBound.java index 5b51345ec5..cf94c7a1c9 100644 --- a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TimePeriodBound.java +++ b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TimePeriodBound.java @@ -23,6 +23,7 @@ import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlTransient; // Specific to the geoapi-3.1 and geoapi-4.0 branches: +import org.opengis.temporal.IndeterminateValue; import org.opengis.temporal.Instant; @@ -104,7 +105,9 @@ public abstract class TimePeriodBound { if (instant != null) { value = TimeInstant.toXML(instant.getPosition()); if (value == null) { - instant.getIndeterminatePosition().ifPresent((p) -> indeterminatePosition = p.identifier()); + instant.getIndeterminatePosition() + .flatMap(IndeterminateValue::identifier) + .ifPresent((p) -> indeterminatePosition = p); } } if (value == null && indeterminatePosition == null) { diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/CoordinateFormat.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/CoordinateFormat.java index 7ffd22a0b4..b5752a0760 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/CoordinateFormat.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/CoordinateFormat.java @@ -631,8 +631,8 @@ public class CoordinateFormat extends CompoundFormat<DirectPosition> { * Returns the symbol ("E", "N", "SW", <i>etc.</i>) for given axis direction. */ private static String symbol(final AxisDirection direction) { - // Following cast uses or knowledge of `camelCaseToAcronym` implementation. - return ((StringBuilder) CharSequences.camelCaseToAcronym(direction.identifier())) + // Following cast uses our knowledge of `camelCaseToAcronym` implementation. + return ((StringBuilder) CharSequences.camelCaseToAcronym(direction.identifier().orElse(direction.name()))) .insert(0, Characters.NO_BREAK_SPACE).toString(); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/AxisDirections.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/AxisDirections.java index 414d1a7a54..0b756d9f7c 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/AxisDirections.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/AxisDirections.java @@ -702,8 +702,7 @@ next: for (int i=0; i <= limit; i++) { return "m"; // Arbitrary abbreviation, may change in any future SIS version. } } - final String id = direction.identifier(); // UML identifier, or null if none. - return camelCaseToAcronym(id != null ? id : direction.name()).toString().intern(); + return camelCaseToAcronym(direction.identifier().orElse(direction.name())).toString().intern(); } /** diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/privy/MetadataServices.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/privy/MetadataServices.java index e3684de28a..c20f80d7c5 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/privy/MetadataServices.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/privy/MetadataServices.java @@ -138,7 +138,7 @@ public class MetadataServices extends OptionalDependency { * to pass. */ } - return CharSequences.camelCaseToSentence(code.identifier()).toString(); + return CharSequences.camelCaseToSentence(code.identifier().orElse(code.name())).toString(); } /** diff --git a/geoapi/snapshot b/geoapi/snapshot index 2c16f9a1d5..a012f57760 160000 --- a/geoapi/snapshot +++ b/geoapi/snapshot @@ -1 +1 @@ -Subproject commit 2c16f9a1d5c2bd2b7c4b1666f877232f162bbc30 +Subproject commit a012f5776018987a7e9aaf5125a8286ded7de414 diff --git a/incubator/src/org.apache.sis.cql/main/org/apache/sis/cql/FilterToCQLVisitor.java b/incubator/src/org.apache.sis.cql/main/org/apache/sis/cql/FilterToCQLVisitor.java index 9dc909eff5..8e07c44d27 100644 --- a/incubator/src/org.apache.sis.cql/main/org/apache/sis/cql/FilterToCQLVisitor.java +++ b/incubator/src/org.apache.sis.cql/main/org/apache/sis/cql/FilterToCQLVisitor.java @@ -142,14 +142,14 @@ final class FilterToCQLVisitor extends Visitor<Feature,StringBuilder> { }); for (final SpatialOperatorName type : SpatialOperatorName.values()) { if (type != SpatialOperatorName.BBOX) { - function(type, type.identifier().toUpperCase(Locale.US)); + function(type, type.identifier().orElse(type.name()).toUpperCase(Locale.US)); if (type == SpatialOperatorName.OVERLAPS) break; } } function(DistanceOperatorName.WITHIN, "DWITHIN"); function(DistanceOperatorName.BEYOND, "BEYOND"); for (final TemporalOperatorName type : TemporalOperatorName.values()) { - function(type, type.identifier().toUpperCase(Locale.US)); + function(type, type.identifier().orElse(type.name()).toUpperCase(Locale.US)); if (type == TemporalOperatorName.ANY_INTERACTS) break; } /* diff --git a/incubator/src/org.apache.sis.cql/test/org/apache/sis/cql/FilterReadingTest.java b/incubator/src/org.apache.sis.cql/test/org/apache/sis/cql/FilterReadingTest.java index fcedc82f40..e220fe4b6c 100644 --- a/incubator/src/org.apache.sis.cql/test/org/apache/sis/cql/FilterReadingTest.java +++ b/incubator/src/org.apache.sis.cql/test/org/apache/sis/cql/FilterReadingTest.java @@ -352,7 +352,7 @@ public final class FilterReadingTest extends CQLTestCase { } private Filter<?> testSpatialOperators(final CodeList<?> operator, final String suffix) throws CQLException { - final String name = operator.identifier().toUpperCase(Locale.US); + final String name = operator.identifier().get().toUpperCase(Locale.US); final String cql = name + "(\"att\", POLYGON((10 20, 30 40, 50 60, 10 20))" + suffix + ')'; final Filter<?> filter = CQL.parseFilter(cql); assertInstanceOf(SpatialOperator.class, filter, name); @@ -429,7 +429,7 @@ public final class FilterReadingTest extends CQLTestCase { @Test public void testTemporalOperators() throws CQLException, ParseException { for (final TemporalOperatorName operator : TemporalOperatorName.values()) { - final String name = operator.identifier().toUpperCase(Locale.US); + final String name = operator.identifier().get().toUpperCase(Locale.US); final String cql = "att " + name + " 2012-03-21T05:42:36Z"; final Filter<?> filter = CQL.parseFilter(cql); assertInstanceOf(TemporalOperator.class, filter, name);