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 2026/05/15 16:17:40 UTC
(sis) branch geoapi-4.0 updated (ad86df60e5 -> 63c9dc02ec)
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a change to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
from ad86df60e5 In the tree of GeoHEIF nodes, move the nodes derived from `flags` below the "flags" node.
new 3123aa404b Replace the internal `TreeFormatCustomization` interface by a public `TreeTable.Node.isVisible()` method.
new 63c9dc02ec Move the storage metadata helper classes to a separated package. This is in anticipation for the addition of more types.
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../main/org/apache/sis/metadata/TreeNode.java | 84 ++++++++++++++++++----
.../org/apache/sis/metadata/TreeNodeChildren.java | 9 ++-
.../org/apache/sis/metadata/TreeTableView.java | 55 +-------------
.../apache/sis/metadata/TreeTableFormatTest.java | 15 ++--
.../org/apache/sis/storage/landsat/BandGroup.java | 2 +-
.../apache/sis/storage/landsat/MetadataReader.java | 2 +-
.../apache/sis/storage/geotiff/GeoTiffStore.java | 2 +-
.../org/apache/sis/storage/geotiff/Writer.java | 2 +-
.../geotiff/reader/GridGeometryBuilder.java | 2 +-
.../geotiff/reader/ImageMetadataBuilder.java | 2 +-
.../sis/storage/geotiff/reader/XMLMetadata.java | 2 +-
.../sis/storage/geotiff/writer/GeoEncoder.java | 2 +-
.../storage/geotiff/reader/XMLMetadataTest.java | 2 +-
.../apache/sis/storage/netcdf/MetadataReader.java | 2 +-
.../apache/sis/storage/netcdf/base/Decoder.java | 2 +-
.../sis/storage/netcdf/base/RasterResource.java | 2 +-
.../sis/storage/netcdf/classic/ChannelDecoder.java | 2 +-
.../sis/storage/netcdf/ucar/DecoderWrapper.java | 2 +-
.../main/org/apache/sis/storage/sql/SQLStore.java | 2 +-
.../apache/sis/storage/sql/feature/Database.java | 2 +-
.../main/org/apache/sis/storage/gpx/Types.java | 2 +-
.../org.apache.sis.storage/main/module-info.java | 13 ++++
.../org/apache/sis/storage/AbstractFeatureSet.java | 2 +-
.../sis/storage/AbstractGridCoverageResource.java | 2 +-
.../org/apache/sis/storage/AbstractResource.java | 2 +-
.../org/apache/sis/storage/CoverageSubset.java | 2 +-
.../main/org/apache/sis/storage/FeatureSubset.java | 2 +-
.../storage/aggregate/AggregatedFeatureSet.java | 2 +-
.../sis/storage/aggregate/AggregatedResource.java | 2 +-
.../aggregate/BandAggregateGridResource.java | 2 +-
.../aggregate/ConcatenatedGridResource.java | 2 +-
.../sis/storage/aggregate/GroupAggregate.java | 2 +-
.../main/org/apache/sis/storage/base/CodeType.java | 12 ++--
.../sis/storage/base/DocumentedStoreProvider.java | 2 +-
.../org/apache/sis/storage/base/URIDataStore.java | 1 +
.../org/apache/sis/storage/base/package-info.java | 2 +-
.../main/org/apache/sis/storage/csv/Store.java | 2 +-
.../org/apache/sis/storage/esri/RasterStore.java | 2 +-
.../main/org/apache/sis/storage/folder/Store.java | 2 +-
.../apache/sis/storage/image/WorldFileStore.java | 2 +-
.../storage/{base => metadata}/LegalSymbols.java | 3 +-
.../{base => metadata}/MetadataBuilder.java | 3 +-
.../{base => metadata}/MetadataFetcher.java | 8 +--
.../{base => metadata}/ResourceLineage.java | 2 +-
.../apache/sis/storage/metadata}/package-info.java | 6 +-
.../org/apache/sis/storage/tiling/TileMatrix.java | 2 +-
.../apache/sis/storage/tiling/TileMatrixSet.java | 2 +-
.../main/org/apache/sis/storage/wkt/Store.java | 2 +-
.../main/org/apache/sis/storage/xml/Store.java | 2 +-
.../{base => metadata}/MetadataBuilderTest.java | 2 +-
.../org/apache/sis/util/collection/TreeTable.java | 18 ++++-
.../sis/util/collection/TreeTableFormat.java | 40 ++++-------
.../internal/shared/TreeFormatCustomization.java | 51 -------------
.../storage/coveragejson/CoverageJsonStore.java | 2 +-
.../sis/storage/geoheif/CoverageBuilder.java | 2 +-
.../apache/sis/storage/geoheif/GeoHeifStore.java | 2 +-
.../main/org/apache/sis/storage/isobmff/Box.java | 2 +-
.../apache/sis/storage/isobmff/ContainerBox.java | 2 +-
.../apache/sis/storage/isobmff/base/Copyright.java | 2 +-
.../storage/isobmff/base/FDItemInfoExtension.java | 2 +-
.../sis/storage/isobmff/base/ItemInfoEntry.java | 2 +-
.../sis/storage/isobmff/base/ItemReference.java | 2 +-
.../org/apache/sis/storage/isobmff/base/Meta.java | 2 +-
.../sis/storage/isobmff/image/UserDescription.java | 2 +-
.../org/apache/sis/storage/geopackage/Content.java | 2 +-
.../main/org/apache/sis/storage/gsf/GSFStore.java | 2 +-
.../org/apache/sis/storage/gdal/GDALStore.java | 2 +-
.../org/apache/sis/storage/gdal/TiledResource.java | 2 +-
68 files changed, 203 insertions(+), 223 deletions(-)
rename endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/{base => metadata}/LegalSymbols.java (99%)
rename endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/{base => metadata}/MetadataBuilder.java (99%)
rename endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/{base => metadata}/MetadataFetcher.java (98%)
rename endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/{base => metadata}/ResourceLineage.java (99%)
copy {optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal => endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata}/package-info.java (89%)
rename endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/{base => metadata}/MetadataBuilderTest.java (99%)
delete mode 100644 endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/TreeFormatCustomization.java
(sis) 01/02: Replace the internal `TreeFormatCustomization` interface by a public `TreeTable.Node.isVisible()` method.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 3123aa404b0a6c489b08e45c95829ded05caa423
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Fri May 15 15:34:37 2026 +0200
Replace the internal `TreeFormatCustomization` interface by a public `TreeTable.Node.isVisible()` method.
---
.../main/org/apache/sis/metadata/TreeNode.java | 84 ++++++++++++++++++----
.../org/apache/sis/metadata/TreeNodeChildren.java | 9 ++-
.../org/apache/sis/metadata/TreeTableView.java | 55 +-------------
.../apache/sis/metadata/TreeTableFormatTest.java | 15 ++--
.../org/apache/sis/util/collection/TreeTable.java | 18 ++++-
.../sis/util/collection/TreeTableFormat.java | 40 ++++-------
.../internal/shared/TreeFormatCustomization.java | 51 -------------
7 files changed, 118 insertions(+), 154 deletions(-)
diff --git a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNode.java b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNode.java
index 6c44ff7bb4..a4abb46eba 100644
--- a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNode.java
+++ b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNode.java
@@ -26,7 +26,10 @@ import java.util.NoSuchElementException;
import java.util.ConcurrentModificationException;
import java.util.function.Function;
import org.opengis.annotation.Obligation;
+import org.opengis.metadata.citation.Citation;
import org.apache.sis.xml.NilReason;
+import org.apache.sis.xml.bind.NonMarshalledAuthority;
+import org.apache.sis.xml.bind.SpecializedIdentifier;
import org.apache.sis.xml.bind.lan.LocaleAndCharset;
import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
@@ -403,7 +406,7 @@ class TreeNode implements Node {
* as a {@link java.util.Locale} node with a {@link java.nio.charset.Charset} child. This separation is done by
* {@link LocaleAndCharset}.
*/
- final Function<TreeNode,Node> decorator;
+ final Function<TreeNode, Node> decorator;
/**
* Creates a new child for a property of the given metadata at the given index.
@@ -543,7 +546,7 @@ class TreeNode implements Node {
* Gets whether the property is mandatory, optional or conditional, or {@code null} if unspecified.
*/
@Override
- Obligation getObligation() {
+ final Obligation getObligation() {
return accessor.obligation(indexInData);
}
@@ -605,7 +608,7 @@ class TreeNode implements Node {
/**
* A node for an element in a collection. This class needs the iteration order to be stable.
*/
- static final class CollectionElement extends Element {
+ static class CollectionElement extends Element {
/**
* Index of the element in the collection, in iteration order.
*/
@@ -633,7 +636,7 @@ class TreeNode implements Node {
*/
@Debug
@Override
- void appendIdentifier(final StringBuilder buffer) {
+ final void appendIdentifier(final StringBuilder buffer) {
super.appendIdentifier(buffer);
buffer.append('[').append(indexInList).append(']');
}
@@ -642,7 +645,7 @@ class TreeNode implements Node {
* Returns the zero-based index of this node in the metadata property.
*/
@Override
- Integer getIndex() {
+ final Integer getIndex() {
return indexInList;
}
@@ -651,7 +654,7 @@ class TreeNode implements Node {
* Index numbering begins at 1, since this name if for human reading.
*/
@Override
- CharSequence getName() {
+ final CharSequence getName() {
CharSequence name = super.getName();
final int size = PropertyAccessor.size(super.getUserObject());
if (size >= 2) {
@@ -665,7 +668,7 @@ class TreeNode implements Node {
* then fetch the element at the index represented by this node.
*/
@Override
- public Object getUserObject() {
+ public final Object getUserObject() {
final Object collection = super.getUserObject();
final Collection<?> values;
if (collection instanceof Collection<?>) {
@@ -709,7 +712,7 @@ class TreeNode implements Node {
* Sets the property value for this node.
*/
@Override
- void setUserObject(Object value) {
+ final void setUserObject(Object value) {
cachedValue = null;
canUseCache = false;
final Collection<?> values = (Collection<?>) super.getUserObject();
@@ -748,7 +751,7 @@ class TreeNode implements Node {
* This is a bit unusual, since nil reasons usually apply to the whole property.
*/
@Override
- NilReason getNilReason() {
+ final NilReason getNilReason() {
// Do not check `canUseCache` because it applies to TableColumn.VALUE.
if (cachedValue == null) cachedValue = getUserObject();
return NilReason.forObject(cachedValue);
@@ -760,7 +763,7 @@ class TreeNode implements Node {
* This is a bit unusual, since nil reasons usually apply to the whole property.
*/
@Override
- void setNilReason(final NilReason value) {
+ final void setNilReason(final NilReason value) {
setUserObject(value != null ? value.createNilObject(baseType) : null);
}
@@ -769,7 +772,7 @@ class TreeNode implements Node {
* should be the same for both nodes.
*/
@Override
- public boolean equals(final Object other) {
+ public final boolean equals(final Object other) {
return super.equals(other) && ((CollectionElement) other).indexInList == indexInList;
}
@@ -777,13 +780,68 @@ class TreeNode implements Node {
* Returns a hash code value for this node.
*/
@Override
- public int hashCode() {
+ public final int hashCode() {
return super.hashCode() ^ indexInList;
}
}
- // -------- Final methods (defined in terms of above methods only) ----------------------------
+
+
+ /**
+ * Special case for a node for which the parent is a {@link Citation}.
+ * This node hides the <abbr>ISBN</abbr> and <abbr>ISSN</abbr> identifiers,
+ * because they will be formatted in the {@code ISBN} and {@code ISSN} properties instead.
+ * We apply this filtering for avoiding redundancies in the tree representation.
+ */
+ static final class CitationElement extends CollectionElement {
+ /**
+ * Creates a new node for the given collection element.
+ *
+ * @param parent the parent of this node. Shall be for a {@link Citation}.
+ * @param metadata the metadata object for which this node will be a value.
+ * @param accessor accessor to use for fetching the name, type and collection.
+ * @param indexInData index to be given to the accessor of fetching the collection.
+ * @param indexInList index of the element in the collection, in iteration order.
+ */
+ CitationElement(final TreeNode parent, final Object metadata,
+ final PropertyAccessor accessor, final int indexInData, final int indexInList)
+ {
+ super(parent, metadata, accessor, indexInData, indexInList);
+ }
+
+ /**
+ * Returns {@code false} if the value is an <abbr>ISBN</abbr> or <abbr>ISSN</abbr> identifier.
+ * Those identifiers will be formatted in the {@code ISBN} and {@code ISSN} properties instead.
+ *
+ * <p>Since this method is invoked (indirectly) during iteration over the children, the value
+ * may have been cached by {@link org.apache.sis.metadata.TreeNodeChildren.Iter#next()}.
+ * This method tries to use the cached value instead of computing it again.</p>
+ */
+ @Override
+ public boolean isVisible() {
+ Object value = cachedValue;
+ if (value == null) {
+ value = getUserObject();
+ }
+ if (value instanceof SpecializedIdentifier) {
+ final Citation authority = ((SpecializedIdentifier) value).getAuthority();
+ if (authority instanceof NonMarshalledAuthority && ((NonMarshalledAuthority) authority).isBookOrSerialNumber()) {
+ return false;
+ }
+ }
+ return super.isVisible();
+ }
+ }
+
+
+
+
+ // ┌───────────────────────────────────────────────────────────────────────────────────────────────────────┐
+ // │ Final methods (defined in terms of above methods only) │
+ // └───────────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+
/**
diff --git a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNodeChildren.java b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNodeChildren.java
index d3b480119a..95d0fce1ab 100644
--- a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNodeChildren.java
+++ b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeNodeChildren.java
@@ -22,6 +22,7 @@ import java.util.Collections;
import java.util.AbstractCollection;
import java.util.NoSuchElementException;
import java.util.ConcurrentModificationException;
+import org.opengis.metadata.citation.Citation;
import org.apache.sis.util.collection.BackingStoreException;
import org.apache.sis.util.collection.TableColumn;
import org.apache.sis.util.collection.TreeTable;
@@ -269,7 +270,11 @@ final class TreeNodeChildren extends AbstractCollection<TreeTable.Node> {
* A ClassCastException below would be a logical error in this class.
*/
if (node == null || ((TreeNode.CollectionElement) node).indexInList != subIndex) {
- node = new TreeNode.CollectionElement(parent, metadata, accessor, index, subIndex);
+ if (Citation.class.isAssignableFrom(parent.baseType)) {
+ node = new TreeNode.CitationElement(parent, metadata, accessor, index, subIndex);
+ } else {
+ node = new TreeNode.CollectionElement(parent, metadata, accessor, index, subIndex);
+ }
}
} else {
/*
@@ -322,7 +327,7 @@ final class TreeNodeChildren extends AbstractCollection<TreeTable.Node> {
*/
@Override
public void clear() {
- for (int i=childCount(); --i>=0;) {
+ for (int i = childCount(); --i >= 0;) {
clearAt(i);
}
}
diff --git a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeTableView.java b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeTableView.java
index f6a1419ef1..681e8c7f8e 100644
--- a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeTableView.java
+++ b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/TreeTableView.java
@@ -21,16 +21,11 @@ import java.io.Serializable;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.util.function.Predicate;
-import org.opengis.metadata.citation.Citation;
import org.apache.sis.util.ArraysExt;
import org.apache.sis.util.collection.TreeTable;
import org.apache.sis.util.collection.TableColumn;
import org.apache.sis.util.collection.TreeTableFormat;
import org.apache.sis.util.collection.Containers;
-import org.apache.sis.util.internal.shared.TreeFormatCustomization;
-import org.apache.sis.xml.bind.SpecializedIdentifier;
-import org.apache.sis.xml.bind.NonMarshalledAuthority;
import org.apache.sis.system.Semaphores;
@@ -51,7 +46,7 @@ import org.apache.sis.system.Semaphores;
*
* @author Martin Desruisseaux (Geomatys)
*/
-final class TreeTableView implements TreeTable, TreeFormatCustomization, Serializable {
+final class TreeTableView implements TreeTable, Serializable {
/**
* For cross-version compatibility.
*/
@@ -153,54 +148,6 @@ final class TreeTableView implements TreeTable, TreeFormatCustomization, Seriali
});
}
- /**
- * Returns the filter to use when formatting an instance of this {@code TreeTable}.
- * This filter will be combined with the filter that the user may specify by a call
- * to {@link TreeTableFormat#setNodeFilter(Predicate)}.
- */
- @Override
- public Predicate<TreeTable.Node> filter() {
- return TreeTableView::filter;
- }
-
- /**
- * Invoked during the formatting of a tree node for hiding the ISBN and ISSN identifiers of a {@link Citation}.
- * Those identifiers will be formatted in the {@code ISBN} and {@code ISSN} properties instead. We apply this
- * filtering for avoiding redundancies in the tree representation.
- */
- private static boolean filter(final TreeTable.Node node) {
- /*
- * The special case implemented in this method applies only to two attributes in the Citation interface.
- * We test for this condition first because the call to TreeNode.getParent() is cheap and allow to detect
- * soon the metadata instances that do not need further examination.
- */
- final Node parent = node.getParent();
- if (parent instanceof TreeNode && Citation.class.isAssignableFrom(((TreeNode) parent).baseType)) {
- Object value = null;
- if (node instanceof TreeNode) {
- /*
- * Since this method is invoked (indirectly) during iteration over the children, the value may have
- * been cached by TreeNodeChildren.Iter.next(). Try to use this value instead of computing it again.
- */
- value = ((TreeNode) node).cachedValue;
- }
- if (value == null) {
- value = node.getUserObject();
- }
- /*
- * Filter out the ISBN and ISSN identifiers if they are inside a Citation object.
- * We keep them if the user added them to other kinds of objects.
- */
- if (value instanceof SpecializedIdentifier) {
- final Citation authority = ((SpecializedIdentifier) value).getAuthority();
- if (authority instanceof NonMarshalledAuthority && ((NonMarshalledAuthority) authority).isBookOrSerialNumber()) {
- return false;
- }
- }
- }
- return true;
- }
-
/**
* Invoked on serialization. Write the metadata object instead of the {@linkplain #root} node.
*
diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeTableFormatTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeTableFormatTest.java
index ce8f2b02f9..ad562b03ac 100644
--- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeTableFormatTest.java
+++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeTableFormatTest.java
@@ -46,6 +46,7 @@ import org.apache.sis.metadata.iso.citation.DefaultResponsibility;
*
* @author Martin Desruisseaux (Geomatys)
*/
+@SuppressWarnings("exports")
public final class TreeTableFormatTest extends TestCase {
/**
* The formatter to use.
@@ -64,7 +65,7 @@ public final class TreeTableFormatTest extends TestCase {
* Creates a band for the given minimum and maximum wavelengths, in centimetres.
*/
private static DefaultBand createBand(final double min, final double max) {
- final DefaultBand band = new DefaultBand();
+ final var band = new DefaultBand();
band.setMinValue(min);
band.setMaxValue(max);
band.setUnits(Units.CENTIMETRE);
@@ -106,13 +107,13 @@ public final class TreeTableFormatTest extends TestCase {
*/
@Test
public void testProcessing() {
- final DefaultCitation titled = new DefaultCitation("Some specification");
- final DefaultCitation coded = new DefaultCitation();
- final DefaultCitation untitled = new DefaultCitation();
+ final var titled = new DefaultCitation("Some specification");
+ final var coded = new DefaultCitation();
+ final var untitled = new DefaultCitation();
titled .setPresentationForms(Set.of(PresentationForm.DOCUMENT_HARDCOPY));
coded .setPresentationForms(Set.of(PresentationForm.IMAGE_HARDCOPY));
untitled.setCitedResponsibleParties(Set.of(new DefaultResponsibility(Role.AUTHOR, null, null)));
- final DefaultProcessing processing = new DefaultProcessing();
+ final var processing = new DefaultProcessing();
processing.setDocumentations(List.of(titled, coded, untitled));
final String text = format.format(processing.asTreeTable());
assertMultilinesEquals(
@@ -131,7 +132,7 @@ public final class TreeTableFormatTest extends TestCase {
*/
@Test
public void testImageDescription() {
- final DefaultImageDescription image = new DefaultImageDescription();
+ final var image = new DefaultImageDescription();
image.setAttributeGroups(List.of(
new DefaultAttributeGroup(null, createBand(0.25, 0.26)),
new DefaultAttributeGroup(null, createBand(0.28, 0.29))
@@ -156,7 +157,7 @@ public final class TreeTableFormatTest extends TestCase {
*/
@Test
public void testTreeWithCustomElements() {
- final DefaultCitation citation = new DefaultCitation();
+ final var citation = new DefaultCitation();
citation.setAlternateTitles(List.of(
new SimpleInternationalString("Apple"),
new SimpleInternationalString("Orange"),
diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTable.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTable.java
index 372fe26d16..a3a400ef4d 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTable.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTable.java
@@ -18,6 +18,7 @@ package org.apache.sis.util.collection;
import java.util.Collection;
import java.util.List;
+import java.util.function.Predicate;
/**
@@ -119,7 +120,7 @@ public interface TreeTable {
* The methods providing a default implementations are suitable for unmodifiable tree nodes.
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 1.5
+ * @version 1.7
* @since 0.3
*/
public interface Node {
@@ -227,6 +228,21 @@ public interface TreeTable {
return false;
}
+ /**
+ * Determines whether this node should be shown in a string or <abbr>GUI</abbr> representation of the tree.
+ * Overriding this method produces the same effect as specifying a {@linkplain TreeTableFormat#setNodeFilter
+ * node filter at formatting time}, but this method is more convenient when the decision to show the node or
+ * not depends on the {@code Node} implementation.
+ *
+ * @return whether this node should be shown.
+ *
+ * @see TreeTableFormat#setNodeFilter(Predicate)
+ * @since 1.7
+ */
+ default boolean isVisible() {
+ return true;
+ }
+
/**
* Returns the user object associated to this node.
* The user object is for information purpose only and does not appear in the rendered tree.
diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTableFormat.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTableFormat.java
index 5146de0a14..54018b3535 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTableFormat.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/TreeTableFormat.java
@@ -43,7 +43,6 @@ import org.apache.sis.math.NumberType;
import org.apache.sis.util.internal.Acyclic;
import org.apache.sis.util.internal.shared.PropertyFormat;
import org.apache.sis.util.internal.shared.LocalizedParseException;
-import org.apache.sis.util.internal.shared.TreeFormatCustomization;
import static org.apache.sis.util.Characters.NO_BREAK_SPACE;
@@ -92,7 +91,7 @@ import static org.apache.sis.util.Characters.NO_BREAK_SPACE;
* than the user object of a parent node <var>A</var>, then the children of the <var>C</var> node will not be formatted.
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 1.1
+ * @version 1.7
* @since 0.3
*/
public class TreeTableFormat extends TabularFormat<TreeTable> {
@@ -325,11 +324,16 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
/**
* Sets a filter specifying whether a node should be formatted or ignored.
- * Filters are tested at formatting time for all children of the root node (but not for the root node itself).
+ * Filters are tested at formatting time for all children of the root node, but not for the root node itself.
* Filters are ignored at parsing time.
*
+ * <p>This method can be used for the same purpose as overriding the {@link TreeTable.Node#isVisible()} method,
+ * except that this {@code setNodeFilter(…)} method does not require control over the {@code TreeTable.Node}
+ * implementation.</p>
+ *
* @param filter filter for specifying whether a node should be formatted, or {@code null} for no filtering.
*
+ * @see TreeTable.Node#isVisible()
* @since 1.0
*/
public void setNodeFilter(final Predicate<TreeTable.Node> filter) {
@@ -625,12 +629,6 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
* of a node, and discarded when the formatting is finished.</p>
*/
private final class Writer extends PropertyFormat {
- /**
- * Combination of {@link #nodeFilter} with other filter that may be specified by the tree table to format.
- * The {@code TreeTable}-specific filter is specified by {@link TreeFormatCustomization}.
- */
- private final Predicate<TreeTable.Node> filter;
-
/**
* The columns to write.
*/
@@ -666,9 +664,9 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
/**
* Creates a new instance which will write to the given appendable.
*
- * @param out where to format the tree.
- * @param tree the tree table to format.
- * @param columns the columns of the tree table to format.
+ * @param out where to format the tree.
+ * @param tree the tree table to format.
+ * @param columns the columns of the tree table to format.
* @param recursionGuard an initially empty set.
*/
Writer(final Appendable out, final TreeTable tree, final TableColumn<?>[] columns,
@@ -681,17 +679,6 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
this.values = new Object[columns.length];
this.isLast = new boolean[8];
this.recursionGuard = recursionGuard;
-
- @SuppressWarnings("LocalVariableHidesMemberVariable") // To be stored in the field if successful.
- Predicate<TreeTable.Node> filter = nodeFilter;
- if (tree instanceof TreeFormatCustomization) {
- final var custom = (TreeFormatCustomization) tree;
- final Predicate<TreeTable.Node> more = custom.filter();
- if (more != null) {
- filter = (filter != null) ? more.and(filter) : more;
- }
- }
- this.filter = filter;
setTabulationExpanded(true);
setLineSeparator(multiLineCells ? TreeTableFormat.this.getLineSeparator() : " ¶ ");
}
@@ -841,13 +828,14 @@ public class TreeTableFormat extends TabularFormat<TreeTable> {
/**
* Returns the next filtered element from the given iterator, or {@code null} if none.
- * The filter applied by this method combines {@link #getNodeFilter()} with the filter
- * returned by {@link TreeFormatCustomization#filter()}.
+ * The filter applied by this method combines {@link #getNodeFilter()} with the value
+ * returned by {@link TreeTable.Node#isVisible()}.
*/
private TreeTable.Node next(final Iterator<? extends TreeTable.Node> it) {
+ final Predicate<TreeTable.Node> filter = nodeFilter;
while (it.hasNext()) {
final TreeTable.Node next = it.next();
- if (next != null) {
+ if (next != null && next.isVisible()) {
if (filter == null || filter.test(next)) {
return next;
}
diff --git a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/TreeFormatCustomization.java b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/TreeFormatCustomization.java
deleted file mode 100644
index 98347569b5..0000000000
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/TreeFormatCustomization.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.
- */
-package org.apache.sis.util.internal.shared;
-
-import java.util.function.Predicate;
-import org.apache.sis.util.collection.TreeTable;
-import org.apache.sis.util.collection.TreeTableFormat;
-
-
-/**
- * Customization of {@link TreeTable} formatting on a per-instance basis. Methods in this interface
- * are invoked by {@link TreeTableFormat#format(TreeTable, Appendable)} before to format the tree.
- * Non-null return values are merged with the {@code TreeTableFormat} configuration.
- *
- * <h2>Design note</h2>
- * methods in this class are invoked for configuring the formatter before to write the tree.
- * We do not use this interface as callbacks invoked for individual rows during formatting.
- * The reason is that functions provided by this interface may need to manage a state
- * (for example {@linkplain #filter() filtering} may depend on previous rows) but we do not want
- * to force implementations to store such state in {@code TreeFormatCustomization} instances
- * since objects implementing this interface may be immutable.
- *
- * <p>This class is not yet in public API. We are waiting for more experience before to decide if it should be
- * committed API.</p>
- *
- * @author Martin Desruisseaux (Geomatys)
- */
-public interface TreeFormatCustomization {
- /**
- * Returns the tree node filter to use when formatting instances of the {@code TreeTable}.
- * If non-null, then the filter is combined with {@link TreeTableFormat#getNodeFilter()}
- * by a "and" operation.
- *
- * @return the tree node filter to use for the {@code TreeTable} instance being formatted.
- */
- Predicate<TreeTable.Node> filter();
-}
(sis) 02/02: Move the storage metadata helper classes to a separated package. This is in anticipation for the addition of more types.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 63c9dc02ec675b9e42554e66ea002228a19987c0
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Fri May 15 17:23:20 2026 +0200
Move the storage metadata helper classes to a separated package.
This is in anticipation for the addition of more types.
---
.../main/org/apache/sis/storage/landsat/BandGroup.java | 2 +-
.../main/org/apache/sis/storage/landsat/MetadataReader.java | 2 +-
.../main/org/apache/sis/storage/geotiff/GeoTiffStore.java | 2 +-
.../main/org/apache/sis/storage/geotiff/Writer.java | 2 +-
.../sis/storage/geotiff/reader/GridGeometryBuilder.java | 2 +-
.../sis/storage/geotiff/reader/ImageMetadataBuilder.java | 2 +-
.../org/apache/sis/storage/geotiff/reader/XMLMetadata.java | 2 +-
.../org/apache/sis/storage/geotiff/writer/GeoEncoder.java | 2 +-
.../apache/sis/storage/geotiff/reader/XMLMetadataTest.java | 2 +-
.../main/org/apache/sis/storage/netcdf/MetadataReader.java | 2 +-
.../main/org/apache/sis/storage/netcdf/base/Decoder.java | 2 +-
.../org/apache/sis/storage/netcdf/base/RasterResource.java | 2 +-
.../apache/sis/storage/netcdf/classic/ChannelDecoder.java | 2 +-
.../org/apache/sis/storage/netcdf/ucar/DecoderWrapper.java | 2 +-
.../main/org/apache/sis/storage/sql/SQLStore.java | 2 +-
.../main/org/apache/sis/storage/sql/feature/Database.java | 2 +-
.../main/org/apache/sis/storage/gpx/Types.java | 2 +-
endorsed/src/org.apache.sis.storage/main/module-info.java | 13 +++++++++++++
.../main/org/apache/sis/storage/AbstractFeatureSet.java | 2 +-
.../apache/sis/storage/AbstractGridCoverageResource.java | 2 +-
.../main/org/apache/sis/storage/AbstractResource.java | 2 +-
.../main/org/apache/sis/storage/CoverageSubset.java | 2 +-
.../main/org/apache/sis/storage/FeatureSubset.java | 2 +-
.../apache/sis/storage/aggregate/AggregatedFeatureSet.java | 2 +-
.../apache/sis/storage/aggregate/AggregatedResource.java | 2 +-
.../sis/storage/aggregate/BandAggregateGridResource.java | 2 +-
.../sis/storage/aggregate/ConcatenatedGridResource.java | 2 +-
.../org/apache/sis/storage/aggregate/GroupAggregate.java | 2 +-
.../main/org/apache/sis/storage/base/CodeType.java | 12 ++++++------
.../apache/sis/storage/base/DocumentedStoreProvider.java | 2 +-
.../main/org/apache/sis/storage/base/URIDataStore.java | 1 +
.../main/org/apache/sis/storage/base/package-info.java | 2 +-
.../main/org/apache/sis/storage/csv/Store.java | 2 +-
.../main/org/apache/sis/storage/esri/RasterStore.java | 2 +-
.../main/org/apache/sis/storage/folder/Store.java | 2 +-
.../main/org/apache/sis/storage/image/WorldFileStore.java | 2 +-
.../apache/sis/storage/{base => metadata}/LegalSymbols.java | 3 ++-
.../sis/storage/{base => metadata}/MetadataBuilder.java | 3 ++-
.../sis/storage/{base => metadata}/MetadataFetcher.java | 8 ++++----
.../sis/storage/{base => metadata}/ResourceLineage.java | 2 +-
.../apache/sis/storage/{base => metadata}/package-info.java | 4 ++--
.../main/org/apache/sis/storage/tiling/TileMatrix.java | 2 +-
.../main/org/apache/sis/storage/tiling/TileMatrixSet.java | 2 +-
.../main/org/apache/sis/storage/wkt/Store.java | 2 +-
.../main/org/apache/sis/storage/xml/Store.java | 2 +-
.../sis/storage/{base => metadata}/MetadataBuilderTest.java | 2 +-
.../apache/sis/storage/coveragejson/CoverageJsonStore.java | 2 +-
.../org/apache/sis/storage/geoheif/CoverageBuilder.java | 2 +-
.../main/org/apache/sis/storage/geoheif/GeoHeifStore.java | 2 +-
.../main/org/apache/sis/storage/isobmff/Box.java | 2 +-
.../main/org/apache/sis/storage/isobmff/ContainerBox.java | 2 +-
.../main/org/apache/sis/storage/isobmff/base/Copyright.java | 2 +-
.../sis/storage/isobmff/base/FDItemInfoExtension.java | 2 +-
.../org/apache/sis/storage/isobmff/base/ItemInfoEntry.java | 2 +-
.../org/apache/sis/storage/isobmff/base/ItemReference.java | 2 +-
.../main/org/apache/sis/storage/isobmff/base/Meta.java | 2 +-
.../apache/sis/storage/isobmff/image/UserDescription.java | 2 +-
.../main/org/apache/sis/storage/geopackage/Content.java | 2 +-
.../main/org/apache/sis/storage/gsf/GSFStore.java | 2 +-
.../main/org/apache/sis/storage/gdal/GDALStore.java | 2 +-
.../main/org/apache/sis/storage/gdal/TiledResource.java | 2 +-
61 files changed, 84 insertions(+), 68 deletions(-)
diff --git a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/BandGroup.java b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/BandGroup.java
index 44249a07d6..9259354c82 100644
--- a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/BandGroup.java
+++ b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/BandGroup.java
@@ -32,7 +32,7 @@ import org.apache.sis.storage.AbstractResource;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.base.StoreResource;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.util.ArraysExt;
import org.apache.sis.util.collection.Containers;
diff --git a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java
index af026e8858..348fa06f0b 100644
--- a/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java
+++ b/endorsed/src/org.apache.sis.storage.earthobservation/main/org/apache/sis/storage/landsat/MetadataReader.java
@@ -64,7 +64,7 @@ import org.apache.sis.referencing.internal.shared.GeodeticObjectBuilder;
import org.apache.sis.referencing.internal.shared.ReferencingFactoryContainer;
import org.apache.sis.referencing.operation.provider.PolarStereographicB;
import org.apache.sis.referencing.operation.provider.TransverseMercator;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
// Specific to the geoapi-3.1 and geoapi-4.0 branches:
import org.opengis.referencing.operation.MathTransform;
diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java
index b7eea15c13..d51bdcebcd 100644
--- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java
+++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java
@@ -48,7 +48,7 @@ import org.apache.sis.storage.ReadOnlyStorageException;
import org.apache.sis.storage.WriteOnlyStorageException;
import org.apache.sis.storage.IncompatibleResourceException;
import org.apache.sis.storage.IllegalNameException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.StoreUtilities;
import org.apache.sis.storage.base.URIDataStore;
import org.apache.sis.storage.base.URIDataStoreProvider;
diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java
index 0dea85ff12..be885bc0f8 100644
--- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java
+++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Writer.java
@@ -46,7 +46,7 @@ import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreReferencingException;
import org.apache.sis.storage.IncompatibleResourceException;
import org.apache.sis.storage.ReadOnlyStorageException;
-import org.apache.sis.storage.base.MetadataFetcher;
+import org.apache.sis.storage.metadata.MetadataFetcher;
import org.apache.sis.storage.geotiff.writer.TagValue;
import org.apache.sis.storage.geotiff.writer.TileMatrix;
import org.apache.sis.storage.geotiff.writer.GeoEncoder;
diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/GridGeometryBuilder.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/GridGeometryBuilder.java
index ec1d0d93ed..35b5c0a569 100644
--- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/GridGeometryBuilder.java
+++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/GridGeometryBuilder.java
@@ -38,7 +38,7 @@ import org.apache.sis.referencing.operation.matrix.MatrixSIS;
import org.apache.sis.referencing.operation.matrix.Matrices;
import org.apache.sis.referencing.operation.transform.MathTransforms;
import org.apache.sis.referencing.operation.transform.DefaultMathTransformFactory;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.geotiff.base.Resources;
import org.apache.sis.util.internal.shared.DoubleDouble;
diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/ImageMetadataBuilder.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/ImageMetadataBuilder.java
index bdc9dd1331..a0819d454e 100644
--- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/ImageMetadataBuilder.java
+++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/ImageMetadataBuilder.java
@@ -22,7 +22,7 @@ import javax.measure.quantity.Length;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.geotiff.GeoTiffStore;
import org.apache.sis.storage.geotiff.base.Resources;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.measure.Units;
diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java
index fc8ae4e450..2821586bff 100644
--- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java
+++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/XMLMetadata.java
@@ -40,7 +40,7 @@ import javax.xml.namespace.QName;
import jakarta.xml.bind.JAXBException;
import org.apache.sis.io.stream.ChannelDataInput;
import org.apache.sis.temporal.LenientDateFormat;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.geotiff.base.Tags;
import org.apache.sis.util.collection.TreeTable;
diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/writer/GeoEncoder.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/writer/GeoEncoder.java
index 50047389e1..8071320a7c 100644
--- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/writer/GeoEncoder.java
+++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/writer/GeoEncoder.java
@@ -79,7 +79,7 @@ import org.apache.sis.coverage.grid.GridGeometry;
import org.apache.sis.coverage.grid.PixelInCell;
import org.apache.sis.coverage.grid.IncompleteGridGeometryException;
import org.apache.sis.storage.IncompatibleResourceException;
-import org.apache.sis.storage.base.MetadataFetcher;
+import org.apache.sis.storage.metadata.MetadataFetcher;
import org.apache.sis.storage.geotiff.base.UnitKey;
import org.apache.sis.storage.geotiff.base.GeoKeys;
import org.apache.sis.storage.geotiff.base.GeoCodes;
diff --git a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/reader/XMLMetadataTest.java b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/reader/XMLMetadataTest.java
index bb3093b660..0f78c32b10 100644
--- a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/reader/XMLMetadataTest.java
+++ b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/reader/XMLMetadataTest.java
@@ -17,7 +17,7 @@
package org.apache.sis.storage.geotiff.reader;
import org.apache.sis.metadata.iso.DefaultMetadata;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.xml.Namespaces;
import org.apache.sis.xml.internal.shared.LegacyNamespaces;
import org.apache.sis.util.collection.DefaultTreeTable;
diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
index 655c714107..191f1a4d7b 100644
--- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -51,7 +51,7 @@ import org.apache.sis.metadata.iso.DefaultMetadata;
import org.apache.sis.metadata.iso.citation.*;
import org.apache.sis.metadata.iso.identification.*;
import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.netcdf.base.Axis;
import org.apache.sis.storage.netcdf.base.Decoder;
diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Decoder.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Decoder.java
index 50634f326d..18b8f64d17 100644
--- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Decoder.java
+++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Decoder.java
@@ -39,7 +39,7 @@ import org.apache.sis.system.Modules;
import org.apache.sis.setup.GeometryLibrary;
import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.netcdf.internal.Resources;
import org.apache.sis.util.Utilities;
diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java
index ee90326291..d3165d88a2 100644
--- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java
+++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/RasterResource.java
@@ -35,7 +35,7 @@ import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreContentException;
import org.apache.sis.storage.Resource;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.StoreResource;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.internal.shared.Strings;
diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
index c63353e35f..8c8c1ecd36 100644
--- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
+++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
@@ -44,7 +44,7 @@ import org.opengis.parameter.InvalidParameterCardinalityException;
import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreContentException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.netcdf.base.DataType;
import org.apache.sis.storage.netcdf.base.Decoder;
import org.apache.sis.storage.netcdf.base.Node;
diff --git a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/ucar/DecoderWrapper.java b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/ucar/DecoderWrapper.java
index a6a8dc281e..697d959a21 100644
--- a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/ucar/DecoderWrapper.java
+++ b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/ucar/DecoderWrapper.java
@@ -52,7 +52,7 @@ import org.apache.sis.metadata.sql.MetadataSource;
import org.apache.sis.metadata.sql.MetadataStoreException;
import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.netcdf.base.Decoder;
import org.apache.sis.storage.netcdf.base.Variable;
diff --git a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/SQLStore.java b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/SQLStore.java
index 6c8bce2ee2..096efde53d 100644
--- a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/SQLStore.java
+++ b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/SQLStore.java
@@ -47,7 +47,7 @@ import org.apache.sis.storage.sql.feature.Database;
import org.apache.sis.storage.sql.feature.Resources;
import org.apache.sis.storage.sql.feature.SchemaModifier;
import org.apache.sis.storage.sql.feature.InfoStatements;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.io.stream.InternalOptionKey;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.ArraysExt;
diff --git a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java
index bedd4d2668..f803411ac6 100644
--- a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java
+++ b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java
@@ -54,7 +54,7 @@ import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.IllegalNameException;
import org.apache.sis.storage.sql.SQLStore;
import org.apache.sis.storage.sql.ResourceDefinition;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.filter.base.WarningEvent;
import org.apache.sis.geometry.wrapper.Geometries;
diff --git a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/Types.java b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/Types.java
index 2b438969be..3819d827c0 100644
--- a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/Types.java
+++ b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/Types.java
@@ -40,7 +40,7 @@ import org.apache.sis.feature.builder.PropertyTypeBuilder;
import org.apache.sis.feature.builder.AttributeRole;
import org.apache.sis.feature.internal.shared.AttributeConvention;
import org.apache.sis.geometry.wrapper.Geometries;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.util.iso.DefaultNameFactory;
// Specific to the geoapi-3.1 and geoapi-4.0 branches:
diff --git a/endorsed/src/org.apache.sis.storage/main/module-info.java b/endorsed/src/org.apache.sis.storage/main/module-info.java
index 5973ec510e..4a43ba85e5 100644
--- a/endorsed/src/org.apache.sis.storage/main/module-info.java
+++ b/endorsed/src/org.apache.sis.storage/main/module-info.java
@@ -65,6 +65,19 @@ module org.apache.sis.storage {
org.apache.sis.openoffice,
org.apache.sis.gui; // In the "optional" sub-project.
+ exports org.apache.sis.storage.metadata to
+ org.apache.sis.storage.xml,
+ org.apache.sis.storage.sql,
+ org.apache.sis.storage.netcdf,
+ org.apache.sis.storage.geotiff,
+ org.apache.sis.storage.earthobservation,
+ org.apache.sis.storage.coveragejson, // In the "incubator" sub-project.
+ org.apache.sis.storage.geoheif, // In the "incubator" sub-project.
+ org.apache.sis.storage.geopackage, // In the "incubator" sub-project.
+ org.apache.sis.storage.gsf, // In the "incubator" sub-project.
+ org.apache.sis.storage.gdal, // In the "optional" sub-project.
+ org.apache.sis.gui; // In the "optional" sub-project.
+
exports org.apache.sis.io.stream to
org.apache.sis.storage.xml,
org.apache.sis.storage.sql,
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractFeatureSet.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractFeatureSet.java
index d9cf12ac8a..7a4080689b 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractFeatureSet.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractFeatureSet.java
@@ -23,7 +23,7 @@ import java.util.function.Consumer;
import org.opengis.util.GenericName;
import org.opengis.metadata.Metadata;
import org.apache.sis.storage.event.StoreListeners;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.WarningAdapter;
import org.apache.sis.filter.Optimization;
import org.apache.sis.filter.base.WarningEvent;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java
index 749208b422..1f25184b5f 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java
@@ -39,7 +39,7 @@ import org.apache.sis.coverage.grid.GridGeometry;
import org.apache.sis.coverage.grid.GridExtent;
import org.apache.sis.coverage.grid.DisjointExtentException;
import org.apache.sis.coverage.grid.PixelInCell;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.internal.Resources;
import org.apache.sis.measure.Latitude;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractResource.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractResource.java
index 7efdf61d4f..65ac2e4767 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractResource.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractResource.java
@@ -30,7 +30,7 @@ import org.apache.sis.storage.event.StoreEvent;
import org.apache.sis.storage.event.StoreListener;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.internal.Resources;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.logging.Logging;
import org.apache.sis.xml.NilReason;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/CoverageSubset.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/CoverageSubset.java
index d1be9768ed..9191577413 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/CoverageSubset.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/CoverageSubset.java
@@ -34,7 +34,7 @@ import org.apache.sis.coverage.grid.DisjointExtentException;
import org.apache.sis.coverage.internal.shared.RangeArgument;
import org.apache.sis.referencing.internal.shared.DirectPositionView;
import org.apache.sis.storage.internal.Resources;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.StoreUtilities;
import org.apache.sis.util.collection.BackingStoreException;
import org.apache.sis.pending.jdk.JDK16;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureSubset.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureSubset.java
index df9e4468e4..e1cfd8b828 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureSubset.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureSubset.java
@@ -21,7 +21,7 @@ import java.util.stream.Stream;
import org.opengis.metadata.Metadata;
import org.apache.sis.filter.Optimization;
import org.apache.sis.feature.internal.shared.FeatureProjection;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.StoreUtilities;
import org.apache.sis.storage.internal.Resources;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
index 6a7e1f17b2..2fbc724929 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
@@ -30,7 +30,7 @@ import org.apache.sis.storage.Resource;
import org.apache.sis.storage.FeatureSet;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.AbstractFeatureSet;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
// Specific to the geoapi-3.1 and geoapi-4.0 branches:
import org.opengis.feature.FeatureType;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedResource.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedResource.java
index 6483743206..53dab749ef 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedResource.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/AggregatedResource.java
@@ -27,7 +27,7 @@ import org.apache.sis.storage.DataSet;
import org.apache.sis.storage.AbstractResource;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.event.StoreListeners;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.geometry.Envelopes;
import org.apache.sis.geometry.ImmutableEnvelope;
import org.apache.sis.util.internal.shared.Strings;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/BandAggregateGridResource.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/BandAggregateGridResource.java
index 5e465d0cdc..aeeb43b3c1 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/BandAggregateGridResource.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/BandAggregateGridResource.java
@@ -31,7 +31,7 @@ import org.apache.sis.storage.AbstractGridCoverageResource;
import org.apache.sis.storage.RasterLoadingStrategy;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.MemoryGridCoverageResource;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.ArraysExt;
import org.apache.sis.util.collection.BackingStoreException;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/ConcatenatedGridResource.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/ConcatenatedGridResource.java
index 3d5837f971..16f1f76de2 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/ConcatenatedGridResource.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/ConcatenatedGridResource.java
@@ -37,7 +37,7 @@ import org.apache.sis.storage.GridCoverageResource;
import org.apache.sis.storage.MemoryGridCoverageResource;
import org.apache.sis.storage.RasterLoadingStrategy;
import org.apache.sis.storage.event.StoreListeners;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.util.ArraysExt;
import org.apache.sis.util.ComparisonMode;
import org.apache.sis.util.collection.BackingStoreException;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/GroupAggregate.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/GroupAggregate.java
index dcb0b27e05..f45602bc48 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/GroupAggregate.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/aggregate/GroupAggregate.java
@@ -23,7 +23,7 @@ import org.apache.sis.storage.Aggregate;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.GridCoverageResource;
import org.apache.sis.storage.event.StoreListeners;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.coverage.SampleDimension;
import org.apache.sis.util.collection.Containers;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/CodeType.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/CodeType.java
index 2a1dcf9709..14e0859157 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/CodeType.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/CodeType.java
@@ -27,7 +27,7 @@ import org.apache.sis.util.internal.shared.DefinitionURI;
/**
* Heuristic rules for determining whether an authority code seems to be actually a file path,
- * or a code defined in the URN namespace, or a simple code.
+ * or a code defined in the <abbr>URN</abbr> namespace, or a simple authority code.
*
* @author Martin Desruisseaux (IRD, Geomatys)
*/
@@ -39,9 +39,9 @@ public enum CodeType {
FILE(false, false),
/**
- * The code is a URL like {@code "http:"} or {@code "file:"},
- * with the exception of HTTP in the "www.opengis.net" domain.
- * The latter case is identified by {@link #HTTP_OGC} instead of this enum.
+ * The code is a <abbr>URL</abbr> like {@code "http:"} or {@code "file:"},
+ * with the exception of <abbr>HTTP</abbr> in the {@code "www.opengis.net"} domain.
+ * The latter case is identified by {@link #HTTP_OGC} instead of this enumeration value.
*/
URL(false, true),
@@ -51,7 +51,7 @@ public enum CodeType {
URN(true, true),
/**
- * The code is an URL in the {@code "http://www.opengis.net"} namespace.
+ * The code is an <abbr>URL</abbr> in the {@code "http://www.opengis.net"} namespace.
*/
HTTP_OGC(true, true),
@@ -114,7 +114,7 @@ public enum CodeType {
* Infers the type for the given authority code.
*
* @param codeOrPath the code or file path.
- * @return whether the given argument seems to be a file path, URL, URN of authority code.
+ * @return whether the given argument seems to be a file path, <abbr>URL</abbr>, <abbr>URN</abbr> of authority code.
*/
public static CodeType guess(final String codeOrPath) {
final int length = codeOrPath.length();
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/DocumentedStoreProvider.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/DocumentedStoreProvider.java
index 8231954996..6e33c3522d 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/DocumentedStoreProvider.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/DocumentedStoreProvider.java
@@ -27,7 +27,7 @@ import org.apache.sis.system.Modules;
/**
- * Base class of data store providers having an entry in the metadata SQL database.
+ * Base class of data store providers having an entry in the metadata <abbr>SQL</abbr> database.
* The primary key in the {@code MD_Format} table must be the name given at construction time.
*
* @author Martin Desruisseaux (Geomatys)
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/URIDataStore.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/URIDataStore.java
index 33df2902b2..0e610d9174 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/URIDataStore.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/URIDataStore.java
@@ -47,6 +47,7 @@ import org.apache.sis.storage.DataStoreProvider;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreContentException;
import org.apache.sis.storage.ReadOnlyStorageException;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.internal.Resources;
import org.apache.sis.io.stream.IOUtilities;
import org.apache.sis.util.ArraysExt;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/package-info.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/package-info.java
index 881aa66126..35acb306de 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/package-info.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/package-info.java
@@ -16,7 +16,7 @@
*/
/**
- * Base classes for the implementation of SIS storages.
+ * Base classes for the implementation of Apache <abbr>SIS</abbr> data stores.
*
* <STRONG>Do not use!</STRONG>
*
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java
index 74ba1d6c77..a773d56db7 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java
@@ -61,7 +61,7 @@ import org.apache.sis.storage.DataStoreContentException;
import org.apache.sis.storage.DataStoreReferencingException;
import org.apache.sis.storage.StorageConnector;
import org.apache.sis.storage.FeatureSet;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.URIDataStore;
import org.apache.sis.storage.internal.RewindableLineReader;
import org.apache.sis.storage.internal.Resources;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RasterStore.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RasterStore.java
index 3c41ec7eeb..225590bc00 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RasterStore.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RasterStore.java
@@ -42,7 +42,7 @@ import org.apache.sis.storage.DataStoreProvider;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.StorageConnector;
import org.apache.sis.storage.base.PRJDataStore;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.image.internal.shared.ColorModelFactory;
import org.apache.sis.image.internal.shared.ColorModelBuilder;
import org.apache.sis.image.internal.shared.ObservableImage;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/folder/Store.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/folder/Store.java
index a1e57ae6aa..6e50f868da 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/folder/Store.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/folder/Store.java
@@ -49,7 +49,7 @@ import org.apache.sis.storage.StorageConnector;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.UnsupportedStorageException;
import org.apache.sis.storage.aggregate.CoverageAggregator;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.StoreUtilities;
import org.apache.sis.storage.base.StoreResource;
import org.apache.sis.storage.internal.Resources;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStore.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStore.java
index 460d453299..e3cbd3a9b2 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStore.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStore.java
@@ -54,7 +54,7 @@ import org.apache.sis.storage.ReadOnlyStorageException;
import org.apache.sis.storage.UnsupportedStorageException;
import org.apache.sis.storage.modifier.CoverageModifier;
import org.apache.sis.storage.base.PRJDataStore;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.AuxiliaryContent;
import org.apache.sis.referencing.internal.shared.AffineTransform2D;
import org.apache.sis.util.CharSequences;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/LegalSymbols.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/LegalSymbols.java
similarity index 99%
rename from endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/LegalSymbols.java
rename to endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/LegalSymbols.java
index 457e23abe3..b972feb8fa 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/LegalSymbols.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/LegalSymbols.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.storage.base;
+package org.apache.sis.storage.metadata;
import java.time.Year;
import java.util.Locale;
@@ -26,6 +26,7 @@ import org.opengis.util.InternationalString;
import org.apache.sis.util.DefaultInternationalString;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.logging.Logging;
+import org.apache.sis.storage.base.StoreUtilities;
import org.apache.sis.metadata.iso.citation.AbstractParty;
import org.apache.sis.metadata.iso.citation.DefaultCitation;
import org.apache.sis.metadata.iso.citation.DefaultCitationDate;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/MetadataBuilder.java
similarity index 99%
rename from endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java
rename to endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/MetadataBuilder.java
index 46039d1a7d..117500d026 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/MetadataBuilder.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.storage.base;
+package org.apache.sis.storage.metadata;
import java.time.Instant;
import java.time.Duration;
@@ -97,6 +97,7 @@ import org.apache.sis.storage.AbstractResource;
import org.apache.sis.storage.AbstractFeatureSet;
import org.apache.sis.storage.AbstractGridCoverageResource;
import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.storage.base.StoreUtilities;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.internal.Resources;
import org.apache.sis.coverage.SampleDimension;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataFetcher.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/MetadataFetcher.java
similarity index 98%
rename from endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataFetcher.java
rename to endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/MetadataFetcher.java
index 02d0a6715a..b3758ca040 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataFetcher.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/MetadataFetcher.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.storage.base;
+package org.apache.sis.storage.metadata;
import java.util.ArrayList;
import java.util.List;
@@ -54,9 +54,9 @@ import org.opengis.metadata.citation.Responsibility;
/**
* Helper methods for fetching metadata to be written by {@code DataStore} implementations.
- * This is not a general-purpose builder suitable for public API, because the methods provided
- * in this class are tailored for Apache SIS data store needs.
- * API of this class may change in any future SIS versions.
+ * This is not a general-purpose builder suitable for public <abbr>API</abbr>,
+ * because the methods provided in this class are tailored for Apache <abbr>SIS</abbr> data store needs.
+ * <abbr>API</abbr> of this class may change in any future <abbr>SIS</abbr> versions.
*
* @author Martin Desruisseaux (Geomatys)
*/
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/ResourceLineage.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/ResourceLineage.java
similarity index 99%
rename from endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/ResourceLineage.java
rename to endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/ResourceLineage.java
index 82c4e26070..ee3e8a514c 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/ResourceLineage.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/ResourceLineage.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.storage.base;
+package org.apache.sis.storage.metadata;
import java.util.Collection;
import org.opengis.metadata.Metadata;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/package-info.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/package-info.java
similarity index 89%
copy from endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/package-info.java
copy to endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/package-info.java
index 881aa66126..62ffd4413b 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/package-info.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/metadata/package-info.java
@@ -16,7 +16,7 @@
*/
/**
- * Base classes for the implementation of SIS storages.
+ * Helper methods for handling <abbr>ISO</abbr> or native metadata in data stores.
*
* <STRONG>Do not use!</STRONG>
*
@@ -26,4 +26,4 @@
* @author Martin Desruisseaux (Geomatys)
* @author Johann Sorel (Geomatys)
*/
-package org.apache.sis.storage.base;
+package org.apache.sis.storage.metadata;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrix.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrix.java
index 7112ba3919..257ef1afb2 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrix.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrix.java
@@ -26,7 +26,7 @@ import org.apache.sis.coverage.grid.GridGeometry;
import org.apache.sis.coverage.grid.PixelInCell;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.NoSuchDataException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
/**
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrixSet.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrixSet.java
index a93afc0e17..11e37f43af 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrixSet.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/tiling/TileMatrixSet.java
@@ -22,7 +22,7 @@ import org.opengis.util.GenericName;
import org.opengis.geometry.Envelope;
import org.opengis.metadata.Metadata;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
/**
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/Store.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/Store.java
index 75054c0733..9b85043f16 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/Store.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/Store.java
@@ -31,7 +31,7 @@ import org.apache.sis.storage.StorageConnector;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreContentException;
import org.apache.sis.storage.internal.Resources;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.URIDataStore;
import org.apache.sis.referencing.IdentifiedObjects;
import org.apache.sis.setup.GeometryLibrary;
diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/Store.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/Store.java
index c96ba1d07a..344c2f4c05 100644
--- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/Store.java
+++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/Store.java
@@ -37,7 +37,7 @@ import org.apache.sis.storage.StorageConnector;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.UnsupportedStorageException;
import org.apache.sis.storage.base.URIDataStore;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.event.WarningEvent;
import org.apache.sis.metadata.iso.DefaultMetadata;
import org.apache.sis.util.resources.Errors;
diff --git a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/base/MetadataBuilderTest.java b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/metadata/MetadataBuilderTest.java
similarity index 99%
rename from endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/base/MetadataBuilderTest.java
rename to endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/metadata/MetadataBuilderTest.java
index f80fc6a943..96c46cc5db 100644
--- a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/base/MetadataBuilderTest.java
+++ b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/metadata/MetadataBuilderTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.storage.base;
+package org.apache.sis.storage.metadata;
import java.time.Year;
import java.util.Map;
diff --git a/incubator/src/org.apache.sis.storage.coveragejson/main/org/apache/sis/storage/coveragejson/CoverageJsonStore.java b/incubator/src/org.apache.sis.storage.coveragejson/main/org/apache/sis/storage/coveragejson/CoverageJsonStore.java
index b5b87069e6..ebc5a6f9f5 100644
--- a/incubator/src/org.apache.sis.storage.coveragejson/main/org/apache/sis/storage/coveragejson/CoverageJsonStore.java
+++ b/incubator/src/org.apache.sis.storage.coveragejson/main/org/apache/sis/storage/coveragejson/CoverageJsonStore.java
@@ -44,7 +44,7 @@ import org.apache.sis.storage.WritableAggregate;
import org.apache.sis.storage.coveragejson.binding.Coverage;
import org.apache.sis.storage.coveragejson.binding.CoverageCollection;
import org.apache.sis.storage.coveragejson.binding.CoverageJsonObject;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.URIDataStore;
import org.apache.sis.io.stream.IOUtilities;
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/CoverageBuilder.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/CoverageBuilder.java
index c9e9f8489d..4c0adef74b 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/CoverageBuilder.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/CoverageBuilder.java
@@ -45,7 +45,7 @@ import org.apache.sis.coverage.grid.GridExtent;
import org.apache.sis.coverage.grid.GridGeometry;
import org.apache.sis.coverage.grid.PixelInCell;
import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.modifier.CoverageModifier;
import org.apache.sis.storage.isobmff.Box;
import org.apache.sis.storage.isobmff.base.ItemInfoEntry;
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/GeoHeifStore.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/GeoHeifStore.java
index d5935cdcbb..7b6ab9a994 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/GeoHeifStore.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/geoheif/GeoHeifStore.java
@@ -41,7 +41,7 @@ import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreClosedException;
import org.apache.sis.storage.Resource;
import org.apache.sis.storage.StorageConnector;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.URIDataStore;
import org.apache.sis.storage.modifier.CoverageModifier;
import org.apache.sis.storage.event.StoreListeners;
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/Box.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/Box.java
index 088d11c261..2c69492d73 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/Box.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/Box.java
@@ -18,7 +18,7 @@ package org.apache.sis.storage.isobmff;
import java.time.Instant;
import java.util.UUID;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
/**
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/ContainerBox.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/ContainerBox.java
index bd83bd5c03..cc46ff2d9b 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/ContainerBox.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/ContainerBox.java
@@ -19,7 +19,7 @@ package org.apache.sis.storage.isobmff;
import java.io.IOException;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreContentException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
/**
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Copyright.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Copyright.java
index 46d56a05c4..a32e50e1ef 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Copyright.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Copyright.java
@@ -20,7 +20,7 @@ import java.util.Locale;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import org.apache.sis.io.stream.ChannelDataInput;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.isobmff.FullBox;
import org.apache.sis.storage.isobmff.Reader;
import org.apache.sis.storage.isobmff.UnsupportedVersionException;
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/FDItemInfoExtension.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/FDItemInfoExtension.java
index fc1c9c03fd..9c4fb186c7 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/FDItemInfoExtension.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/FDItemInfoExtension.java
@@ -21,7 +21,7 @@ import java.io.IOException;
import org.apache.sis.io.stream.ChannelDataInput;
import org.apache.sis.storage.isobmff.Box;
import org.apache.sis.storage.isobmff.Reader;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
/**
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemInfoEntry.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemInfoEntry.java
index c60f50d501..6bf77c9ec5 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemInfoEntry.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemInfoEntry.java
@@ -20,7 +20,7 @@ import java.net.URI;
import java.io.IOException;
import org.apache.sis.io.stream.ChannelDataInput;
import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.isobmff.Box;
import org.apache.sis.storage.isobmff.BoxRegistry;
import org.apache.sis.storage.isobmff.FullBox;
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemReference.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemReference.java
index 8c15872943..52319fb4e7 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemReference.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/ItemReference.java
@@ -18,7 +18,7 @@ package org.apache.sis.storage.isobmff.base;
import java.io.IOException;
import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.isobmff.BoxRegistry;
import org.apache.sis.storage.isobmff.FullBox;
import org.apache.sis.storage.isobmff.Reader;
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Meta.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Meta.java
index f454142ba9..4a3da43a61 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Meta.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/base/Meta.java
@@ -22,7 +22,7 @@ import org.apache.sis.storage.isobmff.Box;
import org.apache.sis.storage.isobmff.Reader;
import org.apache.sis.storage.isobmff.FullBox;
import org.apache.sis.storage.isobmff.BoxRegistry;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
/**
diff --git a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/image/UserDescription.java b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/image/UserDescription.java
index 94df33aa41..f6273d9f66 100644
--- a/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/image/UserDescription.java
+++ b/incubator/src/org.apache.sis.storage.geoheif/main/org/apache/sis/storage/isobmff/image/UserDescription.java
@@ -18,7 +18,7 @@ package org.apache.sis.storage.isobmff.image;
import java.util.Locale;
import java.io.IOException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.isobmff.FullBox;
import org.apache.sis.storage.isobmff.Reader;
import org.apache.sis.storage.isobmff.UnsupportedVersionException;
diff --git a/incubator/src/org.apache.sis.storage.geopackage/main/org/apache/sis/storage/geopackage/Content.java b/incubator/src/org.apache.sis.storage.geopackage/main/org/apache/sis/storage/geopackage/Content.java
index 2856608183..8383b3edac 100644
--- a/incubator/src/org.apache.sis.storage.geopackage/main/org/apache/sis/storage/geopackage/Content.java
+++ b/incubator/src/org.apache.sis.storage.geopackage/main/org/apache/sis/storage/geopackage/Content.java
@@ -46,7 +46,7 @@ import org.apache.sis.storage.DataStoreReferencingException;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.sql.DataAccess;
import org.apache.sis.storage.sql.ResourceDefinition;
-import org.apache.sis.storage.base.MetadataFetcher;
+import org.apache.sis.storage.metadata.MetadataFetcher;
import org.apache.sis.metadata.sql.internal.shared.SQLUtilities;
diff --git a/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/GSFStore.java b/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/GSFStore.java
index 8e75d2d67c..dd06969cb3 100644
--- a/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/GSFStore.java
+++ b/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/GSFStore.java
@@ -25,7 +25,7 @@ import org.apache.sis.parameter.Parameters;
import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.StorageConnector;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.URIDataStore;
diff --git a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDALStore.java b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDALStore.java
index db6bb21603..1a4144c569 100644
--- a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDALStore.java
+++ b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDALStore.java
@@ -47,7 +47,7 @@ import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreClosedException;
import org.apache.sis.storage.StorageConnector;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.base.URIDataStore;
import org.apache.sis.util.collection.Containers;
import org.apache.sis.util.internal.shared.Constants;
diff --git a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledResource.java b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledResource.java
index 4d4b16c684..848ef79411 100644
--- a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledResource.java
+++ b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledResource.java
@@ -47,7 +47,7 @@ import org.apache.sis.image.internal.shared.ColorModelBuilder;
import org.apache.sis.image.internal.shared.ColorModelFactory;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreReferencingException;
-import org.apache.sis.storage.base.MetadataBuilder;
+import org.apache.sis.storage.metadata.MetadataBuilder;
import org.apache.sis.storage.tiling.TiledGridCoverage;
import org.apache.sis.storage.tiling.TiledGridCoverageResource;
import org.apache.sis.system.Configuration;