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 3d5020c294 Replace the `Optional` in `GridExtent.intersect(…)` by
`DisjointExtentException` for more consistency with other API doing similar
work. It allows us to provide more helpful error message.
3d5020c294 is described below
commit 3d5020c294a040e46581a51d15a78b80e7db7f2f
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Fri Dec 9 11:00:42 2022 +0100
Replace the `Optional` in `GridExtent.intersect(…)` by
`DisjointExtentException`
for more consistency with other API doing similar work.
It allows us to provide more helpful error message.
---
.../apache/sis/coverage/grid/DisjointExtentException.java | 2 +-
.../java/org/apache/sis/coverage/grid/GridDerivation.java | 6 +++---
.../main/java/org/apache/sis/coverage/grid/GridExtent.java | 7 ++++---
.../java/org/apache/sis/internal/feature/Resources.java | 6 +++---
.../org/apache/sis/internal/feature/Resources.properties | 2 +-
.../apache/sis/internal/feature/Resources_fr.properties | 2 +-
.../java/org/apache/sis/coverage/grid/GridExtentTest.java | 14 ++++++++++----
7 files changed, 23 insertions(+), 16 deletions(-)
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DisjointExtentException.java
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DisjointExtentException.java
index aebaa23bd9..6e51ff33fd 100644
---
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DisjointExtentException.java
+++
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DisjointExtentException.java
@@ -72,7 +72,7 @@ public class DisjointExtentException extends
IllegalGridGeometryException {
* @param upper the upper bound specified by user, which is invalid.
*/
DisjointExtentException(final Object dim, final long min, final long max,
final long lower, final long upper) {
- super(Resources.format(Resources.Keys.GridEnvelopeOutsideCoverage_5,
new Object[] {dim, min, max, lower, upper}));
+ super(Resources.format(Resources.Keys.GridExtentsAreDisjoint_5, new
Object[] {dim, min, max, lower, upper}));
}
/**
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
index 7364fbb9ef..26ab0221c2 100644
---
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
+++
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
@@ -482,7 +482,7 @@ public class GridDerivation {
final double[] scales;
if (areaOfInterest.isExtentOnly()) {
if (baseExtent != null) {
- baseExtent =
baseExtent.intersect(areaOfInterest.extent).orElseThrow(DisjointExtentException::new);
+ baseExtent = baseExtent.intersect(areaOfInterest.extent);
subGridSetter = "subgrid";
}
scales = areaOfInterest.resolution;
@@ -879,7 +879,7 @@ public class GridDerivation {
}
}
if (areaOfInterest != null && baseExtent != null) {
- baseExtent =
baseExtent.intersect(areaOfInterest).orElseThrow(DisjointExtentException::new);
+ baseExtent = baseExtent.intersect(areaOfInterest);
subGridSetter = "subgrid";
}
if (subsampling == null) {
@@ -1175,7 +1175,7 @@ public class GridDerivation {
resized = resized.forChunkSize(chunkSize);
}
if (clipping == GridClippingMode.STRICT) {
- resized =
resized.intersect(base.extent).orElseThrow(DisjointExtentException::new);
+ resized = resized.intersect(base.extent);
}
if (!resized.equals(baseExtent)) {
baseExtent = resized;
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index ea210a710d..c9a7e25070 100644
---
a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++
b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -1759,11 +1759,12 @@ public class GridExtent implements GridEnvelope,
LenientComparable, Serializable
* @return the intersection result. May be one of the existing instances.
* @throws MismatchedDimensionException if the two extents do not have the
same number of dimensions.
* @throws IllegalArgumentException if axis types are specified but
inconsistent in at least one dimension.
+ * @throws DisjointExtentException if the given extent does not intersect
this extent.
*
* @since 1.3
*/
- public Optional<GridExtent> intersect(final GridExtent other) {
- return Optional.ofNullable(combine(other, false));
+ public GridExtent intersect(final GridExtent other) {
+ return combine(other, false);
}
/**
@@ -1819,7 +1820,7 @@ public class GridExtent implements GridEnvelope,
LenientComparable, Serializable
if (!union) {
for (i=0; i<m; i++) {
if (clipped[i] > clipped[i+m]) {
- return null; // No intersection.
+ throw new DisjointExtentException(this, other, i);
}
}
}
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java
index af18fe363f..f643c483cd 100644
---
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java
+++
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.java
@@ -181,10 +181,10 @@ public final class Resources extends
IndexedResourceBundle {
public static final short GridEnvelopeMustBeNDimensional_1 = 22;
/**
- * Envelope is outside grid coverage. Indices [{3,number} …
{4,number}] in dimension {0} do not
- * intersect the [{1,number} … {2,number}] grid extent.
+ * The specified grid extent is outside the domain. Indices
[{3,number} … {4,number}] specified
+ * in dimension {0} do not intersect the [{1,number} … {2,number}]
grid extent.
*/
- public static final short GridEnvelopeOutsideCoverage_5 = 23;
+ public static final short GridExtentsAreDisjoint_5 = 23;
/**
* Sample value range {1} for “{0}” category is illegal.
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.properties
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.properties
index 181596a444..3c0eb6a938 100644
---
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.properties
+++
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources.properties
@@ -43,7 +43,7 @@ EmptyImage = Image has zero pixel.
EmptyTileOrImageRegion = Empty tile or image region.
GridCoordinateOutsideCoverage_4 = Indices ({3}) are outside grid coverage.
The value in dimension {0} shall be between {1,number} and {2,number} inclusive.
GridEnvelopeMustBeNDimensional_1 = The grid envelope must have at least {0}
dimensions.
-GridEnvelopeOutsideCoverage_5 = Envelope is outside grid coverage. Indices
[{3,number} \u2026 {4,number}] in dimension {0} do not intersect the
[{1,number} \u2026 {2,number}] grid extent.
+GridExtentsAreDisjoint_5 = The specified grid extent is outside the
domain. Indices [{3,number} \u2026 {4,number}] specified in dimension {0} do
not intersect the [{1,number} \u2026 {2,number}] grid extent.
IllegalCategoryRange_2 = Sample value range {1} for \u201c{0}\u201d
category is illegal.
IllegalCharacteristicsType_3 = Expected an instance of \u2018{1}\u2019
for the \u201c{0}\u201d characteristics, but got an instance of \u2018{2}\u2019.
IllegalFeatureType_3 = Association \u201c{0}\u201d does not
accept features of type \u2018{2}\u2019. Expected an instance of
\u2018{1}\u2019 or derived type.
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources_fr.properties
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources_fr.properties
index 951a7ad66b..0ce750b962 100644
---
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources_fr.properties
+++
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Resources_fr.properties
@@ -48,7 +48,7 @@ EmptyImage = L\u2019image a z\u00e9ro
pixel.
EmptyTileOrImageRegion = La tuile ou la r\u00e9gion de l\u2019image
est vide.
GridCoordinateOutsideCoverage_4 = Les indices ({3}) sont en dehors du
domaine de la grille. La valeur dans la dimension {0} doit \u00eatre entre
{1,number} et {2,number} inclusivement.
GridEnvelopeMustBeNDimensional_1 = L\u2019enveloppe de la grille doit avoir
au moins {0} dimensions.
-GridEnvelopeOutsideCoverage_5 = L\u2019enveloppe est en dehors du domaine
de la grille. Les indices [{3,number} \u2026 {4,number}] dans la dimension {0}
n\u2019interceptent pas l\u2019\u00e9tendue [{1,number} \u2026 {2,number}] de
la grille.
+GridExtentsAreDisjoint_5 = L\u2019\u00e9tendue de grille
sp\u00e9cifi\u00e9e est en dehors du domaine. Les indices [{3,number} \u2026
{4,number}] qui ont \u00e9t\u00e9 sp\u00e9cifi\u00e9es dans la dimension {0}
n\u2019interceptent pas l\u2019\u00e9tendue [{1,number} \u2026 {2,number}] de
la grille.
IllegalCategoryRange_2 = La plage de valeurs {1} pour la
cat\u00e9gorie \u00ab\u202f{0}\u202f\u00bb est ill\u00e9gale.
IllegalCharacteristicsType_3 = Une instance \u2018{1}\u2019 \u00e9tait
attendue pour la caract\u00e9ristique \u00ab\u202f{0}\u202f\u00bb, mais la
valeur donn\u00e9e est une instance de \u2018{2}\u2019.
IllegalFeatureType_3 = L\u2019association
\u00ab\u202f{0}\u202f\u00bb n\u2019accepte pas les entit\u00e9s de type
\u2018{2}\u2019. Une instance de \u2018{1}\u2019 ou d\u2019un type
d\u00e9riv\u00e9 \u00e9tait attendue.
diff --git
a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridExtentTest.java
b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridExtentTest.java
index cb71f51b95..30c198236c 100644
---
a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridExtentTest.java
+++
b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridExtentTest.java
@@ -277,12 +277,18 @@ public final strictfp class GridExtentTest extends
TestCase {
@Test
public void testIntersect() {
final GridExtent domain = createOther();
- final GridExtent extent = create3D().intersect(domain).get();
+ final GridExtent extent = create3D().intersect(domain);
assertExtentEquals(extent, 0, 150, 399);
assertExtentEquals(extent, 1, 220, 799);
assertExtentEquals(extent, 2, 40, 46);
- assertSame(extent.intersect(domain).get(), extent);
- assertFalse(extent.intersect(domain.translate(1000)).isPresent());
+ assertSame(extent.intersect(domain), extent);
+ final GridExtent disjoint = domain.translate(0, 1000);
+ try {
+ extent.intersect(disjoint);
+ fail("Expected DisjointExtentException.");
+ } catch (DisjointExtentException e) {
+ assertNotNull(e.getMessage());
+ }
}
/**
@@ -309,7 +315,7 @@ public final strictfp class GridExtentTest extends TestCase
{
new DimensionNameType[] {DimensionNameType.COLUMN,
DimensionNameType.TRACK, DimensionNameType.TIME},
new long[] {100, 200, 40}, new long[] {500, 800, 50}, false);
try {
- domain.intersect(other).get();
+ domain.intersect(other);
fail("Should not be allowed");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());