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 502473dc98 Do not use the original coordinate system as the starting point for all `AxesConvention`. This is a modification of the cache sharing policy introduced in the previous commit. The previous policy was causing confusion when two `forConvention(…)` calls are chained and the first call was, for example, removing the vertical axis. 502473dc98 is described below commit 502473dc98e52b39756982b7dddb63920c29558b Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Mon Jan 15 12:23:30 2024 +0100 Do not use the original coordinate system as the starting point for all `AxesConvention`. This is a modification of the cache sharing policy introduced in the previous commit. The previous policy was causing confusion when two `forConvention(…)` calls are chained and the first call was, for example, removing the vertical axis. --- .../apache/sis/referencing/crs/AbstractCRS.java | 61 +++++++++-------- .../sis/referencing/crs/AbstractDerivedCRS.java | 16 +++-- .../sis/referencing/crs/DefaultCompoundCRS.java | 9 +-- .../sis/referencing/crs/DefaultDerivedCRS.java | 34 +++++----- .../sis/referencing/crs/DefaultEngineeringCRS.java | 10 +-- .../sis/referencing/crs/DefaultGeocentricCRS.java | 10 +-- .../sis/referencing/crs/DefaultGeodeticCRS.java | 8 +-- .../sis/referencing/crs/DefaultGeographicCRS.java | 10 +-- .../sis/referencing/crs/DefaultImageCRS.java | 17 +++-- .../sis/referencing/crs/DefaultParametricCRS.java | 16 ++--- .../sis/referencing/crs/DefaultProjectedCRS.java | 14 ++-- .../sis/referencing/crs/DefaultTemporalCRS.java | 18 +++-- .../sis/referencing/crs/DefaultVerticalCRS.java | 16 ++--- .../org/apache/sis/referencing/cs/AbstractCS.java | 77 ++++++++++++++++------ .../apache/sis/referencing/cs/AxesConvention.java | 8 +-- .../apache/sis/referencing/cs/DefaultAffineCS.java | 12 ++-- .../sis/referencing/cs/DefaultCartesianCS.java | 12 ++-- .../sis/referencing/cs/DefaultCompoundCS.java | 23 ++++--- .../sis/referencing/cs/DefaultCylindricalCS.java | 12 ++-- .../sis/referencing/cs/DefaultEllipsoidalCS.java | 12 ++-- .../apache/sis/referencing/cs/DefaultLinearCS.java | 12 ++-- .../sis/referencing/cs/DefaultParametricCS.java | 12 ++-- .../apache/sis/referencing/cs/DefaultPolarCS.java | 12 ++-- .../sis/referencing/cs/DefaultSphericalCS.java | 12 ++-- .../apache/sis/referencing/cs/DefaultTimeCS.java | 12 ++-- .../sis/referencing/cs/DefaultUserDefinedCS.java | 12 ++-- .../sis/referencing/cs/DefaultVerticalCS.java | 12 ++-- .../org/apache/sis/referencing/cs/Normalizer.java | 11 ++-- 28 files changed, 249 insertions(+), 241 deletions(-) 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 0dab42d7cc..3343469505 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 @@ -32,16 +32,16 @@ import org.opengis.referencing.crs.SingleCRS; import org.opengis.referencing.crs.GeneralDerivedCRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.referencing.AbstractReferenceSystem; +import org.apache.sis.referencing.cs.AbstractCS; +import org.apache.sis.referencing.cs.AxesConvention; +import org.apache.sis.referencing.util.WKTUtilities; import org.apache.sis.referencing.util.ReferencingUtilities; import org.apache.sis.metadata.internal.ImplementationHelper; -import org.apache.sis.referencing.cs.AxesConvention; -import org.apache.sis.referencing.cs.AbstractCS; -import org.apache.sis.util.ComparisonMode; import org.apache.sis.io.wkt.Convention; import org.apache.sis.io.wkt.Formatter; -import static org.apache.sis.util.Utilities.deepEquals; -import static org.apache.sis.util.ArgumentChecks.ensureNonNull; -import static org.apache.sis.referencing.util.WKTUtilities.toFormattable; +import org.apache.sis.util.Utilities; +import org.apache.sis.util.ArgumentChecks; +import org.apache.sis.util.ComparisonMode; import org.apache.sis.util.resources.Errors; // Specific to the geoapi-3.1 and geoapi-4.0 branches: @@ -128,10 +128,13 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe /** * Creates the value to assign to the {@link #forConvention} map by constructors. + * + * @param original the coordinate system to declare as the original one. + * @return map to assign to the {@link #forConvention} field. */ - private EnumMap<AxesConvention,AbstractCRS> forConvention() { + private static EnumMap<AxesConvention,AbstractCRS> forConvention(final AbstractCRS original) { var m = new EnumMap<AxesConvention,AbstractCRS>(AxesConvention.class); - m.put(AxesConvention.ORIGINAL, this); + m.put(AxesConvention.ORIGINAL, original); return m; } @@ -176,9 +179,9 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe @SuppressWarnings("this-escape") public AbstractCRS(final Map<String,?> properties, final CoordinateSystem cs) { super(properties); - ensureNonNull("cs", cs); + ArgumentChecks.ensureNonNull("cs", cs); coordinateSystem = cs; - forConvention = forConvention(); + forConvention = forConvention(this); } /** @@ -188,12 +191,12 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe * @param id new identifier for this CRS, or {@code null} if none. * @param cs coordinate system with new axis order or units of measurement. * - * @see #createSameType(CoordinateSystem) + * @see #createSameType(AbstractCS) */ - AbstractCRS(final AbstractCRS original, final Identifier id, final CoordinateSystem cs) { + AbstractCRS(final AbstractCRS original, final Identifier id, final AbstractCS cs) { super(ReferencingUtilities.getPropertiesWithoutIdentifiers(original, (id == null) ? null : Map.of(IDENTIFIERS_KEY, id))); coordinateSystem = cs; - forConvention = original.forConvention; + forConvention = cs.hasSameAxes(original.coordinateSystem) ? original.forConvention : forConvention(original); } /** @@ -211,7 +214,7 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe protected AbstractCRS(final CoordinateReferenceSystem crs) { super(crs); coordinateSystem = crs.getCoordinateSystem(); - forConvention = forConvention(); + forConvention = forConvention(this); } /** @@ -335,19 +338,17 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe * @see AbstractCS#forConvention(AxesConvention) */ public AbstractCRS forConvention(final AxesConvention convention) { - ensureNonNull("convention", convention); + ArgumentChecks.ensureNonNull("convention", convention); synchronized (forConvention) { AbstractCRS crs = forConvention.get(convention); if (crs == null) { - final AbstractCRS original = forConvention.get(AxesConvention.ORIGINAL); - final AbstractCS cs = AbstractCS.castOrCopy(original.coordinateSystem); + final AbstractCS cs = AbstractCS.castOrCopy(coordinateSystem); final AbstractCS candidate = cs.forConvention(convention); if (candidate.equals(cs, ComparisonMode.IGNORE_METADATA)) { - crs = original; - } else if (original != this && candidate.equals(coordinateSystem, ComparisonMode.IGNORE_METADATA)) { crs = this; } else try { crs = createSameType(candidate); + crs.getCoordinateSystem(); // Throws ClassCastException if the CS type is invalid. } catch (ClassCastException e) { throw new IllegalArgumentException(Errors.format(Errors.Keys.CanNotCompute_1, convention), e); } @@ -363,9 +364,8 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe * * @param cs the coordinate system with new axes. * @return new CRS of the same type and datum than this CRS, but with the given axes. - * @throws ClassCastException if the type of the given coordinate system is invalid. */ - AbstractCRS createSameType(final CoordinateSystem cs) { + AbstractCRS createSameType(final AbstractCS cs) { return new AbstractCRS(this, null, cs); } @@ -393,8 +393,8 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe Objects.equals(coordinateSystem, that.coordinateSystem); } default: { - return deepEquals(datum, (object instanceof SingleCRS) ? ((SingleCRS) object).getDatum() : null, mode) && - deepEquals(getCoordinateSystem(), ((CoordinateReferenceSystem) object).getCoordinateSystem(), mode); + return Utilities.deepEquals(datum, (object instanceof SingleCRS) ? ((SingleCRS) object).getDatum() : null, mode) && + Utilities.deepEquals(getCoordinateSystem(), ((CoordinateReferenceSystem) object).getCoordinateSystem(), mode); } } } @@ -440,7 +440,7 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe protected String formatTo(final Formatter formatter) { final String keyword = super.formatTo(formatter); formatter.newLine(); - formatter.append(toFormattable(getDatum())); + formatter.append(WKTUtilities.toFormattable(getDatum())); formatter.newLine(); final Convention convention = formatter.getConvention(); final boolean isWKT1 = convention.majorVersion() == 1; @@ -494,19 +494,22 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe formatter.setInvalidWKT(this, null); } } else { - formatter.append(toFormattable(cs)); // WKT2 only, since the concept of CoordinateSystem was not explicit in WKT 1. + // WKT2 only, since the concept of CoordinateSystem was not explicit in WKT 1. + formatter.append(WKTUtilities.toFormattable(cs)); formatter.indent(+1); } if (!isWKT1 || formatter.getConvention() != Convention.WKT1_IGNORE_AXES) { - if (cs != null) { // Should never be null, except sometimes temporarily during construction. + // Should never be null, except sometimes temporarily during construction. + if (cs != null) { final int dimension = cs.getDimension(); for (int i=0; i<dimension; i++) { formatter.newLine(); - formatter.append(toFormattable(cs.getAxis(i))); + formatter.append(WKTUtilities.toFormattable(cs.getAxis(i))); } } } - if (!isWKT1) { // WKT 2 writes unit after axes, while WKT 1 wrote them before axes. + // WKT 2 writes unit after axes, while WKT 1 wrote them before axes. + if (!isWKT1) { formatter.newLine(); formatter.append(unit); formatter.indent(-1); @@ -538,7 +541,7 @@ public class AbstractCRS extends AbstractReferenceSystem implements CoordinateRe */ AbstractCRS() { super(org.apache.sis.referencing.util.NilReferencingObject.INSTANCE); - forConvention = forConvention(); + forConvention = forConvention(this); /* * The coordinate system is mandatory for SIS working. We do not verify its presence here * because the verification would have to be done in an `afterMarshal(…)` method and throwing diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractDerivedCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractDerivedCRS.java index 83c3e4942f..4a33694332 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractDerivedCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractDerivedCRS.java @@ -34,16 +34,17 @@ import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.MathTransformFactory; import org.opengis.geometry.MismatchedDimensionException; import org.apache.sis.referencing.GeodeticException; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.referencing.operation.DefaultConversion; -import org.apache.sis.xml.bind.referencing.CC_Conversion; import org.apache.sis.referencing.util.ReferencingFactoryContainer; +import org.apache.sis.xml.bind.referencing.CC_Conversion; import org.apache.sis.metadata.internal.ImplementationHelper; import org.apache.sis.metadata.internal.Identifiers; import org.apache.sis.system.Semaphores; +import org.apache.sis.util.Utilities; import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.ComparisonMode; import org.apache.sis.util.resources.Errors; -import static org.apache.sis.util.Utilities.deepEquals; /** @@ -108,9 +109,9 @@ abstract class AbstractDerivedCRS<C extends Conversion> extends AbstractCRS impl /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - AbstractDerivedCRS(final AbstractDerivedCRS<C> original, final CoordinateSystem derivedCS) { + AbstractDerivedCRS(final AbstractDerivedCRS<C> original, final AbstractCS derivedCS) { super(original, null, derivedCS); final Conversion conversion = original.conversionFromBase; conversionFromBase = createConversionFromBase(null, (SingleCRS) conversion.getSourceCRS(), conversion); @@ -237,9 +238,10 @@ abstract class AbstractDerivedCRS<C extends Conversion> extends AbstractCRS impl if (Semaphores.queryAndSet(Semaphores.CONVERSION_AND_CRS)) { return true; } else try { - return deepEquals(strict ? conversionFromBase : getConversionFromBase(), - strict ? ((AbstractDerivedCRS) object).conversionFromBase - : ((GeneralDerivedCRS) object).getConversionFromBase(), mode); + return Utilities.deepEquals( + strict ? conversionFromBase : getConversionFromBase(), + strict ? ((AbstractDerivedCRS) object).conversionFromBase + : ((GeneralDerivedCRS) object).getConversionFromBase(), mode); } finally { Semaphores.clear(Semaphores.CONVERSION_AND_CRS); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultCompoundCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultCompoundCRS.java index d3b4d4945b..631be75678 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultCompoundCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultCompoundCRS.java @@ -37,6 +37,7 @@ import org.opengis.referencing.crs.TemporalCRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.cs.CoordinateSystem; import org.apache.sis.referencing.AbstractReferenceSystem; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.referencing.cs.AxesConvention; import org.apache.sis.referencing.cs.DefaultCompoundCS; import org.apache.sis.referencing.util.WKTKeywords; @@ -242,7 +243,7 @@ public class DefaultCompoundCRS extends AbstractCRS implements CompoundCRS { * @param components the CRS components, usually singles but not necessarily. * @return the coordinate system for the given components. */ - private static CoordinateSystem createCoordinateSystem(final Map<String,?> properties, + private static AbstractCS createCoordinateSystem(final Map<String,?> properties, final CoordinateReferenceSystem[] components) { ArgumentChecks.ensureNonNull("components", components); @@ -495,10 +496,10 @@ public class DefaultCompoundCRS extends AbstractCRS implements CompoundCRS { synchronized (forConvention) { DefaultCompoundCRS crs = (DefaultCompoundCRS) forConvention.get(convention); if (crs == null) { - crs = (DefaultCompoundCRS) forConvention.get(AxesConvention.ORIGINAL); + crs = this; boolean changed = false; final boolean reorderCRS = convention.ordinal() <= AxesConvention.DISPLAY_ORIENTED.ordinal(); - final List<? extends CoordinateReferenceSystem> elements = reorderCRS ? crs.singles : crs.components; + final List<? extends CoordinateReferenceSystem> elements = reorderCRS ? singles : components; final CoordinateReferenceSystem[] newComponents = new CoordinateReferenceSystem[elements.size()]; for (int i=0; i<newComponents.length; i++) { CoordinateReferenceSystem component = elements.get(i); @@ -525,7 +526,7 @@ public class DefaultCompoundCRS extends AbstractCRS implements CompoundCRS { * Should never be invoked since we override {@link AbstractCRS#forConvention(AxesConvention)}. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { + final AbstractCRS createSameType(final AbstractCS cs) { throw new AssertionError(); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultDerivedCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultDerivedCRS.java index 1252bb3b01..250b2eb6c6 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultDerivedCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultDerivedCRS.java @@ -45,6 +45,7 @@ import org.opengis.referencing.operation.NoninvertibleTransformException; import org.opengis.geometry.MismatchedDimensionException; import org.apache.sis.referencing.AbstractIdentifiedObject; import org.apache.sis.referencing.operation.DefaultConversion; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.referencing.cs.AxesConvention; import org.apache.sis.referencing.cs.CoordinateSystems; import org.apache.sis.xml.bind.referencing.SC_SingleCRS; @@ -173,9 +174,9 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - DefaultDerivedCRS(final DefaultDerivedCRS original, final CoordinateSystem derivedCS) { + DefaultDerivedCRS(final DefaultDerivedCRS original, final AbstractCS derivedCS) { super(original, derivedCS); } @@ -479,10 +480,9 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements * * @param cs the coordinate system with new axes. * @return new CRS of the same type and datum than this CRS, but with the given axes. - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - AbstractCRS createSameType(final CoordinateSystem derivedCS) { + AbstractCRS createSameType(final AbstractCS derivedCS) { return new DefaultDerivedCRS(this, derivedCS); } @@ -639,7 +639,7 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Creates a new CRS derived from the specified one, but with different axis order or unit. */ - private Geodetic(final Geodetic original, final CoordinateSystem derivedCS) { + private Geodetic(final Geodetic original, final AbstractCS derivedCS) { super(original, derivedCS); } @@ -661,7 +661,7 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Returns a coordinate reference system of the same type as this CRS but with different axes. */ - @Override AbstractCRS createSameType(final CoordinateSystem derivedCS) { + @Override AbstractCRS createSameType(final AbstractCS derivedCS) { return new Geodetic(this, derivedCS); } @@ -690,7 +690,7 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Creates a new CRS derived from the specified one, but with different axis order or unit. */ - private Vertical(final Vertical original, final VerticalCS derivedCS) { + private Vertical(final Vertical original, final AbstractCS derivedCS) { super(original, derivedCS); } @@ -717,8 +717,8 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Returns a coordinate reference system of the same type as this CRS but with different axes. */ - @Override AbstractCRS createSameType(final CoordinateSystem derivedCS) { - return new Vertical(this, (VerticalCS) derivedCS); + @Override AbstractCRS createSameType(final AbstractCS derivedCS) { + return new Vertical(this, derivedCS); } /** Returns the WKT keyword for this derived CRS type. */ @@ -746,7 +746,7 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Creates a new CRS derived from the specified one, but with different axis order or unit. */ - private Temporal(final Temporal original, final TimeCS derivedCS) { + private Temporal(final Temporal original, final AbstractCS derivedCS) { super(original, derivedCS); } @@ -773,8 +773,8 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Returns a coordinate reference system of the same type as this CRS but with different axes. */ - @Override AbstractCRS createSameType(final CoordinateSystem derivedCS) { - return new Temporal(this, (TimeCS) derivedCS); + @Override AbstractCRS createSameType(final AbstractCS derivedCS) { + return new Temporal(this, derivedCS); } /** Returns the WKT keyword for this derived CRS type. */ @@ -802,7 +802,7 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Creates a new CRS derived from the specified one, but with different axis order or unit. */ - private Parametric(final Parametric original, final ParametricCS derivedCS) { + private Parametric(final Parametric original, final AbstractCS derivedCS) { super(original, derivedCS); } @@ -829,8 +829,8 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Returns a coordinate reference system of the same type as this CRS but with different axes. */ - @Override AbstractCRS createSameType(final CoordinateSystem derivedCS) { - return new Parametric(this, (ParametricCS) derivedCS); + @Override AbstractCRS createSameType(final AbstractCS derivedCS) { + return new Parametric(this, derivedCS); } /** Returns the WKT keyword for this derived CRS type. */ @@ -861,7 +861,7 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Creates a new CRS derived from the specified one, but with different axis order or unit. */ - private Engineering(final Engineering original, final CoordinateSystem derivedCS) { + private Engineering(final Engineering original, final AbstractCS derivedCS) { super(original, derivedCS); } @@ -883,7 +883,7 @@ public class DefaultDerivedCRS extends AbstractDerivedCRS<Conversion> implements } /** Returns a coordinate reference system of the same type as this CRS but with different axes. */ - @Override AbstractCRS createSameType(final CoordinateSystem derivedCS) { + @Override AbstractCRS createSameType(final AbstractCS derivedCS) { return new Engineering(this, derivedCS); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java index 3467f5b3d9..1ce8d59bbf 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java @@ -30,7 +30,7 @@ import org.apache.sis.metadata.internal.ImplementationHelper; import org.apache.sis.referencing.util.WKTKeywords; import org.apache.sis.xml.bind.referencing.CS_CoordinateSystem; import org.apache.sis.io.wkt.Formatter; -import static org.apache.sis.util.ArgumentChecks.ensureNonNull; +import org.apache.sis.util.ArgumentChecks; /** @@ -142,15 +142,15 @@ public class DefaultEngineeringCRS extends AbstractCRS implements EngineeringCRS final CoordinateSystem cs) { super(properties, cs); - ensureNonNull("datum", datum); this.datum = datum; + ArgumentChecks.ensureNonNull("datum", datum); } /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - private DefaultEngineeringCRS(final DefaultEngineeringCRS original, final CoordinateSystem cs) { + private DefaultEngineeringCRS(final DefaultEngineeringCRS original, final AbstractCS cs) { super(original, null, cs); datum = original.datum; } @@ -230,7 +230,7 @@ public class DefaultEngineeringCRS extends AbstractCRS implements EngineeringCRS * @return new CRS of the same type and datum than this CRS, but with the given axes. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { + final AbstractCRS createSameType(final AbstractCS cs) { return new DefaultEngineeringCRS(this, cs); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java index afa8eacab4..57b4a45bb6 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java @@ -20,12 +20,12 @@ import java.util.Map; import jakarta.xml.bind.annotation.XmlTransient; import org.opengis.referencing.cs.CartesianCS; import org.opengis.referencing.cs.SphericalCS; -import org.opengis.referencing.cs.CoordinateSystem; import org.opengis.referencing.crs.GeocentricCRS; import org.opengis.referencing.datum.GeodeticDatum; -import org.apache.sis.io.wkt.Formatter; import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.cs.AxesConvention; +import org.apache.sis.referencing.cs.AbstractCS; +import org.apache.sis.io.wkt.Formatter; /** @@ -150,10 +150,10 @@ public class DefaultGeocentricCRS extends DefaultGeodeticCRS implements Geocentr /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. * This constructor does not verify the coordinate system type. */ - private DefaultGeocentricCRS(final DefaultGeocentricCRS original, final CoordinateSystem cs) { + private DefaultGeocentricCRS(final DefaultGeocentricCRS original, final AbstractCS cs) { super(original, null, cs); } @@ -231,7 +231,7 @@ public class DefaultGeocentricCRS extends DefaultGeodeticCRS implements Geocentr * @return new CRS of the same type and datum than this CRS, but with the given axes. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { + final AbstractCRS createSameType(final AbstractCS cs) { return new DefaultGeocentricCRS(this, cs); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java index d87eac98bf..450449f0d9 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeodeticCRS.java @@ -33,6 +33,7 @@ import org.opengis.referencing.datum.GeodeticDatum; import org.opengis.referencing.datum.PrimeMeridian; import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.CRS; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.referencing.internal.Legacy; import org.apache.sis.referencing.util.AxisDirections; import org.apache.sis.referencing.util.WKTKeywords; @@ -109,9 +110,9 @@ class DefaultGeodeticCRS extends AbstractCRS implements GeodeticCRS { // If made /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - DefaultGeodeticCRS(final DefaultGeodeticCRS original, final Identifier id, final CoordinateSystem cs) { + DefaultGeodeticCRS(final DefaultGeodeticCRS original, final Identifier id, final AbstractCS cs) { super(original, id, cs); datum = original.datum; } @@ -164,10 +165,9 @@ class DefaultGeodeticCRS extends AbstractCRS implements GeodeticCRS { // If made * * @param cs the coordinate system with new axes. * @return new CRS of the same type and datum than this CRS, but with the given axes. - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - AbstractCRS createSameType(final CoordinateSystem cs) { + AbstractCRS createSameType(final AbstractCS cs) { return new DefaultGeodeticCRS(this, null, cs); } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeographicCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeographicCRS.java index 0d3d037918..6e256f1900 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeographicCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultGeographicCRS.java @@ -29,6 +29,7 @@ import org.apache.sis.metadata.iso.citation.Citations; import org.apache.sis.referencing.ImmutableIdentifier; import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.cs.AxesConvention; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.io.wkt.Formatter; import org.apache.sis.measure.Longitude; import org.apache.sis.util.resources.Errors; @@ -158,9 +159,9 @@ public class DefaultGeographicCRS extends DefaultGeodeticCRS implements Geograph /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - private DefaultGeographicCRS(final DefaultGeographicCRS original, final Identifier id, final EllipsoidalCS cs) { + private DefaultGeographicCRS(final DefaultGeographicCRS original, final Identifier id, final AbstractCS cs) { super(original, id, cs); } @@ -252,10 +253,9 @@ public class DefaultGeographicCRS extends DefaultGeodeticCRS implements Geograph * * @param cs the coordinate system with new axes. * @return new CRS of the same type and datum than this CRS, but with the given axes. - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { + final AbstractCRS createSameType(final AbstractCS cs) { Identifier id = null; final CoordinateSystemAxis axis = cs.getAxis(0); if (axis.getMinimumValue() == Longitude.MIN_VALUE && @@ -273,7 +273,7 @@ public class DefaultGeographicCRS extends DefaultGeodeticCRS implements Geograph } } } - return new DefaultGeographicCRS(this, id, (EllipsoidalCS) cs); + return new DefaultGeographicCRS(this, id, cs); } /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultImageCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultImageCRS.java index 4d880b390f..0cdc10d827 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultImageCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultImageCRS.java @@ -20,17 +20,17 @@ import java.util.Map; import jakarta.xml.bind.annotation.XmlType; import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlRootElement; -import org.opengis.referencing.cs.CoordinateSystem; import org.opengis.referencing.cs.AffineCS; import org.opengis.referencing.cs.CartesianCS; import org.opengis.referencing.crs.ImageCRS; import org.opengis.referencing.datum.ImageDatum; import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.util.WKTKeywords; -import org.apache.sis.metadata.internal.ImplementationHelper; import org.apache.sis.referencing.cs.AxesConvention; +import org.apache.sis.referencing.cs.AbstractCS; +import org.apache.sis.metadata.internal.ImplementationHelper; import org.apache.sis.io.wkt.Formatter; -import static org.apache.sis.util.ArgumentChecks.ensureNonNull; +import org.apache.sis.util.ArgumentChecks; /** @@ -127,15 +127,15 @@ public class DefaultImageCRS extends AbstractCRS implements ImageCRS { final AffineCS cs) { super(properties, cs); - ensureNonNull("datum", datum); this.datum = datum; + ArgumentChecks.ensureNonNull("datum", datum); } /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - private DefaultImageCRS(final DefaultImageCRS original, final AffineCS cs) { + private DefaultImageCRS(final DefaultImageCRS original, final AbstractCS cs) { super(original, null, cs); datum = original.datum; } @@ -223,11 +223,10 @@ public class DefaultImageCRS extends AbstractCRS implements ImageCRS { * * @param cs the coordinate system with new axes. * @return new CRS of the same type and datum than this CRS, but with the given axes. - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { - return new DefaultImageCRS(this, (AffineCS) cs); + final AbstractCRS createSameType(final AbstractCS cs) { + return new DefaultImageCRS(this, cs); } /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultParametricCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultParametricCRS.java index c53b99bd4a..b494749046 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultParametricCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultParametricCRS.java @@ -20,13 +20,12 @@ import java.util.Map; import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.XmlType; -import org.opengis.referencing.cs.CoordinateSystem; import org.apache.sis.metadata.internal.ImplementationHelper; import org.apache.sis.referencing.util.WKTKeywords; import org.apache.sis.referencing.cs.AxesConvention; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.io.wkt.Formatter; -import static org.apache.sis.util.ArgumentChecks.ensureNonNull; -import static org.apache.sis.referencing.crs.AbstractCRS.isBaseCRS; +import org.apache.sis.util.ArgumentChecks; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.referencing.cs.ParametricCS; @@ -127,15 +126,15 @@ public class DefaultParametricCRS extends AbstractCRS implements ParametricCRS { final ParametricCS cs) { super(properties, cs); - ensureNonNull("datum", datum); this.datum = datum; + ArgumentChecks.ensureNonNull("datum", datum); } /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - private DefaultParametricCRS(final DefaultParametricCRS original, final ParametricCS cs) { + private DefaultParametricCRS(final DefaultParametricCRS original, final AbstractCS cs) { super(original, null, cs); datum = original.datum; } @@ -224,11 +223,10 @@ public class DefaultParametricCRS extends AbstractCRS implements ParametricCRS { * * @param cs the coordinate system with new axes. * @return new CRS of the same type and datum than this CRS, but with the given axes. - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { - return new DefaultParametricCRS(this, (ParametricCS) cs); + final AbstractCRS createSameType(final AbstractCS cs) { + return new DefaultParametricCRS(this, cs); } /** 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 870c17a9ae..8b946ba809 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 @@ -31,6 +31,7 @@ import org.opengis.referencing.operation.Conversion; import org.opengis.referencing.operation.Projection; import org.opengis.geometry.MismatchedDimensionException; import org.apache.sis.referencing.cs.AxesConvention; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.referencing.util.ReferencingUtilities; import org.apache.sis.referencing.util.AxisDirections; import org.apache.sis.referencing.util.WKTKeywords; @@ -38,7 +39,6 @@ import org.apache.sis.referencing.util.WKTUtilities; import org.apache.sis.io.wkt.Convention; import org.apache.sis.io.wkt.Formatter; import org.apache.sis.util.ComparisonMode; -import static org.apache.sis.referencing.util.WKTUtilities.toFormattable; /** @@ -137,9 +137,9 @@ public class DefaultProjectedCRS extends AbstractDerivedCRS<Projection> implemen /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - private DefaultProjectedCRS(final DefaultProjectedCRS original, final CartesianCS derivedCS) { + private DefaultProjectedCRS(final DefaultProjectedCRS original, final AbstractCS derivedCS) { super(original, derivedCS); } @@ -269,12 +269,10 @@ public class DefaultProjectedCRS extends AbstractDerivedCRS<Projection> implemen /** * Returns a coordinate reference system of the same type as this CRS but with different axes. - * - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { - return new DefaultProjectedCRS(this, (CartesianCS) cs); + final AbstractCRS createSameType(final AbstractCS cs) { + return new DefaultProjectedCRS(this, cs); } /** @@ -388,7 +386,7 @@ public class DefaultProjectedCRS extends AbstractDerivedCRS<Projection> implemen * format is part of an enclosing ProjectedCRS and will adapt accordingly. */ formatter.newLine(); - formatter.append(toFormattable(baseCRS)); + formatter.append(WKTUtilities.toFormattable(baseCRS)); formatter.newLine(); final ExplicitParameters p = new ExplicitParameters(this, WKTKeywords.Conversion); final boolean isBaseCRS; diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultTemporalCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultTemporalCRS.java index 3be96cf380..0a027fb604 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultTemporalCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultTemporalCRS.java @@ -28,18 +28,18 @@ import jakarta.xml.bind.annotation.XmlRootElement; import javax.measure.UnitConverter; import javax.measure.Unit; import javax.measure.quantity.Time; -import org.opengis.referencing.cs.CoordinateSystem; import org.opengis.referencing.cs.TimeCS; import org.opengis.referencing.crs.TemporalCRS; import org.opengis.referencing.datum.TemporalDatum; import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.cs.AxesConvention; -import org.apache.sis.metadata.internal.ImplementationHelper; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.referencing.util.WKTKeywords; +import org.apache.sis.metadata.internal.ImplementationHelper; import org.apache.sis.io.wkt.Formatter; import org.apache.sis.measure.Units; import org.apache.sis.math.Fraction; -import static org.apache.sis.util.ArgumentChecks.ensureNonNull; +import org.apache.sis.util.ArgumentChecks; import static org.apache.sis.util.internal.StandardDateFormat.NANOS_PER_SECOND; import static org.apache.sis.util.internal.StandardDateFormat.MILLIS_PER_SECOND; @@ -158,16 +158,16 @@ public class DefaultTemporalCRS extends AbstractCRS implements TemporalCRS { final TimeCS cs) { super(properties, cs); - ensureNonNull("datum", datum); this.datum = datum; + ArgumentChecks.ensureNonNull("datum", datum); initializeConverter(); } /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - private DefaultTemporalCRS(final DefaultTemporalCRS original, final TimeCS cs) { + private DefaultTemporalCRS(final DefaultTemporalCRS original, final AbstractCS cs) { super(original, null, cs); datum = original.datum; initializeConverter(); @@ -308,12 +308,10 @@ public class DefaultTemporalCRS extends AbstractCRS implements TemporalCRS { /** * Returns a coordinate reference system of the same type as this CRS but with different axes. - * - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { - return new DefaultTemporalCRS(this, (TimeCS) cs); + final AbstractCRS createSameType(final AbstractCS cs) { + return new DefaultTemporalCRS(this, cs); } /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultVerticalCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultVerticalCRS.java index 5554f4e16c..38ecdbd588 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultVerticalCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultVerticalCRS.java @@ -20,16 +20,16 @@ import java.util.Map; import jakarta.xml.bind.annotation.XmlType; import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlRootElement; -import org.opengis.referencing.cs.CoordinateSystem; import org.opengis.referencing.cs.VerticalCS; import org.opengis.referencing.crs.VerticalCRS; import org.opengis.referencing.datum.VerticalDatum; import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.cs.AxesConvention; +import org.apache.sis.referencing.cs.AbstractCS; import org.apache.sis.referencing.util.WKTKeywords; import org.apache.sis.metadata.internal.ImplementationHelper; import org.apache.sis.io.wkt.Formatter; -import static org.apache.sis.util.ArgumentChecks.ensureNonNull; +import org.apache.sis.util.ArgumentChecks; /** @@ -125,15 +125,15 @@ public class DefaultVerticalCRS extends AbstractCRS implements VerticalCRS { final VerticalCS cs) { super(properties, cs); - ensureNonNull("datum", datum); this.datum = datum; + ArgumentChecks.ensureNonNull("datum", datum); } /** * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(CoordinateSystem)} method only. + * This is for implementing the {@link #createSameType(AbstractCS)} method only. */ - private DefaultVerticalCRS(final DefaultVerticalCRS original, final VerticalCS cs) { + private DefaultVerticalCRS(final DefaultVerticalCRS original, final AbstractCS cs) { super(original, null, cs); datum = original.datum; } @@ -219,12 +219,10 @@ public class DefaultVerticalCRS extends AbstractCRS implements VerticalCRS { /** * Returns a coordinate reference system of the same type as this CRS but with different axes. - * - * @throws ClassCastException if the type of the given coordinate system is invalid. */ @Override - final AbstractCRS createSameType(final CoordinateSystem cs) { - return new DefaultVerticalCRS(this, (VerticalCS) cs); + final AbstractCRS createSameType(final AbstractCS cs) { + return new DefaultVerticalCRS(this, cs); } /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AbstractCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AbstractCS.java index dd4d8d06ca..cb1cc73f1f 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AbstractCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AbstractCS.java @@ -137,10 +137,13 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy /** * Creates the value to assign to the {@link #forConvention} map by constructors. + * + * @param original the coordinate system to declare as the original one. + * @return map to assign to the {@link #forConvention} field. */ - private EnumMap<AxesConvention,AbstractCS> forConvention() { + private static EnumMap<AxesConvention,AbstractCS> forConvention(final AbstractCS original) { var m = new EnumMap<AxesConvention,AbstractCS>(AxesConvention.class); - m.put(AxesConvention.ORIGINAL, this); + m.put(AxesConvention.ORIGINAL, original); return m; } @@ -185,7 +188,7 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy ensureNonNull("axes", axes); this.axes = axes.clone(); validate(properties); - forConvention = forConvention(); + forConvention = forConvention(this); } /** @@ -266,17 +269,16 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy * @param original the original coordinate system from which to derive a new one. * @param name name of the new coordinate system, or {@code null} to inherit. * @param axes the new axes. This array is not cloned. - * @param share whether the new CS should use a cache shared with the original CS. * @throws IllegalArgumentException if an axis has illegal unit or direction. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - @SuppressWarnings({"this-escape", "OverridableMethodCallInConstructor"}) - AbstractCS(final AbstractCS original, final String name, final CoordinateSystemAxis[] axes, final boolean share) { + @SuppressWarnings("OverridableMethodCallInConstructor") + AbstractCS(final AbstractCS original, final String name, final CoordinateSystemAxis[] axes) { super(original.getPropertiesWithoutIdentifiers(name)); this.axes = axes; validate(null); - forConvention = share ? original.forConvention : forConvention(); + forConvention = hasSameAxes(original) ? original.forConvention : forConvention(original); } /** @@ -295,7 +297,7 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy super(original); axes = (original instanceof AbstractCS) ? ((AbstractCS) original).axes : getAxes(original); validate(null); - forConvention = forConvention(); + forConvention = forConvention(this); } /** @@ -390,6 +392,41 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy return axes[dimension]; } + /** + * {@return whether this coordinate system has the same axes than the specified CS, ignoring axis order}. + * If true, then the two coordinate systems have the same number of dimensions and the same set of axes. + * Axis instances are compared by the identity operator ({@code ==}), not by {@code equals(Object)}. + * + * <h4>Purpose</h4> + * This method can be invoked after a call to {@link #forConvention(AxesConvention)} for checking if that + * method changed only the axis order, with no change to axis directions, axis ranges or units of measurement. + * + * @param other the other coordinate system to compare with this CS. + * + * @since 1.5 + */ + public final boolean hasSameAxes(final CoordinateSystem other) { + if (other.getDimension() != axes.length) { + return false; + } + /* + * Need an unconditional copy of the axes of the other coordinate system, because the array will be modified. + * The implementation is okay for small arrays, but would be inefficient if the number of axes was very large. + */ + final CoordinateSystemAxis[] copy = getAxes(other); + int n = copy.length; +next: for (final CoordinateSystemAxis axis : axes) { + for (int i=0; i<n; i++) { + if (axis == copy[i]) { + System.arraycopy(copy, i+1, copy, i, --n - i); + continue next; + } + } + return false; + } + return n == 0; + } + /** * Sets the CS for the given axes convention. * @@ -428,14 +465,11 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy synchronized (forConvention) { AbstractCS cs = forConvention.get(convention); if (cs == null) { - final AbstractCS original = forConvention.get(AxesConvention.ORIGINAL); - cs = Normalizer.forConvention(original, convention); + cs = Normalizer.forConvention(this, convention); if (cs == null) { - cs = original; // The given coordinate system is already normalized. - } else if (equals(cs, ComparisonMode.IGNORE_METADATA)) { - cs = this; + cs = this; // This coordinate system is already normalized. } else if (convention != AxesConvention.POSITIVE_RANGE) { - cs = cs.resolveEPSG(original); + cs = cs.resolveEPSG(this); } cs = setCached(convention, cs); } @@ -453,13 +487,12 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy * * @param name name of the new coordinate system. * @param axes the set of axes to give to the new coordinate system. - * @param share whether the new CS should use a cache shared with the original CS. * @return a new coordinate system of the same type as {@code this}, but using the given axes. * @throws IllegalArgumentException if {@code axes} contains an unexpected number of axes, * or if an axis has an unexpected direction or unexpected unit of measurement. */ - AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { - return new AbstractCS(this, name, axes, share); + AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { + return new AbstractCS(this, name, axes); } /** @@ -510,7 +543,7 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy * @param min minimum number of dimensions, inclusive. * @param max maximum number of dimensions, inclusive. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ static IllegalArgumentException unexpectedDimension(final CoordinateSystemAxis[] axes, final int min, final int max) { final int n = axes.length; @@ -638,9 +671,10 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy * <strong>This is not a valid object.</strong> This constructor is strictly reserved * to JAXB, which will assign values to the fields using reflection. */ + @SuppressWarnings("this-escape") AbstractCS() { super(org.apache.sis.referencing.util.NilReferencingObject.INSTANCE); - forConvention = forConvention(); + forConvention = forConvention(this); axes = EMPTY; /* * Coordinate system axes are mandatory for SIS working. We do not verify their presence here @@ -654,8 +688,9 @@ public class AbstractCS extends AbstractIdentifiedObject implements CoordinateSy * Invoked by JAXB at marshalling time. */ @XmlElement(name = "axis") + @SuppressWarnings("ReturnOfCollectionOrArrayField") private CoordinateSystemAxis[] getAxis() { - return getAxes(this); // Give a chance to users to override getAxis(int). + return axes; } /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AxesConvention.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AxesConvention.java index 762f5f6977..42ac22998b 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AxesConvention.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/AxesConvention.java @@ -77,7 +77,7 @@ import org.apache.sis.measure.Units; * <h2>Note on axis order</h2> * The axis order is specified by the authority (typically a national agency) defining the Coordinate Reference System * (CRS). The order depends on the CRS type and the country defining the CRS. In the case of geographic CRS, the - * (<var>latitude</var>, <var>longitude</var>) axis order is widely used by geographers and pilotes for centuries. + * (<var>latitude</var>, <var>longitude</var>) axis order is widely used by geographers and pilots for centuries. * However, software developers tend to consistently use the (<var>x</var>,<var>y</var>) order for every kind of CRS. * Those different practices resulted in contradictory definitions of axis order for almost every CRS of kind * {@code GeographicCRS}, for some {@code ProjectedCRS} in the South hemisphere (South Africa, Australia, <i>etc.</i>) @@ -255,9 +255,8 @@ public enum AxesConvention implements AxisFilter { RIGHT_HANDED, /** - * Axes having a <cite>wraparound</cite> - * {@linkplain org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis#getRangeMeaning() range meaning} are - * shifted to their ranges of positive values. The units of measurement and range period (difference between + * Axes having a <cite>wraparound</cite> range meaning are shifted to their ranges of positive values. + * The units of measurement and range period (difference between * {@linkplain org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis#getMaximumValue() maximum} and * {@linkplain org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis#getMinimumValue() minimum value}) * are unchanged. @@ -272,6 +271,7 @@ public enum AxesConvention implements AxisFilter { * may need to move on the right side of the East hemisphere ([180 … 360]°). * Some geometries may need to be separated in two parts, and others may need to be merged.</p> * + * @see org.opengis.referencing.cs.CoordinateSystemAxis#getRangeMeaning() * @see org.opengis.referencing.cs.RangeMeaning#WRAPAROUND */ POSITIVE_RANGE, diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultAffineCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultAffineCS.java index 12c9fa3f09..33759f7b10 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultAffineCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultAffineCS.java @@ -128,12 +128,10 @@ public class DefaultAffineCS extends AbstractCS implements AffineCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - DefaultAffineCS(final DefaultAffineCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + DefaultAffineCS(DefaultAffineCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -221,10 +219,10 @@ public class DefaultAffineCS extends AbstractCS implements AffineCS { * This method shall be overridden by all {@code AffineCS} subclasses in this package. */ @Override - AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { case 2: // Fall through - case 3: return new DefaultAffineCS(this, name, axes, share); + case 3: return new DefaultAffineCS(this, name, axes); default: throw unexpectedDimension(axes, 2, 3); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCartesianCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCartesianCS.java index 993b983171..12f00ec052 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCartesianCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCartesianCS.java @@ -137,12 +137,10 @@ public class DefaultCartesianCS extends DefaultAffineCS implements CartesianCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - DefaultCartesianCS(final DefaultCartesianCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultCartesianCS(DefaultCartesianCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -234,11 +232,11 @@ public class DefaultCartesianCS extends DefaultAffineCS implements CartesianCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { case 1: return SubTypes.createOneDimensional(this, name, axes); case 2: // Fall through - case 3: return new DefaultCartesianCS(this, name, axes, share); + case 3: return new DefaultCartesianCS(this, name, axes); default: throw unexpectedDimension(axes, 1, 3); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCompoundCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCompoundCS.java index e1ce919b4c..a5ac52ab0b 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCompoundCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCompoundCS.java @@ -18,16 +18,15 @@ package org.apache.sis.referencing.cs; import java.util.Map; import java.util.List; -import static java.util.Collections.singletonMap; import jakarta.xml.bind.annotation.XmlTransient; import org.opengis.referencing.cs.CoordinateSystem; import org.opengis.referencing.cs.CoordinateSystemAxis; import org.apache.sis.referencing.util.AxisDirections; +import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.ComparisonMode; +import org.apache.sis.util.Utilities; import org.apache.sis.util.Workaround; import org.apache.sis.util.internal.UnmodifiableArrayList; -import static org.apache.sis.util.ArgumentChecks.*; -import static org.apache.sis.util.Utilities.deepEquals; /** @@ -110,7 +109,7 @@ public class DefaultCompoundCS extends AbstractCS { * This is used for the {@link #forConvention(AxesConvention)} implementation only. */ private DefaultCompoundCS(final DefaultCompoundCS original, final CoordinateSystem[] components) { - super(original, null, getAxes(components), true); + super(original, null, getAxes(components)); this.components = UnmodifiableArrayList.wrap(components); } @@ -132,7 +131,7 @@ public class DefaultCompoundCS extends AbstractCS { */ @Workaround(library="JDK", version="1.7") private DefaultCompoundCS(final CoordinateSystem[] components, final CoordinateSystemAxis[] axes) { - super(singletonMap(NAME_KEY, AxisDirections.appendTo(new StringBuilder(60).append("Compound CS"), axes)), axes); + super(Map.of(NAME_KEY, AxisDirections.appendTo(new StringBuilder(60).append("Compound CS"), axes)), axes); this.components = UnmodifiableArrayList.wrap(components); } @@ -140,10 +139,10 @@ public class DefaultCompoundCS extends AbstractCS { * Returns a clone of the given array, making sure that it contains only non-null elements. */ private static CoordinateSystem[] clone(CoordinateSystem[] components) { - ensureNonNull("components", components); + ArgumentChecks.ensureNonNull("components", components); components = components.clone(); for (int i=0; i<components.length; i++) { - ensureNonNullElement("components", i, components[i]); + ArgumentChecks.ensureNonNullElement("components", i, components[i]); } return components; } @@ -187,15 +186,15 @@ public class DefaultCompoundCS extends AbstractCS { */ @Override public DefaultCompoundCS forConvention(final AxesConvention convention) { - ensureNonNull("convention", convention); + ArgumentChecks.ensureNonNull("convention", convention); synchronized (forConvention) { DefaultCompoundCS cs = (DefaultCompoundCS) forConvention.get(convention); if (cs == null) { - cs = (DefaultCompoundCS) forConvention.get(AxesConvention.ORIGINAL); + cs = this; boolean changed = false; - final CoordinateSystem[] newComponents = new CoordinateSystem[cs.components.size()]; + final CoordinateSystem[] newComponents = new CoordinateSystem[components.size()]; for (int i=0; i<newComponents.length; i++) { - CoordinateSystem component = cs.components.get(i); + CoordinateSystem component = components.get(i); AbstractCS m = castOrCopy(component); if (m != (m = m.forConvention(convention))) { component = m; @@ -236,6 +235,6 @@ public class DefaultCompoundCS extends AbstractCS { if (!(object instanceof DefaultCompoundCS && super.equals(object, mode))) { return false; } - return deepEquals(components, ((DefaultCompoundCS) object).components, mode); + return Utilities.deepEquals(components, ((DefaultCompoundCS) object).components, mode); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCylindricalCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCylindricalCS.java index ae6855ecf0..9c64619721 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCylindricalCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultCylindricalCS.java @@ -112,12 +112,10 @@ public class DefaultCylindricalCS extends AbstractCS implements CylindricalCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultCylindricalCS(final DefaultCylindricalCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultCylindricalCS(DefaultCylindricalCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -199,10 +197,10 @@ public class DefaultCylindricalCS extends AbstractCS implements CylindricalCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { case 2: return new DefaultPolarCS(getPropertiesWithoutIdentifiers(name), axes[0], axes[1]); - case 3: return new DefaultCylindricalCS(this, name, axes, share); + case 3: return new DefaultCylindricalCS(this, name, axes); default: throw unexpectedDimension(axes, 2, 3); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultEllipsoidalCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultEllipsoidalCS.java index c843716613..4f055826a9 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultEllipsoidalCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultEllipsoidalCS.java @@ -129,12 +129,10 @@ public class DefaultEllipsoidalCS extends AbstractCS implements EllipsoidalCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultEllipsoidalCS(final DefaultEllipsoidalCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultEllipsoidalCS(DefaultEllipsoidalCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -239,11 +237,11 @@ public class DefaultEllipsoidalCS extends AbstractCS implements EllipsoidalCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { case 1: return SubTypes.createOneDimensional(this, name, axes); case 2: // Fall through - case 3: return new DefaultEllipsoidalCS(this, name, axes, share); + case 3: return new DefaultEllipsoidalCS(this, name, axes); default: throw unexpectedDimension(axes, 1, 3); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultLinearCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultLinearCS.java index 01bb2aa3dc..a865a2cbde 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultLinearCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultLinearCS.java @@ -103,12 +103,10 @@ public class DefaultLinearCS extends AbstractCS implements LinearCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultLinearCS(final DefaultLinearCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultLinearCS(DefaultLinearCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -190,9 +188,9 @@ public class DefaultLinearCS extends AbstractCS implements LinearCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { - case 1: return new DefaultLinearCS(this, name, axes, share); + case 1: return new DefaultLinearCS(this, name, axes); default: throw unexpectedDimension(axes, 1, 1); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultParametricCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultParametricCS.java index b026f56205..be8df7421c 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultParametricCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultParametricCS.java @@ -104,12 +104,10 @@ public class DefaultParametricCS extends AbstractCS implements ParametricCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultParametricCS(final DefaultParametricCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultParametricCS(DefaultParametricCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -172,9 +170,9 @@ public class DefaultParametricCS extends AbstractCS implements ParametricCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { - case 1: return new DefaultParametricCS(this, name, axes, share); + case 1: return new DefaultParametricCS(this, name, axes); default: throw unexpectedDimension(axes, 1, 1); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultPolarCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultPolarCS.java index b20a4b9113..48c0313e92 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultPolarCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultPolarCS.java @@ -110,12 +110,10 @@ public class DefaultPolarCS extends AbstractCS implements PolarCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultPolarCS(final DefaultPolarCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultPolarCS(DefaultPolarCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -197,9 +195,9 @@ public class DefaultPolarCS extends AbstractCS implements PolarCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { - case 2: return new DefaultPolarCS(this, name, axes, share); + case 2: return new DefaultPolarCS(this, name, axes); default: throw unexpectedDimension(axes, 2, 2); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultSphericalCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultSphericalCS.java index 688eeece48..4ffdfc74b5 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultSphericalCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultSphericalCS.java @@ -137,12 +137,10 @@ public class DefaultSphericalCS extends AbstractCS implements SphericalCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultSphericalCS(final DefaultSphericalCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultSphericalCS(DefaultSphericalCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -222,7 +220,7 @@ public class DefaultSphericalCS extends AbstractCS implements SphericalCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { case 2: { final Map<String,?> properties = getPropertiesWithoutIdentifiers(name); @@ -232,7 +230,7 @@ public class DefaultSphericalCS extends AbstractCS implements SphericalCS { return new DefaultSphericalCS(properties, axes[0], axes[1]); } } - case 3: return new DefaultSphericalCS(this, name, axes, share); + case 3: return new DefaultSphericalCS(this, name, axes); default: throw unexpectedDimension(axes, 2, 3); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultTimeCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultTimeCS.java index 8f8a556816..1449c2835a 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultTimeCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultTimeCS.java @@ -106,12 +106,10 @@ public class DefaultTimeCS extends AbstractCS implements TimeCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultTimeCS(final DefaultTimeCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultTimeCS(DefaultTimeCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -191,9 +189,9 @@ public class DefaultTimeCS extends AbstractCS implements TimeCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { - case 1: return new DefaultTimeCS(this, name, axes, share); + case 1: return new DefaultTimeCS(this, name, axes); default: throw unexpectedDimension(axes, 1, 1); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultUserDefinedCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultUserDefinedCS.java index 1637f2536f..7a5611bd0a 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultUserDefinedCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultUserDefinedCS.java @@ -121,12 +121,10 @@ public class DefaultUserDefinedCS extends AbstractCS implements UserDefinedCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultUserDefinedCS(final DefaultUserDefinedCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultUserDefinedCS(DefaultUserDefinedCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -189,10 +187,10 @@ public class DefaultUserDefinedCS extends AbstractCS implements UserDefinedCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { case 2: // Fall through - case 3: return new DefaultUserDefinedCS(this, name, axes, share); + case 3: return new DefaultUserDefinedCS(this, name, axes); default: throw unexpectedDimension(axes, 2, 3); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultVerticalCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultVerticalCS.java index 69f646c179..81d7297139 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultVerticalCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultVerticalCS.java @@ -117,12 +117,10 @@ public class DefaultVerticalCS extends AbstractCS implements VerticalCS { /** * Creates a new CS derived from the specified one, but with different axis order or unit. * - * @see #createForAxes(String, CoordinateSystemAxis[], boolean) + * @see #createForAxes(String, CoordinateSystemAxis[]) */ - private DefaultVerticalCS(final DefaultVerticalCS original, final String name, - final CoordinateSystemAxis[] axes, final boolean share) - { - super(original, name, axes, share); + private DefaultVerticalCS(DefaultVerticalCS original, String name, CoordinateSystemAxis[] axes) { + super(original, name, axes); } /** @@ -207,9 +205,9 @@ public class DefaultVerticalCS extends AbstractCS implements VerticalCS { * Returns a coordinate system with different axes. */ @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes, final boolean share) { + final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { switch (axes.length) { - case 1: return new DefaultVerticalCS(this, name, axes, share); + case 1: return new DefaultVerticalCS(this, name, axes); default: throw unexpectedDimension(axes, 1, 1); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/Normalizer.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/Normalizer.java index 8859b632a8..27ee6de2b2 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/Normalizer.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/Normalizer.java @@ -364,7 +364,7 @@ final class Normalizer implements Comparable<Normalizer> { final AbstractCS impl = castOrCopy(cs); final var buffer = (StringBuilder) CharSequences.camelCaseToSentence(impl.getInterface().getSimpleName()); final String name = AxisDirections.appendTo(buffer, newAxes); - return impl.createForAxes(name, newAxes, changes instanceof AxesConvention); + return impl.createForAxes(name, newAxes); } /** @@ -386,11 +386,10 @@ final class Normalizer implements Comparable<Normalizer> { * of -60° still locate the same point in the old and the new coordinate system. But the preferred way to * locate that point become the 300° value if the longitude range has been shifted to positive values.</p> * - * @param cs the coordinate system to shift. - * @param share whether the new CS should use a cache shared with the original CS. + * @param cs the coordinate system to shift. * @return a coordinate system using the given kind of longitude range, or {@code null} if no change is needed. */ - private static AbstractCS shiftAxisRange(final CoordinateSystem cs, final boolean share) { + private static AbstractCS shiftAxisRange(final CoordinateSystem cs) { boolean changed = false; final CoordinateSystemAxis[] axes = new CoordinateSystemAxis[cs.getDimension()]; for (int i=0; i<axes.length; i++) { @@ -414,7 +413,7 @@ final class Normalizer implements Comparable<Normalizer> { if (!changed) { return null; } - return castOrCopy(cs).createForAxes(null, axes, share); + return castOrCopy(cs).createForAxes(null, axes); } /** @@ -454,7 +453,7 @@ final class Normalizer implements Comparable<Normalizer> { case NORMALIZED: // Fall through case DISPLAY_ORIENTED: return normalize(cs, convention, true); case RIGHT_HANDED: return normalize(cs, null, true); - case POSITIVE_RANGE: return shiftAxisRange(cs, true); + case POSITIVE_RANGE: return shiftAxisRange(cs); default: throw new AssertionError(convention); } }