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
commit d650ed458d84c7e32bd9ee28a8ace4cd6bfe6d77 Author: Martin Desruisseaux <[email protected]> AuthorDate: Fri Nov 28 12:37:28 2025 +0100 Cleanup with one new public method but no other significant code change. - Move `ReferencingUtilities.getDimension` to `CRS.getDimensionOrZero` for clarity. - Define a `CRS.BIDIMENSIONAL` package-private constant for clarity. - Replacements of a few codes by standard Java methods. - Spelling and javadoc fixes. --- .../feature/internal/shared/FeatureProjection.java | 2 +- .../apache/sis/filter/DefaultFilterFactory.java | 4 +- .../org/apache/sis/filter/FunctionRegister.java | 10 +-- .../geometry/wrapper/SpatialOperationContext.java | 2 +- .../apache/sis/geometry/wrapper/jts/Wrapper.java | 4 +- .../org/apache/sis/image/BandAggregateLayout.java | 2 +- .../main/org/apache/sis/portrayal/Canvas.java | 2 +- .../apache/sis/geometry/WraparoundAdjustment.java | 6 +- .../main/org/apache/sis/parameter/IntegerList.java | 2 +- .../main/org/apache/sis/referencing/CRS.java | 89 ++++++++++++++-------- .../referencing/EllipsoidalHeightSeparator.java | 3 +- .../apache/sis/referencing/GeodeticCalculator.java | 4 +- .../apache/sis/referencing/crs/AbstractCRS.java | 2 +- .../sis/referencing/crs/DefaultProjectedCRS.java | 2 +- .../referencing/internal/PositionTransformer.java | 2 +- .../internal/shared/GeodeticObjectBuilder.java | 7 +- .../internal/shared/ReferencingUtilities.java | 27 ------- .../internal/shared/TemporalAccessor.java | 3 +- .../internal/shared/WraparoundAxesFinder.java | 3 +- .../operation/AbstractCoordinateOperation.java | 6 +- .../operation/CoordinateOperationRegistry.java | 3 +- .../referencing/operation/DefaultConversion.java | 4 +- .../operation/DefaultPassThroughOperation.java | 11 ++- .../operation/transform/MathTransforms.java | 2 +- .../test/org/apache/sis/io/wkt/CRSParserTest.java | 2 +- .../operation/DefaultConversionTest.java | 4 +- .../sis/storage/geotiff/reader/CRSBuilder.java | 4 +- .../sis/storage/geotiff/reader/XMLMetadata.java | 4 +- .../sis/storage/netcdf/base/GridMapping.java | 4 +- .../sis/storage/netcdf/base/NamedElement.java | 2 +- .../apache/sis/storage/esri/AsciiGridStore.java | 5 +- .../main/org/apache/sis/math/Vector.java | 2 +- optional/src/org.apache.sis.gui/bundle/bin/sisfx | 1 + .../main/org/apache/sis/gui/RecentFiles.java | 2 +- .../org/apache/sis/gui/coverage/GridViewSkin.java | 2 +- .../main/org/apache/sis/gui/dataset/LogViewer.java | 7 +- .../sis/gui/metadata/IdentificationInfo.java | 2 +- .../apache/sis/gui/metadata/MetadataSummary.java | 2 +- .../org/apache/sis/gui/referencing/CRSChooser.java | 4 +- .../org/apache/sis/gui/referencing/MenuSync.java | 8 +- 40 files changed, 120 insertions(+), 137 deletions(-) diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/internal/shared/FeatureProjection.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/internal/shared/FeatureProjection.java index 297d4257f5..e1ab0ebe1f 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/internal/shared/FeatureProjection.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/internal/shared/FeatureProjection.java @@ -347,7 +347,7 @@ public final class FeatureProjection extends Record implements UnaryOperator<Fea /** * Returns the expression which is executed for fetching the property value at the given index. * - * @param index index of the stored property for which to get the expression for fething the value. + * @param index index of the stored property for which to get the expression for fetching the value. * @return the expression which is executed for fetching the property value at the given index. */ public final Expression<? super Feature, ?> expression(final int index) { diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/DefaultFilterFactory.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/DefaultFilterFactory.java index b25e35aa0e..efe4a01e24 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/DefaultFilterFactory.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/DefaultFilterFactory.java @@ -76,9 +76,9 @@ public abstract class DefaultFilterFactory<R,G,T> extends AbstractFactory implem /** * All functions identified by a name like {@code "cos"}, {@code "hypot"}, <i>etc</i>. * The actual function creations is delegated to an external factory such as SQLMM registry. - * The factories are fetched by {@link #function(String, Expression...)} when first needed. + * The factories are fetched by {@link #function(String, Expression[])} when first needed. * - * @see #function(String, Expression...) + * @see #function(String, Expression[]) */ @LazyCandidate private final Capabilities availableFunctions; diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/FunctionRegister.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/FunctionRegister.java index 1589a3e661..3e88d34c6b 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/FunctionRegister.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/filter/FunctionRegister.java @@ -26,18 +26,14 @@ import org.opengis.filter.capability.AvailableFunction; /** * A factory of {@code org.opengis.filter} functions identified by their names. * Each factory can provide an arbitrary number of functions, enumerated by {@link #getNames()}. - * The {@link org.apache.sis.filter.DefaultFilterFactory#function(String, Expression...)} method - * delegates to this interface for creating the function implementation for a given name. - * - * <p><b>Warning:</b> there is currently no mechanism for avoiding name collision. - * It is implementer responsibility to keep trace of the whole universe of functions and avoid collision. - * Checks against name collisions may be added in a future version.</p> + * The {@link DefaultFilterFactory#function(String, Expression[])} method delegates to this interface + * for creating the function implementation for a given name. * * @author Johann Sorel (Geomatys) * @version 1.6 * @since 1.5 * - * @see org.opengis.filter.FilterFactory#function(String, Expression...) + * @see DefaultFilterFactory#function(String, Expression[]) */ public interface FunctionRegister { /** diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/SpatialOperationContext.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/SpatialOperationContext.java index df9078b625..709d962403 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/SpatialOperationContext.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/SpatialOperationContext.java @@ -144,7 +144,7 @@ public final class SpatialOperationContext implements Serializable { * that {@link ReferencingUtilities#getUnit(CoordinateSystem)} returns {@code null}. */ private static CoordinateReferenceSystem to2D(CoordinateReferenceSystem crs) { - if (ReferencingUtilities.getDimension(crs) > BIDIMENSIONAL) { + if (CRS.getDimensionOrZero(crs) > BIDIMENSIONAL) { crs = CRS.getComponentAt(crs, 0, BIDIMENSIONAL); } return crs; diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java index d568096b0c..3b1bc00fb5 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java @@ -47,7 +47,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.CoordinateOperation; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; +import org.apache.sis.referencing.CRS; import org.apache.sis.geometry.DirectPosition2D; import org.apache.sis.geometry.GeneralDirectPosition; import org.apache.sis.geometry.GeneralEnvelope; @@ -219,7 +219,7 @@ final class Wrapper extends GeometryWrapper { if (!Double.isNaN(z)) { return new GeneralDirectPosition(c.x, c.y, z); } - } else if (ReferencingUtilities.getDimension(crs) != Factory.BIDIMENSIONAL) { + } else if (CRS.getDimensionOrZero(crs) != Factory.BIDIMENSIONAL) { final var point = new GeneralDirectPosition(crs); point.setCoordinate(0, c.x); point.setCoordinate(1, c.y); diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandAggregateLayout.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandAggregateLayout.java index c7e6cc30b7..dd7e51c684 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandAggregateLayout.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandAggregateLayout.java @@ -110,7 +110,7 @@ final class BandAggregateLayout { /** * Whether to allow the sharing of data buffers (instead of copying) if possible. * This flag depends on the {@link ImageProcessor} configuration. Its purpose is - * to express <em>user intend</em>, not whether sharing is effectively enabled. + * to express <em>user's intent</em>, not whether sharing is effectively enabled. * * <h4>Design note</h4> * This flag is not the result of the modification done in {@code BandAggregateLayout} constructor diff --git a/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/Canvas.java b/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/Canvas.java index a0a1c1e71c..89ea01640d 100644 --- a/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/Canvas.java +++ b/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/Canvas.java @@ -428,7 +428,7 @@ public class Canvas extends Observable implements Localized { * Subclasses may override for a little bit more efficiency. */ int getDisplayDimensions() { - return ReferencingUtilities.getDimension(getDisplayCRS()); + return CRS.getDimensionOrZero(getDisplayCRS()); } /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/WraparoundAdjustment.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/WraparoundAdjustment.java index 25e84b73fc..5d2574acc4 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/WraparoundAdjustment.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/WraparoundAdjustment.java @@ -29,7 +29,6 @@ import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.operation.transform.MathTransforms; import org.apache.sis.math.MathFunctions; import org.apache.sis.metadata.internal.shared.ReferencingServices; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.referencing.internal.shared.WraparoundAxesFinder; import org.apache.sis.util.logging.Logging; @@ -243,9 +242,8 @@ public class WraparoundAdjustment { if (crs != null && resultCRS != null) { inputToResult = findOperation(crs, resultCRS).getMathTransform(); } else { - inputToResult = MathTransforms.identity( - (crs != null) ? ReferencingUtilities.getDimension(crs) - : domainOfValidity.getDimension()); + final int dim = CRS.getDimensionOrZero(crs); + inputToResult = MathTransforms.identity(dim != 0 ? dim : domainOfValidity.getDimension()); } } /* diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/IntegerList.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/IntegerList.java index f14a2ae2e6..70f3cc223b 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/IntegerList.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/IntegerList.java @@ -49,7 +49,7 @@ final class IntegerList { * @param array the integer values as a Java array. */ public IntegerList(final Object array) { - final StringJoiner builder = new StringJoiner(" "); + final var builder = new StringJoiner(" "); final int length = Array.getLength(array); for (int i=0; i<length; i++) { builder.add(String.valueOf(Array.get(array, i))); diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java index 7fe88aff7f..8fb46bdba5 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java @@ -158,6 +158,11 @@ public final class CRS { */ static final Logger LOGGER = Logger.getLogger(Modules.REFERENCING); + /** + * The {@value} value, for identifying code that assume two-dimensional objects. + */ + static final int BIDIMENSIONAL = 2; + /** * Do not allow instantiation of this class. */ @@ -1046,6 +1051,30 @@ public final class CRS { return Optional.empty(); } + /** + * Returns the number of dimensions of the given <abbr>CRS</abbr>, or 0 if {@code null}. + * This method also returns 0 if the <abbr>CRS</abbr> is associated to a null coordinate system. + * + * <p>This is convenience method for cases such as <abbr>CRS</abbr> separated in optional components. + * For example, a class may have an optional {@link VerticalCRS} component allowed to be {@code null}. + * When computing the total number of dimensions, it is sometime convenient to handle null components + * as a component of dimension zero.</p> + * + * @param crs the <abbr>CRS</abbr> from which to get the number of dimensions, or {@code null}. + * @return the number of dimensions, or 0 if the given <abbr>CRS</abbr> or its coordinate system is null. + * + * @since 1.6 + */ + public static int getDimensionOrZero(final CoordinateReferenceSystem crs) { + if (crs != null) { + final CoordinateSystem cs = crs.getCoordinateSystem(); + if (cs != null) { // Should never be null, but let be safe. + return cs.getDimension(); + } + } + return 0; + } + /** * Creates a compound coordinate reference system from an ordered list of CRS components. * A CRS is inferred from the given components and the domain of validity is set to the @@ -1114,25 +1143,22 @@ public final class CRS { * * @since 1.3 */ - public static CoordinateReferenceSystem selectDimensions(final CoordinateReferenceSystem crs, - final int... dimensions) throws FactoryException + public static CoordinateReferenceSystem selectDimensions(final CoordinateReferenceSystem crs, final int... dimensions) + throws FactoryException { final var components = selectComponents(crs, dimensions); - if (components.isEmpty()) { - return null; - } - return compound(components.toArray(CoordinateReferenceSystem[]::new)); + return components.isEmpty() ? null : compound(components.toArray(CoordinateReferenceSystem[]::new)); } /** - * Gets or creates CRS components for a subset of the dimensions of the given CRS. + * Gets or creates CRS components for a subset of the dimensions of the given <abbr>CRS</abbr>. * The method performs the same work as {@link #selectDimensions(CoordinateReferenceSystem, int...)} * except that it does not build new {@link CompoundCRS} instances when the specified dimensions span * more than one {@linkplain DefaultCompoundCRS#getComponents() component}. * Instead, the components are returned directly. * - * <p>While this method does not create new {@code CompoundCRS} instances, it still may create other - * kinds of CRS for handling ellipsoidal height as documented in the {@code selectDimensions(…)} method.</p> + * <p>While this method does not create new {@code CompoundCRS} instances, it may create other kinds + * of CRS for handling ellipsoidal height as documented in the {@code selectDimensions(…)} method.</p> * * @param crs the CRS from which to get a subset of the components, or {@code null} if none. * @param dimensions the dimensions to retain. The dimensions will be taken in increasing order, ignoring duplicated values. @@ -1144,28 +1170,24 @@ public final class CRS { * * @since 1.4 */ - public static List<CoordinateReferenceSystem> selectComponents(final CoordinateReferenceSystem crs, - final int... dimensions) throws FactoryException + public static List<CoordinateReferenceSystem> selectComponents(final CoordinateReferenceSystem crs, final int... dimensions) + throws FactoryException { ArgumentChecks.ensureNonNull("dimensions", dimensions); - if (crs == null) { - return List.of(); - } - final int dimension = ReferencingUtilities.getDimension(crs); + final int dimension = getDimensionOrZero(crs); long selected = 0; - for (final int d : dimensions) { - if (d < 0 || d >= dimension) { - throw new IndexOutOfBoundsException(Errors.format(Errors.Keys.IndexOutOfBounds_1, d)); + if (crs != null) { + for (final int d : dimensions) { + if (Objects.checkIndex(d, dimension) >= Long.SIZE) { + throw new ArithmeticException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, d+1)); + } + selected |= (1L << d); } - if (d >= Long.SIZE) { - throw new ArithmeticException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, d+1)); + if (selected == 0) { + throw new IllegalArgumentException(Errors.format(Errors.Keys.EmptyArgument_1, "dimensions")); } - selected |= (1L << d); - } - if (selected == 0) { - throw new IllegalArgumentException(Errors.format(Errors.Keys.EmptyArgument_1, "dimensions")); } - final List<CoordinateReferenceSystem> components = new ArrayList<>(Long.bitCount(selected)); + final var components = new ArrayList<CoordinateReferenceSystem>(Long.bitCount(selected)); reduce(0, crs, dimension, selected, components); return components; } @@ -1182,7 +1204,8 @@ public final class CRS { * @return new bitmask after removal of dimensions of the components added to {@code addTo}. */ private static long reduce(int previous, final CoordinateReferenceSystem crs, int dimension, long selected, - final List<CoordinateReferenceSystem> addTo) throws FactoryException + final List<CoordinateReferenceSystem> addTo) + throws FactoryException { final long current = (Numerics.bitmask(dimension) - 1) << previous; final long intersect = selected & current; @@ -1192,7 +1215,7 @@ choice: if (intersect != 0) { selected &= ~current; } else if (crs instanceof CompoundCRS) { for (final CoordinateReferenceSystem component : ((CompoundCRS) crs).getComponents()) { - dimension = ReferencingUtilities.getDimension(component); + dimension = getDimensionOrZero(component); selected = reduce(previous, component, dimension, selected, addTo); if ((selected & current) == 0) break; // Stop if it would be useless to continue. previous += dimension; @@ -1248,7 +1271,7 @@ choice: if (intersect != 0) { * @category information */ public static boolean isHorizontalCRS(final CoordinateReferenceSystem crs) { - return horizontalCode(crs) == 2; + return horizontalCode(crs) == BIDIMENSIONAL; } /** @@ -1267,14 +1290,14 @@ choice: if (intersect != 0) { if (isGeodetic || crs instanceof ProjectedCRS || (isEngineering = (crs instanceof EngineeringCRS))) { final CoordinateSystem cs = crs.getCoordinateSystem(); final int dim = cs.getDimension(); - if ((dim & ~1) == 2 && (!isGeodetic || (cs instanceof EllipsoidalCS))) { + if ((dim & ~1) == BIDIMENSIONAL && (!isGeodetic || (cs instanceof EllipsoidalCS))) { if (isEngineering) { int n = 0; for (int i=0; i<dim; i++) { if (AxisDirections.isCompass(cs.getAxis(i).getDirection())) n++; } // If we don't have exactly 2 east, north, etc. directions, consider as non-horizontal. - if (n != 2) return 0; + if (n != BIDIMENSIONAL) return 0; } return dim; } @@ -1333,7 +1356,7 @@ choice: if (intersect != 0) { * We don't need to check if crs is an instance of SingleCRS since all * CRS accepted by horizontalCode(…) are SingleCRS. */ - case 2: { + case BIDIMENSIONAL: { return (SingleCRS) crs; } case 3: { @@ -1347,7 +1370,7 @@ choice: if (intersect != 0) { return !AxisDirections.isVertical(axis.getDirection()); } }); - if (cs.getDimension() != 2) break; + if (cs.getDimension() != BIDIMENSIONAL) break; /* * Most of the time, the CRS to rebuild will be geodetic. In such case we known that the * coordinate system is ellipsoidal because (i.e. the CRS is geographic) because it was @@ -1578,7 +1601,7 @@ choice: if (intersect != 0) { @OptionalCandidate public static CoordinateReferenceSystem getComponentAt(CoordinateReferenceSystem crs, int lower, int upper) { if (crs == null) return null; // Skip bounds check. - int dimension = ReferencingUtilities.getDimension(crs); + int dimension = getDimensionOrZero(crs); Objects.checkFromToIndex(lower, upper, dimension); check: while (lower != 0 || upper != dimension) { if (crs instanceof CompoundCRS) { diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java index 73a4a1a107..f5c52cb9f6 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java @@ -30,7 +30,6 @@ import org.opengis.referencing.crs.GeodeticCRS; import org.opengis.referencing.datum.GeodeticDatum; import org.opengis.referencing.operation.Conversion; import org.apache.sis.referencing.internal.shared.AxisDirections; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.referencing.cs.CoordinateSystems; import org.apache.sis.referencing.cs.AxisFilter; import org.apache.sis.referencing.operation.DefaultConversion; @@ -141,7 +140,7 @@ final class EllipsoidalHeightSeparator implements AxisFilter { */ if (crs instanceof ProjectedCRS) { GeodeticCRS baseCRS = ((ProjectedCRS) crs).getBaseCRS(); - if (ReferencingUtilities.getDimension(baseCRS) != 2) { + if (CRS.getDimensionOrZero(baseCRS) != CRS.BIDIMENSIONAL) { baseCRS = (GeodeticCRS) separate(baseCRS); } Conversion projection = ((ProjectedCRS) crs).getConversionFromBase(); diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/GeodeticCalculator.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/GeodeticCalculator.java index 903bf749be..06a0112bc6 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/GeodeticCalculator.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/GeodeticCalculator.java @@ -353,7 +353,7 @@ public class GeodeticCalculator { private PositionTransformer geographic(final double φ, final double λ) { userToGeodetic.setCoordinate(0, toDegrees(φ)); userToGeodetic.setCoordinate(1, toDegrees(λ)); - for (int i=userToGeodetic.getDimension(); --i >= 2;) { + for (int i = userToGeodetic.getDimension(); --i >= CRS.BIDIMENSIONAL;) { userToGeodetic.setCoordinate(i, 0); // Set height to ellipsoid surface. } return userToGeodetic; @@ -941,7 +941,7 @@ public class GeodeticCalculator { * Creates a builder for the given tolerance at equator in metres. */ PathBuilder(final double εx) { - super(ReferencingUtilities.getDimension(userToGeodetic.defaultCRS)); + super(CRS.getDimensionOrZero(userToGeodetic.defaultCRS)); φf = φ2; λf = λ2; msinαf = msinα2; diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractCRS.java index 549fe464af..44709671ac 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractCRS.java @@ -58,7 +58,7 @@ import org.opengis.coordinate.MismatchedDimensionException; /** * Coordinate reference system, defined by a {@linkplain AbstractCS coordinate system} * and (usually) a {@linkplain org.apache.sis.referencing.datum.AbstractDatum datum}. - * A coordinate reference system (CRS) consists of an ordered sequence of + * A coordinate reference system (<abbr>CRS</abbr>) consists of an ordered sequence of * {@linkplain org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis coordinate system axes} * that are related to the earth through the datum. * Most coordinate reference system do not move relative to the earth, except for diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java index c58440eb67..9201692401 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java @@ -145,7 +145,7 @@ public class DefaultProjectedCRS extends AbstractDerivedCRS implements Projected */ @Workaround(library="JDK", version="1.7") private static GeodeticCRS checkDimensions(final GeodeticCRS baseCRS, final CartesianCS derivedCS) { - int n = ReferencingUtilities.getDimension(baseCRS); + int n = baseCRS.getCoordinateSystem().getDimension(); if (derivedCS != null) { n = Math.max(n, derivedCS.getDimension()); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/PositionTransformer.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/PositionTransformer.java index 40f545525a..e2ca84acd4 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/PositionTransformer.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/PositionTransformer.java @@ -254,7 +254,7 @@ public final class PositionTransformer extends GeneralDirectPosition { /** * Transforms this point to the default CRS and stores the result in the given array, and returns the derivative. - * The {@code target} array length should be {@code ReferencingUtilities.getDimension(defaultCRS)}. + * The {@code target} array length should be {@code CRS.getDimensionOrZero(defaultCRS)}. * * @param target where to store the transformed coordinates. * @return the derivative (Jacobian matrix) at the location of this point. diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/GeodeticObjectBuilder.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/GeodeticObjectBuilder.java index e5583b0ce9..40a5a071b9 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/GeodeticObjectBuilder.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/GeodeticObjectBuilder.java @@ -49,6 +49,7 @@ import org.opengis.referencing.operation.OperationMethod; import org.opengis.referencing.operation.Conversion; import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.resources.Errors; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.Builder; import org.apache.sis.referencing.CommonCRS; import org.apache.sis.referencing.IdentifiedObjects; @@ -655,8 +656,8 @@ public class GeodeticObjectBuilder extends Builder<GeodeticObjectBuilder> { public CoordinateReferenceSystem replaceComponent(final CoordinateReferenceSystem source, final int firstDimension, final CoordinateReferenceSystem replacement) throws FactoryException { - final int srcDim = ReferencingUtilities.getDimension(source); - final int repDim = ReferencingUtilities.getDimension(replacement); + final int srcDim = CRS.getDimensionOrZero(source); + final int repDim = CRS.getDimensionOrZero(replacement); if (firstDimension == 0 && srcDim == repDim) { /* * conceptually return the replacement. But returning the original instance if applicable @@ -695,7 +696,7 @@ public class GeodeticObjectBuilder extends Builder<GeodeticObjectBuilder> { components[i] = nc; return createCompoundCRS(components); } - lower += ReferencingUtilities.getDimension(c); + lower += CRS.getDimensionOrZero(c); } } throw new IllegalArgumentException(Resources.forLocale(locale).getString( diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/ReferencingUtilities.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/ReferencingUtilities.java index 0e9e469553..734af0a2a6 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/ReferencingUtilities.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/ReferencingUtilities.java @@ -18,7 +18,6 @@ package org.apache.sis.referencing.internal.shared; import java.util.Map; import java.util.HashMap; -import java.util.OptionalInt; import javax.measure.Unit; import javax.measure.quantity.Angle; import org.opengis.annotation.UML; @@ -137,32 +136,6 @@ public final class ReferencingUtilities { return (crs != null) ? getUnit(crs.getCoordinateSystem()) : null; } - /** - * Returns the number of dimensions of the given CRS, or 0 if {@code null}. - * - * @param crs the CRS from which to get the number of dimensions, or {@code null}. - * @return the number of dimensions, or 0 if the given CRS or its coordinate system is null. - */ - public static int getDimension(final CoordinateReferenceSystem crs) { - return getOptionalDimension(crs).orElse(0); - } - - /** - * Returns the number of dimensions of the given <abbr>CRS</abbr>. - * - * @param crs the <abbr>CRS</abbr> from which to get the number of dimensions, or {@code null}. - * @return the number of dimensions, or empty if the given CRS or its coordinate system is null. - */ - public static OptionalInt getOptionalDimension(final CoordinateReferenceSystem crs) { - if (crs != null) { - final CoordinateSystem cs = crs.getCoordinateSystem(); - if (cs != null) { // Should never be null, but let be safe. - return OptionalInt.of(cs.getDimension()); - } - } - return OptionalInt.empty(); - } - /** * Returns the GeoAPI interface implemented by the given object, or the implementation class * if the interface is unknown. This method can be used when the base type (CRS, CS, Datum…) diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/TemporalAccessor.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/TemporalAccessor.java index bab0c03bf3..632e147f05 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/TemporalAccessor.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/TemporalAccessor.java @@ -21,6 +21,7 @@ import org.opengis.geometry.Envelope; import org.opengis.referencing.crs.CompoundCRS; import org.opengis.referencing.crs.TemporalCRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.crs.DefaultTemporalCRS; import org.apache.sis.metadata.iso.extent.DefaultTemporalExtent; import org.apache.sis.geometry.AbstractEnvelope; @@ -77,7 +78,7 @@ public final class TemporalAccessor { if (accessor != null) { return accessor; } - dim += ReferencingUtilities.getDimension(component); + dim += CRS.getDimensionOrZero(component); } } return null; diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/WraparoundAxesFinder.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/WraparoundAxesFinder.java index a352dd0cfd..57135db41a 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/WraparoundAxesFinder.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/internal/shared/WraparoundAxesFinder.java @@ -20,6 +20,7 @@ import org.opengis.referencing.cs.CoordinateSystem; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.crs.ProjectedCRS; import org.opengis.referencing.operation.MathTransform; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.operation.transform.MathTransforms; @@ -54,7 +55,7 @@ public final class WraparoundAxesFinder { preferredToSpecified = p.getConversionFromBase().getMathTransform(); } else { // TODO: we should handle the case of CompoundCRS before to fallback on identity. - preferredToSpecified = MathTransforms.identity(ReferencingUtilities.getDimension(crs)); + preferredToSpecified = MathTransforms.identity(CRS.getDimensionOrZero(crs)); } preferredCRS = crs; } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java index 9d9a53dee8..4afc281adb 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java @@ -59,6 +59,7 @@ import org.apache.sis.util.logging.Logging; import org.apache.sis.util.resources.Errors; import org.apache.sis.parameter.Parameterized; import org.apache.sis.metadata.iso.citation.Citations; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.AbstractIdentifiedObject; import org.apache.sis.referencing.cs.CoordinateSystems; import org.apache.sis.referencing.operation.transform.MathTransforms; @@ -66,7 +67,6 @@ import org.apache.sis.referencing.operation.transform.PassThroughTransform; import org.apache.sis.referencing.internal.PositionalAccuracyConstant; import org.apache.sis.referencing.internal.Resources; import org.apache.sis.referencing.internal.shared.CoordinateOperations; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.referencing.internal.shared.WKTUtilities; import org.apache.sis.referencing.internal.shared.WKTKeywords; import org.apache.sis.metadata.internal.shared.ImplementationHelper; @@ -355,7 +355,7 @@ public class AbstractCoordinateOperation extends AbstractIdentifiedObject implem @SuppressWarnings("LocalVariableHidesMemberVariable") final MathTransform transform = this.transform; // Protect from changes. if (transform != null) { - final int interpDim = ReferencingUtilities.getDimension(interpolationCRS); + final int interpDim = CRS.getDimensionOrZero(interpolationCRS); check: for (int isTarget=0; ; isTarget++) { // 0 == source check; 1 == target check. final CoordinateReferenceSystem crs; // Will determine the expected dimensions. int actual; // The MathTransform number of dimensions. @@ -364,7 +364,7 @@ check: for (int isTarget=0; ; isTarget++) { // 0 == source check; 1 case 1: crs = targetCRS; actual = transform.getTargetDimensions(); break; default: break check; } - int expected = ReferencingUtilities.getDimension(crs); + int expected = CRS.getDimensionOrZero(crs); if (interpDim != 0) { if (actual == expected || actual < interpDim) { // This check is not strictly necessary as the next check below would catch the error, diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java index 2473b66070..af31347efd 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java @@ -68,7 +68,6 @@ import org.apache.sis.referencing.internal.DeferredCoordinateOperation; import org.apache.sis.referencing.internal.Resources; import org.apache.sis.referencing.internal.shared.CoordinateOperations; import org.apache.sis.referencing.internal.shared.EllipsoidalHeightCombiner; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.metadata.iso.citation.Citations; import org.apache.sis.metadata.iso.extent.Extents; import org.apache.sis.system.Semaphores; @@ -889,7 +888,7 @@ class CoordinateOperationRegistry { * (e.g. as in the "geographic 3D to geographic 2D" conversion) because ALLOW_VARIANT mode * still requires a matching number of dimensions. */ - assert ReferencingUtilities.getDimension(sourceCRS) != ReferencingUtilities.getDimension(targetCRS) + assert CRS.getDimensionOrZero(sourceCRS) != CRS.getDimensionOrZero(targetCRS) || Utilities.deepEquals(sourceCRS, targetCRS, ComparisonMode.ALLOW_VARIANT); final Matrix m = CoordinateSystems.swapAndScaleAxes(sourceCRS.getCoordinateSystem(), targetCRS.getCoordinateSystem()); return (m.isIdentity()) ? null : mtFactory.createAffineTransform(m); diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java index 8e3429579a..f3501c4cd6 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java @@ -31,6 +31,7 @@ import org.opengis.referencing.operation.MathTransformFactory; import org.opengis.referencing.operation.Matrix; import org.opengis.referencing.crs.SingleCRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.cs.CoordinateSystems; import org.apache.sis.referencing.datum.DatumOrEnsemble; import org.apache.sis.referencing.factory.InvalidGeodeticParameterException; @@ -39,7 +40,6 @@ import org.apache.sis.referencing.internal.Resources; import org.apache.sis.referencing.operation.transform.DefaultMathTransformFactory; import org.apache.sis.referencing.operation.transform.MathTransformProvider; import org.apache.sis.referencing.operation.matrix.Matrices; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.Utilities; import org.apache.sis.util.resources.Errors; @@ -229,7 +229,7 @@ public class DefaultConversion extends AbstractSingleOperation implements Conver final MathTransformFactory factory) throws FactoryException { super(definition); - int interpDim = ReferencingUtilities.getDimension(super.getInterpolationCRS().orElse(null)); + int interpDim = CRS.getDimensionOrZero(super.getInterpolationCRS().orElse(null)); if (transform == null) { /* * If the user did not specify explicitly a MathTransform, we will need to create it from the parameters. diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java index 05ebe8dfad..79855d7e65 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java @@ -33,7 +33,6 @@ import org.apache.sis.referencing.GeodeticException; import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.operation.transform.MathTransforms; import org.apache.sis.referencing.operation.transform.PassThroughTransform; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.metadata.internal.shared.ImplementationHelper; import org.apache.sis.util.ArraysExt; import org.apache.sis.util.ComparisonMode; @@ -364,22 +363,22 @@ public class DefaultPassThroughOperation extends AbstractCoordinateOperation imp * of the nested operation from the source/target CRS of the enclosing pass-through operation. */ @Override + @SuppressWarnings("LocalVariableHidesMemberVariable") final void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { super.afterUnmarshal(unmarshaller, parent); /* * State validation. The `missing` string will be used in exception message * at the end of this method if a required component is reported missing. */ - @SuppressWarnings("LocalVariableHidesMemberVariable") final int[] modifiedCoordinates = this.modifiedCoordinates; FactoryException cause = null; String missing = "modifiedCoordinate"; if (modifiedCoordinates.length != 0) { missing = "sourceCRS"; - final CoordinateReferenceSystem sourceCRS = super.getSourceCRS(); + final CoordinateReferenceSystem sourceCRS = super.sourceCRS; if (sourceCRS != null) { missing = "targetCRS"; - final CoordinateReferenceSystem targetCRS = super.getTargetCRS(); + final CoordinateReferenceSystem targetCRS = super.targetCRS; if (targetCRS != null) { missing = "coordOperation"; if (operation != null) { @@ -401,8 +400,8 @@ public class DefaultPassThroughOperation extends AbstractCoordinateOperation imp } } if (subTransform != null) { - transform = MathTransforms.passThrough(modifiedCoordinates, subTransform, - ReferencingUtilities.getDimension(sourceCRS)); + final int resultDim = sourceCRS.getCoordinateSystem().getDimension(); + transform = MathTransforms.passThrough(modifiedCoordinates, subTransform, resultDim); return; } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/MathTransforms.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/MathTransforms.java index 5d776ca4a3..86e777f0c0 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/MathTransforms.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/MathTransforms.java @@ -403,7 +403,7 @@ public final class MathTransforms { */ public static MathTransform passThrough(final int[] modifiedCoordinates, final MathTransform subTransform, final int resultDim) { ArgumentChecks.ensureNonNull("modifiedCoordinates", modifiedCoordinates); - final BitSet bitset = new BitSet(); + final var bitset = new BitSet(); int previous = -1; for (int i=0; i < modifiedCoordinates.length; i++) { final int dim = modifiedCoordinates[i]; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/CRSParserTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/CRSParserTest.java index 5da7217039..c73cf2bd1f 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/CRSParserTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/CRSParserTest.java @@ -50,7 +50,7 @@ public final class CRSParserTest extends WKTParserTest { * This is done for avoiding race conditions logging the same message many times. */ static { - // Will do nothing, the intend is only to force class initialization. + // Will do nothing, the intent is only to force class initialization. TestCase.out.flush(); } diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultConversionTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultConversionTest.java index afec45c053..eac21492dd 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultConversionTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultConversionTest.java @@ -29,9 +29,9 @@ import org.opengis.referencing.cs.EllipsoidalCS; import org.opengis.referencing.operation.Matrix; import org.opengis.referencing.operation.Conversion; import org.opengis.referencing.operation.OperationMethod; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.IdentifiedObjects; import org.apache.sis.referencing.internal.shared.CoordinateOperations; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.referencing.datum.DefaultGeodeticDatum; import org.apache.sis.referencing.crs.DefaultGeographicCRS; import org.apache.sis.referencing.operation.matrix.Matrix3; @@ -142,7 +142,7 @@ public final class DefaultConversionTest extends TestCase { * from the parameters. But we don't do the normal steps here because this class is a unit test: * we want to test DefaultConversion in isolation of MathTransformFactory. */ - final int interpDim = ReferencingUtilities.getDimension(interpolationCRS); + final int interpDim = CRS.getDimensionOrZero(interpolationCRS); final int sourceDim = sourceCRS.getCoordinateSystem().getDimension(); final int targetDim = targetCRS.getCoordinateSystem().getDimension(); final OperationMethod method = DefaultOperationMethodTest.create( diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java index 4604c24a3a..6c72ab4a9d 100644 --- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java +++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java @@ -283,7 +283,7 @@ public final class CRSBuilder extends ReferencingFactoryContainer { if (value != null) { if (value.getClass().isArray()) { final int length = Array.getLength(value); - final StringJoiner buffer = new StringJoiner(", "); + final var buffer = new StringJoiner(", "); for (int i=0; i<length; i++) { buffer.add(String.valueOf(Array.get(value, i))); } @@ -574,7 +574,7 @@ public final class CRSBuilder extends ReferencingFactoryContainer { * Emits a warning for unprocessed GeoTIFF tags. A single warning is emitted for all ignored tags. */ if (!geoKeys.isEmpty()) { - final StringJoiner joiner = new StringJoiner(", "); + final var joiner = new StringJoiner(", "); final Short[] keys = geoKeys.keySet().toArray(Short[]::new); Arrays.sort(keys); for (final short key : keys) { diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java index 9daaeb1969..d4c8376956 100644 --- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java +++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java @@ -339,7 +339,7 @@ public final class XMLMetadata implements Filter { } } } - final StringJoiner buffer = new StringJoiner(""); + final var buffer = new StringJoiner(""); while (reader.hasNext()) { final XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { @@ -470,7 +470,7 @@ public final class XMLMetadata implements Filter { final Attribute a = start.getAttributeByName(name); if (a != null) attribute = a.getValue(); } - final StringJoiner buffer = new StringJoiner(""); + final var buffer = new StringJoiner(""); while (reader.hasNext()) { final XMLEvent event = reader.nextEvent(); if (event.isEndElement()) { diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridMapping.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridMapping.java index 355f2077ab..732e1b21a7 100644 --- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridMapping.java +++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridMapping.java @@ -68,7 +68,6 @@ import org.apache.sis.referencing.operation.transform.TransformSeparator; import org.apache.sis.referencing.operation.provider.PseudoPlateCarree; import org.apache.sis.referencing.internal.shared.AxisDirections; import org.apache.sis.referencing.internal.shared.AffineTransform2D; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.storage.DataStoreContentException; import org.apache.sis.storage.netcdf.internal.Resources; import org.apache.sis.coverage.grid.GridGeometry; @@ -791,7 +790,8 @@ final class GridMapping { MathTransform implicitG2C = gridToCRS(variable); CoordinateReferenceSystem implicitCRS = crs; if (implicitG2C != null) { - final int tgtDim = ReferencingUtilities.getOptionalDimension(implicitCRS).orElse(srcDim); + int tgtDim = CRS.getDimensionOrZero(implicitCRS); + if (tgtDim == 0) tgtDim = srcDim; MathTransform step1 = changeOfDimension(srcDim, implicitG2C.getSourceDimensions()); MathTransform step3 = changeOfDimension(implicitG2C.getTargetDimensions(), tgtDim); implicitG2C = MathTransforms.concatenate(step1, implicitG2C, step3); diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/NamedElement.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/NamedElement.java index 76cc09263e..baa3a5bb52 100644 --- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/NamedElement.java +++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/NamedElement.java @@ -70,7 +70,7 @@ public abstract class NamedElement { * @return a name for an object composed of the given components. */ protected static String listNames(final NamedElement[] components, final int count, final String delimiter) { - final StringJoiner joiner = new StringJoiner(delimiter); + final var joiner = new StringJoiner(delimiter); for (int i=0; i<count; i++) { joiner.add(components[i].getName()); } diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java index 543d0b5fd7..fda499dda2 100644 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java @@ -18,7 +18,6 @@ package org.apache.sis.storage.esri; import java.util.Map; import java.util.List; -import java.util.StringJoiner; import java.io.IOException; import java.nio.file.StandardOpenOption; import java.awt.image.RenderedImage; @@ -319,9 +318,7 @@ cellsize: if (value != null) { * We list all properties in a single message. */ if (!header.isEmpty()) { - final StringJoiner joiner = new StringJoiner(", "); - header.keySet().forEach(joiner::add); - listeners.warning(messageForProperty(Errors.Keys.UnexpectedProperty_2, joiner.toString())); + listeners.warning(messageForProperty(Errors.Keys.UnexpectedProperty_2, String.join(", ", header.keySet()))); } } catch (DataStoreException e) { closeOnError(e); diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/math/Vector.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/math/Vector.java index e4dce03219..e3d9f87d1d 100644 --- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/math/Vector.java +++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/math/Vector.java @@ -1604,7 +1604,7 @@ search: for (;;) { */ @Override public String toString() { - final StringJoiner buffer = new StringJoiner(", ", "[", "]"); + final var buffer = new StringJoiner(", ", "[", "]"); final int length = size(); for (int i=0; i<length; i++) { buffer.add(stringValue(i)); diff --git a/optional/src/org.apache.sis.gui/bundle/bin/sisfx b/optional/src/org.apache.sis.gui/bundle/bin/sisfx index d4ab463fd5..4c3054a447 100755 --- a/optional/src/org.apache.sis.gui/bundle/bin/sisfx +++ b/optional/src/org.apache.sis.gui/bundle/bin/sisfx @@ -89,6 +89,7 @@ shopt -u nullglob # Execute SIS with any optional JAR that the user may put in the `lib` directory. # java -splash:"$BASE_DIR/lib/logo.jpg" \ + --enable-native-access javafx.graphics \ --module-path "$PATH_TO_FX:$BASE_DIR/lib:$BASE_DIR/lib/app/org.apache.sis.gui.jar" \ -Djava.util.logging.config.class="org.apache.sis.util.logging.Initializer" \ -Djava.util.logging.config.file="$BASE_DIR/conf/logging.properties" \ diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/RecentFiles.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/RecentFiles.java index dda531c721..e1a4894eb0 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/RecentFiles.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/RecentFiles.java @@ -155,7 +155,7 @@ final class RecentFiles implements EventHandler<ActionEvent> { } while (++i < MAX_COUNT-1); System.arraycopy(allFiles, 0, allFiles, 1, i); allFiles[0] = file; - final StringJoiner s = new StringJoiner(System.lineSeparator()); + final var s = new StringJoiner(System.lineSeparator()); for (final File f : allFiles) { if (f == null) break; s.add(f.getPath()); diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/coverage/GridViewSkin.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/coverage/GridViewSkin.java index a4fceba2a4..e2e6047f8c 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/coverage/GridViewSkin.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/coverage/GridViewSkin.java @@ -475,7 +475,7 @@ final class GridViewSkin extends SkinBase<GridView> implements EventHandler<Mous /** * Resizes the given array of cells. If the array become longer, new labels are created. - * This is an helper method for {@link #layoutChildren(double, double, double, double)}. + * This is a helper method for {@link #layoutChildren(double, double, double, double)}. * * @param cells the array to resize. * @param count the desired number of elements. diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/LogViewer.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/LogViewer.java index 5fdb1e8feb..9e4612ab17 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/LogViewer.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/LogViewer.java @@ -21,7 +21,6 @@ import java.util.Date; import java.util.Map; import java.util.HashMap; import java.util.ArrayList; -import java.util.StringJoiner; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.LogRecord; @@ -603,11 +602,7 @@ public class LogViewer extends Widget { path.add(item.getValue()); item = item.getParent(); } - final var joiner = new StringJoiner("."); - for (int i = path.size(); --i >= 0;) { - joiner.add(path.get(i)); - } - return joiner.toString(); + return String.join(".", path.reversed()); }); dialog.setResizable(true); final DialogPane pane = dialog.getDialogPane(); diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java index c92f390c2c..263afc1df2 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/IdentificationInfo.java @@ -290,7 +290,7 @@ final class IdentificationInfo extends Section<Identification> { * is formatted as "codespace:code" or only "code" if there is no codespace. */ if (citation != null) { - final StringJoiner buffer = new StringJoiner(", "); + final var buffer = new StringJoiner(", "); for (final Identifier id : citation.getIdentifiers()) { buffer.add(IdentifiedObjects.toString(id)); } diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataSummary.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataSummary.java index 49dec24f81..de8c591e6c 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataSummary.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/metadata/MetadataSummary.java @@ -353,7 +353,7 @@ public class MetadataSummary extends Widget { * Returns all code lists in a comma-separated list. */ final String string(final Collection<? extends ControlledVocabulary> codes) { - final StringJoiner buffer = new StringJoiner(", "); + final var buffer = new StringJoiner(", "); for (final ControlledVocabulary c : codes) { final String text = string(Types.getCodeTitle(c)); if (text != null) buffer.add(text); diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/CRSChooser.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/CRSChooser.java index 5d01defd3e..9b49ea947b 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/CRSChooser.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/CRSChooser.java @@ -56,8 +56,8 @@ import org.opengis.referencing.crs.CRSAuthorityFactory; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.Conversion; import org.opengis.referencing.operation.OperationMethod; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.IdentifiedObjects; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.gui.internal.BackgroundThreads; import org.apache.sis.gui.internal.ExceptionReporter; import org.apache.sis.gui.internal.IdentityValueFactory; @@ -387,7 +387,7 @@ public class CRSChooser extends Dialog<CoordinateReferenceSystem> { expected = 0; } String text = Vocabulary.forLocale(locale).getString(key); - final int dimension = ReferencingUtilities.getDimension(crs); + final int dimension = CRS.getDimensionOrZero(crs); final boolean addDimension = (dimension != expected && expected != 0); final boolean isProjection = (crs instanceof DerivedCRS); if (addDimension | isProjection) { diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/MenuSync.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/MenuSync.java index 5bcb63d1f6..409812c2c7 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/MenuSync.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/MenuSync.java @@ -33,12 +33,12 @@ import javafx.scene.control.ToggleGroup; import org.opengis.referencing.ReferenceSystem; import org.opengis.referencing.crs.DerivedCRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.IdentifiedObjects; -import org.apache.sis.referencing.internal.shared.ReferencingUtilities; -import org.apache.sis.gui.internal.GUIUtilities; -import org.apache.sis.gui.internal.Resources; import org.apache.sis.referencing.gazetteer.GazetteerFactory; import org.apache.sis.referencing.gazetteer.GazetteerException; +import org.apache.sis.gui.internal.GUIUtilities; +import org.apache.sis.gui.internal.Resources; import org.apache.sis.util.ComparisonMode; import org.apache.sis.util.Utilities; @@ -166,7 +166,7 @@ final class MenuSync extends SimpleObjectProperty<ReferenceSystem> implements Ev private void initialize() { for (final ReferenceSystem system : recentSystems) { if (system instanceof CoordinateReferenceSystem) { - if (ReferencingUtilities.getDimension((CoordinateReferenceSystem) system) == BIDIMENSIONAL) { + if (CRS.getDimensionOrZero((CoordinateReferenceSystem) system) == BIDIMENSIONAL) { set(system); break; }
