This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 2c9e4aa65442f443e326a980325b3d580c67ff95 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Tue Apr 18 20:18:21 2023 +0200 Reduce the use of <div class="note"> sections, replaced by headings. This commit replaces only a small fraction of them. More will be done progressively in other commits. --- .../java/org/apache/sis/gui/coverage/GridView.java | 25 ++++++++-------- .../sis/gui/coverage/ImagePropertyExplorer.java | 8 +++--- .../org/apache/sis/gui/dataset/ExpandableList.java | 5 ++-- .../org/apache/sis/gui/map/GestureFollower.java | 4 +-- .../java/org/apache/sis/gui/map/StatusBar.java | 12 ++++---- .../gui/referencing/RecentReferenceSystems.java | 19 +++++++------ .../apache/sis/coverage/grid/DomainLinearizer.java | 6 ++-- .../apache/sis/coverage/grid/GridCoverage2D.java | 5 ++-- .../sis/coverage/grid/GridCoverageBuilder.java | 12 ++++---- .../apache/sis/coverage/grid/GridDerivation.java | 33 +++++++++++----------- .../org/apache/sis/coverage/grid/GridExtent.java | 14 ++++----- .../org/apache/sis/coverage/grid/GridGeometry.java | 18 ++++++------ .../apache/sis/coverage/grid/GridRoundingMode.java | 8 +++--- .../apache/sis/coverage/grid/PixelTranslation.java | 24 ++++++++-------- .../sis/coverage/grid/ResampledGridCoverage.java | 6 ++-- .../main/java/org/apache/sis/portrayal/Canvas.java | 13 +++++---- .../internal/storage/inflater/CopyFromBytes.java | 12 ++++---- .../apache/sis/internal/storage/inflater/LZW.java | 12 ++++---- .../apache/sis/storage/geotiff/GeoTiffStore.java | 14 ++++----- .../sis/storage/geotiff/ImageMetadataBuilder.java | 6 ++-- .../org/apache/sis/internal/netcdf/Convention.java | 32 ++++++++++----------- .../org/apache/sis/internal/netcdf/Decoder.java | 6 ++-- .../apache/sis/internal/netcdf/GridMapping.java | 5 ++-- .../org/apache/sis/internal/netcdf/Linearizer.java | 6 ++-- .../org/apache/sis/internal/netcdf/Variable.java | 24 ++++++++-------- .../apache/sis/storage/netcdf/AttributeNames.java | 24 ++++++++-------- .../apache/sis/storage/netcdf/MetadataReader.java | 3 +- .../sis/internal/sql/feature/TableAnalyzer.java | 5 ++-- .../apache/sis/internal/stream/DeferredStream.java | 6 ++-- .../sis/internal/storage/MetadataBuilder.java | 18 ++++++------ .../sis/internal/storage/ResourceOnFileSystem.java | 14 ++++----- .../apache/sis/internal/storage/StoreMetadata.java | 18 ++++++------ .../sis/internal/storage/TiledGridCoverage.java | 6 ++-- .../apache/sis/internal/storage/io/Markable.java | 10 +++---- .../org/apache/sis/internal/storage/io/Region.java | 12 ++++---- .../internal/storage/io/RewindableLineReader.java | 5 ++-- .../org/apache/sis/internal/storage/wkt/Store.java | 4 +-- .../main/java/org/apache/sis/storage/DataSet.java | 6 ++-- .../sis/storage/DataStoreContentException.java | 4 +-- .../org/apache/sis/storage/DataStoreProvider.java | 21 ++++++-------- .../org/apache/sis/storage/DataStoreRegistry.java | 6 ++-- .../main/java/org/apache/sis/storage/Resource.java | 5 ++-- .../org/apache/sis/storage/StorageConnector.java | 4 +-- .../org/apache/sis/storage/WritableAggregate.java | 5 ++-- .../org/apache/sis/storage/WritableFeatureSet.java | 6 ++-- .../storage/aggregate/AggregatedFeatureSet.java | 9 +++--- .../storage/gpx/GroupAsPolylineOperation.java | 3 +- .../storage/xml/stream/FormattedWriter.java | 6 ++-- .../storage/xml/stream/StaxStreamReader.java | 12 ++++---- 49 files changed, 269 insertions(+), 272 deletions(-) diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java index a08938a9a2..4e870e46ea 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java @@ -141,9 +141,9 @@ public class GridView extends Control { * This size includes the {@linkplain #cellSpacing cell spacing}. * It shall be a number strictly greater than zero. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final DoubleProperty headerWidth; @@ -152,9 +152,9 @@ public class GridView extends Control { * This size includes the {@linkplain #cellSpacing cell spacing}. * It shall be a number strictly greater than zero. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final DoubleProperty cellWidth; @@ -162,9 +162,9 @@ public class GridView extends Control { * Height of all rows in the grid. * It shall be a number strictly greater than zero. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final DoubleProperty cellHeight; @@ -173,18 +173,18 @@ public class GridView extends Control { * There is no property for vertical cell spacing because increasing the * {@linkplain #cellHeight cell height} should be sufficient. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final DoubleProperty cellSpacing; /** * The background color of row and column headers. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final ObjectProperty<Paint> headerBackground; @@ -550,8 +550,9 @@ public class GridView extends Control { * if an error occurred during {@link RenderedImage#getTile(int, int)} invocation. * The returned bounds are zero-based (may not be the bounds in image coordinates). * - * <div class="note"><b>Note:</b> we use AWT rectangle instead of JavaFX rectangle - * because generally we use AWT for everything related to {@link RenderedImage}.</div> + * <h4>Design note</h4> + * We use AWT rectangle instead of JavaFX rectangle + * because generally we use AWT for everything related to {@link RenderedImage}. * * @param tileX <var>x</var> coordinates of the tile for which to get the bounds. * @param tileY <var>y</var> coordinates of the tile for which to get the bounds. diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java index 0a5b24b8ab..6320fb3d8d 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java @@ -81,9 +81,9 @@ public class ImagePropertyExplorer extends Widget { * The root image to describe. This image will be the root of a tree; * children will be image {@linkplain RenderedImage#getSources() sources}. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final ObjectProperty<RenderedImage> image; @@ -138,9 +138,9 @@ public class ImagePropertyExplorer extends Widget { * when the {@link #image} change. This is done for allowing the garbage collector to reclaim memory. * The content is reset to {@link #image} properties when {@code updateOnChange} become {@code true} again. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link BooleanProperty#set(boolean)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final BooleanProperty updateOnChange; diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java index 0537ba6636..ba3bd19aba 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java @@ -124,11 +124,12 @@ final class ExpandableList extends TransformationList<Feature,Feature> * Removes the expanded rows. This method does not fire change event; * it is caller's responsibility to perform those tasks. * - * <div class="note"><b>Note:</b> we return {@code null} instead of an empty list if + * <h4>Design note</h4> + * We return {@code null} instead of an empty list if * there are no removed elements because we want to force callers to perform a null check. * The reason is that if there was no expansion rows, then {@link #indexOfExpanded} has an * invalid value and using that value in {@link #nextRemove(int, List)} may be dangerous. - * A {@link NullPointerException} would intercept that error sooner.</div> + * A {@link NullPointerException} would intercept that error sooner. * * @return the removed rows, or {@code null} if none. */ diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java index 275a84f0d0..7e418f8218 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java @@ -251,12 +251,12 @@ public class GestureFollower extends CanvasFollower implements EventHandler<Mous * Invoked after the source "objective to display" transform has been updated. * This implementation adjusts the cursor position for compensating the relative change in mouse position. * - * <div class="note"><b>Details:</b> + * <h4>Details</h4> * If the map moved in the {@linkplain #source source} canvas without a change of mouse cursor position * (for example if the user navigates using the keyboard), then the mouse position changed relatively to * the map, so the cursor position on the {@linkplain #target target} canvas needs to be updated accordingly. * This is a temporary change applied until the next {@link MouseEvent} gives us new mouse coordinates relative - * to the map.</div> + * to the map. */ @Override protected void transformedSource(final TransformChangeEvent event) { diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java index 27c3df7629..234a81d9ba 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java @@ -245,9 +245,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> { * when this {@code StatusBar} is <em>not</em> associated to a {@link MapCanvas} * (for example it may be used with a {@link org.apache.sis.gui.coverage.GridView} instead).</p> * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. * * @see MapCanvas#getObjectiveCRS() * @see MapCanvas#getObjectiveToDisplay() @@ -259,9 +259,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> { * This is initially the <cite>objective CRS</cite>, but may become different * if the user selects another reference system through contextual menu. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter method for this property; use {@link ReadOnlyObjectProperty#get()} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. * * @see #position */ @@ -430,9 +430,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> { * The property value may be {@code null} if there are no sample values to format. * If non-null, the text provided by this object will appear at the right of the coordinates. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final ObjectProperty<ValuesUnderCursor> sampleValuesProvider; diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java index 319bac2f60..be35de2eea 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java @@ -114,8 +114,9 @@ public class RecentReferenceSystems { * A pseudo-reference system for the "Other…" choice. We use a null value because {@link ChoiceBox} * seems to insist for inserting a null value in the items list when we remove the selected item. * - * <div class="note"><b>Maintenance note:</b> if this field is changed to a non-null value, - * search also for usages of {@code Object::nonNull} predicate.</div> + * <h4>Maintenance note</h4> + * If this field is changed to a non-null value, + * search also for usages of {@code Object::nonNull} predicate. */ static final ReferenceSystem OTHER = null; @@ -129,9 +130,9 @@ public class RecentReferenceSystems { * The area of interest, or {@code null} if none. This is used for filtering the reference systems added by * {@code addAlternatives(…)} and for providing some guidance to user when {@link CRSChooser} is shown. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final ObjectProperty<Envelope> areaOfInterest; @@ -144,9 +145,9 @@ public class RecentReferenceSystems { * The comparison criterion for considering two reference systems as a duplication. * The default value is {@link ComparisonMode#ALLOW_VARIANT}, i.e. axis orders are ignored. * - * <div class="note"><b>API note:</b> + * <h4>API note</h4> * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)} - * directly instead. We omit the "Property" suffix for making this operation more natural.</div> + * directly instead. We omit the "Property" suffix for making this operation more natural. */ public final ObjectProperty<ComparisonMode> duplicationCriterion; @@ -237,11 +238,11 @@ public class RecentReferenceSystems { * A filtered view of {@link #referenceSystems} without the {@link #OTHER} item. * This is the list returned to users by public API, but otherwise it is not used by this class. * - * <div class="note"><b>Design note:</b> - * the {@link #OTHER} item needs to exist in the list used internally by this class because those lists + * <h4>Design notes</h4> + * The {@link #OTHER} item needs to exist in the list used internally by this class because those lists * are used directly by controls like {@code ChoiceBox<ReferenceSystem>}, with the {@link #OTHER} value * handled in a special way by {@link ObjectStringConverter} for making the "Other…" item present in the - * list of choices. But since {@link #OTHER} is not a real CRS, we want to hide that trick to users.</div> + * list of choices. But since {@link #OTHER} is not a real CRS, we want to hide that trick to users. * * <p>This list is lazily created when first needed, * because it depends on {@link #referenceSystems} which is itself lazily created.</p> diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java index c60e25efd8..a9fb085af1 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java @@ -206,10 +206,10 @@ public class DomainLinearizer { * after a linear "grid to CRS" approximation has been computed by the <cite>Least Mean Squares</cite> method. * Subclasses can override this method for example in order to scale the conversion by some arbitrary factor. * - * <div class="note"><b>Tip:</b> - * scales (if desired) should be applied <em>before</em> {@code gridToCRS}, i.e. on grid coordinates. + * <h4>Tip</h4> + * Scales (if desired) should be applied <em>before</em> {@code gridToCRS}, i.e. on grid coordinates. * Scales applied after the transform (i.e. on "real world" coordinates) may give unexpected results - * if the conversion contains a rotation.</div> + * if the conversion contains a rotation. * * @param gridToCRS an approximation of the "grid to CRS" conversion computed by {@code DomainLinearizer}. * @return the approximation to use for creating a new {@link GridGeometry}. Should be linear. diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java index 7bbcd934b1..9dd2045456 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java @@ -69,8 +69,8 @@ import org.opengis.coverage.PointOutsideCoverageException; * The only restriction is that the {@linkplain GridGeometry#getExtent() grid extent} has a * {@linkplain GridExtent#getSize(int) size} equals to 1 in all dimensions except two of them. * - * <div class="note"><b>Example:</b> - * a remote sensing image may be valid only over some time range + * <h2>Example</h2> + * A remote sensing image may be valid only over some time range * (the temporal period of the satellite passing over observed area). * Envelopes for such grid coverage can have three dimensions: * the two usual ones (horizontal extent along <var>x</var> and <var>y</var>), @@ -78,7 +78,6 @@ import org.opengis.coverage.PointOutsideCoverageException; * This "two-dimensional" grid coverage can have any number of columns along <var>x</var> axis * and any number of rows along <var>y</var> axis, but only one plan along <var>t</var> axis. * This single plan can have a lower bound (the start time) and an upper bound (the end time). - * </div> * * <h2>Image size and location</h2> * The {@linkplain RenderedImage#getWidth() image width} and {@linkplain RenderedImage#getHeight() height} diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java index c495a84f89..f0fd0b1218 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java @@ -214,16 +214,16 @@ public class GridCoverageBuilder { * use row indices increasing in the opposite direction (toward down). * This effect can be compensated by invoking <code>{@linkplain #flipGridAxis(int) flipGridAxis}(1)</code>. * - * <div class="note"><b>Design note:</b> + * <p>{@code GridCoverageBuilder} provides method only for flipping axes. + * If more sophisticated operations is desired (for example a rotation), + * then {@link #setDomain(GridGeometry)} should be used instead of this method.</p> + * + * <h5>Design note</h5> * {@code GridCoverageBuilder} does not flip the <var>y</var> axis by default because not all * file formats have row indices increasing toward down. A counter-example is the netCDF format. * Even if we consider that the majority of images have <var>y</var> axis flipped, things become * less obvious when considering data in more than two dimensions. Having the same default policy - * (no flipping) for all dimensions make problem analysis easier.</div> - * - * {@code GridCoverageBuilder} provides method only for flipping axes. - * If more sophisticated operations is desired (for example a rotation), - * then {@link #setDomain(GridGeometry)} should be used instead of this method. + * (no flipping) for all dimensions make problem analysis easier. * * <h4>Default implementation</h4> * The default implementation creates a new {@link GridGeometry} from the given envelope diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java index 006247c392..3e15f4cbb8 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java @@ -296,10 +296,11 @@ public class GridDerivation { * For example if subsampling is 2, then a margin of 6 cells specified with this method will result * in a margin of 3 cells in the grid extent computed by the {@link #build()} method. * - * <div class="note"><b>Use case:</b> - * if the caller wants to apply bilinear interpolations in an image, (s)he will need 1 more pixel on each image border. - * If the caller wants to apply bi-cubic interpolations, (s)he will need 2 more pixels on each image border.</div> + * <h4>Use case</h4> + * If the caller wants to apply bilinear interpolations in an image, (s)he will need 1 more pixel on each image border. + * If the caller wants to apply bi-cubic interpolations, (s)he will need 2 more pixels on each image border. * + * <h4>Default values</h4> * If this method is never invoked, the default value is zero for all dimensions. * If this method is invoked too late, an {@link IllegalStateException} is thrown. * If the {@code cellCounts} array length is shorter than the grid dimension, @@ -956,8 +957,8 @@ public class GridDerivation { * to a single point. Dimensions can be left unspecified either by assigning to {@code slicePoint} a CRS * without those dimensions, or by assigning the NaN value to some coordinates. * - * <div class="note"><b>Example:</b> - * if the {@linkplain GridGeometry#getCoordinateReferenceSystem() coordinate reference system} of base grid geometry has + * <h4>Example</h4> + * If the {@linkplain GridGeometry#getCoordinateReferenceSystem() coordinate reference system} of base grid geometry has * (<var>longitude</var>, <var>latitude</var>, <var>time</var>) axes, then a (<var>longitude</var>, <var>latitude</var>) * slice at time <var>t</var> can be created with one of the following two positions: * <ul> @@ -965,9 +966,9 @@ public class GridDerivation { * <li>A one-dimensional position with (<var>t</var>) coordinate and the coordinate reference system set to * {@linkplain org.apache.sis.referencing.CRS#getTemporalComponent(CoordinateReferenceSystem) the temporal component} * of the grid geometry CRS.</li> - * </ul></div> + * </ul> * - * <p>Notes:</p> + * <h4>Usage notes</h4> * <ul> * <li>This method can be invoked after {@link #subgrid(Envelope, double...)}, but not before.</li> * <li>If a non-default rounding mode is desired, it should be {@linkplain #rounding(GridRoundingMode) specified} @@ -1216,14 +1217,14 @@ public class GridDerivation { * This method returns the {s₀, s₁, s₂} values while {@link #getSubsamplingOffsets()} * returns the {t₀, t₁, t₂} values. All subsampling values are strictly positive integers. * - * <div class="note"><b>Application to iterations</b><br> + * <p>This method can be invoked after {@link #build()} for getting additional information. + * If {@link #subgrid(GridExtent, int...)} has been invoked, then this method returns the + * values that were given in the {@code subsampling} argument.</p> + * + * <h4>Application to iterations</h4> * Iteration over {@code areaOfInterest} grid coordinates with a stride Δ<var>x</var>=1 * corresponds to an iteration in {@link #base} grid coordinates with a stride of Δ<var>x′</var>=s₀, - * a stride Δ<var>y</var>=1 corresponds to a stride Δ<var>y′</var>=s₁, <i>etc.</i></div> - * - * This method can be invoked after {@link #build()} for getting additional information. - * If {@link #subgrid(GridExtent, int...)} has been invoked, then this method returns the - * values that were given in the {@code subsampling} argument. + * a stride Δ<var>y</var>=1 corresponds to a stride Δ<var>y′</var>=s₁, <i>etc.</i> * * @return an <em>estimation</em> of the strides for accessing cells along each axis of {@link #base} grid. * @throws IllegalStateException if the subsampling factors are not integers. It may happen if the derived @@ -1259,8 +1260,8 @@ public class GridDerivation { * If a {@link #chunkSize} has been specified, then the subsampling will be a divisor of that size. * This is necessary for avoiding a drift of subsampled pixel coordinates computed from tile coordinates. * - * <div class="note"><b>Drift example:</b> - * if the tile size is 16 pixels and the subsampling is 3, then the subsampled tile size is ⌊16/3⌋ = 5 pixels. + * <h4>Drift example</h4> + * If the tile size is 16 pixels and the subsampling is 3, then the subsampled tile size is ⌊16/3⌋ = 5 pixels. * Pixel coordinates for each tile is as below: * * <table class="sis"> @@ -1276,7 +1277,7 @@ public class GridDerivation { * for a regular progression of those pixel coordinates. For {@code GridCoverageResource} implementations, * it would require to read the last row of tile #2 and insert those data as the first row of tile #3. * It does not only make implementations much more difficult, but also hurts performance because fetching - * a single tile would actually require the "physical" reading of 2 or more tiles.</div> + * a single tile would actually require the "physical" reading of 2 or more tiles. * * @param scale the scale factor to round. * @param dimension the dimension of the scale factor to round. diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java index 99da3df96e..e5098872c7 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java @@ -1506,17 +1506,17 @@ public class GridExtent implements GridEnvelope, LenientComparable, Serializable * accordingly (this is often equivalent to dividing high coordinates by the periods too, but a difference * of one cell may exist). * - * <div class="note"><b>Note:</b> + * <h4>Usage note</h4> * If the "real world" envelope computed from grid extent needs to stay approximately the same, then the * {@linkplain GridGeometry#getGridToCRS grid to CRS} transform needs to compensate the subsampling with * a pre-multiplication of each grid coordinates by {@code periods}. * However, the envelope computed that way may become <em>larger</em> after subsampling, not smaller. * This effect can be understood intuitively if we consider that cells become larger after subsampling, * which implies that accurate representation of the same envelope may require fractional cells on some - * grid borders.</div> + * grid borders. * - * This method does not reduce the number of dimensions of the grid extent. - * For dimensionality reduction, see {@link #selectDimensions(int[])}. + * <p>This method does not reduce the number of dimensions of the grid extent. + * For dimensionality reduction, see {@link #selectDimensions(int[])}.</p> * * <h4>Number of arguments</h4> * The {@code periods} array length should be equal to the {@linkplain #getDimension() number of dimensions}. @@ -1701,9 +1701,9 @@ public class GridExtent implements GridEnvelope, LenientComparable, Serializable * The returned extent has the same {@linkplain #getSize(int) size} than this extent, * i.e. both low and high grid coordinates are displaced by the same amount of cells. * - * <div class="note"><b>Example:</b> - * for an extent (x: [0…10], y: [2…4], z: [0…1]) and a translation {-2, 2}, - * the resulting extent would be (x: [-2…8], y: [4…6], z: [0…1]).</div> + * <h4>Example</h4> + * For an extent (x: [0…10], y: [2…4], z: [0…1]) and a translation {-2, 2}, + * the resulting extent would be (x: [-2…8], y: [4…6], z: [0…1]). * * <h4>Number of arguments</h4> * The {@code translation} array length should be equal to the {@linkplain #getDimension() number of dimensions}. diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java index 1f3f6207b8..6258fd011c 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java @@ -416,10 +416,10 @@ public class GridGeometry implements LenientComparable, Serializable { * smallest values (closest to negative infinity).</li> * </ul> * - * <div class="note"><b>API note:</b> - * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel + * <h4>API note</h4> + * There is no default value for {@code anchor} because experience shows that images shifted by ½ pixel * (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers - * to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center.</div> + * to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center. * * <div class="warning"><b>Upcoming API generalization:</b> * the {@code extent} type of this method may be changed to {@code GridEnvelope} interface in a future Apache SIS version. @@ -849,10 +849,10 @@ public class GridGeometry implements LenientComparable, Serializable { * with inclusive lower coordinates and <strong>exclusive</strong> upper coordinates.</li> * </ul> * - * <div class="note"><b>API note:</b> - * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel + * <h4>API note</h4> + * There is no default value for {@code anchor} because experience shows that images shifted by ½ pixel * (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers - * to always think about wether the desired <cite>grid to CRS</cite> transform shall map pixel corner or center.</div> + * to always think about wether the desired <cite>grid to CRS</cite> transform shall map pixel corner or center. * * @param anchor the cell part to map (center or corner). * @return the conversion from grid coordinates to "real world" coordinates (never {@code null}). @@ -1013,10 +1013,10 @@ public class GridGeometry implements LenientComparable, Serializable { * This is computed from the {@linkplain #getEnvelope() envelope} if the coordinate reference system * contains an horizontal component such as a geographic or projected CRS. * - * <div class="note"><b>API note:</b> - * this method does not throw {@link IncompleteGridGeometryException} because the geographic extent + * <h4>API note</h4> + * This method does not throw {@link IncompleteGridGeometryException} because the geographic extent * may be absent even with a complete grid geometry. Grid geometries are not required to have a - * spatial component on Earth surface; a raster could be a vertical profile for example.</div> + * spatial component on Earth surface; a raster could be a vertical profile for example. * * @return the geographic bounding box in "real world" coordinates. */ diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java index 4816855682..53996d5e82 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java @@ -39,14 +39,14 @@ public enum GridRoundingMode { * farthest from an integer value in order to keep unchanged the two values that are closer to integers.</li> * </ol> * - * <div class="note"><b>Example:</b> - * the [<var>low</var> … <var>high</var>] range may be slightly larger than desired in some rounding error situations. + * <h4>Example</h4> + * The [<var>low</var> … <var>high</var>] range may be slightly larger than desired in some rounding error situations. * For example if <var>low</var> before rounding was 1.49999 and <var>high</var> before rounding was 2.50001, then the * range after rounding will be [1…3] while the expected size is actually only 2 pixels. This {@code NEAREST} rounding * mode detects those rounding issues by comparing the <var>size</var> before and after rounding. In this example, the * size is 2.00002 pixels, which is closer to an integer value than the <var>low</var> and <var>high</var> values. - * Consequently, this {@code NEAREST} mode will rather adjust <var>low</var> or <var>high</var> (depending which one is - * farthest from integer values) in order to keep <var>size</var> at its closest integer value, which is 2.</div> + * Consequently, this {@code NEAREST} mode will rather adjust <var>low</var> or <var>high</var> (depending which + * one is farthest from integer values) in order to keep <var>size</var> at its closest integer value, which is 2. */ NEAREST, diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java index 37738d40be..25c7447fb3 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java @@ -220,17 +220,17 @@ public final class PixelTranslation extends Static implements Serializable { * This method concatenates −½, 0 or +½ translations on <em>all</em> dimensions before the given transform. * If the two given conventions are the same, then this method returns the given transform unchanged. * - * <div class="note"><b>Example:</b> - * if a given {@code gridToCRS} transform was mapping the <em>cell corner</em> to "real world" coordinates, then a call to + * <p>If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}. + * Otherwise {@code current} and {@code desired} arguments must be non-null.</p> + * + * <h4>Example</h4> + * If a given {@code gridToCRS} transform was mapping the <em>cell corner</em> to "real world" coordinates, then a call to * <code>translate(gridToCRS, {@link PixelInCell#CELL_CORNER CELL_CORNER}, {@link PixelInCell#CELL_CENTER CELL_CENTER})</code> * will return a new transform performing the following steps: first convert grid coordinates from <var>cell center</var> * convention ({@code desired}) to <var>cell corner</var> convention ({@code current}), then concatenate the given * {@code gridToCRS} transform which was designed for the <em>cell corner</em> convention. * The above-cited <var>cell center</var> → <var>cell corner</var> conversion is done by translating the grid coordinates - * by +½, because the grid coordinates (0,0) relative to cell center is (½,½) relative to cell corner.</div> - * - * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}. - * Otherwise {@code current} and {@code desired} arguments must be non-null. + * by +½, because the grid coordinates (0,0) relative to cell center is (½,½) relative to cell corner. * * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}. * @param current the pixel orientation of the given {@code gridToCRS} transform. @@ -270,14 +270,14 @@ public final class PixelTranslation extends Static implements Serializable { * This method concatenates −½, 0 or +½ translations on <em>two</em> dimensions before the given transform. * The given transform can have any number of input and output dimensions, but only two of them will be converted. * - * <div class="note"><b>Example:</b> - * if a given {@code gridToCRS} transform was mapping the upper-left corner to "real world" coordinates, then a call to + * <p>If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}. + * Otherwise {@code current} and {@code desired} arguments must be non-null.</p> + * + * <h4>Example</h4> + * If a given {@code gridToCRS} transform was mapping the upper-left corner to "real world" coordinates, then a call to * <code>translate(gridToCRS, {@link PixelOrientation#UPPER_LEFT UPPER_LEFT}, {@link PixelOrientation#CENTER CENTER}, 0, 1)</code> * will return a new transform translating grid coordinates by +0.5 before to apply the given {@code gridToCRS} transform. - * See example in above {@link #translate(MathTransform, PixelInCell, PixelInCell) translate} method for more details.</div> - * - * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}. - * Otherwise {@code current} and {@code desired} arguments must be non-null. + * See example in above {@link #translate(MathTransform, PixelInCell, PixelInCell) translate} method for more details. * * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}. * @param current the pixel orientation of the given {@code gridToCRS} transform. diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java index 997b357e3b..977db7019e 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java @@ -484,13 +484,13 @@ final class ResampledGridCoverage extends DerivedGridCoverage { /** * Computes a target grid extent by transforming the source grid extent. * - * <div class="note"><b>Note on rounding mode:</b> - * calculation of source envelope should use {@link GridRoundingMode#ENCLOSING} for making sure that we include + * <h4>Note on rounding mode</h4> + * Calculation of source envelope should use {@link GridRoundingMode#ENCLOSING} for making sure that we include * all needed data. On the opposite, calculation of target envelope should use {@link GridRoundingMode#CONTAINED} * for making sure that we interpolate only values where data are available. However, such "fully contained" mode * is often overly strict because a very small rounding error can cause the lost of an image row or column, * while using extrapolations for those values produce no perceptible errors. Consequently, this method uses - * {@link GridRoundingMode#NEAREST} as a compromise.</div> + * {@link GridRoundingMode#NEAREST} as a compromise. * * @param source the source grid extent to transform. * @param cornerToCRS transform from source grid corners to target CRS. diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java index 1c0eb58c8e..5826f0b8f1 100644 --- a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java +++ b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java @@ -449,16 +449,17 @@ public class Canvas extends Observable implements Localized { * spherical coordinate systems. The coordinate system may have a wraparound axis for * some "exotic" display devices (e.g. planetarium dome). * - * <div class="note"><b>Usage note:</b> invoking this method is rarely needed. It is sufficient - * to said that a display CRS exists at least conceptually, and that we define a conversion from - * the objective CRS to that display CRS. This method may be useful when the subclasses may be - * something else than {@link PlanarCanvas}, in which case the caller may want more information - * about the geometry of the display device.</div> - * * <p>Note that the {@link CRS#findOperation CRS.findOperation(…)} static method can generally * not handle this display CRS. To apply coordinate operations on display coordinates, * {@link #getObjectiveToDisplay()} transform must be inverted and used.</p> * + * <h4>Usage note</h4> + * Invoking this method is rarely needed. + * It is sufficient to said that a display CRS exists at least conceptually, + * and that we define a conversion from the objective CRS to that display CRS. + * This method may be useful when the subclasses may be something else than {@link PlanarCanvas}, + * in which case the caller may want more information about the geometry of the display device. + * * @return the Coordinate Reference System of the display device. * * @see #getObjectiveCRS() diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java index 833b2fa1d3..6b5a854019 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java @@ -62,11 +62,11 @@ abstract class CopyFromBytes extends Inflater { * Number of pixels per primitive element. * Always 1 except for multi-pixels packed images. * - * <div class="note"><b>Note:</b> - * this is "pixels per element", not "samples per element", because the value of this field shall be 1 + * <h4>Design note</h4> + * This is "pixels per element", not "samples per element", because the value of this field shall be 1 * in the {@link java.awt.image.SinglePixelPackedSampleModel} case (by contrast a "samples per element" * would have a value greater than 1). But this field can nevertheless be understood as a "samples per - * element" value where only one band is considered at a time.</div> + * element" value where only one band is considered at a time. */ private final int pixelsPerElement; @@ -186,12 +186,12 @@ abstract class CopyFromBytes extends Inflater { * Skips the number of chunks specified by the {@link #skipAfterChunks} array at the given index. * This method tries to move by incrementing the buffer position. * - * <div class="note"><b>Design note:</b> - * we do not use {@link ChannelDataInput#seek(long)} because the displacement is usually small. + * <h4>Design note</h4> + * We do not use {@link ChannelDataInput#seek(long)} because the displacement is usually small. * Changing the buffer position is sufficient in the majority of cases. If not, then it should * be okay to fill the buffer with next data (instead of doing a seek operation) because there * is usually few remaining values to skip. Performance of this method is important, so we try - * to avoid overhead.</div> + * to avoid overhead. * * @param skipIndex index in {@code skipAfterChunks} array. * @return new {@code skipIndex} value. diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java index dc397bf37b..465fa7323b 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java @@ -85,10 +85,10 @@ final class LZW extends CompressionChannel { * The position is chosen for leaving {@value #MAX_CODE_SIZE} bits for storing the length before * the offset value. * - * <div class="note"><b>Rational:</b> - * even in the worst case scenario where the same byte is always appended to the sequence, + * <h4>Rational</h4> + * Even in the worst case scenario where the same byte is always appended to the sequence, * the maximal length cannot exceeded the dictionary size because a {@link #CLEAR_CODE} - * will be emitted when the dictionary is full.</div> + * will be emitted when the dictionary is full. */ private static final int LOWEST_OFFSET_BIT = MAX_CODE_SIZE; @@ -104,10 +104,10 @@ final class LZW extends CompressionChannel { * It makes possible to use the extra size for growing a string up to that amount of bytes * without copying it. * - * <div class="note"><b>Note:</b> - * doing allocations only by blocks of 2² = 4 bytes may seem a waste of memory, but actually + * <h4>Performance note</h4> + * Doing allocations only by blocks of 2² = 4 bytes may seem a waste of memory, but actually * it reduces memory usage a lot (almost a factor 4) because of the copies avoided. - * We tried with alignment values 1, 2, 3 and found that 2 seems optimal.</div> + * We tried with alignment values 1, 2, 3 and found that 2 seems optimal. */ private static final int STRING_ALIGNMENT = 2; diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java index 218f2bb4f1..4858494bfa 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java @@ -107,8 +107,9 @@ public class GeoTiffStore extends DataStore implements Aggregate { * Defined as a namespace for use as the scope of children resources (the images). * This is created when first needed. * - * <div class="note"><b>Design note:</b> we do not create this field in the constructor because - * its creation invokes the user-overrideable {@link #customize(int, GenericName)} method.</div> + * <h4>Design note</h4> + * We do not create this field in the constructor because its creation invokes + * the user-overrideable {@link #customize(int, GenericName)} method. * * @see #namespace() */ @@ -169,16 +170,15 @@ public class GeoTiffStore extends DataStore implements Aggregate { /** * Creates a new GeoTIFF store as a component of a larger data store. + * If the {@code hidden} parameter is {@code true}, some metadata that would normally be + * provided in this {@code GeoTiffStore} will be provided by individual components instead. * - * <div class="note"><b>Example:</b> + * <h4>Example</h4> * A Landsat data set is a collection of files in a directory or ZIP file, * which includes more than 10 GeoTIFF files (one image per band or product for a scene). * {@link org.apache.sis.storage.landsat.LandsatStore} is a data store opening the Landsat * metadata file as the main file, then opening each band/product using a GeoTIFF data store. - * Those bands/products are components of the Landsat data store.</div> - * - * If the {@code hidden} parameter is {@code true}, some metadata that would normally be provided - * in this {@code GeoTiffStore} will be provided by individual components instead. + * Those bands/products are components of the Landsat data store. * * @param parent the parent that contains this new GeoTIFF store component, or {@code null} if none. * @param provider the factory that created this {@code DataStore} instance, or {@code null} if unspecified. diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java index 4e697a90e0..5ec77cc3c6 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java @@ -35,10 +35,10 @@ import static javax.imageio.plugins.tiff.BaselineTIFFTagSet.*; * Fields in the class are used only for information purposes; they do not * have incidence on the way Apache SIS will handle the GeoTIFF image. * - * <div class="note"><b>Note:</b> - * if those fields become useful to {@link ImageFileDirectory} in a future version, + * <h4>API note</h4> + * If those fields become useful to {@link ImageFileDirectory} in a future version, * we can move them into that class. Otherwise keeping those fields here allow to - * discard them (which save a little bit of space) when no longer needed.</div> + * discard them (which save a little bit of space) when no longer needed. * * @author Martin Desruisseaux (Geomatys) * @version 1.4 diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java index e3cf89b6e3..72cdc7cd69 100644 --- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java +++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java @@ -293,8 +293,10 @@ public class Convention { * not the same than the dimensions of the localization grid. In such case, the names returned by this method * are used for mapping the raster dimensions to the localization grid dimensions. * - * <div class="note"><b>Example:</b> - * consider the following netCDF file (simplified): + * <p>This feature is an extension to CF-conventions.</p> + * + * <h4>Example</h4> + * Consider the following netCDF file (simplified): * * <pre class="text"> * dimensions: @@ -324,9 +326,7 @@ public class Convention { * <cite>"Name of dimension 1"</cite> respectively, then we can associate the same dimension <strong>names</strong> * to all those variables: namely {@code "Line grids"} and {@code "Pixel grids"}. Using those names, we deduce that * the {@code (data_y, data_x)} dimensions in the {@code SST} variable are mapped to the {@code (grid_y, grid_x)} - * dimensions in the localization grid.</div> - * - * This feature is an extension to CF-conventions. + * dimensions in the localization grid. * * @param dataOrAxis the variable for which to get the attribute-specified name of the dimension. * @param index zero-based index of the dimension for which to get the name. @@ -381,12 +381,12 @@ public class Convention { * For each string in the set, {@link Decoder#findNode(String)} is invoked and the return value * (if non-null) is given to {@link #projection(Node)} until a non-null map is obtained. * - * <div class="note"><b>API note:</b> - * this method name is singular because even if a set is returned, in the end only one value is used.</div> - * - * The default implementation returns the value of {@link CF#GRID_MAPPING} attribute, or an empty set + * <p>The default implementation returns the value of {@link CF#GRID_MAPPING} attribute, or an empty set * if the given variable does not contain that attribute. Subclasses may override for example if grid - * mapping information are hard-coded in a particular node for a specific product. + * mapping information are hard-coded in a particular node for a specific product.</p> + * + * <h4>API note</h4> + * This method name is singular because even if a set is returned, in the end only one value is used. * * @param data the variable for which to get the grid mapping node. * @return name of nodes that may contain the grid mapping, or an empty set if none. @@ -545,13 +545,13 @@ public class Convention { * pseudo-projection, the "projected" CRS is actually a {@link GeographicCRS} instance. * The returned transform, if non-null, shall map cell corners. * - * <div class="note"><b>API notes:</b> + * <p>The default implementation returns {@code null}.</p> + * + * <h4>API notes</h4> * <ul> * <li>We do not provide a {@link ProjectedCRS} argument because of the {@code "latitude_longitude"} special case.</li> * <li>Base CRS axis order is (latitude, longitude) for increasing the chances to have a CRS identified by EPSG.</li> - * </ul></div> - * - * The default implementation returns {@code null}. + * </ul> * * @param node the same node than the one given to {@link #projection(Node)}. * @param baseToCRS conversion from (latitude, longitude) in degrees to the projected CRS. @@ -567,8 +567,8 @@ public class Convention { * netCDF file. The default implementation returns <cite>"Unknown datum based upon the GRS 1980 ellipsoid"</cite>. * Note that the GRS 1980 ellipsoid is close to WGS 84 ellipsoid. * - * <div class="note"><b>Maintenance note:</b> - * if this default is changed, search also for "GRS 1980" strings in {@link CRSBuilder} class.</div> + * <h4>Maintenance note</h4> + * If this default is changed, search also for "GRS 1980" strings in {@link CRSBuilder} class. * * @param spherical whether to restrict the ellipsoid to a sphere. * @return information about geodetic objects to use if no explicit information is found in the file. diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java index a07c219491..4eced70bd9 100644 --- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java +++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java @@ -137,10 +137,10 @@ public abstract class Decoder extends ReferencingFactoryContainer { * grids only between variables using the exact same list of dimensions. * This {@code localizationGrids} cache allows to cover other cases. * - * <div class="note"><b>Example:</b> - * a netCDF file may have a variable with (<var>longitude</var>, <var>latitude</var>) dimensions and another + * <h4>Example</h4> + * A netCDF file may have a variable with (<var>longitude</var>, <var>latitude</var>) dimensions and another * variable with (<var>longitude</var>, <var>latitude</var>, <var>depth</var>) dimensions, with both variables - * using the same localization grid for the (<var>longitude</var>, <var>latitude</var>) part.</div> + * using the same localization grid for the (<var>longitude</var>, <var>latitude</var>) part. * * @see GridCacheKey#cached(Decoder) */ diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java index e8d2634f4e..2e4beb2b7d 100644 --- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java +++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java @@ -96,8 +96,9 @@ final class GridMapping { * This CRS may have been constructed from Well Known Text or EPSG codes declared in {@code "spatial_ref"}, * {@code "ESRI_pe_string"} or {@code "EPSG_code"} attributes. * - * <div class="note"><b>Note:</b> this come from different information than the one used by {@link CRSBuilder}, - * which creates CRS by inspection of coordinate system axes.</div> + * <h4>Usage note</h4> + * This come from different information than the one used by {@link CRSBuilder}, + * which creates CRS by inspection of coordinate system axes. */ final CoordinateReferenceSystem crs; diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java index 14a7dbfae8..62ab908285 100644 --- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java +++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java @@ -98,10 +98,10 @@ public final class Linearizer { * <li>Otherwise the point is in the middle of the image.</li> * </ul> * - * <div class="note"><b>Rational:</b> - * the intent is to increase the chances to get the Polar Stereographic projection for images close to pole. + * <h4>Rational</h4> + * The intent is to increase the chances to get the Polar Stereographic projection for images close to pole. * This is necessary because longitude values may become far from central meridian at latitudes such as 88°, - * causing the Transverse Mercator projection to produce NaN numbers.</div> + * causing the Transverse Mercator projection to produce NaN numbers. */ UNIVERSAL; diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java index c02d4b896a..6d9055cd91 100644 --- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java +++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java @@ -478,10 +478,10 @@ public abstract class Variable extends Node { /** * Returns {@code true} if this variable should be considered as a list of strings. * - * <div class="note"><b>Maintenance note:</b> - * the implementation of this method is inlined in some places, when the code already + * <h4>Maintenance note</h4> + * The implementation of this method is inlined in some places, when the code already * has the {@link DataType} value at hand. If this implementation is modified, search - * for {@link #STRING_DIMENSION} usages.</div> + * for {@link #STRING_DIMENSION} usages. * * @see #STRING_DIMENSION */ @@ -819,19 +819,19 @@ public abstract class Variable extends Node { * In ISO 19123 terminology, {@link Dimension#length()} on each dimension give the upper corner * of the grid envelope plus one. The lower corner is always (0, 0, …, 0). * - * <div class="note"><b>Usage:</b> - * this information is used for completing ISO 19115 metadata, providing a default implementation of - * {@link Convention#roleOf(Variable)} method or for building string representation of this variable - * among others. Those tasks are mostly for information purpose, except if {@code Variable} subclass - * failed to create a grid and we must rely on {@link #findGrid(GridAdjustment)} default implementation. - * For actual georeferencing, use {@link #getGridGeometry()} instead.</div> - * - * If {@link #findGrid(GridAdjustment)} returns a non-null value, then the list returned by this method should + * <p>If {@link #findGrid(GridAdjustment)} returns a non-null value, then the list returned by this method should * contain all dimensions returned by {@link Grid#getDimensions()}. It may contain more dimension however. * Those additional dimensions can be considered as bands. Furthermore, the dimensions of the {@code Grid} * may have a different {@linkplain Dimension#length() length} than the dimensions returned by this method. * If such length mismatch exists, then {@link #getGridGeometry()} will concatenate a scale factor to - * the "grid to CRS" transform. + * the "grid to CRS" transform.</p> + * + * <h4>Usage</h4> + * This information is used for completing ISO 19115 metadata, providing a default implementation of + * {@link Convention#roleOf(Variable)} method or for building string representation of this variable + * among others. Those tasks are mostly for information purpose, except if {@code Variable} subclass + * failed to create a grid and we must rely on {@link #findGrid(GridAdjustment)} default implementation. + * For actual georeferencing, use {@link #getGridGeometry()} instead. * * @return all dimensions of this variable, in netCDF order (reverse of "natural" order). * diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java index b84fc1cb77..34a9e1dfad 100644 --- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java +++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java @@ -188,12 +188,12 @@ public class AttributeNames { * <tr><td>{@link AttributeNames#INSTRUMENT INSTRUMENT}</td> <td>{@code "instrument"}</td> <td>{@code "instrument_vocabulary"}</td></tr> * </table> * - * <div class="note"><b>Note:</b> + * <h2>Departure from conventions</h2> * The member names in this class are upper-cases because they should be considered as constants. * For example, {@code AttributeNames.KEYWORD.TEXT} maps exactly to the {@code "keywords"} string * and nothing else. A lower-case {@code text} member name could be misleading since it would * suggest that the field contains the actual text value rather than the key by which the value - * is identified in a netCDF file.</div> + * is identified in a netCDF file. * * @author Martin Desruisseaux (Geomatys) * @version 0.8 @@ -352,11 +352,11 @@ public class AttributeNames { * {@link Metadata#getResourceLineages() resourceLineage} / * {@link Lineage#getStatement() statement}</li></ul> * - * <div class="note"><b>Note:</b> - * located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} / + * <h4>Departure from convention</h4> + * Located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} / * {@link org.opengis.metadata.quality.DataQuality#getLineage() lineage}" instead of "{@code resourceLineage}" * in {@code UnidataDD2MI.xsl} file (retrieved in 2017). - * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.</div> + * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>. * * @see <a href="http://wiki.esipfed.org/index.php/Attribute_Convention_for_Data_Discovery#history">ESIP reference</a> */ @@ -370,11 +370,11 @@ public class AttributeNames { * {@link Lineage#getSources() source} / * {@link Source#getDescription() description}</li></ul> * - * <div class="note"><b>Note:</b> - * located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} / + * <h4>Departure from convention</h4> + * Located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} / * {@link org.opengis.metadata.quality.DataQuality#getLineage() lineage}" instead of "{@code resourceLineage}" * in {@code UnidataDD2MI.xsl} file (retrieved in 2017). - * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.</div> + * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>. * * @see <a href="http://wiki.esipfed.org/index.php/Attribute_Convention_for_Data_Discovery#source">ESIP reference</a> * @@ -582,12 +582,12 @@ public class AttributeNames { * <td> {@link Role#PUBLISHER}</td> * </tr></table> * - * <div class="note"><b>Note:</b> + * <h2>Departure from conventions</h2> * The member names in this class are upper-cases because they should be considered as constants. * For example, {@code AttributeNames.CREATOR.EMAIL} maps exactly to the {@code "creator_email"} string * and nothing else. A lower-case {@code email} member name could be misleading since it would suggest * that the field contains the actual name value rather than the key by which the value is identified - * in a netCDF file.</div> + * in a netCDF file. * * @author Martin Desruisseaux (Geomatys) * @version 0.8 @@ -912,12 +912,12 @@ public class AttributeNames { * <td >{@link DimensionNameType#TIME}</td> * </tr></table> * - * <div class="note"><b>Note:</b> + * <h2>Departure from conventions</h2> * The member names in this class are upper-cases because they should be considered as constants. * For example, {@code AttributeNames.LATITUDE.MINIMUM} maps exactly to the {@code "geospatial_lat_min"} * string and nothing else. A lower-case {@code minimum} member name could be misleading since it would * suggest that the field contains the actual latitude value rather than the key by which the value is - * identified in a netCDF file.</div> + * identified in a netCDF file. * * @author Martin Desruisseaux (Geomatys) * @version 0.3 diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java index 690a381421..a87e24607b 100644 --- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java +++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java @@ -137,9 +137,8 @@ final class MetadataReader extends MetadataBuilder { /** * The character to use for quoting strings in a comma-separated list. Quoted strings may contain comma. * - * <div class="note"><b>Example:</b> + * <h4>Example</h4> * John Doe, Jane Lee, "L J Smith, Jr." - * </div> */ private static final char QUOTE = '"'; diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java index 6cea2807b3..6790559af6 100644 --- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java +++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java @@ -85,9 +85,10 @@ final class TableAnalyzer extends FeatureAnalyzer { * method arguments with a name ending by {@code "Pattern"}. Note that not all arguments are pattern; please * checks carefully {@link DatabaseMetaData} javadoc for each method. * - * <div class="note"><b>Example:</b> if a method expects an argument named {@code tableNamePattern}, + * <h4>Example</h4> + * If a method expects an argument named {@code tableNamePattern}, * then that argument value should be escaped. But if the argument name is only {@code tableName}, - * then the value should not be escaped.</div> + * then the value should not be escaped. */ private String escape(final String pattern) { return SQLUtilities.escape(pattern, analyzer.escape); diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java index fe05095cbb..e805c5e731 100644 --- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java +++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java @@ -29,14 +29,14 @@ import org.apache.sis.util.collection.BackingStoreException; * The source stream is implemented by a {@link Spliterator} created by {@link #createSourceIterator()}. * The call to that method is deferred until a terminal operation is invoked. * - * <div class="note"><b>Example:</b> - * if a stream can count its elements efficiently (e.g. using a {@code COUNT} query on SQL databases), + * <h2>Example</h2> + * If a stream can count its elements efficiently (e.g. using a {@code COUNT} query on SQL databases), * a {@code DeferredStream} subclass can override the {@link #count()} method for running the count query * instead of counting elements of the stream manually. * * <p>Deferred streams are also useful with intermediate operations. For example, a subclass can override * the {@link #skip(long)} and {@link #limit(long)} methods for modifying the SQL query with addition of - * {@code OFFSET} and {@code FETCH NEXT} clauses before the worker stream is created.</p></div> + * {@code OFFSET} and {@code FETCH NEXT} clauses before the worker stream is created.</p> * * @author Alexis Manin (Geomatys) * @author Martin Desruisseaux (Geomatys) diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java index 8e2ca357be..d9e5ec14a3 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java @@ -2498,16 +2498,14 @@ parse: for (int i = 0; i < length;) { /** * Adds a description of a particular sample value. + * ISO 19115 range elements are approximately equivalent to + * {@code org.apache.sis.coverage.Category} in the {@code sis-coverage} module. * Storage location is: * * <ul> * <li>{@code metadata/contentInfo/rangeElementDescription}</li> * </ul> * - * <div class="note"><b>Note:</b> - * ISO 19115 range elements are approximately equivalent to - * {@code org.apache.sis.coverage.Category} in the {@code sis-coverage} module.</div> - * * @param name designation associated with a set of range elements, or {@code null} if none. * @param definition description of a set of specific range elements, or {@code null} if none. */ @@ -2928,9 +2926,9 @@ parse: for (int i = 0; i < length;) { * <li>{@code metadata/resourceLineage/source/scope/levelDescription/features}</li> * </ul> * - * <div class="note"><b>Example:</b> - * if a Landsat image uses the "GTOPO30" digital elevation model, then it can declare the source - * with "GTOPO30" description, {@link ScopeCode#MODEL} and feature "Digital Elevation Model".</div> + * <h4>Example</h4> + * If a Landsat image uses the "GTOPO30" digital elevation model, then it can declare the source + * with "GTOPO30" description, {@link ScopeCode#MODEL} and feature "Digital Elevation Model". * * @param description a detailed description of the level of the source data, or {@code null} if none. * @param level hierarchical level of the source (e.g. model), or {@code null} if unspecified. @@ -2969,10 +2967,10 @@ parse: for (int i = 0; i < length;) { * <li>{@code metadata/resourceLineage/source/sourceSpatialResolution}</li> * </ul> * - * <div class="note"><b>Example:</b> - * if a {@code FeatureSet} is the aggregation of two other {@code FeatureSet} resources, + * <h4>Example</h4> + * If a {@code FeatureSet} is the aggregation of two other {@code FeatureSet} resources, * then this method can be invoked twice with the metadata of each source {@code FeatureSet}. - * If the aggregated data are features, then {@code level} should be {@link ScopeCode#FEATURE}.</div> + * If the aggregated data are features, then {@code level} should be {@link ScopeCode#FEATURE}. * * @param metadata the metadata of the source, or {@code null} if none. * @param level hierarchical level of the source (e.g. feature). Should not be null. diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java index 419ab377ec..8b0e699d45 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java @@ -47,8 +47,13 @@ public interface ResourceOnFileSystem extends Resource { * There is no guarantee that all files are in the same directory or that each file is used exclusively * by this data source (e.g. no guarantee that modifying or deleting a file will not impact other resources). * - * <div class="note"><b>Example:</b> - * a resources created for a GRIB file may use the following component files: + * <p>This method should return paths to files only. + * It should not return paths to directories. + * The caller should verify that all paths are regular files; + * non-existent paths should be omitted.</p> + * + * <h4>Example</h4> + * A resources created for a GRIB file may use the following component files: * <ul> * <li>The main GRIB file.</li> * <li>If managed by the UCAR library, two auxiliary files next to the main GRIB file: @@ -57,11 +62,6 @@ public interface ResourceOnFileSystem extends Resource { * <li>Eventually a GRIB table file. This table may be located in a path unrelated to * to the path of the main file and may be shared by many resources.</li> * </ul> - * </div> - * - * This method should return paths to files only. It should not return paths to directories. - * The caller should verify that all paths are regular files; - * non-existent paths should be omitted. * * @return files used by this resource. Should never be {@code null}. * @throws DataStoreException if an error on the file system prevent the creation of the list. diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java index aa01a0c70b..9d4688bbaa 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java @@ -63,20 +63,20 @@ public @interface StoreMetadata { * The "main" file is the file that users specify when opening the dataset. * The returned array should <em>not</em> include the suffixes of auxiliary files. * - * <div class="note"><b>Example:</b> - * GeoTIFF data are contained in files with the {@code ".tif"} or {@code ".tiff"} suffix, - * sometimes accompanied by auxiliary files with {@code ".prj"} and {@code ".tfw"} suffixes. - * This method should return an array containing only {@code "tif"} or {@code "tiff"} strings, - * without the leading dot.</div> - * - * The suffixes are case-insensitive (no need to declare both lower-case and upper-case variants) - * and shall not contain the leading dot. The first element in the list is the preferred suffix - * to use for new files. + * <p>The suffixes are case-insensitive (no need to declare both lower-case and upper-case variants) + * and shall not contain the leading dot. + * The first element in the list is the preferred suffix to use for new files.</p> * * <p>The same suffixes may be used by many different formats. For example, the {@code ".xml"} suffix * is used for files in many mutually incompatible formats. Consequently, the file suffixes shall not * be used as format identifiers.</p> * + * <h4>Example</h4> + * GeoTIFF data are contained in files with the {@code ".tif"} or {@code ".tiff"} suffix, + * sometimes accompanied by auxiliary files with {@code ".prj"} and {@code ".tfw"} suffixes. + * This method should return an array containing only {@code "tif"} or {@code "tiff"} strings, + * without the leading dot. + * * @return the filename suffixes, case insensitive. Never null but can be empty. */ String[] fileSuffixes() default {}; diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java index 9416d47465..5ce747eafb 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java @@ -334,12 +334,12 @@ public abstract class TiledGridCoverage extends GridCoverage { * {@link MultiPixelPackedSampleModel} which packs many pixels in a single bank element. * This value is a power of 2 according {@code MultiPixelPackedSampleModel} specification. * - * <div class="note"><b>Note:</b> - * this is "pixels per element", not "samples per element". It makes a difference in the + * <h4>Design note</h4> + * This is "pixels per element", not "samples per element". It makes a difference in the * {@link java.awt.image.SinglePixelPackedSampleModel} case, for which this method returns 1 * (by contrast a "samples per element" would give a value greater than 1). * But this value can nevertheless be understood as a "samples per element" value - * where only one band is considered at a time.</div> + * where only one band is considered at a time. * * @return number of pixels in a single bank element. Usually 1. * diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java index 01b1abaa15..c1170e8aaa 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java @@ -23,16 +23,14 @@ import java.io.IOException; * Stream reader or writer capable to mark its current position and reset to that position later. * The stream shall support nested marks. * - * <div class="note"><b>Use case:</b> - * this interface can be used when we need to move to a previously marked position, but we do not know how many nested + * <h2>Use case</h2> + * This interface can be used when we need to move to a previously marked position, but we do not know how many nested * {@code mark()} method calls may have been performed (typically because the stream has been used by arbitrary code). * We can compare {@link #getStreamPosition()} value after {@link #reset()} method calls with the expected position. - * </div> * - * <div class="note"><b>Design note:</b> - * an alternative could be to support the {@code seek(long)} method. But using marks instead allows the stream + * <h2>Design note</h2> + * An alternative could be to support the {@code seek(long)} method. But using marks instead allows the stream * to invalidate the marks if needed (for example when {@link ChannelData#setStreamPosition(long)} is invoked). - * </div> * * @author Martin Desruisseaux (Geomatys) * @version 1.2 diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java index a8723adbdc..05785987b8 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java @@ -137,15 +137,15 @@ public final class Region { * The strides are computed automatically at construction time, but this method can be invoked in some rare cases * where those values need to be modified (example: for adapting to the layout of netCDF "unlimited" variable). * - * <div class="note"><b>Example:</b> - * in a cube of dimension 10×10×10, the number of values between indices (0,0,1) and (0,0,2) is 100. + * <p>This method is the only one in this {@link Region} class to use a count of bytes + * instead of a count of sample values.</p> + * + * <h4>Example</h4> + * In a cube of dimension 10×10×10, the number of values between indices (0,0,1) and (0,0,2) is 100. * If the values type is {@code float}, invoking {@code setAdditionalByteOffset(1, 12)} will increase * this value to 103 (computed as 100 + 12/{@value Float#BYTES}). * {@link HyperRectangleReader} will still read only the requested 100 values, - * but will skip 3 more values when moving from plane 1 to plane 2.</div> - * - * This method is the only one in this {@link Region} class to use a count of bytes instead of a count - * of sample values. + * but will skip 3 more values when moving from plane 1 to plane 2. * * @param dimension dimension for which to increase the stride. * @param skip additional number of <strong>bytes</strong> to skip after we finished reading diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java index d9d1d633ea..d916c07cf1 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java @@ -52,8 +52,9 @@ public final class RewindableLineReader extends LineNumberReader { /** * The input stream, or {@code null} if this reader cannot rewind anymore. * - * <div class="note"><b>Note:</b> we do not use the more generic {@link java.io.InputStream} class - * because this whole {@code RewindableLineReader} class is useless if we cannot seek in this stream.</div> + * <h4>Design note</h4> + * We do not use the more generic {@link java.io.InputStream} class + * because this whole {@code RewindableLineReader} class is useless if we cannot seek in this stream. */ private InputStreamAdapter input; diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java index 9baaaf1774..31a77fef26 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java @@ -42,9 +42,9 @@ import org.apache.sis.util.CharSequences; /** * A data store which creates data objects from a WKT definition. * - * <div class="note"><b>Note:</b> + * <h4>Design note</h4> * this class differs from {@link org.apache.sis.internal.storage.PRJDataStore} in that - * the file containing WKT definition is the main file, not an auxiliary file.</div> + * the file containing WKT definition is the main file, not an auxiliary file. * * @author Martin Desruisseaux (Geomatys) * @version 1.4 diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java index 8e7b76e84a..231f6ac17f 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java @@ -27,11 +27,11 @@ import org.opengis.geometry.Envelope; * grid geometries or sample dimensions, depending on the {@code DataSet} subtype. * The actual values are provided by methods defined in {@code DataSet} subtypes. * - * <div class="note"><b>Example:</b> - * the features contained in a {@code DataSet} could be all bridges in a city. A {@code DataSet} can be associated to + * <h2>Example</h2> + * The features contained in a {@code DataSet} could be all bridges in a city. A {@code DataSet} can be associated to * one {@code FeatureType} which specifies that all bridges shall have {@code "construction date"} and {@code "height"} * attributes, and an arbitrary number of {@code Feature} instances which contains the actual values for all bridges in - * the dataset.</div> + * the dataset. * * <h2>Metadata</h2> * Datasets should have {@link #getMetadata() metadata} / diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java index ef52d8b6f2..0411bd62c3 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java @@ -24,11 +24,11 @@ import java.util.Locale; * It may be for example a logical inconsistency, or a reference not found, * or an unsupported file format version, <i>etc.</i> * - * <div class="note"><b>Note:</b> + * <h2>Usage note</h2> * exceptions that are caused by {@link java.io.IOException} or {@link java.sql.SQLException} * should generally be wrapped by another type of {@link DataStoreException}, unless the data * store can determine that the error was caused by a problem with the stream content rather - * than some I/O problems.</div> + * than some I/O problems. * * @author Martin Desruisseaux (Geomatys) * @version 0.8 diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java index 56ad65df44..05e485bafc 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java @@ -99,15 +99,15 @@ public abstract class DataStoreProvider { * set to {@code true}, then the {@code open(…)} method may create files, a directory or a database at the given * location.</p> * - * <div class="note"><b>Relationship with standard file open options</b> - * <p>For data stores on file systems, a <code>{@value} = true</code> parameter value is equivalent to opening a file + * <h4>Relationship with standard file open options</h4> + * For data stores on file systems, a <code>{@value} = true</code> parameter value is equivalent to opening a file * with {@link java.nio.file.StandardOpenOption#CREATE} and {@link java.nio.file.StandardOpenOption#APPEND APPEND}. * The other file standard options like {@link java.nio.file.StandardOpenOption#CREATE_NEW CREATE_NEW} and * {@link java.nio.file.StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} should not be accessible through * this {@value} parameter. The reason is that {@link ParameterValueGroup} may be used for storing parameters * permanently (for example in a configuration file or in a database) for reopening the same {@link DataStore} * many times. File options designed for being used only once like {@code CREATE_NEW} and {@code TRUNCATE_EXISTING} - * are incompatible with this usage.</p></div> + * are incompatible with this usage. * * @see #LOCATION * @see #getOpenParameters() @@ -125,13 +125,11 @@ public abstract class DataStoreProvider { * This name is used in some warnings or exception messages. * It may contain any characters, including white spaces * (i.e. this short name is <strong>not</strong> a format identifier). + * For a more comprehensive format name, see {@link #getFormat()}. * - * <div class="note"><b>Examples:</b> + * <h4>Examples</h4> * {@code "CSV"}, {@code "GeoTIFF"}, {@code "GML"}, {@code "GPX"}, {@code "JPEG"}, {@code "JPEG 2000"}, * {@code "NetCDF"}, {@code "PNG"}, {@code "Shapefile"}. - * </div> - * - * For a more comprehensive format name, see {@link #getFormat()}. * * @return a short name or abbreviation for the data format. * @@ -197,8 +195,8 @@ public abstract class DataStoreProvider { * Those parameters will be recognized by the default {@code DataStoreProvider} methods and used whenever a * {@link StorageConnector} is required.</p> * - * <div class="note"><b>Alternative:</b> - * the main differences between the use of {@code StorageConnector} and parameters are: + * <h4>Alternative</h4> + * The main differences between the use of {@code StorageConnector} and parameters are: * <ul class="verbose"> * <li>{@code StorageConnector} is designed for use with file or stream of unknown format; * the format is automatically detected. By contrast, the use of parameters require to @@ -207,7 +205,7 @@ public abstract class DataStoreProvider { * and provide fine grain control over the store general behavior such as caching, * time-outs, encoding, <i>etc</i>.</li> * <li>Parameters can more easily be serialized in XML or configuration files.</li> - * </ul></div> + * </ul> * * @return description of the parameters required or accepted for opening a {@link DataStore}. * @@ -236,14 +234,13 @@ public abstract class DataStoreProvider { * only that there appears to be a reasonable chance of success based on a brief inspection of the * {@linkplain StorageConnector#getStorage() storage object} or contents. * - * <div class="note"><b>Note for implementers</b>: + * <h4>Note for implementers</h4> * Implementations are responsible for restoring the storage object to its original position * on return of this method. Implementers can use the mark/reset mechanism for this purpose. * Marks are available as {@link java.nio.ByteBuffer#mark()}, {@link java.io.InputStream#mark(int)} * and {@link javax.imageio.stream.ImageInputStream#mark()}. * Alternatively, the {@link #probeContent(StorageConnector, Class, Prober)} * helper method manages automatically the marks for a set of known types. - * </div> * * @param connector information about the storage (URL, stream, JDBC connection, <i>etc</i>). * @return a {@linkplain ProbeResult#isSupported() supported} status if the given storage diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java index 5ccaaabd59..9f850b5f31 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java @@ -34,9 +34,9 @@ import org.apache.sis.util.ArraysExt; * Storage objects are typically {@link java.io.File} or {@link javax.sql.DataSource} instances, but can also * be any other objects documented in the {@link StorageConnector} class. * - * <div class="note"><b>API note:</b> - * this class is package-private for now in order to get more experience about what could be a good API. - * This class may become public in a future SIS version.</div> + * <h2>API note</h2> + * This class is package-private for now in order to get more experience about what could be a good API. + * This class may become public in a future SIS version. * * <h2>Thread safety</h2> * The same {@code DataStoreRegistry} instance can be safely used by many threads without synchronization diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java index 155d005114..e690817941 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java @@ -36,13 +36,12 @@ import org.apache.sis.storage.event.StoreListener; * instance of {@link Aggregate}. The {@linkplain Aggregate#components() components} of an aggregate can be * themselves other aggregates, thus forming a tree.</p> * - * <div class="note"><b>Relationship with ISO 19115:</b> - * this type is closely related to the {@code DS_Resource} type defined by ISO 19115. + * <h2>Relationship with ISO 19115</h2> + * This type is closely related to the {@code DS_Resource} type defined by ISO 19115. * The Apache SIS type differs from the ISO type by being more closely related to data extraction, * as can be seen from the checked {@link DataStoreException} thrown by most methods. * Convenience methods for frequently requested information – for example {@link DataSet#getEnvelope()} – were added. * The sub-types performing the actual data extraction – for example {@link FeatureSet} – are specific to Apache SIS. - * </div> * * @author Johann Sorel (Geomatys) * @version 1.0 diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java index 759331e2a1..24b225c09a 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java @@ -920,12 +920,12 @@ public class StorageConnector implements Serializable { * {@link #getStorageAs(Class)} return value in the same state as they found it. This method is * only for handling the cases where using a view has an indirect impact on another view.</p> * - * <div class="note"><b>Rational:</b> + * <h4>Rational</h4> * {@link DataStoreProvider#probeContent(StorageConnector)} contract requires that implementers reset the * input stream themselves. However if {@link ChannelDataInput} or {@link InputStreamReader} has been used, * then the user performed a call to {@link ChannelDataInput#reset()} (for instance), which did not reset * the underlying input stream. So we need to perform the missing {@link InputStream#reset()} here, then - * synchronize the {@code ChannelDataInput} position accordingly.</div> + * synchronize the {@code ChannelDataInput} position accordingly. * * @param c container of the view to reset, or {@code null} if none. * @return {@code true} if the given view, after reset, is valid. diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java index b19fcf3f4a..bac0307b04 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java @@ -38,12 +38,11 @@ public interface WritableAggregate extends Aggregate { * <li>{@link org.opengis.metadata.Metadata}</li> * </ul> * - * <div class="note"><b>Warning:</b> - * copying information between stores may produce differences in many aspects. + * <h4>Data transformation</h4> + * Copying information between stores may produce differences in many aspects. * The range of changes depends both on the original {@link Resource} structure * and the target {@code Resource} structure. If the differences are too large, * then this {@code Aggregate} may throw an exception. - * </div> * * @param resource the resource to copy in this {@code Aggregate}. * @return the effectively added resource. May be {@code resource} itself if it has been added verbatim. diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java index 0754e06940..be9abaf8f7 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java @@ -65,11 +65,11 @@ public interface WritableFeatureSet extends FeatureSet { * After successful insertion, the new features may appear after the features already present * but not necessarily; ordering is {@link DataStore} specific. * - * <div class="note"><b>API note:</b> - * this method expects an {@link Iterator} rather than a {@link Stream} for easing + * <h4>API note</h4> + * This method expects an {@link Iterator} rather than a {@link Stream} for easing * inter-operability with various API. Implementing a custom {@link Iterator} requires less effort * than implementing a {@link Stream}. On the other side if the user has a {@link Stream}, - * obtaining an {@link Iterator} can be done by a call to {@link Stream#iterator()}.</div> + * obtaining an {@link Iterator} can be done by a call to {@link Stream#iterator()}. * * @param features feature instances to insert or copy in this {@code FeatureSet}. * @throws IllegalFeatureTypeException if a feature given by the iterator is not of the type expected by this {@code FeatureSet}. diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java index 6f6450f292..a1f0fd5964 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java @@ -122,15 +122,16 @@ abstract class AggregatedFeatureSet extends AbstractFeatureSet { * This method tries to find a CRS common to all feature sets. * If no common CRS can be found, then the envelope is absent. * - * <div class="note"><b>Implementation note:</b> - * this method is final because overriding it would invalidate the unwrapping of other {@code AggregatedFeatureSet} instances. - * If we wish to allow overrides in a future version, we would need to revisit {@link #getEnvelopes(List)} first.</div> - * * @return union of envelopes from all dependencies. * @throws DataStoreException if an error occurred while computing the envelope. */ @Override public final Optional<Envelope> getEnvelope() throws DataStoreException { + /* + * This method is final because overriding it would invalidate the unwrapping + * of other `AggregatedFeatureSet` instances. If we wish to allow overrides + * in a future version, we would need to revisit `getEnvelopes(List)` first. + */ synchronized (getSynchronizationLock()) { if (!isEnvelopeComputed) { final List<Envelope> envelopes = new ArrayList<>(); diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java index 8277244ea7..6303da7ccc 100644 --- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java +++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java @@ -41,7 +41,7 @@ import org.opengis.feature.AttributeType; * This base class expects a sequence of {@code Point} or {@code Polyline} instances as input. * The single (Multi){@code Polyline} instance is re-computed every time this property is requested. * - * <div class="note"><b>Examples:</b> + * <h2>Examples</h2> * <p><i>Polylines created from points:</i> * a boat that record it's position every hour. * The list of all positions is stored in an attribute with [0 … ∞] multiplicity. @@ -53,7 +53,6 @@ import org.opengis.feature.AttributeType; * The list of all tracks is stored in an attribute with [0 … ∞] multiplicity. * This class will extract each track and create a polyline as a new attribute. * Any change applied to the tracks will be visible on the polyline.</p> - * </div> * * @author Johann Sorel (Geomatys) * @author Martin Desruisseaux (Geomatys) diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java index af97b7c499..35585bd14e 100644 --- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java +++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java @@ -25,14 +25,14 @@ import org.apache.sis.internal.xml.StreamWriterDelegate; /** * Adds indentation to a XML output. * - * <div class="note"><b>Design note:</b> - * an alternative approach would have been to provide {@code startIdentation()} and {@code endIndentation()} + * <h2>Design note</h2> + * An alternative approach would have been to provide {@code startIdentation()} and {@code endIndentation()} * convenience methods in {@link StaxStreamWriter}, and let subclasses perform their own formatting. It would * reduce the need to try to guess some formatting aspects (e.g. whether to format on a single line or not). * However, that approach does not integrate very well with JAXB. The {@code Marshaller.JAXB_FORMATTED_OUTPUT} * property seems to be ignored when marshalling a fragment using {@code XMLStreamWriter}. * Even if that property was supported, we found no way to tell to JAXB to begin the indentation at some level - * (for taking in account the indentation of the elements containing the fragment to marshal with JAXB).</div> + * (for taking in account the indentation of the elements containing the fragment to marshal with JAXB). * * @author Martin Desruisseaux (Geomatys) * @version 0.8 diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java index c72a202f02..54721897ce 100644 --- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java +++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java @@ -415,9 +415,9 @@ public abstract class StaxStreamReader extends StaxStreamIO implements XMLStream * <li>{@code Infinity} — a {@link Double#valueOf(String)} specific value.</li> * </ul> * - * <div class="note"><b>Note:</b> - * this method duplicates {@link javax.xml.bind.DatatypeConverter#parseDouble(String)} work, - * but avoid synchronization or volatile field cost of {@code DatatypeConverter}.</div> + * <h4>Implementation note</h4> + * This method duplicates {@link javax.xml.bind.DatatypeConverter#parseDouble(String)} work, + * but avoid synchronization or volatile field cost of {@code DatatypeConverter}. * * @param value the text to parse. * @return the floating point value for the given text. @@ -447,10 +447,10 @@ parse: switch (value.length()) { * {@link Boolean#parseBoolean(String)} with one extension: the "0" value is considered * as {@code false} and the "1" value as {@code true}. * - * <div class="note"><b>Note:</b> - * this method duplicates {@link javax.xml.bind.DatatypeConverter#parseBoolean(String)} work + * <h4>Implementation note</h4> + * This method duplicates {@link javax.xml.bind.DatatypeConverter#parseBoolean(String)} work * (except for its behavior in case of invalid value), but avoid synchronization or volatile - * field cost of {@code DatatypeConverter}.</div> + * field cost of {@code DatatypeConverter}. * * @param value the string value to parse as a boolean. * @return true if the boolean is equal to "true" or "1".