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 11f3b0bae3d6f94852578f9e2dab28007b41efbf Author: Martin Desruisseaux <[email protected]> AuthorDate: Thu Oct 2 15:17:49 2025 +0200 Move deprecated classes from ISO 19111:2007 into a non-exported package. Those classes are kept for GML and ISO 19162:2015 compatibility. --- .../main/module-info.java | 1 + .../apache/sis/io/wkt/GeodeticObjectParser.java | 6 +- .../apache/sis/referencing/crs/AbstractCRS.java | 4 +- .../sis/referencing/crs/AbstractSingleCRS.java | 3 +- .../sis/referencing/crs/DefaultEngineeringCRS.java | 15 +-- .../apache/sis/referencing/crs/package-info.java | 1 - .../org/apache/sis/referencing/cs/AbstractCS.java | 1 + .../sis/referencing/datum/AbstractDatum.java | 7 +- .../apache/sis/referencing/datum/package-info.java | 5 +- .../{crs => legacy}/DefaultImageCRS.java | 141 +++++++++++++-------- .../{datum => legacy}/DefaultImageDatum.java | 25 ++-- .../{cs => legacy}/DefaultUserDefinedCS.java | 45 +------ .../sis/referencing/legacy/package-info.java | 63 +++++++++ .../referencing/operation/SubOperationInfo.java | 2 +- .../sis/xml/bind/referencing/CD_ImageDatum.java | 2 +- .../sis/xml/bind/referencing/CS_UserDefinedCS.java | 2 +- .../apache/sis/referencing/crs/HardCodedCRS.java | 3 +- .../sis/referencing/datum/HardCodedDatum.java | 3 +- .../{crs => legacy}/DefaultImageCRSTest.java | 4 +- .../main/org/apache/sis/geometries/Geometries.java | 6 +- 20 files changed, 191 insertions(+), 148 deletions(-) diff --git a/endorsed/src/org.apache.sis.referencing/main/module-info.java b/endorsed/src/org.apache.sis.referencing/main/module-info.java index 1f07a76f22..27146fb6ca 100644 --- a/endorsed/src/org.apache.sis.referencing/main/module-info.java +++ b/endorsed/src/org.apache.sis.referencing/main/module-info.java @@ -217,4 +217,5 @@ module org.apache.sis.referencing { opens org.apache.sis.referencing.crs to jakarta.xml.bind, org.glassfish.jaxb.core, org.glassfish.jaxb.runtime; opens org.apache.sis.referencing.datum to jakarta.xml.bind, org.glassfish.jaxb.core, org.glassfish.jaxb.runtime; opens org.apache.sis.referencing.operation to jakarta.xml.bind, org.glassfish.jaxb.core, org.glassfish.jaxb.runtime; + opens org.apache.sis.referencing.legacy to jakarta.xml.bind, org.glassfish.jaxb.core, org.glassfish.jaxb.runtime; } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java index 6496c12629..c3bf681961 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java @@ -91,8 +91,8 @@ import org.opengis.referencing.ObjectDomain; import org.opengis.coordinate.CoordinateMetadata; // Specific to the geoapi-4.0 branch: -import org.apache.sis.referencing.crs.DefaultImageCRS; -import org.apache.sis.referencing.datum.DefaultImageDatum; +import org.apache.sis.referencing.legacy.DefaultImageCRS; +import org.apache.sis.referencing.legacy.DefaultImageDatum; /** @@ -1768,7 +1768,6 @@ class GeodeticObjectParser extends MathTransformParser implements Comparator<Coo * @return the {@code "ImageDatum"} element. * @throws ParseException if the {@code "ImageDatum"} element cannot be parsed. */ - @SuppressWarnings("removal") private DefaultImageDatum parseImageDatum(final int mode, final Element parent) throws ParseException { final Element element = parent.pullElement(mode, WKTKeywords.ImageDatum, WKTKeywords.IDatum); if (element == null) { @@ -1870,7 +1869,6 @@ class GeodeticObjectParser extends MathTransformParser implements Comparator<Coo * @return the {@code "ImageCRS"} element as an {@link ImageCRS} object. * @throws ParseException if the {@code "ImageCRS"} element cannot be parsed. */ - @SuppressWarnings("removal") private DefaultImageCRS parseImageCRS(final int mode, final Element parent) throws ParseException { final Element element = parent.pullElement(mode, WKTKeywords.ImageCRS); if (element == null) { 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 c2aeda8b6f..549fe464af 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 @@ -36,6 +36,7 @@ import org.apache.sis.referencing.cs.AxesConvention; import org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis; import org.apache.sis.referencing.datum.AbstractDatum; import org.apache.sis.referencing.datum.DefaultDatumEnsemble; +import org.apache.sis.referencing.legacy.DefaultImageCRS; import org.apache.sis.referencing.internal.shared.ReferencingUtilities; import org.apache.sis.metadata.internal.shared.ImplementationHelper; import org.apache.sis.io.wkt.FormattableObject; @@ -97,7 +98,8 @@ import org.opengis.coordinate.MismatchedDimensionException; @XmlRootElement(name = "AbstractCRS") @XmlSeeAlso({ AbstractSingleCRS.class, - DefaultCompoundCRS.class + DefaultCompoundCRS.class, + DefaultImageCRS.class }) public class AbstractCRS extends AbstractReferenceSystem implements CoordinateReferenceSystem { /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractSingleCRS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractSingleCRS.java index 4b23a3ebda..0e09a7ece0 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractSingleCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/AbstractSingleCRS.java @@ -54,8 +54,7 @@ import org.opengis.metadata.Identifier; DefaultVerticalCRS.class, DefaultTemporalCRS.class, DefaultParametricCRS.class, - DefaultEngineeringCRS.class, - DefaultImageCRS.class + DefaultEngineeringCRS.class }) class AbstractSingleCRS<D extends Datum> extends AbstractCRS implements SingleCRS { /** 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 abaa0874b4..0f2da2d0e8 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 @@ -28,6 +28,7 @@ import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.cs.*; import org.apache.sis.referencing.datum.DatumOrEnsemble; import org.apache.sis.referencing.datum.DefaultEngineeringDatum; +import org.apache.sis.referencing.legacy.DefaultUserDefinedCS; import org.apache.sis.referencing.internal.shared.WKTKeywords; import org.apache.sis.xml.bind.referencing.CS_CoordinateSystem; import org.apache.sis.io.wkt.Formatter; @@ -53,8 +54,7 @@ import org.opengis.referencing.datum.DatumEnsemble; * {@linkplain org.apache.sis.referencing.cs.DefaultCylindricalCS Cylindrical}, * {@linkplain org.apache.sis.referencing.cs.DefaultLinearCS Linear}. * {@linkplain org.apache.sis.referencing.cs.DefaultPolarCS Polar}, - * {@linkplain org.apache.sis.referencing.cs.DefaultSphericalCS Spherical} or - * {@linkplain org.apache.sis.referencing.cs.DefaultUserDefinedCS User Defined}. + * {@linkplain org.apache.sis.referencing.cs.DefaultSphericalCS Spherical}. * </p> * * <h2>Immutability and thread safety</h2> @@ -142,17 +142,6 @@ public class DefaultEngineeringCRS extends AbstractSingleCRS<EngineeringDatum> i super(properties, EngineeringDatum.class, datum, ensemble, cs); } - /** - * @deprecated A {@code DatumEnsemble} argument has been added. - */ - @Deprecated(since="1.5", forRemoval=true) - public DefaultEngineeringCRS(final Map<String,?> properties, - final EngineeringDatum datum, - final CoordinateSystem cs) - { - this(properties, datum, null, cs); - } - /** * Creates a new CRS derived from the specified one, but with different axis order or unit. * This is for implementing the {@link #createSameType(AbstractCS)} method only. diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java index 3e4dc8636d..bd51917b42 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java @@ -98,7 +98,6 @@ */ @XmlJavaTypeAdapter(CD_GeodeticDatum.class), @XmlJavaTypeAdapter(CD_EngineeringDatum.class), - @XmlJavaTypeAdapter(CD_ImageDatum.class), @XmlJavaTypeAdapter(CD_ParametricDatum.class), @XmlJavaTypeAdapter(CD_TemporalDatum.class), @XmlJavaTypeAdapter(CD_VerticalDatum.class), 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 ca5703ad3c..2e588160ef 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 @@ -44,6 +44,7 @@ import org.apache.sis.referencing.internal.shared.WKTUtilities; import org.apache.sis.referencing.internal.shared.AxisDirections; import org.apache.sis.referencing.internal.shared.WKTKeywords; import org.apache.sis.referencing.internal.shared.ReferencingUtilities; +import org.apache.sis.referencing.legacy.DefaultUserDefinedCS; import org.apache.sis.system.Modules; import org.apache.sis.util.Utilities; import org.apache.sis.util.ComparisonMode; diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/AbstractDatum.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/AbstractDatum.java index ac11379d1a..6bbe6a10ce 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/AbstractDatum.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/AbstractDatum.java @@ -37,6 +37,7 @@ import org.opengis.referencing.datum.TemporalDatum; import org.opengis.referencing.datum.EngineeringDatum; import org.apache.sis.referencing.AbstractIdentifiedObject; import org.apache.sis.referencing.IdentifiedObjects; +import org.apache.sis.referencing.legacy.DefaultImageDatum; import org.apache.sis.referencing.internal.shared.WKTKeywords; import org.apache.sis.util.CharSequences; import org.apache.sis.util.ComparisonMode; @@ -211,10 +212,8 @@ public class AbstractDatum extends AbstractIdentifiedObject implements Datum { } anchorEpoch = Containers.property(properties, ANCHOR_EPOCH_KEY, Temporal.class); if (anchorEpoch == null) { - Date date = Containers.property(properties, "realizationEpoch", Date.class); // Legacy name. - if (date != null) { - anchorEpoch = date.toInstant(); - } + anchorEpoch = TemporalDate.toTemporal( + Containers.property(properties, "realizationEpoch", Date.class)); // Legacy name. } publicationDate = Containers.property(properties, PUBLICATION_DATE_KEY, Temporal.class); conventionalRS = Containers.property(properties, CONVENTIONAL_RS_KEY, IdentifiedObject.class); diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/package-info.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/package-info.java index 9c0893bf7b..57bb360e1d 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/package-info.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/package-info.java @@ -26,8 +26,7 @@ * {@linkplain org.apache.sis.referencing.datum.DefaultVerticalDatum vertical}, * {@linkplain org.apache.sis.referencing.datum.DefaultTemporalDatum temporal}), * or to platforms (mobile or not) - * ({@linkplain org.apache.sis.referencing.datum.DefaultEngineeringDatum engineering}, - * {@linkplain org.apache.sis.referencing.datum.DefaultImageDatum image}). + * ({@linkplain org.apache.sis.referencing.datum.DefaultEngineeringDatum engineering}). * Some of those SIS subclasses provide additional methods that are not part of OGC/ISO specifications:</p> * <ul> * <li>{@link org.apache.sis.referencing.datum.DefaultEllipsoid#getAuthalicRadius()}</li> @@ -71,7 +70,7 @@ @XmlJavaTypeAdapter(CD_PrimeMeridian.class), @XmlJavaTypeAdapter(StringAdapter.class), @XmlJavaTypeAdapter(InternationalStringConverter.class), - @XmlJavaTypeAdapter(DateAdapter.class), + @XmlJavaTypeAdapter(DateAdapter.class) }) package org.apache.sis.referencing.datum; 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/legacy/DefaultImageCRS.java similarity index 72% rename from endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultImageCRS.java rename to endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/DefaultImageCRS.java index 37172f5dc6..0b2aee0320 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/legacy/DefaultImageCRS.java @@ -14,22 +14,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.referencing.crs; +package org.apache.sis.referencing.legacy; import java.util.Map; +import java.util.Objects; +import java.lang.reflect.Field; import jakarta.xml.bind.annotation.XmlType; import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlRootElement; import org.opengis.referencing.cs.AffineCS; import org.opengis.referencing.cs.CartesianCS; +import org.opengis.referencing.crs.SingleCRS; +import org.apache.sis.referencing.CommonCRS; import org.apache.sis.referencing.AbstractReferenceSystem; import org.apache.sis.referencing.internal.shared.WKTKeywords; -import org.apache.sis.referencing.cs.AxesConvention; -import org.apache.sis.referencing.cs.AbstractCS; +import org.apache.sis.referencing.internal.shared.NilReferencingObject; +import org.apache.sis.referencing.crs.AbstractCRS; +import org.apache.sis.metadata.internal.shared.ImplementationHelper; import org.apache.sis.io.wkt.Formatter; - -// Specific to the geoapi-4.0 branch: -import org.apache.sis.referencing.datum.DefaultImageDatum; +import org.apache.sis.util.ComparisonMode; +import org.apache.sis.util.Utilities; +import org.apache.sis.util.collection.BackingStoreException; /** @@ -38,7 +43,7 @@ import org.apache.sis.referencing.datum.DefaultImageDatum; * user community exists for images with its own terms of reference. * * <p><b>Used with datum type:</b> - * {@linkplain org.apache.sis.referencing.datum.DefaultImageDatum Image}.<br> + * {@linkplain DefaultImageDatum Image}.<br> * <b>Used with coordinate system types:</b> * {@linkplain org.apache.sis.referencing.cs.DefaultCartesianCS Cartesian} or * {@linkplain org.apache.sis.referencing.cs.DefaultAffineCS Affine}. @@ -49,30 +54,30 @@ import org.apache.sis.referencing.datum.DefaultImageDatum; * the coordinate system and the datum instances given to the constructor are also immutable. Unless otherwise noted * in the javadoc, this condition holds if all components were created using only SIS factories and static constants. * - * @deprecated The {@code ImageCRS} class has been removed in ISO 19111:2019. - * It is replaced by {@code EngineeringCRS}. - * * @author Martin Desruisseaux (IRD, Geomatys) - * @version 1.5 - * - * @see org.apache.sis.referencing.datum.DefaultImageDatum - * @see org.apache.sis.referencing.factory.GeodeticAuthorityFactory#createImageCRS(String) - * - * @since 0.4 */ -@Deprecated(since="1.5", forRemoval=true) // Actually to be moved to an internal package for GML and WKT purposes. @XmlType(name = "ImageCRSType", propOrder = { "cartesianCS", "affineCS", "datum" }) @XmlRootElement(name = "ImageCRS") -public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> { +public final class DefaultImageCRS extends AbstractCRS implements SingleCRS { /** * Serial number for inter-operability with different versions. */ private static final long serialVersionUID = 7222610270977351462L; + /** + * The datum, or {@code null} if the <abbr>CRS</abbr> is associated only to a datum ensemble. + * + * <p><b>Consider this field as final!</b> + * This field is non-final only for construction convenience and for unmarshalling.</p> + * + * @see #getDatum() + */ + private DefaultImageDatum datum; + /** * Creates a coordinate reference system from the given properties, datum and coordinate system. * The properties given in argument follow the same rules as for the @@ -116,15 +121,18 @@ public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> final DefaultImageDatum datum, final AffineCS cs) { - super(properties, DefaultImageDatum.class, datum, null, cs); + super(properties, cs); + this.datum = Objects.requireNonNull(datum); } /** - * Creates a new CRS derived from the specified one, but with different axis order or unit. - * This is for implementing the {@link #createSameType(AbstractCS)} method only. + * Returns the GeoAPI interface implemented by this class. + * + * @return the coordinate reference system interface implemented by this class. */ - private DefaultImageCRS(final DefaultImageCRS original, final AbstractCS cs) { - super(original, null, cs); + @Override + public Class<? extends SingleCRS> getInterface() { + return SingleCRS.class; } /** @@ -132,10 +140,9 @@ public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> * * @return the datum. */ - @Override @XmlElement(name = "imageDatum", required = true) public DefaultImageDatum getDatum() { - return super.getDatum(); + return datum; } /** @@ -148,27 +155,6 @@ public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> return (AffineCS) super.getCoordinateSystem(); } - /** - * {@inheritDoc} - * - * @return {@inheritDoc} - */ - @Override - public DefaultImageCRS forConvention(final AxesConvention convention) { - return (DefaultImageCRS) super.forConvention(convention); - } - - /** - * Returns a coordinate reference system of the same type as this CRS but with different axes. - * - * @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. - */ - @Override - final AbstractCRS createSameType(final AbstractCS cs) { - return new DefaultImageCRS(this, cs); - } - /** * Formats this CRS as a <i>Well Known Text</i> {@code ImageCRS[…]} element. * @@ -187,6 +173,34 @@ public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> return WKTKeywords.ImageCRS; } + /** + * Compares this coordinate reference system with the specified object for equality. + * + * @param object the object to compare to {@code this}. + * @param mode whether to perform a strict or lenient comparison. + * @return {@code true} if both objects are equal. + */ + @Override + public boolean equals(final Object object, ComparisonMode mode) { + if (super.equals(object, mode)) { + if (mode == ComparisonMode.STRICT) { + final var that = (DefaultImageCRS) object; + return Objects.equals(datum, that.datum); + } + final var that = (SingleCRS) object; + return Utilities.deepEquals(getDatum(), that.getDatum(), mode); + } + return false; + } + + /** + * Invoked by {@code hashCode()} for computing the hash code when first needed. + */ + @Override + protected long computeHashCode() { + return super.computeHashCode() + Objects.hashCode(datum); + } + @@ -209,6 +223,7 @@ public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> * reserved to JAXB, which will assign values to the fields using reflection. */ private DefaultImageCRS() { + super(Map.of(NAME_KEY, NilReferencingObject.UNNAMED), CommonCRS.Engineering.DISPLAY.crs().getCoordinateSystem()); /* * The datum and the coordinate system are mandatory for SIS working. We do not verify their presence * here because the verification would have to be done in an 'afterMarshal(…)' method and throwing an @@ -223,7 +238,11 @@ public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> * @see #getDatum() */ private void setDatum(final DefaultImageDatum value) { - setDatum("imageDatum", value); + if (datum == null) { + datum = value; + } else { + ImplementationHelper.propertyAlreadySet(getClass(), "setDatum", "imageDatum"); + } } /** @@ -249,14 +268,34 @@ public final class DefaultImageCRS extends AbstractSingleCRS<DefaultImageDatum> * * @see <a href="http://issues.apache.org/jira/browse/SIS-166">SIS-166</a> */ - @XmlElement(name = "cartesianCS") private CartesianCS getCartesianCS() {return getCoordinateSystem(CartesianCS.class);} - @XmlElement(name = "affineCS") private AffineCS getAffineCS() {return getCoordinateSystem(AffineCS.class);} + @XmlElement(name = "cartesianCS") + private CartesianCS getCartesianCS() { + final AffineCS cs = getCoordinateSystem(); + return (cs instanceof CartesianCS) ? (CartesianCS) cs : null; + } + + @XmlElement(name = "affineCS") + private AffineCS getAffineCS() { + final AffineCS cs = getCoordinateSystem(); + return (cs instanceof CartesianCS) ? null : cs; + } /** * Used by JAXB only (invoked by reflection). * * @see #getCartesianCS() */ - private void setCartesianCS(final CartesianCS cs) {setCoordinateSystem("cartesianCS", cs);} - private void setAffineCS (final AffineCS cs) {setCoordinateSystem("affineCS", cs);} + private void setCartesianCS(final CartesianCS cs) { + setAffineCS(cs); + } + + private void setAffineCS(final AffineCS cs) { + try { + Field coordinateSystem = AbstractCRS.class.getDeclaredField("coordinateSystem"); + coordinateSystem.setAccessible(true); + coordinateSystem.set(this, cs); + } catch (ReflectiveOperationException e) { + throw new BackingStoreException(e); + } + } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/DefaultImageDatum.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/DefaultImageDatum.java similarity index 93% rename from endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/DefaultImageDatum.java rename to endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/DefaultImageDatum.java index a2ab959ffd..8b58c01e80 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/DefaultImageDatum.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/DefaultImageDatum.java @@ -14,28 +14,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.referencing.datum; +package org.apache.sis.referencing.legacy; import java.util.Map; import java.util.Objects; import jakarta.xml.bind.annotation.XmlType; import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; import org.opengis.util.GenericName; import org.opengis.util.InternationalString; +import org.apache.sis.referencing.datum.AbstractDatum; import org.apache.sis.referencing.internal.shared.WKTKeywords; +import org.apache.sis.referencing.internal.shared.NilReferencingObject; import org.apache.sis.metadata.internal.shared.ImplementationHelper; import org.apache.sis.io.wkt.Formatter; +import org.apache.sis.io.wkt.ElementKind; import org.apache.sis.util.ComparisonMode; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.Identifier; -// Specific to the geoapi-4.0 branch: -import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; -import org.apache.sis.io.wkt.ElementKind; - /** * Defines the origin of an image coordinate reference system. An image datum is used in a local @@ -47,18 +47,10 @@ import org.apache.sis.io.wkt.ElementKind; * given to the constructor are also immutable. Unless otherwise noted in the javadoc, this condition holds if * all components were created using only SIS factories and static constants. * - * @deprecated The {@code ImageDatum} class has been removed in ISO 19111:2019. - * It is replaced by {@code EngineeringDatum}. - * * @author Martin Desruisseaux (IRD, Geomatys) - * @version 1.5 * - * @see org.apache.sis.referencing.crs.DefaultImageCRS - * @see org.apache.sis.referencing.factory.GeodeticAuthorityFactory#createImageDatum(String) - * - * @since 0.4 + * @see DefaultImageCRS */ -@Deprecated(since="1.5", forRemoval=true) // Actually to be moved to an internal package for GML and WKT purposes. @XmlType(name = "ImageDatumType") @XmlRootElement(name = "ImageDatum") public final class DefaultImageDatum extends AbstractDatum { @@ -122,8 +114,6 @@ public final class DefaultImageDatum extends AbstractDatum { * * @param properties the properties to be given to the identified object. * @param pixelInCell the way the image grid is associated with the image data attributes. - * - * @see org.apache.sis.referencing.factory.GeodeticObjectFactory#createImageDatum(Map, PixelInCell) */ public DefaultImageDatum(final Map<String,?> properties, final String pixelInCell) { super(properties); @@ -221,6 +211,7 @@ public final class DefaultImageDatum extends AbstractDatum { * reserved to JAXB, which will assign values to the fields using reflection. */ private DefaultImageDatum() { + super(Map.of(NAME_KEY, NilReferencingObject.UNNAMED)); } /** 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/legacy/DefaultUserDefinedCS.java similarity index 80% rename from endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/cs/DefaultUserDefinedCS.java rename to endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/DefaultUserDefinedCS.java index 304f1a38dd..5dfab47009 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/legacy/DefaultUserDefinedCS.java @@ -14,11 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.referencing.cs; +package org.apache.sis.referencing.legacy; import java.util.Map; import jakarta.xml.bind.annotation.XmlType; import jakarta.xml.bind.annotation.XmlRootElement; +import org.apache.sis.referencing.cs.AbstractCS; +import org.apache.sis.referencing.internal.shared.NilReferencingObject; import org.opengis.referencing.cs.CoordinateSystemAxis; @@ -42,12 +44,7 @@ import org.opengis.referencing.cs.CoordinateSystemAxis; * constants. * * @author Martin Desruisseaux (IRD, Geomatys) - * @version 1.5 - * @since 0.4 - * - * @deprecated The {@code UserDefinedCS} class has been removed from ISO 19111:2019. */ -@Deprecated(since="1.5", forRemoval=true) // Actually to be moved to an internal package for GML and WKT purposes. @XmlType(name = "UserDefinedCSType") @XmlRootElement(name = "UserDefinedCS") public final class DefaultUserDefinedCS extends AbstractCS { @@ -90,8 +87,6 @@ public final class DefaultUserDefinedCS extends AbstractCS { * @param properties the properties to be given to the identified object. * @param axis0 the first axis. * @param axis1 the second axis. - * - * @see org.apache.sis.referencing.factory.GeodeticObjectFactory#createUserDefinedCS(Map, CoordinateSystemAxis, CoordinateSystemAxis) */ public DefaultUserDefinedCS(final Map<String,?> properties, final CoordinateSystemAxis axis0, @@ -109,8 +104,6 @@ public final class DefaultUserDefinedCS extends AbstractCS { * @param axis0 the first axis. * @param axis1 the second axis. * @param axis2 the third axis. - * - * @see org.apache.sis.referencing.factory.GeodeticObjectFactory#createUserDefinedCS(Map, CoordinateSystemAxis, CoordinateSystemAxis, CoordinateSystemAxis) */ public DefaultUserDefinedCS(final Map<String,?> properties, final CoordinateSystemAxis axis0, @@ -120,37 +113,6 @@ public final class DefaultUserDefinedCS extends AbstractCS { super(properties, axis0, axis1, axis2); } - /** - * Creates a new CS derived from the specified one, but with different axis order or unit. - * - * @see #createForAxes(String, CoordinateSystemAxis[]) - */ - private DefaultUserDefinedCS(DefaultUserDefinedCS original, String name, CoordinateSystemAxis[] axes) { - super(original, name, axes); - } - - /** - * {@inheritDoc} - * - * @return {@inheritDoc} - */ - @Override - public DefaultUserDefinedCS forConvention(final AxesConvention convention) { - return (DefaultUserDefinedCS) super.forConvention(convention); - } - - /** - * Returns a coordinate system with different axes. - */ - @Override - final AbstractCS createForAxes(final String name, final CoordinateSystemAxis[] axes) { - switch (axes.length) { - case 2: // Fall through - case 3: return new DefaultUserDefinedCS(this, name, axes); - default: throw unexpectedDimension(axes, 2, 3); - } - } - @@ -173,5 +135,6 @@ public final class DefaultUserDefinedCS extends AbstractCS { * which will assign values to the fields using reflection. */ private DefaultUserDefinedCS() { + super(Map.of(NAME_KEY, NilReferencingObject.UNNAMED)); } } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/package-info.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/package-info.java new file mode 100644 index 0000000000..254a1087b2 --- /dev/null +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/legacy/package-info.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Referencing objects that existed in legacy international standards but have been removed in more recent editions. + * Those objects are kept for compatibility with, for example, Geographic Markup Language (<abbr>GML</abbr>) but are + * not anymore in public <abbr>API</abbr>. + * + * @author Martin Desruisseaux (Geomatys) + * @author Cédric Briançon (Geomatys) + */ +@XmlSchema(location = "http://schemas.opengis.net/gml/3.2.1/coordinateReferenceSystems.xsd", + elementFormDefault = XmlNsForm.QUALIFIED, namespace = Namespaces.GML, xmlns = +{ + @XmlNs(prefix = "gml", namespaceURI = Namespaces.GML), + @XmlNs(prefix = "gmd", namespaceURI = LegacyNamespaces.GMD), + @XmlNs(prefix = "gco", namespaceURI = Namespaces.GCO), + @XmlNs(prefix = "xsi", namespaceURI = Namespaces.XSI) +}) +@XmlAccessorType(XmlAccessType.NONE) +@XmlJavaTypeAdapters({ + /* + * Do NOT declare the following adapters in this package-info: + * + * - CS_CoordinateSystem + * - SC_SingleCRS + * - SC_CRS + * + * Because the above types are the base type of many other types, + * adding the above adapters is a cause of confusion for JAXB. + * + * Note: be careful with CS_AffineCS and CS_CartesianCS relationship. + */ + @XmlJavaTypeAdapter(CD_ImageDatum.class), + @XmlJavaTypeAdapter(CS_CartesianCS.class), // Must be before CS_AffineCS. + @XmlJavaTypeAdapter(CS_AffineCS.class) +}) +package org.apache.sis.referencing.legacy; + +import jakarta.xml.bind.annotation.XmlNs; +import jakarta.xml.bind.annotation.XmlNsForm; +import jakarta.xml.bind.annotation.XmlSchema; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapters; +import org.apache.sis.xml.Namespaces; +import org.apache.sis.xml.bind.referencing.*; +import org.apache.sis.xml.internal.shared.LegacyNamespaces; diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/SubOperationInfo.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/SubOperationInfo.java index 767ba53262..17a604bd58 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/SubOperationInfo.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/SubOperationInfo.java @@ -30,7 +30,7 @@ import org.apache.sis.referencing.operation.matrix.MatrixSIS; import org.apache.sis.referencing.operation.transform.MathTransforms; // Specific to the geoapi-4.0 branch: -import org.apache.sis.referencing.crs.DefaultImageCRS; +import org.apache.sis.referencing.legacy.DefaultImageCRS; /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CD_ImageDatum.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CD_ImageDatum.java index 2e1c5d77f1..2c5bbdfe68 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CD_ImageDatum.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CD_ImageDatum.java @@ -18,7 +18,7 @@ package org.apache.sis.xml.bind.referencing; import jakarta.xml.bind.annotation.XmlElement; import org.apache.sis.xml.bind.gco.PropertyType; -import org.apache.sis.referencing.datum.DefaultImageDatum; +import org.apache.sis.referencing.legacy.DefaultImageDatum; /** diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CS_UserDefinedCS.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CS_UserDefinedCS.java index 488042cc75..7900672d33 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CS_UserDefinedCS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CS_UserDefinedCS.java @@ -17,7 +17,7 @@ package org.apache.sis.xml.bind.referencing; import jakarta.xml.bind.annotation.XmlElement; -import org.apache.sis.referencing.cs.DefaultUserDefinedCS; +import org.apache.sis.referencing.legacy.DefaultUserDefinedCS; import org.apache.sis.xml.bind.gco.PropertyType; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/HardCodedCRS.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/HardCodedCRS.java index a1151b90e3..f0949b31d8 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/HardCodedCRS.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/HardCodedCRS.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.HashMap; import static org.opengis.referencing.IdentifiedObject.*; import org.apache.sis.referencing.NamedIdentifier; +import org.apache.sis.referencing.legacy.DefaultImageCRS; import org.apache.sis.metadata.iso.extent.Extents; import static org.apache.sis.referencing.IdentifiedObjects.getProperties; @@ -322,7 +323,7 @@ public final class HardCodedCRS { * <p>The {@code pixelInCell} attribute of the associated {@code ImageDatum} * is set to {@link org.apache.sis.coverage.grid.PixelInCell#CELL_CENTER}.</p> */ - @SuppressWarnings("removal") + @SuppressWarnings("exports") public static final DefaultImageCRS IMAGE = new DefaultImageCRS( getProperties(HardCodedDatum.IMAGE), HardCodedDatum.IMAGE, HardCodedCS.GRID); diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/HardCodedDatum.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/HardCodedDatum.java index ce221f6ab0..b1d86a1c5f 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/HardCodedDatum.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/HardCodedDatum.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.HashMap; import java.time.Instant; import org.apache.sis.referencing.NamedIdentifier; +import org.apache.sis.referencing.legacy.DefaultImageDatum; import org.apache.sis.referencing.internal.VerticalDatumTypes; import org.apache.sis.measure.Units; import static org.apache.sis.util.internal.shared.Constants.SECONDS_PER_DAY; @@ -154,7 +155,7 @@ public final class HardCodedDatum { /** * Image with {@link org.apache.sis.coverage.grid.PixelInCell#CELL_CENTER}. */ - @SuppressWarnings("removal") + @SuppressWarnings("exports") public static final DefaultImageDatum IMAGE = new DefaultImageDatum( properties("Image", null, null), "cell center"); diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultImageCRSTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/legacy/DefaultImageCRSTest.java similarity index 98% rename from endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultImageCRSTest.java rename to endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/legacy/DefaultImageCRSTest.java index 5da70864d8..9b25e5ec04 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultImageCRSTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/legacy/DefaultImageCRSTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.referencing.crs; +package org.apache.sis.referencing.legacy; import java.util.Map; import jakarta.xml.bind.JAXBException; @@ -23,7 +23,6 @@ import org.opengis.referencing.cs.AffineCS; import org.opengis.referencing.cs.CartesianCS; import org.opengis.referencing.cs.CoordinateSystem; import org.apache.sis.referencing.cs.DefaultAffineCS; -import org.apache.sis.referencing.datum.DefaultImageDatum; import org.apache.sis.io.wkt.Convention; import org.apache.sis.xml.Namespaces; @@ -45,7 +44,6 @@ import static org.opengis.test.Assertions.assertAxisDirectionsEqual; * * @author Martin Desruisseaux (Geomatys) */ -@SuppressWarnings("removal") public final class DefaultImageCRSTest extends TestCase { /** * Creates a new test case. diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java index ecb0887370..9e9a0bbc99 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java @@ -161,7 +161,7 @@ public final class Geometries { final CoordinateSystemAxis axis = new DefaultCoordinateSystemAxis(Collections.singletonMap("name", name + i + "Axis"), name, AxisDirection.UNSPECIFIED, Units.UNITY); final CoordinateSystem cs = new DefaultLinearCS(Collections.singletonMap("name", name + i + "CS"), axis); - DefaultEngineeringCRS crs = new DefaultEngineeringCRS(Collections.singletonMap("name", name), datum, cs); + DefaultEngineeringCRS crs = new DefaultEngineeringCRS(Collections.singletonMap("name", name), datum, null, cs); crss.add(crs); } return CRS.compound(crss.toArray(new CoordinateReferenceSystem[crss.size()])); @@ -214,7 +214,7 @@ public final class Geometries { name("Cartesian2d"), axis1, axis2); - return new DefaultEngineeringCRS(name("Cartesian2d"), DATUM, cs); + return new DefaultEngineeringCRS(name("Cartesian2d"), DATUM, null, cs); } public static CoordinateReferenceSystem createCartesianCRS3D(CoordinateSystemAxis axis1, CoordinateSystemAxis axis2, CoordinateSystemAxis axis3) { @@ -222,7 +222,7 @@ public final class Geometries { name("Cartesian3d"), axis1, axis2, axis3); - return new DefaultEngineeringCRS(name("Cartesian3d"), DATUM, cs); + return new DefaultEngineeringCRS(name("Cartesian3d"), DATUM, null, cs); } /**
