You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2019/09/09 15:21:04 UTC
[sis] 02/02: Move ImmutableIdentifier from
org.apache.sis.metadata.iso package to org.apache.sis.referencing package.
This is an anticipation for Jigsaw modularisation in a future version.
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 414235bf4cb7684c4702e67c72763f0c5952536a
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Mon Sep 9 17:13:37 2019 +0200
Move ImmutableIdentifier from org.apache.sis.metadata.iso package to org.apache.sis.referencing package.
This is an anticipation for Jigsaw modularisation in a future version.
---
.../apache/sis/metadata/iso/DefaultIdentifier.java | 7 +-
.../sis/metadata/iso/citation/Citations.java | 20 +-
.../java/org/apache/sis/xml/ReferenceResolver.java | 2 +-
.../apache/sis/internal/jaxb/referencing/Code.java | 4 +-
.../sis/internal/referencing/DeprecatedCode.java | 2 +-
.../sis/internal/referencing/WKTKeywords.java | 2 +-
.../internal/referencing/provider/EPSGName.java | 2 +-
.../referencing/provider/MapProjection.java | 2 +-
.../java/org/apache/sis/io/wkt/ElementKind.java | 2 +-
.../main/java/org/apache/sis/io/wkt/Formatter.java | 2 +-
.../apache/sis/io/wkt/GeodeticObjectParser.java | 2 +-
.../sis/metadata/iso/ImmutableIdentifier.java | 448 +--------------------
.../java/org/apache/sis/parameter/Parameters.java | 4 +-
.../sis/referencing/AbstractIdentifiedObject.java | 5 +-
.../java/org/apache/sis/referencing/Builder.java | 1 -
.../apache/sis/referencing/IdentifiedObjects.java | 4 +-
.../iso => referencing}/ImmutableIdentifier.java | 36 +-
.../apache/sis/referencing/NamedIdentifier.java | 1 -
.../sis/referencing/crs/DefaultGeographicCRS.java | 2 +-
.../referencing/factory/sql/EPSGDataAccess.java | 2 +-
.../operation/InverseOperationMethod.java | 2 +-
.../transform/CoordinateSystemTransform.java | 2 +-
.../transform/EllipsoidToCentricTransform.java | 2 +-
.../sis/internal/jaxb/referencing/CodeTest.java | 2 +-
.../parameter/DefaultParameterDescriptorTest.java | 2 +-
.../referencing/AbstractIdentifiedObjectTest.java | 1 -
.../referencing/AbstractReferenceSystemTest.java | 1 -
.../org/apache/sis/referencing/BuilderTest.java | 1 -
.../ImmutableIdentifierTest.java | 2 +-
.../apache/sis/referencing/cs/NormalizerTest.java | 2 +-
.../datum/DefaultTemporalDatumTest.java | 2 +-
.../operation/DefaultOperationMethodTest.java | 2 +-
.../apache/sis/test/integration/MetadataTest.java | 4 +-
.../sis/test/suite/ReferencingTestSuite.java | 2 +-
.../java/org/apache/sis/util/CharSequences.java | 4 +-
.../org/apache/sis/storage/gdal/Proj4Factory.java | 2 +-
36 files changed, 61 insertions(+), 522 deletions(-)
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultIdentifier.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultIdentifier.java
index 36c2129..55e5be1 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultIdentifier.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultIdentifier.java
@@ -50,8 +50,9 @@ import org.apache.sis.xml.Namespaces;
* {@linkplain org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis coordinate system axis},
* {@linkplain org.apache.sis.referencing.datum.DefaultGeodeticDatum geodetic datum},
* {@linkplain org.apache.sis.referencing.crs.DefaultGeographicCRS geographic CRS} and more
- * rather use the {@link ImmutableIdentifier} implementation, which is a class unrelated to the usual
- * {@code org.apache.metadata} hierarchy because of the immutable nature of referencing objects.</p>
+ * rather use the {@link org.apache.sis.referencing.ImmutableIdentifier} implementation,
+ * which is a class unrelated to the usual {@code org.apache.metadata} hierarchy
+ * because of the immutable nature of referencing objects.</p>
*
* <div class="section">Text, URN and XML representations</div>
* The XML representation of {@link DefaultIdentifier} is as the following example:
@@ -86,7 +87,7 @@ import org.apache.sis.xml.Namespaces;
* @author Cullen Rombach (Image Matters)
* @version 1.0
*
- * @see ImmutableIdentifier
+ * @see org.apache.sis.referencing.ImmutableIdentifier
* @see org.apache.sis.referencing.IdentifiedObjects#toURN(Class, Identifier)
*
* @since 0.3
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
index 5eaf426..339120f 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
@@ -66,7 +66,7 @@ import static org.apache.sis.internal.util.CollectionsExt.nonEmptyIterator;
* The constants defined in this class are typically values returned by:
* <ul>
* <li>{@link DefaultCitation#getIdentifiers()} for the {@link #ISBN} and {@link #ISSN} constants.</li>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()} for other {@code IdentifierSpace} constants.</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()} for other {@code IdentifierSpace} constants.</li>
* <li>{@link org.apache.sis.metadata.iso.DefaultMetadata#getMetadataStandards()} for other {@code Citation} constants.</li>
* </ul>
*
@@ -184,7 +184,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* <li>{@link org.apache.sis.referencing.factory.sql.EPSGFactory#getAuthority()}
* with the addition of version information.</li>
* </ul>
@@ -253,7 +253,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* </ul>
*
* @see #EPSG
@@ -286,7 +286,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* </ul>
*
* @see #OGC
@@ -321,7 +321,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* </ul>
*
* @since 0.4
@@ -336,7 +336,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* </ul>
*
* @since 0.4
@@ -349,7 +349,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* </ul>
*
* @since 0.4
@@ -362,7 +362,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* </ul>
*
* @since 0.6
@@ -376,7 +376,7 @@ public final class Citations extends Static {
* <div class="section">Main usage</div>
* This value can be returned by:
* <ul>
- * <li>{@link org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()}</li>
+ * <li>{@link org.apache.sis.referencing.ImmutableIdentifier#getAuthority()}</li>
* </ul>
*
* @since 0.6
@@ -816,7 +816,7 @@ public final class Citations extends Static {
* @return a non-empty Unicode identifier for the given citation without leading or trailing whitespaces,
* or {@code null} if the given citation is null or does not have any Unicode identifier or title.
*
- * @see org.apache.sis.metadata.iso.ImmutableIdentifier
+ * @see org.apache.sis.referencing.ImmutableIdentifier
* @see org.apache.sis.referencing.IdentifiedObjects#getSimpleNameOrIdentifier(IdentifiedObject)
* @see org.apache.sis.util.CharSequences#isUnicodeIdentifier(CharSequence)
*
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/xml/ReferenceResolver.java b/core/sis-metadata/src/main/java/org/apache/sis/xml/ReferenceResolver.java
index 1a77e45..af2db74 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/xml/ReferenceResolver.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/xml/ReferenceResolver.java
@@ -76,7 +76,7 @@ public class ReferenceResolver {
* @param context context (GML version, locale, <i>etc.</i>) of the (un)marshalling process.
* @param type the type of object to be unmarshalled, often as a GeoAPI interface.
* @param identifiers an arbitrary amount of identifiers. For each identifier,
- * the {@linkplain org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority() authority}
+ * the {@linkplain org.apache.sis.referencing.ImmutableIdentifier#getAuthority() authority}
* is typically (but not necessarily) one of the constants defined in {@link IdentifierSpace}.
* @return an object of the given type for the given identifiers, or {@code null} if none.
*/
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java
index 45dd1db..c461d72 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java
@@ -47,7 +47,7 @@ public final class Code {
* The identifier code.
*
* <p><b>Note:</b> GML (the target of this class) represents that code as an XML value, while
- * {@link org.apache.sis.metadata.iso.ImmutableIdentifier} represents it as an XML element.</p>
+ * {@link org.apache.sis.metadata.iso.DefaultIdentifier} represents it as an XML element.</p>
*/
@XmlValue
String code;
@@ -56,7 +56,7 @@ public final class Code {
* The code space, which is often {@code "EPSG"} with the version in use.
*
* <p><b>Note:</b> GML (the target of this class) represents that code as an XML attribute, while
- * {@link org.apache.sis.metadata.iso.ImmutableIdentifier} represents it as an XML element.</p>
+ * {@link org.apache.sis.metadata.iso.DefaultIdentifier} represents it as an XML element.</p>
*/
@XmlAttribute
String codeSpace;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DeprecatedCode.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DeprecatedCode.java
index 71f811c..dbfcaa3 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DeprecatedCode.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/DeprecatedCode.java
@@ -18,7 +18,7 @@ package org.apache.sis.internal.referencing;
import org.opengis.util.InternationalString;
import org.opengis.metadata.citation.Citation;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.util.Deprecable;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/WKTKeywords.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/WKTKeywords.java
index 1b4dee2..241a6ce 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/WKTKeywords.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/WKTKeywords.java
@@ -52,7 +52,7 @@ public final class WKTKeywords extends Static {
/**
* Related to {@link org.apache.sis.referencing.AbstractIdentifiedObject}
- * (including {@link org.apache.sis.metadata.iso.ImmutableIdentifier}).
+ * (including {@link org.apache.sis.referencing.ImmutableIdentifier}).
*/
public static final String
Id = "Id",
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/EPSGName.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/EPSGName.java
index 6da78f1..b209c61 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/EPSGName.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/EPSGName.java
@@ -22,7 +22,7 @@ import org.opengis.metadata.Identifier;
import org.opengis.util.GenericName;
import org.opengis.util.InternationalString;
import org.apache.sis.internal.util.Constants;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.referencing.NamedIdentifier;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MapProjection.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MapProjection.java
index f83a469..5efd1ea 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MapProjection.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MapProjection.java
@@ -42,7 +42,7 @@ import org.apache.sis.measure.Units;
import org.apache.sis.referencing.NamedIdentifier;
import org.apache.sis.referencing.IdentifiedObjects;
import org.apache.sis.referencing.operation.projection.NormalizedProjection;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.parameter.DefaultParameterDescriptor;
import org.apache.sis.parameter.ParameterBuilder;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/ElementKind.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/ElementKind.java
index 1957aa5..d878dd5 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/ElementKind.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/ElementKind.java
@@ -106,7 +106,7 @@ public enum ElementKind {
EXTENT,
/**
- * Citation (typically for the {@linkplain org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority()
+ * Citation (typically for the {@linkplain org.apache.sis.referencing.ImmutableIdentifier#getAuthority()
* authority}), often represented by {@code CITATION[…]} elements.
*/
CITATION,
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
index d117981..4533750 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
@@ -85,7 +85,7 @@ import org.apache.sis.geometry.AbstractEnvelope;
import org.apache.sis.measure.UnitFormat;
import org.apache.sis.measure.Range;
import org.apache.sis.measure.MeasurementRange;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.extent.Extents;
import org.apache.sis.math.Vector;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
index 6bc1a79..b982e2d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
@@ -65,7 +65,7 @@ import org.apache.sis.referencing.datum.BursaWolfParameters;
import org.apache.sis.referencing.operation.DefaultCoordinateOperationFactory;
import org.apache.sis.internal.referencing.CoordinateOperations;
import org.apache.sis.internal.referencing.Legacy;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.metadata.iso.extent.DefaultExtent;
import org.apache.sis.metadata.iso.extent.DefaultGeographicBoundingBox;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java b/core/sis-referencing/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java
index bb92d69..fcc74cd 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java
@@ -18,140 +18,23 @@ package org.apache.sis.metadata.iso;
import java.util.Map;
import java.util.Locale;
-import java.util.Objects;
-import java.io.Serializable;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
-import org.opengis.parameter.ParameterValue;
import org.opengis.util.InternationalString;
-import org.apache.sis.util.resources.Errors;
-import org.apache.sis.util.iso.Types;
-import org.apache.sis.metadata.TitleProperty;
-import org.apache.sis.metadata.iso.citation.Citations;
-import org.apache.sis.internal.metadata.Identifiers;
-import org.apache.sis.internal.metadata.NameMeaning;
-import org.apache.sis.internal.referencing.WKTKeywords;
-import org.apache.sis.io.wkt.FormattableObject;
-import org.apache.sis.io.wkt.Formatter;
-import org.apache.sis.io.wkt.Convention;
-import org.apache.sis.io.wkt.ElementKind;
-
-import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
-import static org.apache.sis.util.CharSequences.trimWhitespaces;
-import static org.apache.sis.util.collection.Containers.property;
/**
* Immutable value uniquely identifying an object within a namespace, together with a version.
- * This kind of identifier is primarily used for identification of
- * {@link org.opengis.referencing.crs.CoordinateReferenceSystem} objects.
- *
- *
- * <div class="section">Immutability and thread safety</div>
- * This class is immutable and thus inherently thread-safe if the {@link Citation} and {@link InternationalString}
- * arguments given to the constructor are also immutable. It is caller's responsibility to ensure that those
- * conditions hold, for example by invoking {@link org.apache.sis.metadata.iso.citation.DefaultCitation#transition
- * DefaultCitation.transition(DefaultCitation.State.FINAL)} before passing the arguments to the constructor.
- * Subclasses shall make sure that any overridden methods remain safe to call from multiple threads and do not change
- * any public {@code ImmutableIdentifier} state.
- *
- *
- * <div class="section">Text, URN and XML representations</div>
- * Identifiers are represented in various ways depending on the context. In particular identifiers are
- * marshalled differently depending on whether they appear in a metadata object or a referencing object.
- * The following examples show an identifier for a Geographic Coordinate Reference System (CRS)
- * identified by code 4326 in the "EPSG" code space:
- *
- * <ul class="verbose"><li><b><cite>Well Known Text</cite> (WKT) version 1</b><br>
- * The WKT 1 format contains only the {@linkplain #getCodeSpace() code space} and the {@linkplain #getCode() code}.
- * If there is no code space, then the {@linkplain #getAuthority() authority} abbreviation is used as a fallback.
- * Example:
- *
- * {@preformat wkt
- * AUTHORITY["EPSG", "4326"]
- * }
- *
- * </li><li><b><cite>Well Known Text</cite> (WKT) version 2</b><br>
- * The WKT 2 format contains the {@linkplain #getCodeSpace() code space}, the {@linkplain #getCode() code},
- * the {@linkplain #getVersion() version} and the {@linkplain #getAuthority() authority} citation if available.
- * The WKT can optionally provides a {@code URI} element, which expresses the same information in a different way
- * (the URN syntax is described in the next item below).
- * Example:
- *
- * {@preformat wkt
- * ID["EPSG", 4326, URI["urn:ogc:def:crs:EPSG::4326"]]
- * }
- *
- * </li><li><b>XML in referencing objects</b><br>
- * The <cite>Definition identifier URNs in OGC namespace</cite> paper defines a syntax for identifiers commonly
- * found in Geographic Markup Language (GML) documents. Example:
- *
- * {@preformat xml
- * <gml:identifier codeSpace="IOGP">urn:ogc:def:crs:EPSG::4326</gml:identifier>
- * }
- *
- * In Apache SIS, the GML {@code codeSpace} attribute - despite its name - is mapped to the identifier
- * {@linkplain #getAuthority() authority}. The components of the URN value are mapped as below:
- *
- * <blockquote><code>
- * urn:ogc:def:<type>:<{@linkplain #getCodeSpace() codespace}>:<{@linkplain #getVersion() version}>:<{@linkplain #getCode() code}>
- * </code></blockquote>
- *
- * </li><li><b>XML in metadata objects</b><br>
- * The XML representation of identifier in a metadata is defined by {@link DefaultIdentifier}.
- * </li></ul>
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.0
- *
- * @see DefaultIdentifier
- * @see org.apache.sis.referencing.IdentifiedObjects#toURN(Class, Identifier)
- *
* @since 0.3
* @module
+ *
+ * @deprecated Moved to {@link org.apache.sis.referencing} for anticipation with Jigsaw modules.
*/
-@TitleProperty(name = "code")
-public class ImmutableIdentifier extends FormattableObject implements Identifier, Serializable {
- /**
- * For cross-version compatibility.
- */
- private static final long serialVersionUID = -7681717592582493409L;
-
- /**
- * The person or party responsible for maintenance of the namespace, or {@code null} if not available.
- *
- * @see #getAuthority()
- */
- private final Citation authority;
-
- /**
- * Alphanumeric value identifying an instance in the namespace.
- *
- * @see #getCode()
- */
- private final String code;
-
- /**
- * Identifier or namespace in which the code is valid, or {@code null} if not available.
- * This is often an abbreviation of the authority name.
- *
- * @see #getCodeSpace()
- */
- private final String codeSpace;
-
- /**
- * Version identifier for the namespace, as specified by the code authority.
- * This version is included only when the {@linkplain #getCode code} uses versions.
- * When appropriate, the edition is identified by the effective date, coded using ISO 8601 date format.
- *
- * @see #getVersion()
- */
- private final String version;
-
- /**
- * Natural language description of the meaning of the code value.
- */
- private final InternationalString description;
+@Deprecated
+public class ImmutableIdentifier extends org.apache.sis.referencing.ImmutableIdentifier {
/**
* Creates a new identifier from the specified one. This is a copy constructor which
@@ -162,13 +45,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
* @see #castOrCopy(Identifier)
*/
public ImmutableIdentifier(final Identifier identifier) {
- ensureNonNull("identifier", identifier);
- code = identifier.getCode();
- codeSpace = identifier.getCodeSpace();
- authority = identifier.getAuthority();
- version = identifier.getVersion();
- description = identifier.getDescription();
- validate(null);
+ super(identifier);
}
/**
@@ -180,7 +57,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
* @param code alphanumeric value identifying an instance in the namespace. The code can not be null.
*/
public ImmutableIdentifier(final Citation authority, final String codeSpace, final String code) {
- this(authority, codeSpace, code, null, null);
+ super(authority, codeSpace, code);
}
/**
@@ -197,12 +74,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
public ImmutableIdentifier(final Citation authority, final String codeSpace,
final String code, final String version, final InternationalString description)
{
- this.code = code;
- this.codeSpace = codeSpace;
- this.authority = authority;
- this.version = version;
- this.description = description;
- validate(null);
+ super(authority, codeSpace, code, version, description);
}
/**
@@ -264,57 +136,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
* @throws IllegalArgumentException if a property has an illegal value.
*/
public ImmutableIdentifier(final Map<String,?> properties) throws IllegalArgumentException {
- ensureNonNull("properties", properties);
- code = trimWhitespaces( property (properties, CODE_KEY, String.class));
- version = trimWhitespaces( property (properties, VERSION_KEY, String.class));
- description = Types.toInternationalString(properties, DESCRIPTION_KEY);
- /*
- * Map String authority to one of the pre-defined constants (typically EPSG or OGC).
- */
- Object value = properties.get(AUTHORITY_KEY);
- if (value instanceof String) {
- authority = Citations.fromName((String) value);
- } else if (value == null || value instanceof Citation) {
- authority = (Citation) value;
- } else {
- throw illegalPropertyType(properties, AUTHORITY_KEY, value);
- }
- /*
- * Complete the code space if it was not explicitly set. We take a short identifier (preferred) or title
- * (as a fallback), with precedence given to Unicode identifier (see Citations.getIdentifier(…) for more
- * information). Then the getCodeSpace(…) method applies additional restrictions in order to reduce the
- * risk of false code space.
- */
- value = properties.get(CODESPACE_KEY);
- if (value == null) {
- codeSpace = Citations.toCodeSpace(authority);
- } else if (value instanceof String) {
- codeSpace = trimWhitespaces((String) value);
- } else {
- throw illegalPropertyType(properties, CODESPACE_KEY, value);
- }
- validate(properties);
- }
-
- /**
- * Ensures that the properties of this {@code ImmutableIdentifier} are valid.
- */
- private void validate(final Map<String,?> properties) {
- if (code == null || code.isEmpty()) {
- throw new IllegalArgumentException(Errors.getResources(properties)
- .getString((code == null) ? Errors.Keys.MissingValueForProperty_1
- : Errors.Keys.EmptyProperty_1, CODE_KEY));
- }
- }
-
- /**
- * Returns the exception to be thrown when a property if of illegal type.
- */
- private static IllegalArgumentException illegalPropertyType(
- final Map<String,?> properties, final String key, final Object value)
- {
- return new IllegalArgumentException(Errors.getResources(properties)
- .getString(Errors.Keys.IllegalPropertyValueClass_2, key, value.getClass()));
+ super(properties);
}
/**
@@ -341,258 +163,4 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
}
return new ImmutableIdentifier(object);
}
-
- /**
- * The person or party responsible for maintenance of the namespace.
- * The organization's abbreviation is often the same than this identifier {@linkplain #getCodeSpace() code space},
- * but not necessarily.
- *
- * @return the authority, or {@code null} if not available.
- */
- @Override
- public Citation getAuthority() {
- return authority;
- }
-
- /**
- * Alphanumeric value identifying an instance in the namespace.
- *
- * <div class="note"><b>Example:</b> {@code "4326"}.</div>
- *
- * @return value identifying an instance in the namespace (never {@code null}).
- *
- * @see org.apache.sis.referencing.NamedIdentifier#tip()
- */
- @Override
- public String getCode() {
- return code;
- }
-
- /**
- * Identifier or namespace in which the code is valid.
- * This is often the {@linkplain #getAuthority() authority}'s abbreviation, but not necessarily.
- *
- * <div class="note"><b>Example:</b> {@code "EPSG"}.</div>
- *
- * @return identifier or namespace in which the code is valid, or {@code null} if not available.
- *
- * @see org.apache.sis.referencing.NamedIdentifier#head()
- * @see org.apache.sis.referencing.NamedIdentifier#scope()
- */
- @Override
- public String getCodeSpace() {
- return codeSpace;
- }
-
- /**
- * The version identifier for the namespace, as specified by the code authority.
- * This version is included only when the {@linkplain #getCode() code} uses versions.
- * When appropriate, the edition is identified by the effective date, coded using ISO 8601 date format.
- *
- * <div class="note"><b>Example:</b> the version of the underlying EPSG database.</div>
- *
- * @return the version identifier for the namespace, or {@code null} if none.
- */
- @Override
- public String getVersion() {
- return version;
- }
-
- /**
- * Natural language description of the meaning of the code value.
- *
- * <div class="note"><b>Example:</b> "World Geodetic System 1984".</div>
- *
- * @return the natural language description, or {@code null} if none.
- *
- * @since 0.5
- */
- @Override
- public InternationalString getDescription() {
- return description;
- }
-
- /**
- * Returns a hash code value for this object.
- */
- @Override
- public int hashCode() {
- int hash = (int) serialVersionUID;
- if (code != null) {
- hash ^= code.hashCode();
- }
- if (codeSpace != null) {
- hash = hash*31 + codeSpace.hashCode();
- }
- return hash;
- }
-
- /**
- * Compares this object with the given one for equality.
- *
- * @param object the object to compare with this identifier.
- * @return {@code true} if both objects are equal.
- */
- @Override
- public boolean equals(final Object object) {
- if (object == this) {
- return true;
- }
- if (object != null && object.getClass() == getClass()) {
- final ImmutableIdentifier that = (ImmutableIdentifier) object;
- return Objects.equals(code, that.code) &&
- Objects.equals(codeSpace, that.codeSpace) &&
- Objects.equals(authority, that.authority) &&
- Objects.equals(version, that.version) &&
- Objects.equals(description, that.description);
- }
- return false;
- }
-
- /**
- * Formats this identifier as a <cite>Well Known Text</cite> {@code Id[…]} element.
- * See class javadoc for more information on the WKT format.
- *
- * @param formatter the formatter where to format the inner content of this WKT element.
- * @return {@code "Id"} (WKT 2) or {@code "Authority"} (WKT 1).
- *
- * @see <a href="http://docs.opengeospatial.org/is/12-063r5/12-063r5.html#33">WKT 2 specification §7.3.4</a>
- */
- @Override
- protected String formatTo(final Formatter formatter) {
- String keyword = null;
- /*
- * The code, codeSpace, authority and version local variables in this method usually have the exact same
- * value than the fields of the same name in this class. But we get those values by invoking the public
- * methods in order to give to users a chance to override those properties. The intent is also to use a
- * consistent approach for all 'formatTo' implementations, since some other classes have no choice other
- * than using the public methods.
- */
- final String code = getCode();
- if (code != null) {
- final String codeSpace = getCodeSpace();
- final Citation authority = getAuthority();
- final String cs = (codeSpace != null) ? codeSpace : Identifiers.getIdentifier(authority, true);
- if (cs != null) {
- final Convention convention = formatter.getConvention();
- if (convention.majorVersion() == 1) {
- keyword = WKTKeywords.Authority;
- formatter.append(cs, ElementKind.IDENTIFIER);
- formatter.append(code, ElementKind.IDENTIFIER);
- } else {
- keyword = WKTKeywords.Id;
- formatter.append(cs, ElementKind.IDENTIFIER);
- appendCode(formatter, code);
- final String version = getVersion();
- if (version != null) {
- appendCode(formatter, version);
- }
- /*
- * In order to simplify the WKT, format the citation only if it is different than the code space.
- * We will also omit the citation if this identifier is for a parameter value, because parameter
- * values are handled in a special way by the international standard:
- *
- * - ISO 19162 explicitly said that we shall format the identifier for the root element only,
- * and omit the identifier for all inner elements EXCEPT parameter values and operation method.
- * - Exclusion of identifier for inner elements is performed by the Formatter class, so it does
- * not need to be checked here.
- * - Parameter values are numerous, while operation methods typically appear only once in a WKT
- * document. So we will simplify the parameter values only (not the operation methods) except
- * if the parameter value is the root element (in which case we will format full identifier).
- */
- final FormattableObject enclosing = formatter.getEnclosingElement(1);
- final boolean isRoot = formatter.getEnclosingElement(2) == null;
- if (isRoot || !(enclosing instanceof ParameterValue<?>)) {
- final String citation = Identifiers.getIdentifier(authority, false);
- if (citation != null && !citation.equals(cs)) {
- formatter.append(new Cite(citation));
- }
- }
- /*
- * Do not format the optional URI element for internal convention,
- * because this property is currently computed rather than stored.
- * Other conventions format only for the ID[…] of root element.
- */
- if (isRoot && enclosing != null && convention != Convention.INTERNAL) {
- final String urn = NameMeaning.toURN(enclosing.getClass(), cs, version, code);
- if (urn != null) {
- formatter.append(new FormattableObject() {
- @Override protected String formatTo(final Formatter formatter) {
- formatter.append(urn, null);
- return WKTKeywords.URI;
- }
- });
- }
- }
- }
- }
- }
- return keyword;
- }
-
- /**
- * Appends the given code or version number as an integer if possible, or as a text otherwise.
- *
- * <div class="note"><b>Implementation note:</b>
- * ISO 19162 specifies "number or text". In Apache SIS, we restrict the numbers to integers
- * because handling version numbers like "8.2" as floating point numbers can be confusing.</div>
- */
- private static void appendCode(final Formatter formatter, final String text) {
- if (text != null) {
- final long n;
- try {
- n = Long.parseLong(text);
- } catch (NumberFormatException e) {
- formatter.append(text, ElementKind.IDENTIFIER);
- return;
- }
- formatter.append(n);
- }
- }
-
- /**
- * The {@code CITATION[…]} element inside an {@code ID[…]}.
- */
- private static final class Cite extends FormattableObject {
- /** The value of the citation to format. */
- private final String identifier;
-
- /** Creates a new citation with the given value. */
- Cite(final String identifier) {
- this.identifier = identifier;
- }
-
- /** Formats the citation. */
- @Override
- protected String formatTo(final Formatter formatter) {
- formatter.append(identifier, ElementKind.CITATION);
- return WKTKeywords.Citation;
- }
- }
-
-
-
-
- //////////////////////////////////////////////////////////////////////////////////////////////////
- //////// ////////
- //////// XML support with JAXB ////////
- //////// ////////
- //////// The following methods are invoked by JAXB using reflection (even if ////////
- //////// they are private) or are helpers for other methods invoked by JAXB. ////////
- //////// Those methods can be safely removed if Geographic Markup Language ////////
- //////// (GML) support is not needed. ////////
- //////// ////////
- //////////////////////////////////////////////////////////////////////////////////////////////////
-
- /**
- * Empty constructor for JAXB.
- */
- @SuppressWarnings("unused")
- private ImmutableIdentifier() {
- code = null;
- codeSpace = null;
- authority = null;
- version = null;
- description = null;
- }
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
index 2d4a2b7..ce0c72f 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
@@ -76,7 +76,7 @@ import org.apache.sis.util.Debug;
* instead than a {@code String} argument. Those descriptors provide additional information like the various
* {@linkplain DefaultParameterDescriptor#getAlias() aliases} under which the same parameter may be known.
* By using this information, {@code Parameters} can choose the most appropriate parameter name or alias
- * (by searching for a common {@linkplain org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority() authority})
+ * (by searching for a common {@linkplain org.apache.sis.referencing.ImmutableIdentifier#getAuthority() authority})
* when it delegates its work to the {@code parameter(String)} method.
*
* <div class="note"><b>Example:</b>
@@ -467,7 +467,7 @@ public abstract class Parameters implements ParameterValueGroup, Cloneable {
* in this {@code ParameterValueGroup}, chosen as below:
* <ul>
* <li>a name or alias defined by the same
- * {@linkplain org.apache.sis.metadata.iso.ImmutableIdentifier#getAuthority() authority}, if any;</li>
+ * {@linkplain org.apache.sis.referencing.ImmutableIdentifier#getAuthority() authority}, if any;</li>
* <li>an arbitrary name or alias otherwise.</li>
* </ul>
* </li>
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
index 1e606f0..f501ddb 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
@@ -513,13 +513,12 @@ public class AbstractIdentifiedObject extends FormattableObject implements Ident
* Returns a narrative explanation of the role of this object.
*
* <div class="section">Default value</div>
- * The default implementation returns the
- * {@linkplain org.apache.sis.metadata.iso.ImmutableIdentifier#getDescription() description}
+ * The default implementation returns the {@linkplain ImmutableIdentifier#getDescription() description}
* provided by this object's {@linkplain #getName() name}.
*
* @return a narrative explanation of the role of this object, or {@code null} if none.
*
- * @see org.apache.sis.metadata.iso.ImmutableIdentifier#getDescription()
+ * @see ImmutableIdentifier#getDescription()
*
* @since 0.6
*/
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/Builder.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/Builder.java
index cdce1fa..2357abe 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/Builder.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/Builder.java
@@ -30,7 +30,6 @@ import org.opengis.util.InternationalString;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
import org.opengis.referencing.IdentifiedObject;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.internal.system.DefaultFactories;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.internal.referencing.DeprecatedCode;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java
index 117c21d..353d086 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java
@@ -344,7 +344,7 @@ public final class IdentifiedObjects extends Static {
* @param object the identified object, or {@code null}.
* @return the first name, alias or identifier which is a valid Unicode identifier, or {@code null} if none.
*
- * @see org.apache.sis.metadata.iso.ImmutableIdentifier
+ * @see ImmutableIdentifier
* @see Citations#getUnicodeIdentifier(Citation)
* @see CharSequences#isUnicodeIdentifier(CharSequence)
*
@@ -759,7 +759,7 @@ public final class IdentifiedObjects extends Static {
* @param identifier the identifier, or {@code null}.
* @return a string representation of the given identifier, or {@code null}.
*
- * @see org.apache.sis.metadata.iso.ImmutableIdentifier#toString()
+ * @see ImmutableIdentifier#toString()
* @see NamedIdentifier#toString()
*/
public static String toString(final Identifier identifier) {
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/ImmutableIdentifier.java
similarity index 94%
copy from core/sis-referencing/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java
copy to core/sis-referencing/src/main/java/org/apache/sis/referencing/ImmutableIdentifier.java
index bb92d69..72d2ac5 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/ImmutableIdentifier.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.metadata.iso;
+package org.apache.sis.referencing;
import java.util.Map;
import java.util.Locale;
@@ -98,16 +98,16 @@ import static org.apache.sis.util.collection.Containers.property;
* </code></blockquote>
*
* </li><li><b>XML in metadata objects</b><br>
- * The XML representation of identifier in a metadata is defined by {@link DefaultIdentifier}.
+ * The XML representation of identifier in a metadata is defined by {@link org.apache.sis.metadata.iso.DefaultIdentifier}.
* </li></ul>
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.0
*
- * @see DefaultIdentifier
+ * @see org.apache.sis.metadata.iso.DefaultIdentifier
* @see org.apache.sis.referencing.IdentifiedObjects#toURN(Class, Identifier)
*
- * @since 0.3
+ * @since 1.0
* @module
*/
@TitleProperty(name = "code")
@@ -115,7 +115,7 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
/**
* For cross-version compatibility.
*/
- private static final long serialVersionUID = -7681717592582493409L;
+ private static final long serialVersionUID = 1804606250548055829L;
/**
* The person or party responsible for maintenance of the namespace, or {@code null} if not available.
@@ -569,30 +569,4 @@ public class ImmutableIdentifier extends FormattableObject implements Identifier
return WKTKeywords.Citation;
}
}
-
-
-
-
- //////////////////////////////////////////////////////////////////////////////////////////////////
- //////// ////////
- //////// XML support with JAXB ////////
- //////// ////////
- //////// The following methods are invoked by JAXB using reflection (even if ////////
- //////// they are private) or are helpers for other methods invoked by JAXB. ////////
- //////// Those methods can be safely removed if Geographic Markup Language ////////
- //////// (GML) support is not needed. ////////
- //////// ////////
- //////////////////////////////////////////////////////////////////////////////////////////////////
-
- /**
- * Empty constructor for JAXB.
- */
- @SuppressWarnings("unused")
- private ImmutableIdentifier() {
- code = null;
- codeSpace = null;
- authority = null;
- version = null;
- description = null;
- }
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/NamedIdentifier.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/NamedIdentifier.java
index 521921d..4de3338 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/NamedIdentifier.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/NamedIdentifier.java
@@ -36,7 +36,6 @@ import org.opengis.parameter.InvalidParameterValueException;
import org.apache.sis.internal.metadata.NameToIdentifier;
import org.apache.sis.internal.system.DefaultFactories;
import org.apache.sis.metadata.iso.citation.Citations;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.util.ArgumentChecks;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java
index a8fcd20..b82b997 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java
@@ -28,7 +28,7 @@ import org.opengis.referencing.cs.EllipsoidalCS;
import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.referencing.cs.CoordinateSystemAxis;
import org.apache.sis.metadata.iso.citation.Citations;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.referencing.cs.AxesConvention;
import org.apache.sis.referencing.AbstractReferenceSystem;
import org.apache.sis.io.wkt.Formatter;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
index 05dde98..7285714 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
@@ -84,7 +84,6 @@ import org.apache.sis.internal.system.Semaphores;
import org.apache.sis.internal.util.Constants;
import org.apache.sis.internal.util.CollectionsExt;
import org.apache.sis.internal.util.StandardDateFormat;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.DefaultCitation;
import org.apache.sis.metadata.iso.citation.DefaultOnlineResource;
import org.apache.sis.metadata.iso.extent.DefaultExtent;
@@ -92,6 +91,7 @@ import org.apache.sis.metadata.iso.extent.DefaultGeographicBoundingBox;
import org.apache.sis.parameter.DefaultParameterDescriptor;
import org.apache.sis.parameter.DefaultParameterDescriptorGroup;
import org.apache.sis.referencing.NamedIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.referencing.AbstractIdentifiedObject;
import org.apache.sis.referencing.cs.CoordinateSystems;
import org.apache.sis.referencing.datum.BursaWolfParameters;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java
index c59806a..fe59da1 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/InverseOperationMethod.java
@@ -34,7 +34,7 @@ import org.opengis.referencing.operation.SingleOperation;
import org.apache.sis.internal.referencing.CoordinateOperations;
import org.apache.sis.internal.referencing.SignReversalComment;
import org.apache.sis.internal.referencing.provider.AbstractProvider;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.util.collection.Containers;
import org.apache.sis.util.Deprecable;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransform.java
index f363e2e..ece34a9 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransform.java
@@ -33,11 +33,11 @@ import org.apache.sis.internal.referencing.Resources;
import org.apache.sis.internal.referencing.WKTUtilities;
import org.apache.sis.internal.system.DefaultFactories;
import org.apache.sis.internal.util.Constants;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.parameter.DefaultParameterDescriptorGroup;
import org.apache.sis.referencing.cs.AxesConvention;
import org.apache.sis.referencing.cs.CoordinateSystems;
+import org.apache.sis.referencing.ImmutableIdentifier;
/**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
index f756550..5e6c8d9 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
@@ -49,7 +49,7 @@ import org.apache.sis.internal.referencing.provider.GeographicToGeocentric;
import org.apache.sis.internal.referencing.provider.Geographic3Dto2D;
import org.apache.sis.internal.metadata.ReferencingServices;
import org.apache.sis.parameter.DefaultParameterDescriptorGroup;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.referencing.operation.matrix.Matrix3;
import org.apache.sis.referencing.operation.matrix.Matrices;
import org.apache.sis.referencing.operation.matrix.MatrixSIS;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java b/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
index 0df3a17..79b2b2a 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
@@ -21,7 +21,7 @@ import org.opengis.referencing.crs.GeographicCRS;
import org.opengis.metadata.Identifier;
import org.apache.sis.internal.util.Constants;
import org.apache.sis.internal.simple.SimpleCitation;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.metadata.iso.citation.DefaultCitation;
import org.apache.sis.test.DependsOnMethod;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/parameter/DefaultParameterDescriptorTest.java b/core/sis-referencing/src/test/java/org/apache/sis/parameter/DefaultParameterDescriptorTest.java
index 8ec3dae..6aef74b 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/parameter/DefaultParameterDescriptorTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/parameter/DefaultParameterDescriptorTest.java
@@ -24,7 +24,7 @@ import org.opengis.parameter.ParameterDescriptor;
import org.apache.sis.measure.Range;
import org.apache.sis.measure.NumberRange;
import org.apache.sis.measure.MeasurementRange;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.internal.util.Constants;
import org.apache.sis.io.wkt.Convention;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java
index 04b92b8..ad448a4 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractIdentifiedObjectTest.java
@@ -24,7 +24,6 @@ import java.util.Locale;
import java.util.Collections;
import org.opengis.test.Validators;
import org.opengis.metadata.Identifier;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.referencing.datum.AbstractDatum;
import org.apache.sis.internal.jaxb.referencing.Code;
import org.apache.sis.internal.jaxb.Context;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractReferenceSystemTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractReferenceSystemTest.java
index e378d7a..f2a2e13 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractReferenceSystemTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/AbstractReferenceSystemTest.java
@@ -21,7 +21,6 @@ import java.util.HashMap;
import java.util.Locale;
import org.opengis.test.Validators;
import org.apache.sis.io.wkt.Convention;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.metadata.iso.extent.DefaultExtent;
import org.apache.sis.metadata.iso.extent.DefaultTemporalExtent;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/BuilderTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/BuilderTest.java
index 092441c..f00a858 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/BuilderTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/BuilderTest.java
@@ -27,7 +27,6 @@ import org.opengis.metadata.Identifier;
import org.apache.sis.internal.simple.SimpleCitation;
import org.apache.sis.internal.simple.SimpleIdentifier;
import org.apache.sis.internal.system.DefaultFactories;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.test.DependsOnMethod;
import org.apache.sis.test.DependsOn;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/ImmutableIdentifierTest.java
similarity index 99%
rename from core/sis-referencing/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java
rename to core/sis-referencing/src/test/java/org/apache/sis/referencing/ImmutableIdentifierTest.java
index 6ec6251..297e5b6 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/ImmutableIdentifierTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.metadata.iso;
+package org.apache.sis.referencing;
import java.util.Map;
import java.util.HashMap;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/NormalizerTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/NormalizerTest.java
index ce3d249..de68ede 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/NormalizerTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/NormalizerTest.java
@@ -22,7 +22,7 @@ import java.util.HashMap;
import java.util.Collections;
import org.opengis.referencing.cs.AxisDirection;
import org.opengis.referencing.cs.CoordinateSystemAxis;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.referencing.IdentifiedObjects;
import org.apache.sis.util.resources.Vocabulary;
import org.apache.sis.measure.Units;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/datum/DefaultTemporalDatumTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/datum/DefaultTemporalDatumTest.java
index 714ab64..ac4f8b7 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/datum/DefaultTemporalDatumTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/datum/DefaultTemporalDatumTest.java
@@ -21,7 +21,7 @@ import java.util.Map;
import java.util.HashMap;
import javax.xml.bind.JAXBException;
import org.apache.sis.io.wkt.Convention;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.HardCodedCitations;
import org.apache.sis.test.xml.TestCase;
import org.junit.Test;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java
index 9ac9504..ef0aa2f 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java
@@ -24,7 +24,7 @@ import org.opengis.parameter.ParameterDescriptorGroup;
import org.opengis.referencing.operation.OperationMethod;
import org.apache.sis.io.wkt.Convention;
import org.apache.sis.util.ComparisonMode;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.metadata.iso.citation.DefaultCitation;
import org.apache.sis.parameter.DefaultParameterDescriptorGroup;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
index 67cc8ee..27b3458 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
@@ -55,6 +55,8 @@ import org.apache.sis.metadata.iso.distribution.*;
import org.apache.sis.metadata.iso.extent.*;
import org.apache.sis.metadata.iso.identification.*;
import org.apache.sis.metadata.iso.spatial.*;
+import org.apache.sis.referencing.NamedIdentifier;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.referencing.datum.DefaultVerticalDatum;
import org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis;
import org.apache.sis.referencing.cs.DefaultVerticalCS;
@@ -63,7 +65,6 @@ import org.apache.sis.internal.jaxb.metadata.replace.ReferenceSystemMetadata;
import org.apache.sis.internal.xml.LegacyNamespaces;
import org.apache.sis.internal.jaxb.gcx.Anchor;
import org.apache.sis.internal.system.Loggers;
-import org.apache.sis.referencing.NamedIdentifier;
import org.apache.sis.util.iso.SimpleInternationalString;
import org.apache.sis.util.ComparisonMode;
import org.apache.sis.xml.Namespaces;
@@ -77,6 +78,7 @@ import static java.util.Collections.singleton;
import static java.util.Collections.singletonMap;
// Test dependencies
+
import org.apache.sis.test.LoggingWatcher;
import org.apache.sis.test.TestUtilities;
import org.apache.sis.test.xml.DocumentComparator;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java b/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
index f46a2db..a5f8691 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
@@ -50,9 +50,9 @@ import org.junit.BeforeClass;
org.apache.sis.io.wkt.ColorsTest.class,
org.apache.sis.io.wkt.FormatterTest.class,
org.apache.sis.io.wkt.ElementTest.class,
- org.apache.sis.metadata.iso.ImmutableIdentifierTest.class,
// Identification of objects, needed by large parts of sis-referencing.
+ org.apache.sis.referencing.ImmutableIdentifierTest.class,
org.apache.sis.referencing.NamedIdentifierTest.class,
org.apache.sis.referencing.IdentifiedObjectsTest.class,
org.apache.sis.referencing.AbstractIdentifiedObjectTest.class,
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java b/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java
index 223dd63..9ea0e55 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java
@@ -1532,7 +1532,7 @@ cmp: while (ia < lga) {
* ‘{@code !}’, ‘{@code #}’, ‘{@code *}’, ‘{@code /}’, ‘{@code ?}’ and most other punctuation characters are not.
*
* <div class="section">Usage in Apache SIS</div>
- * In its handling of {@linkplain org.apache.sis.metadata.iso.ImmutableIdentifier identifiers}, Apache SIS favors
+ * In its handling of {@linkplain org.apache.sis.referencing.ImmutableIdentifier identifiers}, Apache SIS favors
* Unicode identifiers without {@linkplain Character#isIdentifierIgnorable(int) ignorable} characters since those
* identifiers are legal XML identifiers except for the above-cited rarely used characters. As a side effect,
* this policy excludes ‘{@code :}’, ‘{@code -}’ and ‘{@code .}’ which would normally be legal XML identifiers.
@@ -1543,7 +1543,7 @@ cmp: while (ia < lga) {
* @param identifier the character sequence to test, or {@code null}.
* @return {@code true} if the given character sequence is a legal Unicode identifier.
*
- * @see org.apache.sis.metadata.iso.ImmutableIdentifier
+ * @see org.apache.sis.referencing.ImmutableIdentifier
* @see org.apache.sis.metadata.iso.citation.Citations#getUnicodeIdentifier(Citation)
* @see org.apache.sis.referencing.IdentifiedObjects#getSimpleNameOrIdentifier(IdentifiedObject)
*/
diff --git a/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4Factory.java b/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4Factory.java
index 50674f3..efbf468 100644
--- a/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4Factory.java
+++ b/storage/sis-gdal/src/main/java/org/apache/sis/storage/gdal/Proj4Factory.java
@@ -37,6 +37,7 @@ import org.opengis.referencing.datum.*;
import org.opengis.referencing.operation.*;
import org.opengis.referencing.IdentifiedObject;
import org.apache.sis.referencing.IdentifiedObjects;
+import org.apache.sis.referencing.ImmutableIdentifier;
import org.apache.sis.referencing.operation.DefaultConversion;
import org.apache.sis.referencing.operation.DefaultCoordinateOperationFactory;
import org.apache.sis.referencing.factory.InvalidGeodeticParameterException;
@@ -46,7 +47,6 @@ import org.apache.sis.referencing.CommonCRS;
import org.apache.sis.internal.util.Constants;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.metadata.iso.citation.DefaultCitation;
-import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.internal.referencing.LazySet;
import org.apache.sis.internal.referencing.AxisDirections;
import org.apache.sis.internal.referencing.ReferencingFactoryContainer;