You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2021/09/10 13:53:47 UTC

[sis] branch geoapi-3.1 updated (1105c74 -> 152b383)

This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a change to branch geoapi-3.1
in repository https://gitbox.apache.org/repos/asf/sis.git.


    from 1105c74  Merge branch 'geoapi-4.0' into geoapi-3.1
     add 7c7de3f7 Update pom version before release
     add 569f505  refactor(SQL-Store): try to improve count operation by overriding returned stream.
     add 1fb97ac  feat(SQL-Store): add support for limit, offset and distinct operations via SQL calls through java.util.Stream API
     add e62dde4  fix(SQLStore): fix connection auto-commit management for feature streaming.
     add 69ed545  feat(SQL-Store): Add a feature set to execute custom SQL queries
     add 5ae8db8  fix(SQLStore): fix checkstyle problems.
     add 708faa2  fix(SQLStore): better handling of parallelization flag. Add a benchmark to test query spliterator flavors.
     add e7a975a  feat(SQLStore): First draft for conversion of OpenGIS Filter to SQL
     add 349d1f5  feat(SQLStore): work on bbox filter and conversion between envelope and geometry
     add 0d34ed8  feat(Feature): Add a tool to convert envelopes to geometries
     add a786803  feat(Feature): add BBOX filter
     add 2980aff  fix(SQLStore): improve tests and checkstyle
     add dafec8b  feat(Feature): add naïve implementation of ST_Intersects
     add bea8309  fix(Feature): Add CRS resolution strategy for filter operations.
     add 7acadb8  feat(SQLStore): improve query feature set to delegate count and subqueries to target database.
     add 4821044  refactor(SQLStore): prepare module for dialect specific syntax.
     add 859a77b  feat(Feature): add minor functionality to convert arbitrary geometry to polygon
     add 237a71a  feat(SQLStore): Add partial PostGIS support : geometries and geographies.
     add b4d906c  fix(SQLStore): throw proper exception on an unsupported filter.
     add 341f3ac  doc(SQLStore): add api doc about new components for SQL feature sets.
     add 4ac566e  fix(SQLStore): add tests for EWKB decoding. Fix multi-polygon reading.
     add 7d8921b  refactor(SQLStore): try to generify SQL geometry management.
     add 01a5d2a  doc(SQLStore): minor cleanups + javadoc.
     add 71a39a3  chore(*): add missing headers on source files.
     add f4c4b9c  CoverageResource : add GridCoverageResource subset method and Coverage Query
     add e4606ae  Provide a default implementation for GridCoverageResource.subset(Query). Not yet in public API; pending the gain of more experience.
     add bec5a17  CoverageSubset clip the area to read to the area of interest specified in the query.
     add d044b3f  Rename some non-standard @SuppressWarnings to value recognized by NetBeans.
     add bcff144  Fix javadoc errors when building with Java 13.
     add 02e7b0c  More accurate exception when query does not intercept data.
     add 9c79f39  If the locale starts with a # character (e.g. "#fra"), skip the "#" character.
     add 0e4d884  DataStore : add additional store metadata informations, Capability.CREATE and resource types
     add 0aefac6  Restart the javafx module: remove dependencies to Swing and icons (we may bring them back from history later if desired). Start the refactoring of classes. The controls (resource viewer, metadata viewer, etc.) will get major changes in next commits.
     add 8b95369  Add Aggregate to the list of resource types produced by some data stores.
     add d95803e  Revert to the previous pom.xml setting for JavaFX where the full installation must be provided by user. For developping that module, use the NetBeans Ant project instead provided that the user does the required setup.
     add cea54a4  Remove the resource tree management and data loading from ResourceView. They are replaced by ResourceTree.
     add c7a6e01  Filter : add between filter implementation
     add f97e125  Improve the use of background threads, enable "drag and drop" and allow to close resources.
     add bd1fe00  Filter: add capabilities classes, still need to commplete tests and equals/hash/serialization
     add a28a3fc  Consolidate ResourceTree. Begins refactoring of ResourceExplorer.
     add 89f5d43  Close the data stores when ask to close them and when the application stop.
     add f1f225f  When a resource is selected in the TreeView, update the MetadataOverview accordingly.
     add 14bf170  Reconnect the MetadataOverview panel to the small map showing data position on world.
     add 3cbf651  Add scroll pane and more dynamic inclusion/exclusion of sections in metadata overview.
     add 607b211  Consolidation, improve documentation and complete some internationalization.
     add 1fa914b  Rename Form as MetadataSection.
     add ab418a8  Handle bounding boxes crossing the anti-meridian.
     add 62f3cb5  Remove the loading of GridGeometry in metadata overview panel. For some formats this is a significant cost since it may force the loading of a localization grid.
     add 3fe5b0a  Remove for now the contact section since it was not completed.
     add 59a4311  Make grid dimensions more tolerant to missing information.
     add 7cd909e  Move MetadataOverview back to its own package. The intent is to make easier to split the sections in separated classes.
     add 8b566c3  Move MetadataOverview inner classes as top-level classes.
     add 8818eb9  Add Google Summer of Code credits.
     add 3637132  Rename MetadataOverview as MetadataSummary and put those metadata in a "summary" tab. Move also the world map in the "metadata" package; it was forgotten in previous commit and is necessary for avoiding a NullPointerException.
     add 042c7e9  Connect MetadataSummary to MetadataTree. The tree view is provided in a separated tab.
     add ac48b98  Consolidation: - Remove CollectionsExt.nonEmptyIterator, replaced by cleaner use of nonNull(Collection). - Remove (text != null && !(text = text.trim()).isEmpty()) statement (they were many), replaced by a call to new internal method Strings.trimOrNull(String). - Add an IdentifiedObjects.getDisplayName method as use it where we intended to have a name for displaying purpose.
     add eff5800  Adjustment in the construction of titles to show to user.
     add 942ecdf  Upgrade Maven dependency.
     add ab93f5a  Show the stack trace when we failed to load a resource.
     add f2311f5  Fix rendering of map in the east hemisphere and when crossing anti-meridian.
     add eae5ae1  Filter : prepare PropertyIsLike filter implementation
     add 20e2995  Filter : add spatial filter classes, not implemented yet, this allows more CQL tests to be activated
     add 41e610d  First revision of FeatureTable. Data are loaded in a background thread by pages of 100 features. The work is not complete: the loading of next page is not yet delayed until first needed.
     add cb86b7f  Avoid a broken link for now (for avoiding a compilation error).
     add 52089a1  Filter : add SQL/MM ST_Simplify and ST_SimplifyPreserveTopology functions
     add 17aabb3  Filter : implement and tests for spatial functions
     add 2ee44e7  Move Feature.Loader in a top-level class for more code readability.
     add 77d3a63  Load only a small number of features, with more features loaded only when needed.
     add cd32723  Filter : add spatial function serialization tests
     add de47cb2  Simplify FeatureLoader by replacing the `Initial` inner class by an `initializer` field. Fix a resource leak: Stream was not closed if the `estimatedSize` was actually exact.
     add 7e1fe6f  Show the exception in the table when an error occurred while loading the data.
     add 941ef8a  Handle small image loading in a separated class for making easier to share.
     add 7718619  If a feature contains multi-valued properties, make possible to see their values on demand.
     add 8043e5e  Define FeatureTable content as a property and add warning in documentation about what can be modified.
     add bc605ab  Add some notes about further work that needs to be done.
     add 6a6a650  Begin refactoring of CRSChooser.
     add 6b11704  CRSChooser builds its list of CRS in a background thread. Filtering delegated to JavaFX FilteredList class.
     add b0b38a0  Refactor CRSChooser as a Dialog subclass.
     add 5f84c5b  Fix an IndexOutOfBoundsException when showing an empty list of features. Avoid drawing a line on image border when rectangle cross anti-meridian.
     add 30ef29f  Factor out the CRS filter predicate in a separated class. Put an hourglass icon while loading CRS tabular data.
     add adafeb6  Coverage : add GridCoverage implementation based on a RenderedImage
     add 15e88bb  Merge branch 'geoapi-4.0' into refactor/sql-store
     add c490618  fix(*): fix merge
     add 65e7ddd  refactor(Feature): Merge duplicate bbox and intersection operators (SQLMM and Filter encoding)
     add 716f0b7  chore(Feature): add cross-CRS test for intersection operator.
     add d8ef0b0  Upgrade NetBeans project files for NetBeans 11.2.
     add d358212  Minor renaming and UI adjustment.
     add 8afd4db  Change default namespace of legacy "gmd" metadata from "http://schemas.opengis.net/iso/19139/20070417/" to "http://www.isotc211.org/2005/" and update XML documentation accordingly. The new documentation anticipate on support for control on gmi and gml namespace, to be provided in a next commit. The change required that we move ISO schema location from "http" to "https" protocol in order to tests. However SchemaComplianceTest is now broken, until we also move from "http"  [...]
     add 8d6c67f  Minor cleanup related to the "xmlns:gmd" namespace change.
     add 8289eef  Abandon the attemps to fix https://issues.apache.org/jira/browse/SIS-481. Tried hard, I have been unable to take dynamic control on the namespace. This causes also abandon of https://issues.apache.org/jira/browse/SIS-482
     add 5c209b0  Coverage : first implementation of evaluate method for GridCoverage2D
     add 84fd34f  Image : add TranslatedRenderedImage
     add 173ab3a  Coverage : add evaluate method on GridCoverage class
     add 8bcba3d  Merge branch 'geoapi-4.0' into refactor/sql-store
     add 603d5da  fix(CQL): fix bbox writing by avoiding deprecated methods.
     add e8f3b11  fix(*): Fix version number inherited from private tag.
     add b5508f6  Coverage : add GridCoverage2D specific 2D methods
     add 91a77c4  Shapefile : add cpg file utility class
     add cd05f3d  SQL : add javadoc author and version tag on SQL classes
     add 8458471  Portrayal : add canvas and render exception prototypes
     add 3f2318c  Filter : add SQL/MM ST_Point function
     add 45ce640  Filter : add SQL/MM ST_LineString function
     add e0b32d6  fix(SQLStore): add missing origin table on SQL column definition.
     add 41cca84  SQL/MM : regroup all functions in an internal package
     add e735e9a  SQL/MM : add all specification expressions
     add fef9516  Merge branch 'feat/sqlmm' into geoapi-4.0
     add e79f07f  Coverage2D : add sample dimension and rendered image bands size match verification
     add 458f3ce  Move the microbenchmarks to test directory for avoiding to introduce dependencies at runtime. Fix also some javadoc errors for allowing the project to build with checks enabled.
     add 92f425d  Referencing bug fix: CoordinateOperation metadata were sometime overwritten by CoordinateSystem metadata. https://issues.apache.org/jira/browse/SIS-483
     add 6619c1f  Less misleading error messages when a datum shift grid such as NTv2 can not be found. The previous message was saying that it can not be read, which gave the impression that the file has been found but there were some problem with it.
     add a234d6d  Image : fix getData X axis iteration in getData method
     add 0f90b1a  Image : fix missing translation in AbstractRenderedImage.getData() method
     add fb1d4e2  Adjust indentation and omit the properties for JUnit versions, temporarily replaced by hard-coded version numbers. The intent is to inherit those version numbers from GeoAPI since they are used for the conformance test suite. GeoAPI migration to JUnit 5 started in the "jupiter" branch.
     add 0431f2e  Partial review of GridCoverage.evaluate(DirectPosition) method. - Add a new FractionalGridCoordinates class with some of the calculations done by GridCoverage methods. - Rename toGridCoord as toGridCoordinates and change the return type to FractionalGridCoordinates. - Remove toLongExact(DirectPosition), replaced by FractionalGridCoordinates.
     add 4358ee9  Adjustment in the exception thrown if grid coordinates are outside the given bounds.
     add 67c5d18  Add an `ImageUtilities` class for methods to be needed by `GridCoverage2D`.
     add 3c22971  Portrayal : add query property on MapLayer, add grid geometry 2d on GridCanvas
     add aea19ce  Portrayal : factorize code between MapContext and MapGroup, add event listeners
     add 262e966  Move GridCoverage2D to public API and revisit method contract / implementation.
     add a57da1e  More tests about the inferrence of band names from a color model.
     add 6fc05b4  Some map projections need explicit wraparound when the difference between given longitude and central meridian is greater than 180°. This commit applies the fix on Albers Equal Area.
     add 8c761eb  Apply the wrapparound longitude on other map projections that may be affected by this problem. A bug fix in previous commit has also be corrected: missing a factor 2 in θ_span calculation.
     add 42eed3c  Change strategy regarding https://issues.apache.org/jira/browse/SIS-486 fix by shifting longitude only if needed for the anti-meridian problem and not in other cases. The intent is to reduce discontinuities in the mathematical function.
     add e79c07b  Share code between GridCoverage and GridCoverage2D for implementation of their `evaluate(DirectPosition, double[])` method. Also split GridCoverage2DTest in two test methods.
     add e2dde20  Move in a single package all Java2D dependencies (except public API) used by grid coverage.
     add 5491224  Fix compiler error in Javadoc.
     add 76376e3  Add an ImageUtilities.createGrayScale(…) factory method.
     add d768f64  Complete AbstractRenderedImage and add an initial test.
     add 0f3ada7  GridCoverage2D.toString() provides some information about the image (origin, tile size, data type, whether the image is opaque).
     add 8f5a5a8  Add one more test.
     add eb10ec8  Modify the semantic of TranslatedRenderedImage for storing a location instead than a translation. Rename that class as RelocatedImage to reflect that semantic change.
     add ca3387e  Move RelocatedImage as a package-private class accessible (for now) only from public static function. Rename AbstractRenderedImage as PlanarImage (taking inspiration from Java Advanced Imaging - JAI) with the intent to set it as the base class of most RenderedImage implementations in Apache SIS.
     add c39230c  Move RelocatedImage in the org.apache.sis.coverage.grid package and make it more specific to GridCoverage2D purpose. In particular we add the capability to produce a smaller image by retaining only the tiles needed for the request.
     add 9a6ace7  Remove one level of indirection when the image given to GridCoverage2D is a RelocatedImage. Relax the check for sample model size compared to tile size.
     add bc51b96  Rename RelocatedImage as ReshapedImage because this class can also change the image size.
     add 62cea41  Share TiledImageMock implementation with other tests.
     add a32a606  Add more tests for ReshapedImage and fix a few bugs in this process.
     add eb9ad25  Move PlanarImage in public API. I think it has reasonable chances to be stable now.
     add 6ef7876  Initial implementation of CachedImage. The intent is to hold the result of operations applied on other images. After completion, it will replace ConvertedGridCoverage.
     add 963004a  Avoid a NullPointerException on call to `getMetadata()`.
     add ae19e93  Base class for image operations.
     add bd7b424  Rename CachedImage as ComputedImage and retrofit part of ImageOperation in it.
     add be0c053  Add ImageLayout as a helper class for setting the tiling used by ComputedImage.
     add efd6eaa  Move ComputedImage in public API.
     add 2dff54f  First draft of BandedSampleConverter (not yet tested).
     add ac2fc3e  Add tests for BandedSampleConverter.
     add b1dc326  Add test for ComputedImage.
     add b372f87  Consolidation of Raster/ColorModel/SampleModel factories.
     add e8aa999  Replace ConvertedGridCoverage body by new code usinb BandedSampleConverter. We lost write capability in converted values for now.
     add db59cb5  Move a WKT utility method to WKTUtilities internal class.
     add 22ea241  ComputedImage tracks changes in its WritableRenderedImage sources in order to know which tiles to recompute.
     add 5d08bd4  Clarify ComputedImage assumptions on pixel coordinate system.
     add 6f551c4  ConvertedGridCoverage should provide a non-null ColorModel.
     add c7b967d  Move ConvertedGridCoverage to package-private class.
     add edfff44  Add a check for null JNDI context.
     add 6380604  Begin support of WritableRenderedImage in ComputedImage.
     add e2a8c3d  ComputedImage consolidation: - Remember when we failed to compute a tile. - Detect when a tile goes from having no writers to having one writer, or conversely. - Add documentation about behavior when image is also WritableRenderedImage.
     add 0d36b92  Add a `clearErrorFlags` method and add tests.
     add 0773330  Documentation update, in particular about WritableRenderedImage synchronization issue. https://issues.apache.org/jira/browse/SIS-487
     add 4322a73  Writing in ConvertedGridCoverage can now retro-propagate the changes to original WritableRenderedImage.
     add 7624b44  Retro-propagation of changes in converted values need to verify the bounds of the region to propagate.
     add 4bba629  Test of BufferedGridCoverage can share the test of GridCoverage2D (reduce code duplication).
     add ce51d34  After doing retro-propagation of converted values to source integer values, we should declare the tiles as dirty because converting back to "geophysics" values may produce slightly different results.
     add 49c68b4  Leverage ArgumentChecks.ensureNonEmpty(…) where appropriate. Restore some import statements to their original order for reducing the risk of conflicts when we will merge to master (we will need to choose later a more general approach for managing import statements).
     add 1c506b3  Move Schemas constant into CodeListUID for avoiding confusion: those URL are no longer the URL where to download the XML schemas since the protocol changed from "http" to "https". They are now only namespace for "codeList" ou "uom" attribute values in some XML elements. https://issues.apache.org/jira/browse/SIS-480
     add 3b73a08  Add axis names for extra-terrestial planets.
     add 3993e51  Documentation updates and minor code adjustments. Some import statements were restored to their original order to reducing conflicts when we will merge to master (the use of automatic tools for managing import statements is a question to be revisited later).
     add b9bfce3  Rename Features.castOrUnwrap(IdentifiedType) as Features.toAttribute(IdentifiedType) and use it where appropriate.
     add b961b32  Bug fix: read character set if not empty.
     add b9fe509  Conservatively fix CPG encoding to US_ASCII. Unwrap UncheckedIOException (or similar "exception wrappers") before to wrap them in ImagingOpException.
     add d70c166  Move QuadTreeWriter close to QuadTreeReader. We do this move for making history a little bit cleaner.
     add 3954de8  Remove application/sis-webapp implementation but keep the module for future development. This module has not been maintained for 7 years, still had links to incubator, has been reported to not work anymore (e.g. all links in "sis-location-config.xml" are dead) and is the only module using the QuadTree class, which may need incompatible API changes as warned in its javadoc. This module has been excluded from Apache SIS 1.0 release for above reasons. A reboot of this effor [...]
     add e4dba07  Refactor QuadTree: - Remove the assumption that coordinates are geographic. - Remove hard-coded constants for Earth radius. - Remove requirement that values implement QuadTreeData. - Allow any kind of Object specified by generic type. - Perform search with parallelizable streams. - Prepare for generalization to k-dimensions.
     add c2a2897  Move QuadTree implementation into KDTree after generalization to the n-dimensional case. Tested in two-dimensional case but not yet with higher dimensions. For now the maximal number of dimensions is 6.
     add f23b1d0  Move the KDTree/QuadTree implementation to sis-feature module and rename as PointTree (as opposed to "region QuadTree" or to RTree).
     add 2ce1448  Add documentation and more argument checks.
     add 5d975b2  First version of PointTree as a java.util.Set implementation. Optimized version of `contains` and `remove` to be provided in a next commit.
     add a579136  Implement PointTree.contains(Object). Implementation of removal operation is differed to a later version.
     add 29ac56d  Initial implementation of Spliterator.trySplit() for parallelism during PointTree traversal. Implementation is incomplete since it splits only the first node; we should go down in other nodes too.
     add b0b189c  Minor cleanup on filter package. The change in imports order is for reducing the risk of conflicts when code will be marged to master.
     add 8737d30  Trivial formatting.
     add 262c864  Rename WrapResolution as WraparoundStrategy and minor formatting.
     add bebba43  Add a test for NodeIterator.trySplit().
     add 7e8d056  Minor documentation correction, argument checks and add "TODO" tag for remembering next work to do.
     add 6fee246  Review of the methods added in Geometries internal class: - Be more specific about whether we unwrap GeometryWrapper or not. - Keep classical loops in this case. Actually since those loops are very small,   applying lambda in Geometries require about twice more lines of code than loops. - Revert to package-private access some methods that, when public, encouraged the   writing of code specific to a single geometry library. - Change some implementation to have a consisten [...]
     add a3ddd65  Add a copy constructor to PointTree. This constructor share the data structures than can safely be shared, in order to reduce memory usage.
     add f7b4b91  Use a pre-allocated buffer for storing the coordinate values during traversal of elements in a PointTree.
     add 40a0cee  Remove use of @Generated annotation.
     add 08012a9  Add documentation about purpose of a method and what improvement could be done.
     add db11d82  Provide more control on the way to handle wraparound axis (e.g. longitude crossing the anti-meridian): - Move WraparoundMethod enumeration to public API and document more. - Add a GeneralEnvelope.wraparound(WraparoundMethod) method. - Add a GeneralEnvelope.horizontal() method (side-effect of next point). - Refactor Geometries.toGeometry2D(Envelope, WraparoundMethod) to use GeneralEnvelope methods. - Replace "envelope spanning the anti-meridian" by "envelope crossing the  [...]
     add 6aa28f8  Modify the JTS factory class for building JTS Polygon more directly, and complete javadoc.
     add e165916  Change strategy about the way we handle different geometry libraries (ESRI, JTS, Java2D). The previous strategy was to put all methods in	Geometries class, which was okay for a small number of methods. But with recent increase in number of methods, the Geometries class was becoming more convolved and inefficient. The new strategy moves non-factory methods (geometry instance methods) in the GeometryWrapper class, which starts behaving a little bit more like an API abstrac [...]
     add 617c6d0  fix(Feature): Do not fail decoding a linestring with only three points whose first and last are the same.
     add 28e8dc3  Keep the previous order of import statements for now. We will need some mechanism for handling that automatically in the future, but for now the intent is to reduce the risk of merge conflicts when the "geoapi-4.0" branch will be merged to "geoapi-3.1" and "master" branches.
     add e8a77fa  Resolve a race condition during class initialization: a Factory.INSTANCE field may be temporarily null during Factory class initialization if the initialization of that class started before Geometries class initialization.
     add b2d5797  Remove empty implementations of methods that were removed from GeoAPI-pending.
     add d0c9b54  Add a window for showing data (Features in current version, coverages in a future commit).
     add 1203628  Move window management in a separated WindowManager class.
     add 871fa33  Minor documentation fixes and interrupt loading when the FeatureSet is discarded.
     add f7798ef  First draft of a control showing sample values from a large tiled image.
     add a70927e  Fix numerous problems in the initial GridView implementation (horizontal scroll bar was not visible, too many GridCell nodes were created, etc.)
     add 60f9fee  Fix broken link.
     add ee71343  A little bit of formatting improvements.
     add 65e63cc  Complete the formatting of header row on top of the grid view area.
     add d0c3715  Add a little bit more space to the header row. This use of `cellSpacing` for that purpose is a little bit arbitrary.
     add 574fd06  Implement loading of tiles in background thread.
     add e2fb98c  Prevent having many threads requesting the same tile.
     add 7fa7573  Replaced the `loading` flag by `status` with more advanced cabability to report error.
     add 054d322  Portrayal : update mapitem API
     add b03c4e0  Fix an error in check for y bounds when RenderedImage.getMinY() is not zero. Numbers shown in header column and header row should starts at RenderedImage.getMinX() and getMinY().
     add 48f9399  Fix layout of error message.
     add bac4f07  In case of failure to fetch tiles, show error controls for every failed tiles instead than only the "widest" one. Actually it makes code simpler.
     add 131091f  Add a test application for manual testing of GridView.
     add 3bcec55  Use a fixed seed for avoiding a random (even if rare) test failure.
     add bfd2d3c  Give a way to export metadata information, through clipboard for now.
     add fd6d394  Copy also the Coordinate Reference System, in WKT or GML.
     add 3f6570e  The call to Arrays.sort(…) make unecessary the attempt to write indice in increasing order, which we the purpose of System.arraycopy(…) call.
     add cd4198d  Fix header row (was not visible anymore).
     add b07299c  Connect Gridview to the ResourceExplorer: grid data are now shown when a GridCoverageResource is selected.
     add 3605f9a  An attempt to fix the problem of cells sometime missing in header rows the fist time that the grid is shown.
     add b6a1403  Remove methods that we are not sure enough they will be appropriate.
     add 2709d98  Add an API for requesting only an overview. Not yet fully enabled since subsampling would require an improvement in GridView.
     add 08bc5dc  Show converted values (instead of "raw" sample values) in GridView. The converted values are the values in unit of measurement like °C, after application of transfer function.
     add 0bbdf79  Revert "An attempt to fix the problem of cells sometime missing in header rows the fist time that the grid is shown." It did not worked better. Since the problem appears only in some occasions and disappear on the first scrolling action, we leave it as it for now. This reverts commit 3605f9aa45fd9e71071f873a70e3caa4e63bc1b8.
     add 22d2a86  Fix wrong value initially shown when the first values are NaN.
     add c322484  Load grid data only if the "data" tab content is visible.
     add cf18ddf  Show coverage data in a separated window, with initial set of controls (only a list of sample dimensions for now).
     add 5e91876  List the sample dimensions in CoverageExplorer.
     add 09cd4dd  Fix a NullPointerException.
     add e6f51e8  Handle formatting of cell values in a separated class, for making easier to share with the table of sample dimensions (to be provided in a future commit).
     add 8c19cc0  Show coverage sample dimensions in a table, with min/max values and units of measurement.
     add ac017a7  Finally found the cause of header row sometime not showing.
     add 6e86c5e  Provide controls for cells size.
     add 335984c  Remove the control for cell spacing since it is likely to be more confusing than helpful.
     add 136d403  Highlight the cell under mouse position. We will provide geographic coordinates of that cell in a future commit.
     add 37696ea  Display geographic or projected coordinates of selected cell.
     add b4ba732  Fix an horizontal offset in the selected cell.
     add 55f5813  Make native (implementation-dependent) NetCDF metadata available.
     add 1fd64e4  NetCDF native metadata should include attributes of variables (in addition of global attributes).
     add 3c438f1  Allow special case for parsing units of measurement in GCOM-W files.
     add 92dc482  Update the values shown in GridView according the band selected in the sample dimensions table.
     add 012d9b3  Add documentation on some portrayal classes.
     add 2eafd3c  Edit javadoc for `MapLayer`. Note: we omit the message saying that this class may change in future version; this is the case of anything in "internal" packages.
     add 7db89b6  Fix a NullPointerException (bug identified by Johann).
     add 0d04f2d  Renamed "resource" property as "data".
     add dc3f688  Javadoc.
     add fc88ca5  Javadoc clarification, second round.
     add c936bda  Start drafting a Canvas class as the common abstraction for implementations that manage the display of MapLayer instances.
     add a4c302f  Defines the 4 fundamental properties of Canvas and document their purpose and constraint.
     add 32546a8  Rename Canvas2D as PlanarCanvas because the constraint is not only to be two-dimensional, but also to use a Cartesian coordinate system (as opposed to the coordinate system of planetarium dome for example).
     add 3fd95d9  Add a Matrices.createAffine(Matrix, DirectPosition) method, to be used by ongoing work on Canvas.
     add 7c0e987  Add a MathTransforms.tangent(MathTransform, DirectPosition) method for computing linear approximation of a MathTransform at a given location.
     add 480c551  Start writting the actual code for Canvas (not yet completed).
     add 62eb5d1  First draft of Canvas.getGridGeometry() taking in account the supplemental dimensions (i.e. the dimensions of the Point Of Interest that are not in the objective CRS).
     add e86ef7f  Complete Canvas.getGridGeometry() - not yet tested.
     add 5b1726a  First implementation of Canvas.setGridGeometry(…) - not yet tested.
     add ffe449c  Do not fire "gridGeometry" property change anymore and add documentation explaining the policy.
     add 88b18df  First draft of Canvas.getGeographicArea() and getSpatialResolution(), and use those information when searching for a CoordinateOperation.
     add c060095  Document the approximation done regarding CoordinateOperationContext when changing the objective CRS or the Point Of Interest (POI). Replace the use of "Authalic radius" by "Radius of conformal sphere" at the latitude where the spatial resolution is computed.
     add 292c356  Review the NTv2 grid reader before upgrade to multi-grid support. Opportunistically prepare to support NTv1 in addition to NTv2.
     add b0f4cd9  Fix a (previously random) test parameter value for avoiding random test failures.
     add 9d2b7b5  Read all sub-grids and organize them in a tree (not yet stored). We still have to resolve the case where there is more than one root.
     add b25ef83  Change the strategy in the way the DatumShiftGrid tree is contructed by NTv2 loader. In other classes, improve a bit the documentation and the toString() result.
     add 8a462de  Port MosaicCalculator from Geotk (was named "RegionCalculator") for use by DatumShiftGridGroup, itself used by NTv2 reader when a NTv2 file contains more than one grid without common parent. The intent is to figure out how to layout the 114 sub-grids found in NTv2 file when the file provided limited information about the parent-child relationships, especially close to the root.
     add 327b2df  Refactor a bit DatumShiftGridGroup for computing sub-grid coordinates in a more direct way than using AffineTransform. This change allows us to fix a bug, where the translation that we got was not adjusted for the different size of the cell.
     add e900738  Renamed MosaicCalculator as TileOrganizer.
     add ce34db4  Renamed TranslatedTransform as TileTranslation.
     add 901921c  Consolidation of multi-grids NTv2 support with the addition of documentation and tests.
     add c484cfb  When a point to transform is outside all sub-grids provided by a NTv2 file, take the nearest grid.
     add e16a2c4  Change the policy of DatumShiftGrid.getDomainOfValidity(): compute the envelope from cell center, not cell border. This is necessary for avoiding spurious overlaps when two grids are side-by-side (in principle without overlapping) but one grid has larger cells than the other other grid. The 0.5 cell expansion caused the grid with larger cells to overlap the grid with smaller cells. This problem happens with NTv2 datum shift grid.
     add ffe4da9  Delegate the choice of NTv2 sub-grid to SpecializableTransform. With this commit, DatumShiftGridGroup.interpolateInCell(…) really become only a fallback (except during inverse transforms).
     add cd87c70  Replace the half-backed mechanism in SpecializableTransform by something closer to an R-Tree. This is not yet a "professional" R-Tree; it requires that nodes for widest areas are added first and even in those condition the tree may not be well equilibrated. But it will hopefully do the work for the foreseeing time until we implement a real R-Tree.
     add c50586b  Add "National Transformation version 1" (EPSG:9614) operation method.
     add a581d4e  Replace `distance` method by `distanceSquared` for avoiding the Math.hypot(…) cost.
     add a4bf8d4  Make GridDerivation more flexible in two ways: 1) If both envelopes contain only an Envelope, compoute the envelopes intersection. 2) If only a margin is specified, apply that margin even if no other change is specified.
     add 8f4d5c3  Move TileTranslation as an inner class for keeping it close to the only code where it is used.
     add 717c52b  Rename Tile.getAbsoluteRegion() as getRegionOnFinestLevel() and add check against integer overflows.
     add cbcfca6  Provide control on the number of fraction digits shown in the GridView cells.
     add e557a14  Initial version of a viewer of RenderedImage.
     add 6f54acf  Fix a ClassCastException reported on mailing list.
     add 8032164  Documentation cleanup.
     add 0853138  Handle the case where the longitude value of the point to transform using a datum shift is on the other side of the ±180° meridian compared to the region where the grid is defined. Example: NADCON file for Alaska which is defined in the [−194° … −127.875°] range of longitude value, so the +170° longitude needs to be converted to −190° before it can be used.
     add f8b3f5e  First attempt to apply the fix for NADCON grids crossing anti-meridian to NetCDF localization grids crossing the anti-meridian. Current fix may be okay for grid without rotations or with a 90° rotation, but may not be okay in the general case. A better fix may require an API change in DatumShiftGrid.replaceOutsideGridCoordinate(…).
     add e11726f  Change DatumShiftGrid.replaceOutsideGridCoordinates(…) API for processing all dimensions at once. This is needed when a shift of 360° of longitude (for example) corresponds in a change of grid indices in all dimensions, because the grid is inclined.
     add 7e9faf3  Basic navigation between the window showing tabular data and the window showing the image (empty for now).
     add c46f427  Workaround a bug of BufferedImage.getTileGridXOffset() / getTileGridYOffset() not returning zero (contrarily to what their javadoc said).
     add e819438  Add reference to bug https://bugs.openjdk.java.net/browse/JDK-8166038
     add 89b6293  Consolidation of the we relate "tabular data window" and "visualization window".
     add 149e764  Fix a NullPointerException when showing the FeatureTable window before the corresponding tab in the overview window has been made visible.
     add 8ade352  Try again to fix the problem of missing column headers. This hack seems to work.
     add 7193100  First draft of a CoverageView window showing the image (identity transform only for now).
     add 2d4382a  Add transparency support in images backed by ScaledColorSpace.
     add 0b64c9b  Consolidation of ScaledColorSpace / ScaledColorModel.
     add 3195e47  Reduce the number of Locale object we carry. They are not needed at this time since the application is shown in default locale only, and the information is tedious to transfer between various objects.
     add b08e247  Reorganize the construction of CoverageExplorer in a way that make easier to provide different views (tabular or image) of the GridCoverage in the same DataWindow. First draft of controls for the GridCoverage rendered image.
     add 8d17146  Remove (for now) the code managing related windows since it is no longer used. We may bring it back later but in another form.
     add cffed6a  Provide more control on the image shown. Control on background color make easier to distinguish the missing values. Control on range to use for scaling gray tone will in in place but the actual action will be the purpose of the next commit.
     add aaf65e7  Define a policy about thread pool in Apache SIS: JDK common pool reserved for short computational tasks without blocking operations, sis-util pool for longer potentially blocking tasks limited to the number of available CPU, and sis-javafx pool for immediate execution regardless if CPU are already busy or not. Initial version of TileOpExecutor capable to parallelize the operations on a RenderedImage using sis-util thread pool. First draft of ImageOperations convenience m [...]
     add 7514d35  Rename PropertyCalculator as AnnotatedImage (the properties are the annotations) and expose less implementation details. Allow sequential computation for the RenderedImage implementations that are not thread-safe. Add tests.
     add d1e0024  Move out the formatting code that check for special types (InternationalString, ControlledVocabulary, Enum, Locale, TimeZone, Currency, Charset, etc.) so it can be shared by the JavaFX application. The intent is to have range of values (given as array of 2 elements) shown in a readable way.
     add ca055b6  Provides default values for more properties in a netCDF Coordinate Reference System for making possible to open a file even if the CRS is not well defined.
     add f2e9be1  Use a fallback coordinate system when we can not determine its type.
     add 39c5396  Adjust the number of fraction digits shown in coordinate values according the pixel resolution at that position. This resolution may change at any position if the `gridToCRS` transform is non-linear.
     add 5b6f88a  Consolidation of the policy about handling of errors during statistics computation.
     add 52c0706  Cache previously computed values even if they were computed by other AnnotatedImage instances, as long as they were doing the same operation on the same image.
     add 9c1c34c  Manage the cache in AnnotatedImage class instead than ImageOperations for a better separation of tasks. A future version of ImageOperations may create other kinds of images, in which case we would probably not want to mix the caches. Also clarify the policy about error management: we cache only the properties computed fully without errors.
     add 626cf06  Use statistics for adjusting the minimum and maximum values between which the gray scale tones are applied.
     add 8aa76e3  Render image in background for avoiding to block the JavaFX thread.
     add ab5f516  Show the geographic coordinates of pixel under mouse pointer.
     add a126136  Provides an indication that work is in progress and report error in the status bar.
     add 530a5af  Avoid sending tons of repaint requests if a rendering process is already in progress.
     add a203f47  Make ImageOperations configurable.
     add cab811d  Move in a `MapCanvas` parent class the map rendering that can be done with any Graphics2D handler, not only `RenderedImage`.
     add 8fd1a2f  The AffineTransform used for rendering coverage needs to be the concatenation of "grid to CRS" + "objective to display", assuming that "grid CRS" = "objective CRS". This will be needed later for zoom, translations, etc.
     add 5d63cb1  Zoom out for showing the full coverage.
     add 8f5c507  Center the image.
     add da15d49  Move the computation of initial zoom to the MapCanvas parent class, so it can be used by other implementations than `CoverageView`.
     add f85e424  Be a little bit more tolerant to NaN values during the "units to sample" conversions. Previous behavior was to throw a TransformException because we don't know which value to use. This commit relaxes a little bit this behavior with the following heuristic rules:
     add 0280ffb  Fix a MismatchedDimensionException when extracting the horizontal component of a three-dimensional ProjectedCRS.
     add bda2ec8  Comment formatting.
     add 6ff3fd2  Move in a separated class (LocalDataSource) the code from Initializer.getDataSource() which was managing a local installation of the database. With this move, it is easier to manage an alternative database (HSQLDB) in addition to Derby for local storage.
     add 8011fe0  In a call to `GridGeometry.reduce(…)`, the number of CRS dimensions is not necessarily the same than the number of grid dimensions.
     add 1f4f6e4  When invoking GridGeometry.reduce(…), try to reduce the number of CRS dimensions by the same amount than the reduction in grid dimensions.
     add 221bbc1  Compensate for non-square pixels when computing with CRS axes are more closely related with grid axes.
     add 3d1ad33  Remove support for JavaDB.
     add 97edb07  Minor documentation updates. Addition of a more efficient `PixelIterator.getPosition(double[])` method.
     add 112f191  When rounding from Envelope to GridExtent result in lower == upper, must ensure than [lower … upper] contains the coordinate.
     add 19a38a2  Fix GCOM-C unit of measurement. Avoid displaying extraneous fraction digits.
     add b37fde6  Try to produce better identifiers and title for netCDF variables. The identifier excludes the "long_name" attribute, which is sometime more like a sentence than an identifier (the standard name or variable name provides more stable identifiers). Conversely the `metadata.citation.title` uses the "long_name" attribute as first choice, formatted in a way more like English sentence (with '_' and CamelCase replaced by space). Variable names are declared as citation identifier [...]
     add 791558a  Allow DecimalFormat precision to be set even if the CRS is unknown (in which case a generic number format is used).
     add facc539  Coverage : add GridCoverageBuilder helper class
     add 8f1e806  Begin implementation of "Modified Azimuthal Equidistant" projection (EPSG:9832). Only forward projection for now. Inverse projection and derivative will be in a next commit.
     add 9d4fa26  Coverage : add GridCoverageBuilder tests
     add 95e0ce2  Compute the `gridToCRS` transform is a `GridGeometry` is given with only an envelope.
     add 3fdbc4c  Implement ModifiedAzimuthalEquidistant.inverseTransform(…). Rewrite some equations using trigonometric identities for reducing the amount of trigonometric operations.
     add ebc9c64  Coverage : add setValues(WritabableRaster) method on GridCoverageBuilder
     add aef299e  BufferedGridCoverage : fix buffer size verification, number of banks was ignored
     add f8aa040  Add "Azimuthal Equidistant (Spherical)" projection (no EPSG code). The main purpose will be to provide an approximation of the derivative.
     add c69d648  Define ModifiedAzimuthalEquidistant as a subtype of AzimuthalEquidistant.
     add 9d80cb1  Coverage : add method to flip axis in GridCoverageBuilder
     add 0045413  Implement derivate for "Azimuthal Equidistant (Spherical)" projection.
     add 7336b1c  Tune the checks for error conditions in GridCoverage and BufferedGridCoverage construction.
     add a01eaf3  Reduce the amount of copy-and-paste in the test and add some assertions. This review does not yet include the change of exception type.
     add 06a685d  Add more javadoc in GridCoverageBuilder and replace code copied from other classes by method calls. This required to modify the API of some invoked methods (package-private API only).
     add 0349b33  Remove commented-out methods that were creating an image from arrays. They will be in the history if we want to bring them back. Those methods are omitted because they implied a copy of all sample values, contrarily to all other `setValues(…)` methods which copy only a reference.
     add d84d464  Remove the creation of a dummy SampleDimension in the test of setValues(DataBuffer); this is not needed anymore.
     add e198880  Select the same visible band than the source image.
     add 976898a  Add a Features.getLinkTarget(…) method for determining if a PropertyType is a link.
     add ace1eed  Minor cleanups.
     add 3ccfaea  First implementation of ResampledImage for raster reprojection support. https://issues.apache.org/jira/browse/SIS-493
     add 9c29e45  Rename Interpolator as Interpolation.
     add bc36b68  Add Lanczos interpolation (experimental).
     add c92fbca  Add a simple interpolation test.
     add a9d62ad  Rename InterpolationTest as ResampledImageTest and add more tests.
     add 1e87bbd  Renamed ImageOperations as ImageProcessor.
     add cbbfb4e  Initial draft of a GridCoverage "resample" operation. This starting point process only 2D coverages with a complete target grid geometry.
     add 485df91  Add nearest-neighbor interpolation.
     add e2f3f2a  Compute a default GridExtent during resampling operation if it was not specified by user.
     add 2f78016  Add a method for computing immediately an image.
     add 4fe9e7e  Correction in the way to compute the `gridToCRS` of target grid geometry.
     add 8ec46f6  Allow some tolerance when comparing two `GridGeometry` objects. It allows to detect more easily when a `GridCoverage` can be used unchanged.
     add 9043e33  Add test class for `ResampledGridCoverage`.
     add 61196ea  In ResampledGridCoverage.render(…) converts the `sliceExtent` from target grid coordinates to source grid coordinates. Use ImageProcessor for creating ResampledImage.
     add 2e525a8  Add an offset to default "grid to CRS" transform so that grid coordinates near the point of interest are integers in both grids.
     add 8d8b09f  Avoid resampling the data when the operation can be represented by a change of "gridToCRS" transform.
     add 0bdce38  If users specified an envelope, use it for computing the sub-region to resample.
     add 46059c2  Filter : fix ST_Point and ST_LineString not parsing crs when integer or string
     add 983c69f  Make a best effort for reusing existing computation results, for avoiding spending CPU for e.g. resampling twice the same image.
     add bfe5583  Make processor configuration cloneable and use them in `ResampledGridCoverage`.
     add cf9962a  Interpolation should be done on floating point values when they exist. This is required for handling correctly the missing values.
     add e52cc8e  Begin the port from Geotk project of the code using a precomputed grid of coordinate values for image resampling operations.
     add 82ea59b  ResampleGrid implements MathTransform2D.
     add 6d07eb4  Checkstyle correction.
     add 307f3cf  Add more tests for ResamplingGrid.
     add 27172a4  Minor formatting.
     add 1960207  Try to be a little bit stricter on the check about whether a ResamplingGrid tile is close enough to a linear transform.
     add 84f904e  Remove (at least for now) roundIfAlmostInteger(AffineTransform) since it is not sure that the benefit is worth the risk.
     add c0ad361  Add more interpolation tests. Contains a correction about the size of ResampledImage tiles.
     add c45277f  Rearrange tests with a separated class focussing on `Interpolation` only (without going through `ResampledImage`).
     add ff5e15e  Include the Japan profile in JavaFX application because it provides access to more file formats. Opportunistic replacement of 0 literal by constant value.
     add 5c85521  Fix an IndexOfBoundsException when the "visible band" is -1 (sentinel value for information not available).
     add eb3f52c  Provides an icon for making easier to identify SIS when switching between different applications.
     add b3ba51b  Add a button for getting more information about an error while loading resources. Fix exceptions in netCDF reader which occurred when a variable is not a coverage.
     add 54c4fc6  Basic zoom and pane services on the map view, not yet using the full resolution available.
     add 7972946  Repaint the map after a zoom or pan gesture. It allows the viewer to fetch new data for the new region and resolution.
     add 4c63b80  Fix an application freeze when an image operation executed by `TileOpExecutor` recursively uses `TileOpExecutor` on another image.
     add d7d7b7f  Make code a little bit more type safe.
     add 6f8ff41  Fix some anomalies observed when zooming or panning the map for a time long enough that some rendering happen during the gesture. This commit fixes some problems but not all of them; more investigations are needed.
     add a33b746  Replace http links by https and minor documentation fixes.
     add f6c88a1  Add missing parameters in the internal `toString()` representation of some map projections.
     add cac009d  Simplify the handling of transforms by updating a single Affine instance instead than adding/removing instances in the ObservableList.
     add a0bcc59  Fix the anomalies (jumps in image position) that we observed when zooming and panning faster than the repaint events.
     add 4973476  Consolidation of the rendering process.
     add f938b54  Removed unecessary calls to super.succeeded()/cancelled()/failed().
     add 89ec44d  Separate the case of nodes to move together with the map ("floatingPane") with the nodes to keep at fixed positions regardless pans, zooms and rotations ("fixedPane").
     add fba5c2b  Add listeners to keyboard, track pad or touch screen for navigation.
     add be8e094  Check for spherical case in Modified Azimuthal Equidistant projection.
     add f2f5771  separate the Java2D-specific rendering code in MapCanvasAWT subclass. It allows to use MapCanvas base class with pure JavaFX graphics.
     add e51cfe5  Fix wrong position when performing pan or zooms with keyboard while the map is rendering in background thread.
     add 19b59af  Provides a Widget base class for making easier to locate SIS widgets.
     add 2f96f80  Improve StatusBar, make it public and make it useable with arbitrary MapCanvas.
     add 7893dbd  Rename CoverageView as CoverageCanvas and make public with better separation of tasks.
     add 24c4bea  More control on the initial coverage view (image versus tabular data).
     add f9154f7  Move `PlanarCanvas` and dependencies in public package. They were already visible because of `MapCanvas` extending `PlanarCanvas`.
     add a731452  Fix a NullPointerException caused by the absence of CRS in the envelope inferred from a GridExtent.
     add d85273e  Pom : disable trimStackTrace by default in surefire plugin
     add 8bb0edb  Make a better effort to take the `gridToCRS` transform in account when determining a CRS for a GridExtent.
     add 04d422a  Feature : add FeatureComparator utility test class
     add da1e14d  Provides more guidance to user when selecting a CRS by warning when the CRS domain of validity does not intersect the area of interest.
     add 1918205  First draft of a `ChoiceBox` for choosing a CRS in a list of more recently used CRS.
     add 939ec62  Take in account the geographic area of data shown when building the list of CRS.
     add b0cf8d5  Consolidation of CRSChooser in situations where an error occurs during the construction of a CRS. Before this commit, the CRSChooser behavior in such case was confusion (e.g. filtering not working anymore).
     add 1a3bcee  Fix a NullPointerException.
     add 3734fbe  Give public access to `ImageLayout` constructor for allowing the use of different preferred tile size.
     add c277c9c  Deprecate a method which is not used in practice and cause compatibility problem with JDK 14.
     add 11f8694  Keep a relationship between the CRS of coordinates shown in the status bar and the CRS of the displayed raster.
     add e3a2b62  doc(Referencing): minor note on envelope utility method.
     add bd836fa  Fix a NullPointerException when building a `GridCoverage2D` with domain set to `GridGeometry.UNDEFINED`.
     add 65deba1  Change `GeneralEnvelope.setTimeRange(…)` contract regarding null values in a way more convenient for creating "is before" and "is after" filters. Add some documentation.
     add 0707557  Make `CoordinateFormat` more robust to change of CRS.
     add dbec36d  Apply CRS choice on the coordinate values displayed.
     add 3ff7c26  Resolve numerous problems with the display of geographic/projected coordinates under change of CRS.
     add 9005422  Show CRS name in a tooltip and axis abbreviations.
     add beece97  Make check for JNDI context a little bit more robust.
     add b729668  Fix a problem at initialization of CRS choices (was initialized to the wrong CRS).
     add 6404696  Fix other CRS selection problems (wrong CRS checked in menu items, "Other…" not working). This commit fixes the last problems we have seen so far.
     add b0e8264  Refactor StatusBar API with some method renaming, property definitions and javadoc completionS. No change in functionalities.
     add 71da3a6  When formatting projected coordinates, give also the axis direction. Example: "-100 m E 300 m N". Maybe a future version should replace "E" by "W" when the value is negative, but current version is enough for resolving the ambiguity problem.
     add 38ab0ef  Make CoordinateFormat.parse(…) consistent with CoordinateFormat.format(…) regarding direction and accuracy information.
     add e474c3d  Replace a NullPointerException (at `build()` invocation time) by a more explicit exception thrown earlier.
     add f9f9e2b  Add missing serial version.
     add b44873a  Initial implementation of Cassini-Soldner projection written from EPSG formulas. This commit provides a direct, non-optimized implementation with almost verbatim copy of formulas published in:
     add ae63410  Optimize the Cassini-Soldner implementation by using the faster and more accurate formulas inherited from MeridianArcBased instead than the M(φ) method and its converse µ₁ + …. Rearrange a little bit some remaining terms for reducing the number of operations.
     add c66a77b  Add tests for Cassini-Soldner projection.
     add e28177a  feat(JavaFx): build for java 11, add maven dependencies
     add 68ec33d  Implementation of Jacobian matrix for Cassini-Soldner projection.
     add 887b72a  Add spherical case of Cassini-Soldner projection. Formulas are taken from Wikipedia. This commit completes https://issues.apache.org/jira/browse/SIS-218
     add 76f4f2d  Reduce visibility of `PARAMETERS` constant when not needed.
     add 1e65345  Add SCALE_FACTOR parameter on CylindricalEqualArea and add some comments in other places.
     add e6ab82e  Make a little bit more robust the way we handle map projection variants. Enable a Modified Modified Azimuthal Equidistant test that was disabled. Opportunistically add Hyperbolic Cassini-Soldner projection since it is a small variation of usual Cassini-Soldner projection (derivatives not implemented).
     add a1f9a65  Retrofit HyperbolicCassiniSoldner into CassiniSoldner. It reduces code duplication and may be more flexible if we want to implement the Jacobian matrix of hyperbolic case in a future version. It also reduces the visibility of hyperbolic case, which is desired because it is a very specific case.  The cost on normal Cassini-Soldner case is hopefully light (a single `if` statement) and may be acceptable since this projection exists mostly for historical purposes.
     add 130ea87  Use CoverageExplorer instead of GridView inside the ResourceExplorer widget. It allows to leverage more of CoverageExplorer services such as coordinate transformations.
     add 0b0ab28  Prepare the DataViewer window to be the main window for showing data without obligation to create new windows. Remove the "overview" parameter, which has not been implemented and become less relevant after above sentence.
     add b4191c7  Add a tab showing the image in the main window.
     add c57e628  Add data controls below the resource explorer.
     add bca03c4  Fix various bugs (e.g. NullPointerException) and anomalous behavior when switching between different visualized data.
     add 19abdd5  Improve the support of coordinate display when the image shown on screen does not have an affine transform to a known geospatial CRS. This is the case of netCDF files when the coordinates of each pixel is specified in data arrays (localization grid). This work required the addition of CommonCRS.Engineering enumeration with DISPLAY and GRID values, for making easier to detect when we have such grid CRS. For now we use the EngineeringDatum of CommonCRS.Engineering.GRID as  [...]
     add c4d3beb  Merge branch 'geoapi-4.0' into feat/javafx-on-11
     add 32a4415  Do more work in background thread.
     add 3786136  Consolidation of localized resources by moving some words to the `Vocabulary` class.
     add df4585d  Use "stretching" for the name of operation that fit a color ramp to a given range of values. It seems to be the word used by ESRI.
     add 3df1a79  Merge branch 'geoapi-4.0' into feat/javafx-on-11
     add 1f1fdbf  Settle the policy regarding ChannelData.reset(). Opportunistic typo fixes.
     add ed39859  Add execution of GeoAPI parameterized transform tests.
     add 4c71824  Merge branch 'geoapi-4.0' into feat/javafx-on-11
     add bf2b3b2  The translations applied on "target to source pixel coordinates" transform shall be computed from requested extents, not from global extents.
     add 78e494d  Apply a more uniform way to define and handle RenderedImage properties. Prepare CoverageCanvas to handle resampled GridCoverage by executing image operations in a single Process internal class (for making easier to control the chain of operations).
     add 1dfd3d9  Rename SOURCE_PADDING_KEY in a way more consistent with other properties.
     add ceb9381  Merge branch 'geoapi-4.0' into feat/javafx-on-11
     add 920bf67  Fix test suite execution.
     add 7498ef3  More robust concatenation of transforms when some steps may be dropping or adding a dimension.
     add 7b6698f  Merge branch 'geoapi-4.0' into feat/javafx-on-11
     add 9a757c1  Merge branch 'feat/javafx-on-11' into geoapi-4.0 with the following amendments: - The previous way using pre-installed JavaFX is kept. - Maven dependencies under "provided" scope and included only if "javafx" profile is activated. - JavaFX dependency upgraded from 13.0.2 to 14.0.1. - License declared in NOTICE file.
     add 8501bb9  Remove the javafx-swing, javafx-fxml and javafx-web dependencies. They are not needed by sis-javafx module.
     add c6a7fb1  Add methods in `PixelIterator` for getting and setting data elements (not necessarily the same than pixel values).
     add 3f355f4  First attempt to reproject `RenderedImage` that are slices in a n-dimensional data cube. This commit contains work in two areas:
     add 0ac1b4f  Query : add linear resolution parameter on SimpleQuery
     add 52de2b5  Edit javadoc and complete equals/hashCode implementations.
     add 629eaf2  Simplify a little bit the handling of CRS changes in CoverageCanvas. We abandon the "intermediate update" done during coverage loading (GridCoverage changes shown before the RenderedImage was available) because it was confusing for both the user and the developer. Instead the CoverageCanvas content is updated in a "all or nothing" way.
     add ceca796  Fix initial image display, which was sometime partially outside the window. More accurate detection of drag gestures.
     add a095d21  Add an Area Of Interest (AOI) argument in ImageProcessor.prefetch(…).
     add 4ec4fba  Improve a little bit more the selection of CRS proposed to user (more duplication removal, omit "Computer display CRS").
     add 3974735  Allow selection of interpolation method.
     add 53a7f09  fix(Core): avoid returning null envelope for points or empty geometries.
     add 0e887fd  feat(Core): add commodity method to translate grid extents.
     add 93d99ce  Javadoc editions. Move method close to related methods. Share some code. Take in account the variable number of dimensions (2 or pseudo-3) in JTS geometries.
     add 4bfbfb2  Allow ResampledGridCoverage to work with grids having more than 2 dimensions.
     add 35f8097  Partial debugging of ResampledGridGeometryTest.crs4D_to_crs3D() test case.
     add 03e05e5  Allow `ResampledGridCoverage` to work (under some conditions) even if the coordinate operation can not be reduced to 2 dimensions.
     add c75bef2  Adjust `testNonSeparableGridToCRS()`.
     add 808655c  Verify that the requested extent intersects the data extent.
     add dd39d9f  Test with a `GridExtent` origin located in another place than (0,0).
     add 15564e3  fix(Feature): ensure envelope returned by property operation contains a CRS if any is available
     add 6722ec6  lfix(Feature): improve envelope operation to ensure attribute envelopes have a CRS defined if possible
     add e213eb5  Fix a NullPointerException when using directly a `new Formatter()` instance.
     add aa195d2  Trivial comments formatting (no code change).
     add bc27996  Better determination of the inverse of an OperationMethod.
     add 658b0e8  Better filtering in CoordinateOperationRegistry about whether to extract the horizontal component of a 3D CRS. This change allows ResampledGridCoverageTest.crs4D_to_crs3D() to pass.
     add 5d82f2a  Minor method renaming.
     add 4534d17  Use EPSG data for "sis-referencing" tests if the "non-free" profile is explicitly enabled.
     add de3a8f7  Dialect : add SQLite dialect in enumeration
     add d532cb5  Dialect : improve support for sqlite, ignore statements with table constraint modifications
     add 5599c0e  Rename older Dialect fields for consistency. Refine regular expression.
     add a9ecd8b  Change EnvelopeOperation.serialVersionUID since the meaning of null values in `attributeToCRS` changed. Since we broke serialization compatibility anyway, opportunistically rename `crs` as `targetCRS` for making clearer that this is not necessarily the CRS of geometry objects stored in properties.
     add a28533a  Add ImageProcessor.setPositionalAccuracyHints(…) method for enabling the use of ResamplingGrid.
     add 65a4ca1  Add a GridRoundingMode.CONTAINED for completness.
     add 3291366  chore(Storage): add unit test to check concurrency of DataStores providers fetching
     add e7ec536  Complete parameterized types in collections. Add documentation. Use longer timeout as a safety in case the test is executed on a busy CI system (this is only a maximal wait; the actual waiting time should be much shorter). IF the executor is not terminated after the test, it is a test failure because it would be a bug in our algorithm (because we already waited in Future.get()).
     add d380dff  Add a setPositionalAccuracyHints(Quantity...) convenience method.
     add 4ba19c7  fix(Core): fix bad size computing on GridCoverage2D render (crop) operation
     add e3a2732  Add integer overflow analysis in GridCoverage2D.render(…) method for BufferedImage case. Detect when existing BufferedImage can be returned as-is instead of invoking `getSubImage`. Add test case for https://issues.apache.org/jira/browse/SIS-495
     add f9bd998  Bug fix: test for minimal coordinates shall be done on the extent specified by user (xmin, ymin), not on (ix, iy).
     add a9cf30c  GridCoverage2D.render(GridExtent) should verify the number of dimension of given extent, for consistency with other GridCoverage.render(GridExtent) implementations.
     add 6bbaee1  Fix an incorrect computation of image (minX, minY) coordinates when the `sliceExtent` has some pixels outside the image bounds. Allow `ImageRenderer` to use an implementation other than `BufferedImage` when the (minX, minY) are different than (0,0).
     add 6ec7408  Add NumberRange.getMedian() and getSpan() methods.
     add 03392c5  Show the coverage value under mouse cursor position.
     add 5b29ab9  Abandon the possibility to change the `MapCanvas` of a `StatusBar` after status bar creation. That capability was adding complexity (i.e. tracking the listeners to unregister on previous canvas and re-register on new canvas). The capability to change StatusBar canvas does not seem to be needed in practice.
     add cf1fc63  Better calculation of label width needed for showing sample values.
     add 4a90d13  Remove a hack which was not needed. A simple use of `Label.USE_PREF_SIZE` does the trick.
     add 2c3e3be  Remove GridCoverage.evaluate(…) method, replaced by an `Evaluator` class. This commit is only a refactoring without changes in functionalities. Future commits will add more capabilities or optimizations.
     add 8910f34  Add a flag for reducing the amount of exceptions created when a point is outside coverage bounds.
     add 734ea4a  Move `BufferedGridCoverage` in public API.
     add 682573b  More efficient implementation of `BufferedGridCoverage.evaluator()`.
     add c8d34c8  First draft of an image providing error estimations for each pixel of a resampled image.
     add 800f3c7  Provide a new "Operations" panel in `CoverageControls` with possibility to select the "Positional errors" for current coverage. Use weak reference for the image of positional errors.
     add acc22f8  Display values of "positional errors" operation on status bar.
     add 217d0a8  Filter : implement PropertyIsLike filter
     add e86d55d  SQLStore : accept a DataStore instead of SQLStore in Database methods
     add 8e50325  Modify `StatusBarSupport` for avoiding a memory leak (reference to image that are not shown anymore). Remove "Positional errors" from the list of operations when it does not apply.
     add 41e9f44  Specify an area of interest when computing statistics.
     add d386e7c  Change argument order in `ImageProcessor.resample(…)`. No change in functionality.
     add 096e2ce  Change `StatusBar(…)` argument order and prepare for tracking more than one canvas in a future version.
     add 0265dc6  Take axis directions in account when computing the initial "objective to CRS". This change fixes the image flipping.
     add 256c6e8  Change of projection in MapCanvas need to use an orthonormal matrix for preserving the projection aspect.
     add bba7e3c  Fix an shift observed during change of map projection. The fix require an anchor point to be specified in call to `setObjectiveCRS(…)`.
     add 45d82aa  Do not allow the use of display CRS in the definition of Point Of Interest.
     add 00162ea  Resolve a duplication in the offered CRS items.
     add f2c4c23  Fix image transparency.
     add 4ef3ef2  GridCoverage.forConvertedValues(true) sometime created an image that can not store NaN values.
     add 998181d  Replace the "Image operation" pane by an "Image properties" pane. We are not ready to offer image operations in the JavaFX applications. Instead image sources, layout and properties are more useful information, with the previous "positional errors" operation shown as an image property.
     add 7820ac0  Remove `ValuesUnderCursor.evaluateAtPixel(…)` method. It is not used anymore after previous commit.
     add b7a0d8a  Pass argument lines to Maven surefire for allowing `sis-javafx` tests to execute.
     add 3f9591f  Cache of `AnnotatedImage` computation results need to take in account the area of interest.
     add 88635fd  Use of scientific notation needs to take in account the number of fraction digits that the NumberFormat allows.
     add a910548  Make lower/upper cases consistent in map keys given to `stretchColorRamp(…)`.
     add 1ef036d  Renamed "Positional errors" as "Positional consistency". The previous name was misleading because users believed that it was some kind of "absolute" error measurement, while actually we are just applying a forward projection followed by an inverse projection and comparing numbers.
     add 4a35aa0  Fix the `SAMPLE_RESOLUTIONS_KEY` values to `double[]` in the specification, but keep implementation tolerant to any number type.
     add 473f792  Save an estimation of transformation accuracy in a new `org.apache.sis.PositionalAccuracy` image property.
     add 3489bf2  Show positional accuracy of coordinates under cursor using the information provided by `RenderedImage` property.
     add e402a74  `CompoundFormat.getFormat(Class)` should choose `Quantity` formatter before `Number` formatter.
     add 61f3899  ImageProcessor.statistics(…) method needs to check if cached result is compatible with requested area of interest.
     add b594b66  Workaround for https://bugs.openjdk.java.net/browse/JDK-8166038 If BufferedImage can not be used, fallback on ReshapedImage.
     add 9bbf558  Add a comment about code to update if JDK-8166038 is fixed.
     add 480baf2  Rename a few methods for consistency. No change in functionality (except addition of a `DefaultProperty` annotation and an `assert` statement).
     add 287c6d3  Simplify the layout of source images in the "Properties" pane.
     add 70a6078  Move the menu about band selection first and add a comment about whether positional accuracy are shown.
     add ad3c144  Adjust units of measurement for avoiding confusing behavior when coordinate values are shown with units smaller than accuracy.
     add e2eea52  Add more tests.
     add acea035  Add a PlanarImage.MASK_KEY property providing a mask over missing values.
     add 2c9d440  Clarify MASK_KEY value with multi-banded images.
     add 5fdfd59  Apply mask on the image of positional errors.
     add 111b08e  Select map projection through contextual menu instead than combo box. The intent is to allow (in a future commut) creation of map projections centered on a point of interest.
     add 05ffbce  Simplify a bit the layout of coverage controls. This provides a visual easier to read.
     add 899f09b  Provide Azimuthal Equidistant projections centered on arbitrary location.
     add a06af72  Temporarily enable the use of `ResamplingGrid` for testing purpose. Unconditional enabling of this optimization can actually slow down the rendering of zoomed image because the grid is computed for the full image instead than only the visible portion. A future version should enable this optimization only when we know that most of the image surface will be used.
     add a6ae6a9  Avoid a NaN in AzimuthalEquidistant when (x,y) coordinates are very close to (0,0). Fix an error in ResampledImage.getPositionalConsistency() that prevented us from visualizing the ResamplingGrid errors.
     add 0420f26  Comment out for now an optimization which is actually degrading performances in the context of a JavaFX viewer. https://issues.apache.org/jira/browse/SIS-497
     add f09b884  Address a performance issue observed during profiling: `Parameters.getParameter(String)` invoked during map projection initializations is slow. We mitigate the problem with an identity check on `ParameterDescriptor` before the slow comparisons. The identity check should be sufficient at least for SIS implementations of map projections.
     add b0405dd  Provides a mechanism for creating transforms without caching them. It can improve performances when creating a lot of transforms living for a short time.
     add ffb556a  Add GeodeticCalculator.createProjectionAroundStart() method.
     add 3de9eb3  Update links to EPSG terms of use.
     add e981308  Move the handling of context menu from CoverageCanvas to MapCanvas parent class.
     add d139a0b  Hide context menu when click happen outside.
     add 1792a41  More robust computation of space needed for showing sample values.
     add 8be56a7  More projections centered on cursor position.
     add 2802071  Fix wrong adjustement of number of dimensions when the coordinate system dimensions and transform dimensions do not match.
     add f7d3c80  Deprecate DefaultOperationMethod.getSource/TargetDimensions(). Those attributes have been removed from ISO 19111:2019. Removing them from SIS would reduce complexity in management of OperationMethods working on variable number of dimensions.
     add 2a6666a  Following the deprecation of OperationMethod.getSource/TargetDimensions(), remove the dimension check in AbstractSingleOperation. This removal make easier to address https://issues.apache.org/jira/browse/SIS-462
     add db63678  Fix a MismatchedDimensionException when a datum shift is applied between a two-dimensional GeographicCRS and a three-dimensional GeographicCRS. This is the first part of https://issues.apache.org/jira/browse/SIS-462
     add d72b2a1  Update JTS dependency version to 1.17.0
     add 08f34ae  Avoid to provide misleading `OperationMethod` name when there is a change of coordinate system in a chain of operations. https://issues.apache.org/jira/browse/SIS-462
     add d03785a  Add information about average value of image property.
     add 9d85a5a  Preload `CoverageExplorer` on application startup.
     add 2b2a1f2  Provide information about system configuration.
     add 785f1d5  If geographic bounding box is not found directly on the root data element, search in aggregate elements.
     add bb1b31b  Adjustement in the search for geographic bounding boxes.
     add 8b3e75c  Report warning that occurred while loading resources or data store.
     add 863f578  Provide details about the log record, in particular the stack trace.
     add 7049acb  Filter by logging level.
     add 3aea14c  Try to catch more warning messages that may be emitted during the loading and display of coverage data.
     add 1d9733d  Collect also the warnings occuring during a change of map projection.
     add b281670  Avoid a call to Math.atan2(…) in inverse projection.
     add dd447f2  Replace some calls to `Math.hypot` by `NormalizedProjection.fastHypot`, which is faster at the cost of accuracy. The accuracy penality seems to be within 1 ULP when x and y are in [-6 … +6] range (tested with random numbers). An analysis is available at https://issues.apache.org/jira/browse/NUMBERS-143
     add 712bbb1  Relax the check for max values in `NormalizedProjection.fastHypot` because it is not always needed. Documentation has been added for warning callers about possible unexpected results. Test cases have been added for the 2 projections where not testing may be at risk.
     add 74b89cc  Minor documentation.
     add b22f80d  Adjustement in event handling.
     add 5e8e6ce  Show the file format in metadata summary panel.
     add bb90ee5  Avoid to retain resources when not used. Rely on `java.util.ResourceBundle` caching instead.
     add 84caa42  Fix problem with metadata panel not always updated correctly with new content.
     add 0a4b43a  Fix a NullPointerException.
     add 2775b27  Revisit the API of methods related to ColorModel creations. This is in preparation for addition of an ImageProcessor.toIndexedColors(…) method.
     add a774c92  Change in `ColorModelFactory` method argument order for more consistency.
     add fa27367  Add SampleDimension.Builder.mapQualitative(…) method for specifying explicitly the NaN value to map to a sample value.
     add ac91b8a  Add ImageProcessor.selectBands(…) method.
     add f48ab74  BandSelectImage should propagate known image properties, with band reduction if needed.
     add 6d23051  Add a `Colorizer` internal class for applying color ramp on raster of floating point values.
     add e4c85f0  At image rendering time, convert floating point values to integer values that IndexColorModel can use.
     add 1c27174  Make "File > open" menu tolerant to directory that do not exist anymore.
     add 8ba529b  Declare the "Errors_DN" category in GCOM-C files as a legal fill value.
     add 2cb5300  Add upper-case variant for "PSU" unit as alias.
     add 951c06a  Add a WritableTiledImage implementation.
     add e92226f  Move BandedSampleConverter together with other PlanarImage implementations.
     add d78b6de  Consolidation in the mechanism for inheriting properties.
     add 8094993  Methods renaming.
     add 5fe1072  More checks against null pointers.
     add 5ad04a9  ImageProcessor API adjustment, in particular with introduction of a type-safe DataType enumeration value instead than the DataBuffer.TYPE_* integer constants.
     add 639ab29  Fix an ineffective verification.
     add 0a3d379  Make `PixelIterator.getSampleRange()` method implementation more generic (no more test for specific `SampleModel` subclasses).
     add 9c73219  ResampleImage computes itself the ranges of values instead than invoking `PixelIterator.getSampleRanges()`, because that later method returns ranges of source pixel values while we need ranges of target pixel values.
     add 4de677a  Make `resample` more robust to cases where target data type is not the same than source data type. In particular in the way to compute min/max values and to determine if a shortcut can be used.
     add 9af55b6  First draft of a `Visualization` image which combine the work of "resample" and "visualize" methods. The intent is to avoid to create an intermediate image when a resampling is done only for visualization.
     add 294b39e  Stretch color ramp (if requested) before to resample the image, for simplifying `CoverageCanvas` a little bit. This is an apparent waste of CPU time because the resample operation should not need to be redone when only the ColorModel has changed, but `ImageProcessor` is capable to detect and optimize this case by itself.
     add 7bf11d1  Add a safety check against integer overflow, trace information for debugging and link to JIRA task.
     add e37076c  Enable the use of IndexColorModel in CoverageCanvas.
     add 0e402ff  Provide a RenderingMode.DIRECT which avoid creation of a double buffer as the cost of executing `paint(Graphics2D)` in the JavaFX thread. It is okay if that method does only a `Graphics2D.drawRenderedImage(…)` call without scale or rotation, in which case we are not blocking the JavaFX thread longer than in the RenderingMode.DOUBLE_BUFFERED case.
     add d92bcd3  Fix a NullPointerException when transforming coordinates with SpecializableTransform.transform(…) methods working on arrays and the last coordinates are inside a sub-grid.
     add ae004c8  Remove ImageUtilities.getDataType(…) methods, replaced by getBandType(SampleModel). The previous method was returning the storage type, which can be misleading when the 4 bytes values of an ARGB image are packed in a single 32-bits integer value (java.awt.image.SinglePixelPackedSampleModel and MultiPixelPackedSampleModel). In practice, the type usually wanted by SIS is the type that the image would have if it was using a java.awt.image.BandedSampleModel.
     add 8d5386a  Rename CategoryCellFactory as BandRangeTable.
     add 1e3c7cc  Add a missing `class="sis"` attributes in `<table>` HTML elements.
     add 1d075eb  Provide control on the colors used for rendering different range of values (categories) of a GridCoverage.
     add a51935a  Minor adjustments: make colors column not sortable, documentation, NetBeans configuration.
     add f1009c8  Fix a NullPointerException.
     add b6f8ed7  Avoid to declare <scope>provided</scode> on netCDF in <dependencyManagement> section, because it causes difficulties to control the scope in transitive dependencies. Instead all uses of netCDF in sub-modules must declare the desired scope explicitly.
     add 39ec26d  Prepare packaging of JavaFX application.
     add f3378db  Omit the navigation bar in javadoc.jar files deployed by Maven, because those javadoc are typically browsed from browser. This is a first attempt to avoid the inclusion of GPL code in javadoc (introduced by the search field in navigation bar). This change does not apply to aggregated javadoc, and is not yet sufficient for avoiding the GPL code anyway.
     add e238494  Add a temporary dummy class for allowing javadoc to pass. This is because javadoc requires to have at least one class to document.
     add 7cd7abc  Fix javadoc generation errors.
     add 2bc3e93  Add EPSG database if explicitly requested by profile.
     add 40e6693  Add a splash screen. Fix destination directory of log file.
     add be67730  Ask user to specify JavaFX installation directory on the first execution.
     add 42b1726  Initial Windows batch script for launching the application.
     add ffe086b  Declare static final constants for programmatic names such as directory and environment variable.
     add 906b2a1  Change the URL to Jenkins server.
     add 101eef5  Add a "Close" menu item in the main "File" menu. It previously existed only in the contextual menu, which was non-obvious.
     add 7c71f38  Fix an mismatched dimension errors when the source CRS has more dimensions than the core transform.
     add 58e66f5  Avoid direct use of a word which become a keyword in latest Java versions.
     add 57de59e  Enable change of input method in text editors.
     add 73ee4fa  Provides a convenience method for getting a single `GeographicBoundingBox` from a `Metadata`.
     add e6cffdb  Add a ModifiableMetadata.deepCopy(…) method.
     add cd06a45  Add a DefaultMetadata.deepCopy(Metadata) convenience method. For now we add that convenience method only for the root Metadata object because it is the kind of objects returned by DataStore.getMetadata() methods.
     add 4363b5d  Documentation for clarifying the use of properties versus method parameters.
     add 6ff9dd1  First version of ImageCombiner.
     add dc359f5  Fix a few holes related to the addition of a `destination` property in `ComputedImage`.
     add 5339509  Do not overwrite puxels in destination image that are not covered by a pixel in source image.
     add c5ae48b  Replace the `PreferredSize` hack by a public API.
     add 563cba7  Rename `ImageProcessor.getStatistics(…)` as `valueOfStatistics(…)`. The intent is to make a clearer separation with property getter methods. It also reduces the impression that this method returns a pre-existing value (the computation can be expansive).
     add 396816f  Hide the splash screen after application startup.
     add 9ddcb33  Clarification in comment.
     add 0d5a219  Note that BufferedImage.getTileGridOffset() bug (JDK-8166038) has been fixed in JDK 16.
     add 9c19789  When computing the `gridToCRS` of target grid geometry, avoid putting two values in the same column and leaving another column with only zero value, as it makes the matrix non-invertible.
     add 07ee1e0  Trivial indentation fix.
     add 88f8361  Move Variable.Adjustment as a separated GridAdjustment class. Modify the way to apply a scale on the GridGeometry in order to control the MathTransform ("corner to CRS" or "center to CRS") on which the scale is applied.
     add 3771a28  After invocation of ImageUtilities.clip(…), verifiy that the intersection is not empty. Various documentation fixes.
     add afdf695  When there is no direct Bursa-Wolf parameters between two CRS, accepts an indirect transformation through a common hub (typically WGS 84). This is a partial revert of commit 504e3ce3bfd44c6aea1ff9f4d5ba298d4b0a22f2 (November 14, 2013) together with new code for updating positional accuracy. An arbitrary value of 100 metres is taken when the domains of validity intersect, and 3000 metres (presumed worst case scenario) otherwise.
     add 5227d01  Add a WraparoundTransform, to be used in a next commit for resampling images crossing the anti-meridian.
     add 2d07e6a  Set GCOM-C coordinate reference system to WGS84, as specified in their documentation.
     add 0a02a2a  Add a "Copy > Coordinates of here" menu item for making easier to check position on e.g. Google Map.
     add dfec2ae  Add a menu item for coyping the path to a file.
     add 475fd86  More accurate identification of error when image size is not an integer multiple of tile size.
     add aa8ce36  More informative error message when an envelope or position given to a GeneralEnvelope does not have the expected CRS.
     add acb8871  GridDerivation.subgrid[…) needs to transform the `areaOfInterest` envelope if the CRSs are not equal.
     add 7d270e2  Refactor the "Copy file path" action in a separated class with better management of File/URI conversions.
     add 65f809b  Make the `bounds` argument optional, with default to the full image.
     add e05004b  If the image to resample is too small for the specified interpolation, use nearest neighbor. It happens if user tries to apply a bilinear interpolation on an image of size 1×1 pixel (an image of such size if typically a template for ColorModel and SampleModel).
     add 4a44a2b  Fix a 0.5 pixel offset when Interpolation.NEAREST is used.
     add f668f82  Documentation fixes and renaming of `WraparoundTransform.create(…)` for clarity.
     add 7c96618  Missing interpolation values in last row and last column of destination image when interpolation is nearest-neighbor and the optimized path is not used.
     add 80afd19  The name of CRS produced by `AbstractCRS.forConvention(…)` should not contain an "EPSG" codespace.
     add b49117c  Fix a StackOverflowError in `tryConcatenate(…)`. Add a method for adjusting wraparound range based on a target domain.
     add cc12164  Initial support of wraparound axes during raster resampling.
     add 4fbf175  Add a `GridGeometry.createTransformTo(GridGeometry target)` method.
     add 625263a  Make wraparound checks more robust by comparing "transform without wraparound" with "transform with wraparound".
     add c7a721a  Apply wraparound on geographic coordinates shown in status bar. Prepare `RenderedData` for wraparound axes (not yet completed). Convenience method for fetching DefaultMathTransformFactory.
     add 6e8b8eb  Best effort implementation of coverage query source domain expansion parameter
     add c0e5729  Merge branch 'geoapi-4.0' into feat/sourceDomainExpansion
     add fbd5f31  Add coverage query expansion test cases, add readonly memory grid resource
     add e11ba91  Merge branch 'feat/sourceDomainExpansion' into geoapi-4.0. Reviewed some `GridExtent` and `AbstractGridResource` methods for consistency and for making little bit easier to implement `MemoryGridResource`.
     add 0b29f05  Make conditional an assertion that may become invalid under JDK 16. https://bugs.openjdk.java.net/browse/JDK-8166038
     add 53b168a  Add test case breaking source domain expansion
     add 86ad66d  Merge branch 'fix/sourceExpansion' into geoapi-4.0 together with the fix for the problem shown by the new test.
     add 894384d  Add checks against empty area of interest during pixel iteration.
     add 2b36532  Undeprecate `GridExtent.expand(long...)` given its similarity with method below. Refactor `GridExtent.grow(boolean, boolean long...)` as `expand(long[], long[])`. Add tests.
     add a56b98f  Disable interpolations on image using an IndexColorModel.
     add da1d008  GridGeometry.createTransformTo(…) was not concatenating the right transform.
     add a9b8b05  Move `MathTransformsOrFactory` in an internal package where it can be shared with classes in different packages.
     add 2567677  Remove the use of `MathTransformFactory` in WraparoundTransform (except in `tryConcatenate`). All classes using WraparoundTransform had no particular factory to specify. Remove corresponding `throws FactoryException` statements.
     add c34da9e  GridDerivation.subgrid(GridGeometry) should support coverage spanning the anti-meridian.
     add 472b2c0  More robust determination of whether an axis should be handled as a wraparound axis.
     add 4cca7a6  Move `WraparoundTransform.isNeeded(…)` method to `CoordinateOperationFinder`. This moves simplifies the code by allowing more direct uses of fields or methods instead than indirect uses through `java.util.function.Supplier`.
     add 18b10ac  Enable optimization in `TranslationTransform` which were missed.
     add bb7c99d  Replace the use of `Math.floor(…)` by `Math.IEEEremainder(…) in `WraparoundTransform` for reducing rounding errors.
     add a6615f9  Bug fixes in optimizations (translation case not always detected, existing transforms not reused).
     add 04a642a  Minor documentation adjustments.
     add 979f21a  Formatting (no code change).
     add bbf046c  Bug fix in the determination of matrix coefficients that we can move around `WraparoundTransform`.
     add 1905789  More extensive tests of whether "wraparound axes" may occurs when a map projection is involved in the transformation chain.
     add de1ac25  fix(Feature): slight improvement on feature type builder: automatically replace primitive value class of attributes by their boxed equivalent
     add 20b218b  Parameterize `Numbers.primitiveToWrapper(Class<N>)` method. It avoids "unsafe cast" warning in `FeatureTypebuilder.addAttribute(…)`.
     add 3dff7c6  Add a `GridOrientation` argument to `GridGeometry(GridExtent, Envelope)` constructor. The intent is to make this constructor more useful for expressing "desired" geometry, as opposed to geometry of preexisting data.
     add 246dc01  API change: rename GridOrientation.HOMOTHETIC as HOMOTHETY. Add an argument in `GridExtent.cornerToCRS(…) for axis order.
     add dceffce  Add a `DISPLAY` enumeration value in `GridOrientation`.
     add fe1437a  Add a GridOrientation.DISPLAY_GRID enumeration value.
     add 636534f  Add a note in situations where `GridGeometry` crosses the anti-meridian. Documentation and minor accuracy improvement.
     add 8b4885e  More complete detection of wraparound cases when adding a note in `toString()` representation.
     add 8f64e30  Improve the WKT formatting of `WraparoundTransform` for easier debugging.
     add 514e928  Enable a Mollweide projection test.
     add ee73474  Deeper analysis of situations where a wraparound may occur during the transformation of a `GridGeometry` envelope. We must be careful to not apply too large translations on envelope corners: a lower-left corner should not become greater than upper-right corner for example.
     add bc38cbf  Use NaN for "no source median" to distinguish from 0.
     add 512b335  Remove `sourceMedian` argument in `WraparoundTransform.create(…)` method.
     add 911d02c  Do not round the median value in `WraparoundTransform`. Callers should round themselves if desired.
     add 46bf0ac  Better separation of work by moving some methods in `WraparoundApplicator`. Move `WraparoundTransform.transform(…)` method to `WraparoundInEnvelope`. This refactoring allows some simplification and better synchronization.
     add 3a41eb8  Move `WraparoundTransform` to public package.
     add 7ce4d0b  Slightly more efficient way to get wraparound step in a chain of transforms.
     add ba4ad90  Better control on when wraparound is applied.
     add 2d3e45f  Implement `WraparoundTransform.inverse()`. It will allow us to apply a safer strategy for handling wraparounds in next commits. Remove `WraparoundTransform.CACHE` because the new `sourceMedian` field reduces the probability that a cached value can be used.
     add d1e4873  Avoid potentially costly calls to `MathTransform.inverse()`.
     add 674c34d  Move the `intersect` method close to `union` method, remove `public` modifier on constructors of package-privated classes and edit some comments. There is no significant code change in this commit.
     add 3201ff1  Build temporary `WraparoundInEnvelope` instances only before to transform an envelope. This change avoid to expose a mutable `MathTransform`, removes the need for synchronization and enable wraparound handling in more situations than only `GridGeometry` operations.
     add 579bc7e  Apply on transformations of `Rectangle2D` objects the same wraparound checks than we did in previous commit for `Envelope` objects.
     add 56e596f  Try to enable wraparound handling in JavaFX application and prints more extensive information about `CoverageCanvas` operations. The intent is to debug why the image is not visible when a `GridCoverage` crossing the anti-meridian is resampled.
     add 252bd57  Make debugging information more compact and more useful.
     add 5ecbea2  Fix a longitude wraparound error specific to the UTM projection case. Contains minor documentation changes.
     add f6deb67  Add a wraparound application which was missing when going from a geographic CRS to a projected CRS.
     add 671204a  Apply wraparound step only if needed in `ResampledImage`.
     add c215ddb  Make `MathTransform inverse()` invertible. This is necessary for allowing `WraparoundInEnvelope` to perform more extensive checks during bounding box calculation.
     add 5710795  Fix broken javadoc links. Fix typographic convention in French resources.
     add f65a35d  Remove `GridCanvas` experimental class.
     add 5e65f02  Minor performance improvement in `WraparoundTransform.concatenate(…)`. Add a note in documentation about information lost during WKT formatting.
     add 0885edc  Replace `GridOrientation` enumeration by a more configurable class.
     add 325d23f  Add Orthographic projection in the list of projections centered on mouse click.
     add b22fa6d  Move `StreamDecoration` to "SQL store" internal package, renamed `StreamWrapper`. We limit the use of those wrappers for now because we do not yet have a mechanism for allowing methods with `Stream` return type to return also some `StreamWrapper`. In current implementation, any call to a method such as `Stream.map(…)` may cause the lost of all optimizations done in `StreamWrapper` subclasses.
     add a9cd8bf  Move `SubsetAdapter` to "SQL storage" module, where it is used.
     add 7d5b466  Minor improvement in concatenation of two consecutive `WraparoundTransform` instances.
     add bc6ca0f  Move `FeatureInfos` to a package where it can be shared by the two implementations. This move allows to use that class also with the decoder based on UCAR library.
     add 924d4a8  Make the `FeatureSet` implementation more robust and more generic. This commit prepares `FeatureSet` to support "ordinary" trajectory (without time vector) in addition to moving features.
     add 340e2d1  Refactoring and slight optimizations: - Move `MovingFeature` as `MovingFeatureBuilder` in the package where it is used. - Retarget `MovingFeature` as a set of static methods (for now). - Renamed `DateList` class and some `FeatureSet` fields. - Share time vectors when possible. - optimization of `PackedVector.equals(…)` and `IntegerList.equals(…)`.
     add 7a1fec6  Share more code between `FeatureSet` and `Grid` regarding axis type inference.
     add 0745403  Replace loops by placeholders for JDK9 Arrays.equals(…) methods. Fix a wrong PackedVector optimization.
     add 9e986b8  Add support for reading variables of character type. Implies some refactoring for sharing more code between the two reader implementations.
     add 43d7cba  Fix offset and stride calculation in netCDF files having an unlimited dimension.
     add 248df22  Add tests on a "Moving Features" file.
     add 4587f99  `Variable.read(GridExtent area, int[] subsampling)` support reading character strings in addition of numerical value. This commit required refactoring for allowing more code sharing.
     add 5ad90e7  Add a `Vector.isSinglePrecision()` method.
     add d33c284  The loop converting byte[] to String needs a fallback for encodings where values lower than 128 are not the same than ASCII. Creation of geometry objects in `FeatureSet` needs to take in account the `GeometryType`, and optionally the precision.
     add 9079a67  Use an EngineeringCRS fallback when a TemporalCRS can not be created because of unknown temporal datum epoch.
     add 5f774e8  Accept parsing timezone name (e.g. "UTC") in addition of timezone offsets. Add links in javadoc and fix the value shown in an error message.
     add 24c869b  Add methods or objects needed for completion of `FeatureSet`:
     add bb1e274  Fix NullPointerException during unmarshalling of legacy ResponsibleParty objects.
     add 8336928  When an alert is shown for an error, the dialog box owner should be the application window. It help to keep the dialog on the same screen than the application.
     add 357c9cd  Do not popup more than one alert window if many errors happen in a short time (in current implementation, only the last error is shown). Add scrollbars around the component showing stack trace.
     add 57dee2c  Add a "Open recent file" menu. It saves time when doing many test always on the same data file.
     add 16ea3ba  Hide SIS synthetic feature properties in the tabular view of FeatureSet.
     add 7cfb522  Add unit of measurements in the FeatureType built from a netCDF file.
     add 1b47d2f  Fix recent files ordering.
     add 22cef57  Report JavaFX version.
     add bc9df39  `FeatureSet` use `CRSBuilder` for constructing an horizontal and temporal CRS from the variables. The temporal CRS allows construction of the "datetimes" characteristics on the "trajectory" property.
     add 4f89f2a  Force the use of `Vector` (i.e. make sure that we don't get a `List<String>`) when reading coordinate variables. If the variable contains texts, those texts will be parsed as numbers.
     add fa1e45b  Share the same code for enumeration support between `RasterResource` et `FeatureSet`.
     add df7e1fb  Update HTML links to EPSG registry, OGC standards and others.
     add 5c03a79  Paranoiac check in case the attribute value is already a list.
     add b2c7250  Place-holder for JDK 9 methods should have the same behavior than JDK 9, which is to throw IllegalArgumentException if there is duplicated values.
     add c60795e  Documentation and formatting related to WKT parsing. Deprecate Symbols.containsAxis(…) because AXIS elements are no longer optional in WKT 2.
     add 4fe1348  Rename the `list` field as `children` and make the code more null-safe by replacing the null value by a more explicit `isEnumeration` flag.
     add 606b226  Clarify the behavior of `WKTFormat.clone()` and avoid cloning the `fragments` map if possible. The intent is to allow more efficient `WKTFormat` cloning for parsing many WKT strings in parallel.
     add 847ab7e  Clarify which locale is used in error messages.
     add 5e13b7f  Initial version of `WKTDictionary` for allowing users to define CRS for custom codes. https://issues.apache.org/jira/browse/SIS-502
     add dfb19c1  Allow `getAuthorityCodes(Class)` to filter by WKT keywords. Build the code list under write lock. Cache results.
     add b890c8c  Refactor the way we store WKT trees in a dictionary. Instead of having `Element` working in two modes (mutable or immutable), keep `Element` always mutable and create immutable snapshots with a separated class, `StoredTree`.
     add 31a6086  Add tests and fix missed sharing of WKT values.
     add 54f66a8  Move `getAuthoritycodes(Class)` close to `getCodeSpaces(). This is a cut-and-paste with no code change.
     add 3325923  Add more tests.
     add 85cfff7  Handle the corner-case of coordinate system WKT (the "CS" keyword) in definition of aliases.
     add 84001f1  Log warnings during WKT parsing by `WKTDictionary`.
     add a1ab9bb  Update examples of ESRI codes.
     add d478c79  Method name change: setter method shall have the "set" prefix, not "get". Error identified by Jean-Marc Bourdaret. https://issues.apache.org/jira/browse/SIS-503
     add d3c0c2a  Replace `String.regionMatches(…)` by the simpler `String.startsWith(…)` when applicable.
     add 81a9536  Provides a hook for making easier to use this factory for handling the "spatial_ref_sys" table of spatial databases.
     add 89f8591  Automatically add identifier when the WKT provided by `WKTDictionary.fetchDefinition(…)` does not contain an ID[…] or AUTHORITY[…] element. This is needed when the WKT is provided by the "spatial_ref_sys" table if a PostGIS spatial database among others.
     add f67bd79  Simplify the logging levels provided by `PerformanceLevel`. https://issues.apache.org/jira/browse/SIS-504
     add 07f4511  Replace a few `getLogger("org.apache.sis.foo")` calls by a static `Logger` constant. Use the logger provided by `DataStoreProvider.getLogger()` when applicable. Add a log when reading a netCDF file as a `GridCoverage`.
     add 925eccf  Reduce a little bit the amount of text in `GridGeometry.toString()` and in `AbstractGridResource.logLoadOperation(…)`.
     add 57c225f  Provide a way to avoid potentially costly PropertyNotFoundException creation. Users do not always know in advance if a property exists and may need a way to get this information without being forced to use exceptions for branching.
     add c0bf843  Rename `getPropertyValue(String, Object)` as `getValueOrFallback(…)` for avoiding dangerous similarity with `setPropertyValue(…)`. Before this change, the two methods differed only by one letter ("g" versus "s"), which is a risk of introducing bugs by typos. The new name is also more readable and more consistent with standard Java practice such as `java.util.Map.getOrDefault(…)`.
     add 84e6e56  Avoid duplication in netCDF variables and attributes when a lower-case name has been generated in addition to the original name.
     add 98e07c2  More robust handling of map projection parameters in netCDF file: - If parameters are provided as strings instead than numbers, parse them. - Report unused values for allowing user to check if an important parameter has been ignored.
     add da00b49  Always consider a variable as an axis if the "_CoordinateAxisType" attribute is present.
     add ec235ee  Most accurate selection of best grid. In addition of maximal intersection area, try also to minimize area outside the Area Of Interest (AOI) to to prefer grids more centered on the AOI.
     add 1c395af  Take a more representative center of data.
     add e38c2a9  Take temporal extent in account in addition of geographic extent. This is an anticipation for the support of dynamic datum in a future SIS version. It is also useful for other code using `ExtentSelector` for making a choice between different rasters (for example).
     add 6d0bce8  Use new feature.getValueOrFallback method in filters and expressions to avoid exception creation when exception stack is not required
     add 2d60d06  When `PropertyNotFoundException` are reported as warnings, keep the exception message instead than using the `getValueOrFallback(…)` method. The reason is that the exception message provides a deeper analysis, telling for example if the property can not be provided because it does not exist or because the given name is ambiguous.
     add 78cb599  Documentation fix: the "Supported by" column is not relevant anymore.
     add 89d2a24  Portrayal : initial work on OGC symbology encoding portrayal engine
     add 0db2206  Update in NetBeans project configuration introduced by upgrade to NetBeans 12.2.
     add 3f89ebd  Gives more details when à `MathTransform` does not have the expected number of dimensions.
     add 4f223fe  First version of a contouring algorithm, adapted from Johann Sorel work based on "marching squares" algorithm. This implementation builds isolines for all bands and all levels in a single iteration over image pixels. Java2D shapes are constructed on-the-fly during iteration.
     add cf5739d  Fix an error in determination of when a polygon is closed. Reduce some code duplication by taking advantage of recurrent patterns in interpolations.
     add 870eb6a  Remove some spikes which appear when pixel values are strictly equal to isoline values.
     add 02f0113  When a single `Polyline` instance can not be closed as a polygon, keep that instance in a temporary map. As additional instances are added in the map, some `Polyline` instances get concatenated together. It allows the creation of "real" closed polygons instead than juxtaposition of polylines that looks like polygons.
     add 728f70e  Implementation of a java.awt.Shape backed by an array of coordinates that we can handle more easily than with java.awt.geom.Path2D. It introduce a class hierarchy similar to the OGC geometry classes (Polyline, Polygon, MultiPolygons), but it is not the intent to provide an OGC geometries implementation now. Those classes are needed for simplifying `IsolineTracer` (in a next commit).
     add fb43846  Replace the use of `java.awt.geom.Path2D` by `PathBuilder` in `IsolineTracer`. It simplifies the algorithm and allow us to resolve the remaining spikes that we saw in isolines.
     add 11c6b74  Avoid the call to `Arrays.binarySearch(…)`. It has been identified by profiling as a performance bottleneck (in the context of `Isolines`).
     add e5142b5  Retrofit `DefaultIterator` into `PixelIterator`. This change allows slightly better encapsulation (more fields can be made private) and reduce the need to create `WritablePixelIterator` when only read operations are desired. The previous abstraction level was apparently not needed in practice.
     add 4f8f236  Add `BandedIterator`, a specialization of `PixelIterator` for the case of images using a `BandedSampleModel`. This is an attempt to resolve a performance bootleneck observed during `Isolines` calculations.
     add eceea7f  Make possible to use `BandedIterator` with multi-tiled images. It required to retrofit `LinearIterator` into `PixelIterator`.
     add 76cd431  Add more tests and add comments about optimization strategies that have been discarded. Two strategies were tried and failed to provide significantly better performance:
     add eac2307  Replace the use of `PixelIterator.Window` by cached values of previous row. It make easier to provide a special case for one-banded images.
     add 63875de  Add a test case for isolines on multi-banded image.
     add ce75340  Add a note about another failed attempt to optimize.
     add c127810  Store isoline coordinates as single-precision floating point numbers, but with a translation for attenuating the precision lost.
     add 3c7c5c5  Delegate `contains(…)` and `intersects(…)` implementations to Path2D.
     add d33c28c  Move part of `CategoryColorCell` into a new `ColorCell` base class. The intent is to share this code with other kinds of color tables, to be created later for isolines.
     add da676c5  Move remaining code from `CategoryColorsCell` into `ColorCell` for sharing (in a future commit) with isoline table. The methods that were previously overridden in `CategoryColorsCell` class are now overridden in `ColorColumnHandler`. Cell behavior has been reworked for reducing the amount of mouse clicks and for enabling keyboard usage.
     add 34f7b23  Let `Polyline` computes the bounds itself.
     add e9ea08a  Fix an `IndexOutOfBoundsException` when CRS has more dimensions than the dimensions for which a precision has been specified.
     add f2701ff  Support the case where one of the CRS axes in a netCDF file is a scalar (number of dimensions = 0). In such case, the scale factor does not exist in the "gridToCRS" matrix; we have only a translation term. In other words, there is no corresponding source coordinate, only a target coordinate which is constant. Some netCDF files use scalar for specifying for example that all values are located at a height of 2 metres.
     add f5fe842  Do not list "bounds" variable as coverage variables.
     add 788bfe2  Mouse coordinates in status bar need to be updated during scrolling. Opportunistically adjust highlights if scrolling caused an offset. Do not relayout the whole widget every time that mouse moved.
     add 80c2fbc  Tune `ColorTable` behavior on mouse click and keyboard "enter" key.
     add 87d1b72  Initial version of an `IsolineTable` for specifying the isoline values and colors. This control is not yet connected to the actual isolines computation.
     add c034b46  Improve the behavior when entering new isoline values: - Sort by increasing values. - Interpolate colors of new values between colors of existing values. - Transition to edition mode when a digit is typed (avoid the need to click on the cell first).
     add 3e83f90  Move `IsolineTable` to `ValueColorMapper` for allowing usage (in the future) for other purposes than isolines.
     add 80fd560  Make `FormatTableCell` package-private for now.
     add 38499ac  Add isoline rendering capabilities to `CoverageCanvas` using the information provided by user in a `TableView`.
     add 9279763  Tune tracing information for debugging purposes.
     add 1f50f98  Add a few assertions and comments. Fix mouse cursor shape during drag events.
     add 8713ecc  Remove RenderingMode.DIRECT because it causes twinkle at rendering time.
     add 430647f  Prepare an image slightly larger than viewport area for more continuous translations (pans).
     add 2041caf  Allow `imageMargin` to be null if there is no margin to apply.
     add b24e1da  Add a delay before to set the mouse cursor shape to `Cursor.WAIT` during rendering. It avoids distraction by continuously changing mouse shape because of zoom or pan.
     add 0a252d7  Recompute isolines if map projection changed.
     add ad06a54  Do not draw isolines that are outside the viewed area.
     add 041101c  Arbitrarily draw isolines with a line tickness of 1/8 of source pixel size, for making apparent when zoom is becoming too strong for data resolution.
     add 20e03de  Add a listener on `KeyEvent` for removing selected row.
     add 53891b2  Minor adjustment in table headers.
     add 7b07584  Fix a `NullPointerException` that occurs when a new window is created.
     add d1c2db3  Remove `PlanarCanvas.getAreaOfInterest()` because subclass needs to perform a slightly different computation, for example with addition of a margin.
     add 7f89f62  Avoid a "no convergence" error when dα₁ ≪ α₁.
     add 5ba3ea5  Portrayal : add feature type style filtering test cases for SEPortrayer
     add 16b13a8  Comment-out reference to a class which seems to have been forgetten. Remove empty comment for a parameter with mismatched name.
     add b3d55b4  Add an `iterationReachedPrecisionLimit` flag in the test for deciding more accurately when assertion tolerance threshold should be relaxed.
     add 6dd1602  Portrayal : add SEPortrayalTest and mock classes
     add c65774a  Document better `GeodeticCalculator` accuracy considerations and replace the special cases in JUnit tests by a `KnownProblem` enumeration in an attempt to make clearer what the problem can be and how the tests handle them.
     add c8dcb4e  Uncomment portrayal tests.
     add fb27a92  Portrayal : add portrayal rule and query tests, implements events on MapLayers components
     add 962eba9  Portrayal : add MapLayer.opacity property and MapItem.getEnvelope method
     add b239be0  Minor simplification in array creation, and checkstyle fix.
     add e11eee1  Implement parallel (multi-threaded) computation of isolines.
     add cfd1379  Enable parallel execution of isoline computation in JavaFX viewer.
     add 5ac3ea3  Increase minimal tile size for isoline computation, because our algorithm operates better on large tiles.
     add 17755f9  Fix an AssertionError caused by `requestRepaint()` invoked (indirectly) during `paint()` execution in `MapCanvas`. For safety, make sure that a `Unclosed` object is not reused in `IsolineTracer.Level.merge(…)`.
     add 191b251  Portrayal: change default MapLayer opacity to one
     add 96b4ea0  Portrayal : fix incoherency in presentation candidate value type
     add 54f5a9c  Provide an installation wizard for configuring the path to JavaFX.
     add 2ca318c  Fix a `NullPointerException` when `bin/sisfx` is invoked while `apache-sis-<version>` is the current directory.
     add a29d04c  Disable "Download" button if browser is not available.
     add 4086b33  Path to JavaFX installation directory should be relative to $BASE_DIR when possible.
     add adde8f4  Replace Map.get/put/replace(…) by Map.compute(…) operations.
     add 7bc9a9e  Document better the rational about `SoftReference` in caches, and replace one `SoftReference` by `WeakReference` for reducing memory retention.
     add ce89d94  Portrayal : add SEPortrayer aggregated resource test
     add c12f80c  Refactor `ValueColorMapper` as a `Widget` subclass. The intent is to allow more complex GUI later (with controls for specifying a range of isoline levels instead than entering values one-by-one).
     add b389939  Provide a contextual menu for generating isolines at a constant interval in a range. This work required a refactoring of the way we validate `TextField` value in order to share code.
     add 2d01b06  Use `BigDecimal` for computation of intermediate levels for making sure that we do not surprise users with rounding errors before final conversion to `double`.
     add e05a30a  Add a `CoverageCanvasApp` for manual & visual testing of `CoverageCanvas`.
     add 27db458  Fix Javadoc links.
     add c40cdfb  Replace `Consumer<LogRecord>` by a new `ErrorHandler` interface. It allows us to provide more information about failures, in particular a list of tiles that failed.
     add d27acc8  Clarify which `LogRecord` properties are initialised when an error is reported.
     add 1556a92  Add the possibility to substitute a tile placeholder in "prefetch" operation if an error handler has been specified.
     add 4fd2a67  Try to provide a better coverage of error handling during `CoverageCanvas` rendering: - Replace the various `ErrorHander.Report.addFoo(…)` methods by a single `add(…)` method giving more control on the `LogRecord` content. - Make `ErrorHandler.Report` thread-safe and document the synchronization lock to use when modifying the `LogRecord` content. - Allow `PrefetchedImage` to perform rendering in a mode where exceptions are caught and tiles are replaced by place-holders.  [...]
     add 7538f73  Apply `ErrorHandler` during sequential operations too, not only during parallel operations.
     add d6ca8ba  Better catching of exceptions to be reported to user.
     add 3bba8ad  Remove `transformOnNewImage`, which was not necessary. It simplifies the handling of transforms and seems to resolve a discontinuity sometime observed during pan events.
     add 6e39e36  Increase the off-screen margin for smother pan gestures.
     add 2e68ca4  Add a public API for isolines.
     add efc8fd2  Better error messages.
     add 33701c6  Make possible to apply linearizers on localization grid and have the final coordinates in the "linearized" CRS, without converting them back to the original CRS. The use case is the application of Universal Transverse Mercator (UTM) projection on GCOM rasters for making their "grid to CRS" closer to affine transforms. In this case, we want to keep UTM coordinates in the final result, not reconverting them back to geographic coordinates.
     add 5dfb974  Upgrade dependencies.
     add 0a33751  Portrayal : add SEPortrayer preserve properties hint and testcase
     add 3dae4f4  Portrayal : fix cases where rule filter properties are not returned
     add 2d6d2a7  Portrayal : fix exception when using a property on a sub-featuretype in style definition
     add d043566  Fix `NoSuchMethodException` when cloning an array and `NullPointerException` when writing legacy metadata properties. This is a side-effect of work done in ASF-OGC-OSGeo join code sprint.
     add da11a2e  Upgrade UCAR netCDF dependency from version 4.6.15 to 5.4.1. Changes in UCAR API are documented at there: https://docs.unidata.ucar.edu/netcdf-java/current/userguide/upgrade_to_50.html
     add cbd2a0b  Restore the same set of `NetcdfDataset.Enhance` mode than before the upgrade to UCAR library version 5. It is important in particular to NOT put the `ConvertUnsigned` mode, because Apache SIS handles unsigned integers in a different way than what UCAR does. Remove usage of deprecated `enhance` method.
     add 27a08d6  Finer determination of Transverse Mercator domain of validity.
     add b0c3203  After having verified that `TransverseMercator` now behave like a monotonic function up to 90° of longitude, remove the limit previously set at 70°. Add notes saying that results for longitude larger than 60° are inexact. We nevertheless allow computations between 60° and 90° because they are required for handling some raster data.
     add 3d32ab4  Add clarification in comments.
     add e9ad9cf  Replace ≧ by ≥ and ≦ by ≤.
     add 0bb4160  Replace some http: protocols by https: and remove links that seem not active anymore.
     add 5d86b40  Remove the `netcdf.version` property. It is not needed anymore since we have only one dependency.
     add 4658dfb  Avoid use of the deprecated `ucar.nc2.dataset.CoordSysBuilder` class. It forces us to register a `ucar.nc2.dataset.spi.CoordSystemBuilderFactory` using Service Provider Interface (SPI), which is a bit unfortunate because it has a global effect on system configuration. But we do this registration only if the `sis-japan-profile` is in the classpath.
     add ecb8f7f  Portrayal : add SEPortrayer symbolizer geometry expression test case
     add a37595c  `CRS.findOperation(…)` should accept `EngineeringCRS` with same datum but different axis directions.
     add a00f7dd  Fix an axis order problem when a linearization (currently a UTM map projection) is applied on the localization grid of a netCDF file. Before this fix, geographic bounding box were wrong because map projection applied on coordinates in the wrong order.
     add a16d4da  Fix a `NullPointerException`.
     add 402736e  Fix a few broken {@code} annotations in javadoc.
     add 37bab9c  Update for a change in GeoAPI: upgrade Record types from ISO 19103:2005 to ISO 19103:2015. The `Record` API has been simplified (some methods have been deprecated). ISO 19103:2005 "members" have been replaced by ISO 19103:2015 "fields". We reflect that change of word in the Javadoc texts and in comments.
     add 3f28f21  Add `AbstractEnvelope.getTimeRange()` method as a complement of `GeneralEnvelope.setTimeRange(…)`. Also available as a static method in `Envelopes`.
     add 8f1fc38  Add test cases for `GeneralEnvelope.get/setTimeRange(…)`.
     add 9b2fe86  `RangeFormat` should accept ranges of objects from the `java.time` package (at lest the main types).
     add 3eaf523  Rename some `HardCodedCRS` constants for a more consistent pattern when saying which axis is first.
     add 75167ab  Omit extra dimensions such as time axis in `GridDerivation.substring(…)` if the base geometry does not have those dimensions.
     add fd31865  fix(Storage): add a null check in NetCDF provider.
     add 5eacd24  Fix a confusion when `Envelopes.transform(…)` check if +180° or -180° of longitude should be added to the bounding box.
     add ab6393c  Add a test case for the  fix provided in previous commit.
     add 34caf17  Returns NaN instead than throwing an exception for Δλ > 90° in the TransverseMercator projection.
     add 50be7b1  Fix a NullPointerException.
     add 8ae43dd  Fix an `ArrayIndexoutOfBoundsException` in `WKTUtilities.cornersAndCenter(…)` when the grid size is smaller than `2*cornerSize + 1`.
     add ef9e435  Add `LinearTransformBuilder.approximate(MathTransform, int...)` for building linear approximation of a non-linear transform in a given domain.
     add 07257ce  Refactor `LinearTransformBuilder.approximate(…)` implementation in a separated class. Change method signature and add a `GridGeometry.linearize(…)` method.
     add a59613b  JTS : update version from 1.18.0 to 1.18.1
     add 00cfd43  Complete upgrate of JTS version.
     add 6caf39f  Refactor `GridGeometry.linearize(…)` method in a separated `DomainLinearizer` class. The intent is to make linearization more parametrable, e.g. with a scale factor.
     add 65cd3ad  Rename `setUniformScale(…)` as `setScaleFactor(…)` for avoiding the impression that it forces `scaleX` and `scaleY` to same value. Creates the `GridCoverageProcessor` only once and cache the instance.
     add a511c4d  Fix tests which was timezone-dependent.
     add 688f9ec  Fix a test failure occurring with JDK 16.
     add 6c894a5  Add a `BandedCoverage` as an abstract class for `GridCoverage` (today) and other kind of coverage geometries (in the future).
     add f2256f8  Rename Interpolator as GridEvaluator.
     add d67431d  fix(Storage): Relax PostGIS version check to allow versions superior to 2
     add ec007be9 fix(sis-sqlstore): fix numeric value conversion for new PostgreSQL version
     add 09a691e  chore(Build): Upgrade maven checkstyle plugin
     add 23acea5  chore(Feature): add a test for BBOX filter. Ensure usage of a CRS for whom no matching authority factory exists does not cause failure.
     add b94189b  Updates for change in `Filter` interfaces: - `FilterVisitor` and `ExpressionVisitor` removed - `IncludeFilter` and `ExcludeFilter` removed from public API - `NilExpression` removed - `Filter` as a sub-type of `java.util.Predicate` - `Expression` as a sub-type of `java.util.Function`
     add 0d3851e  Fix spelling errors spotted by Bruno on https://github.com/apache/sis/pull/23 merge request.
     add 5fa76e9  Added an internal method for converting `java.awt.image.DataBuffer` enumeration values to `org.apache.sis.util.Numbers` enumeration values.
     add 63be6f5  Add a variant of `HyperRectangleReader.read(Region)` method for returning the data array wrapped in a `java.nio.Buffer`.
     add ecbad76  Add a Vector.fill(…) method as a convenient way to initialize the content of an array of unknown type.
     add cb58f9f  Revisit GridDerivation: - Add a `GridDerivation.chunkSize(…)` method for expanding a grid extent to an integer amount of tiles. - Fix an inconsistency in the way clipping is handled by `GridCoverageDerivation`.   We resolve this inconsistency by giving more control to the caller on clipping. - Deprecate some methods having a contract at odd with `subgrid(…)` methods - Documentation clarification.
     add bf4cb0c  Read GeoTIFF sample values from a potentially n-dimensional data cube. Whether the file has 3 or more dimensions is assumed already known; this commit does not yet include a convention for specifying that.
     add 9df65c0  Add the possibility to run `SelfConsistencyTest` on an arbitrary image put in the test data directory.
     add d08b85a  Apply self-consistency test on netCDF reader as well.
     add 699afb3  fix(Storage): Prevent error on metadata creation when a feature typedeclares 0 records
     add 2c9789d  Minor documentation fixes.
     add 0123dee  Fix the name of the TemporalCRS created from CommonCRS.Temporal.JAVA.
     add 0df0bc4  Fix a wrong transform concatenation occurring when matrix coefficients are very close to zero. Bug identified by Johann Sorel.
     add 04965b4  ProjectiveTransform wrongly optimized to translation when the scale coefficient is zero. Bug identified by Johann Sorel.
     add 99cafb6  Avoid the use of `FeatureTypeBuilder` for keeping tests more isolated (i.e. for not being impacted by potential bugs in FeatureTypeBuilder). Use `TestUtilities.getSingleton(…)` method for checking the result. Keep `verifyCopyrightParsing(…)` close to the place where it is used.
     add ac5e8e0  Fix an `IllegalArgumentException` when creating a coverage with bands using incompatible units.
     add 9690268  Values stored in `DefaultSampleDimension` should be physical values ("data values"), not the compressed values in the file ("cell values").
     add 710bd1a  Fix an `ArrayIndexOutOfBoundsException` occurring during sample value conversions because `lastUsed` unexpectedly became negative.
     add e33d72e  Make `ResampledGridCoverage` more robust to case where the `sliceExtent` has more than 2 dimensions, and the extra-dimensions may get a size greater than 1 after conversion to source grid coordinates. Also add a margin for interpolations.
     add 1b26a1a  Try to reduce a problem of weak references cleaned too early, which caused the EPSG factory to recreate the same objects again and again. Factory is still creating more objects than we would expect during "search" operations, but the situation with this fix is a bit better.
     add ced335d  Compute `PlanarImage.GRID_GEOMETRY_KEY` property for image read from GeoTIFF files.
     add a36a492  Fix ColorModel creation when there is a color palette or in the interleaved case.
     add ee0e0df  Fix erroneous handling of TIFF images when bands are stored in separated planes.
     add e1b1ae8  Make `GridGeometry.translate(…)` more robust to cases where not all properties are defined.
     add 7b7be5e  Make navigation a little bit easier in the JavaFX application by avoiding the need to expand `Aggregate` node for showing an image.
     add d853a03  Allow to run `CoverageReadConsistency` for benchmarks instead than tests.
     add 351dbc1  Make canvas more robust to missing CRS information.
     add d7d208e  Fix broken tests.
     add 2f900ed  Downgrade from JUnit 5 to JUnit 4. The mix of JUnit 4 and 5 seems to cause some tests to be ignored. Full migration to JUnit 5 will be done later: https://issues.apache.org/jira/browse/SIS-457
     add fb628eb  Re-enable test execution as a test suite.
     add dda5ef6  Document `QuerySpliteratorsBench`, use some services provide by testing framework and adjust build configuration.
     add 1c5d597  Document other tests.
     add b26a5d7  Fix a NullPointerException when converting an array of `float` containing unmapped values.
     add 57901c3  Bug fix: when `ImageRenderer` is applied on a 3-dimensional image (or more), it shall compute an offset taking in account all supplemental dimensions.
     add 9c03b4f  Add `GeometryWrapper.getSRID()` method.
     add ac4fe06  Test also slicing in other dimensions than the 2 first dimensions.
     add c830f9c  Source and target dimensions should not	be considered dependent when the scale factor is 0.
     add 3709ff1  Add a `DefinitionVerifier.compare(…)` method for comparing against an authoritative CRS already available. Contains opportunistic field renaming and localization.
     add 8b96787  Rename `SimpleQuery` as `FeatureQuery` and adapt property/method names to terminology used in OGC Filter specification ("projection" and "selection").
     add 7544551  Define a mapping between `GeometryType` and the integer codes used in Well-Known Binary (WKB).
     add 01cd18c  Replace `DataType.ordinal()` by `DataType.toDataBufferType()` for clarity. Various javadoc fixes.
     add a061e01  Put in place the abstract classes needed for uncompression. Support uncompressed image of bytes for testing and for the case with subsampling along X axis (in which case we can not use `HyperRectangleReader`).
     add 23ff7d0  Fix the case where subsampling is larger than tile size.
     add d06a9b1  Add AbstractGridCoverage.RangeArgument.select(SampleModel)` method with capability to "compress" the sample model for skipping bands at reading time (instead of ignoring them after they are in memory).
     add 973c7c0  Get `SampleModel` and `ColorModel` managed by `TiledGridCoverage` base class. Add `TiledGridCoverage.selectedBands` field and clarifications in Javadoc.
     add d53b8a5  Take in account the band subset specified by the `range` argument in a call to `GridCoverage.render(…)` on a GeoTIFF image.
     add 54eb82c  Expand the support to all primitive types.
     add b71d71d  Use direct buffer by default instead of heap buffer for I/O operations.
     add 79d5221  Minor optimization for the case where the bands to read are consecutive.
     add 4177632  Cache tiles at any resolution, not only at full resolution.
     add e16859b  Read all tiles that are inside the requested domain at `GridCoverageResource.read(…)` invocation time by default, but provide a `RasterLoadingStrategy` enumeration for allowing developers to keep the previous mode if desired. This enumeration is not in public API for now; we will see how it works in practice first.
     add b7fcc02  fix(Feature): Ensure coordinate order consistency when converting an envelope to a geometry
     add ae02727  fix(Feature): When initializing a spatial operator, allow receiving bbox values
     add ccb433e  fix(Feature): Workaround to prevent optimisation shorting
     add ee9a44d  chore(Storage): Add a test-case to verify that geometry CRS are properly synchronized (when possible) in comparison functions.
     add ee5c697  fix(Storage): better handling of CRS for spatial operators
     add 410d2c2  fix(Feature): fix a corner case where an expression optimisation was not properly unwrapped.
     add 7943c4e  fix(Feature): delegates expression value type conversion if needed.
     add dbc1185  Review the fix about axis order change: we still need to adapt the CRS for a change in number of dimensions. Some complexity about calculation of x and y dimensions are not needed anymore. The test is effective only if tested with an envelope of more than 2 dimensions.
     add cba0f62  Review the fix about accepting bounding boxes as filter initialization time. Move implementation to the location where decisions are done (which types to convert, wrap-around method to apply). A goal is also to keep in the same class the code that will need to be changed if we use more extensively the <G> parameter type in filter implementations.
     add 1d41edc  Keep type parameterization on `Node.unwrap(…)` with a minor change for resolving a compiler warning. This is in anticipation for more extensive use of the <G> type parameterization in a future version.
     add fdb3f59  Formatting, resolve compiler warning and use more specific test methods.
     add 83ec78c  Reduce by one the number of exceptions created when the fallback is used or when an error occurs.
     add e1b3d89  Move the `Compression` enumeration close to `Inflater`. It would allow sharing compression algorithms with other image formats in the future if needed.
     add 7bbdb81  Rename `Uncompressed` as `CopyFromBytes` because this class can be used even for compressed data.
     add 6580779  Ensure that the chunk size are not greater than buffer capacity.
     add 4db6a33  Add PackBits compression.
     add 328a7a0  Add a `ChannelDataInput.skipRemainingBits()` method. Minor clarifications in Javadoc and in comments.
     add 86423f0  Add `ArgumentChecks.ensureDivisor(…)` method.
     add faebd0f  Add CCITTRLE compression. This addition requires partial support of multi-pixels packed images In the case of images compressed by CCITTRLE, they are bilevel images with 8 pixels per byte. Fields have been renamed: "element" is now reserved to elements in arrays of primitive type.
     add 3b223ec  Fix a case where `GridDerivation` was not expanding the extent to an integer amount of tiles. Fix a `NullPointerException` when `gridToCRS` is null (i.e. when data have no known location).
     add 022a1f3  Consolidation: - Safer rounding of subsampling values. - Add test and clarifications in Javadoc.
     add 719cbff  Renamed `selectedBands` as `includedBands` because a band may be loaded despite not being selected by user.
     add 2fc2121  When reading multi-pixels packed images, restrict sub-region to element boundaries (typically byte boundaries). It allows the `SelfConsistencyCheck` test to pass for random sub-regions.
     add 3bc831a  Group together the display of statistics about execution time.
     add aa876ee  Rename `samplesPerElement` as `pixelsPerElement` (this is not the same value in `SinglePixelPackedSampleModel` case) and consolidate the way that this value is computed from the `SampleModel`.
     add 2d122d3  Add a `GridDerivation.maximumSubsampling(…)` method and use it in `TiledGridResource` for disabling subsamplings on axes where it is not supported.
     add 2cef81f  Provide a slightly optimized implementation of `ChannelDataInput.readBit()` method.
     add cdaefbb  Support a few tags from TIFF Section 12: Document Storage and Retrieval.
     add f1f67f2  Support TIFF FillOrder=2.
     add ff3c356  Take in account the Differencing Predictor (for now, only "none" is supported).
     add 63e31b0  Add LZW compression (read only).
     add 55d0df0  Add support for Horizontal Differencing Predictor.
     add 0a7d660  Refactor: - Move inflater in a new "...storage.inflater" package for sharing with other raster formats in the future. - Add a hock for releasing native resource potentially held by `Inflater` (e.g.	for a ZIP inflater). - Reuse the same `Inflater` instance for all tiles to read in a single call to `read(…)`. - Verifies `HorizontalPredictor` assumption (currently works only with bytes). - Consolidation: add comments, rename some variables, rename some classes.
     add 5024fa9  Continue to parse unit even if the date can not be parsed. For example the unit is sometime "hours since analysis" instead of "hours since 1970-01-01 00:00:00".
     add 9d096ae  Provides `SQLBuilder` configuration in a separated class (`Syntax`) for making possible to reuse configuration analysis. Add methods in `SQLBuilder` for pagination and for distinct values.
     add dae2bed  Move the handling of `ReferenceSystem` outside `SQLBuilder`.
     add 84fcc96  Add a copy constructor. Document the issue about parameterized type in `Visitor.visit(…)` methods.
     add 8918191  Add a method for getting filters as a `F₀ AND F₁ AND F₂ AND F₃ AND ...` sequence. It allows to translate some Fₙ to SQL statements without forcing an "all or nothing" policy.
     add 5b1cdce  Give public access to the `SortProperty` elements wrapped by `SortByComparator`. It allows `DataStore` implementations to translate "sort by" into SQL statements.
     add 2279b2a  Provide `String` constants for predefined attribute names. It avoid synchronization on `GenericName.toString()` calls.
     add 9daf881  Better `toString()` (for debugging only) of the query executed by `FeatureSubset`. Give to `Stream.filter(Predicate)` the filter directly, not a lambda to the `test` method. This is important for allowing stream implementations to optimize the filters.
     add 8a9f4c2  Relax the requirement that the source CRS is non-null in a call to `transform(targetCRS)`. A null sourceCRS will be a no-operation. This is consistent with current target CRS policy. This change is for making easier to implement a data store on SQL database such as PostGIS, when the geometry in a filter expression is often specified by a WKT without CRS.
     add d94bbdd  Add an `Optimization.setFeatureType(…)` method and update some filter/expression implementations for taking advantage of it.
     add 7e23b40  Refactoring of `sis-sqlstorage` module: - Make import closer to the order on other branch. This is not necessarily a better order, but the intend is to reduce conflicts at merge time. - Merge `SQLBiFunction` and `ColumnAdapter` into a single abstract class: `ValueGetter`. - Merge `SQLColumn`, `ColumnRef` and `GeometryColumn` in a single `Column` class. - Merge `DialectMapping` and `ANSIMapping` in a single `Session` class. - Delegate WKB parsing to the geometry library ( [...]
     add 0fe01ad  Remove (for now) JMH dependencies because not used anymore. We will revert this commit in the future if JMH is used again.
     add 943f91b  Add performance tips about the use of filters.
     add 2dfd4ad  USe `X_DIMENSION` and `Y_DIMENSION` constants for 0 and 1. Fix a tile width which was sometime wrong (a `forceTileSize` flag has been added).
     add 4a77991  Faster transfer of sample values from `input.buffer` to the image `bank`.
     add c56aa2f  Apply the Horizontal Differencing predictor on other data types than bytes.
     add 07e5807  Fix a NullPointerException.
     add 753a5cd  Remove a warning about unused GeogCitation key.
     add bd56303  Parse some more metadata from Landsat.
     add ef52731  Use enumeration and `EnumMap` instead of masks for managing the bands.
     add 311d7ea  Add a `StoreMetadata.isLowPriority` boolean for testing a provider last. This is used when a provider is too generic and we want to allow more specialized providers to be tested first.
     add 0701a79  Allow Landsat file to be opened from its directory, without requerying to point specifically to the metadata file. Cleanup in Landsat metadata builder and the JavaFX metadata summary.
     add e1aab23  Document better the purpose of the "parent" list of listeners.
     add 2353994  Revisit the way GeoTIFF metadata are built: - Group more information on an image-by-image basis. - Build `DataStore` metadata by merging images metadata.
     add d585a5b  Landsat data store use GeoTIFF data store for providing components.
     add 8d7b8a0  Bug fix: the temporary buffer for data decompression must use the same byte order than the direct buffer used for reading data.
     add d89277b  Rename `isLowPriority` as `yieldPriority`.
     add ae91ef1  Replace the undocumented hack by a documented extension mechanism. Remove the Numerics.isUnsignedInteger(…) method since it was not used elsewhere.
     add f266b2a  Replace `SchemaModifier` interface by `SQLStore.customize(…)` protected method for consistency with the approach applied in `GeoTiffStore`.
     add 8e62803  `RecoloredImage` works with `IndexColorModel` in addition of gray scale.
     add a83a431  Modify (again) the way schema is customized, reverting back to an interface but specifying it with `OptionKey` instead than by the provider. The interface is kept in internal package for now, waiting to gain more experience with its use before to move (with changes) in public API.
     add e61f0a6  Use an interface for customizing GeoTIFF metadata instead than protected methods (same change than for sql-store). Use that interface in `LandsatStore`. Contains a transfer function change from "radiance" to "reflectance".
     add f32bc87  Rename Landsat implementation classes, add localization, group bands in Reflective/Panchromatic/Thermal groups.
     add 854a1d5  Add a comment about future work.
     add 6d1ba31  Throws exception in case of invalid property values in `ImageProcessor.recolor(…)` method instead of silently ignoring.
     add 7b885ef  Move and refactor `FeatureComparator` in a test package.
     add 601da96  Update links to TIFF/GeoTIFF specifications.
     add 1b3d964  Rename `SpatialFunction` as `BinarySpatialFilter`.
     add f996dda  Rename `DefaultLike` as `LikeFilter`.
     add c89b71a  Rename `LogicalFunction` as `LogicalFilter`.
     add b258575  Rename `TemporalFunction` as `TemporalFilter`.
     add aadd236  Rename `ComparisonFunction` as `ComparisonFilter`.
     add 4c2cdb3  Rename `FilterByIdentifier` as `IdentifierFilter`.
     add ecae486  Rename `DefaultSortBy` as `DefaultSortProperty`.
     add bc2b551  Update for change in GeoAPI: parameterize `SortBy` and `SortProperty`. Use `SortBy` instead of `SortProperty[]` where appropriate.
     add 982b713  Generalize `SortByComparator`.
     add 3b0f5c0  Filter implementations override Predicate.and/or/not methods.
     add fa65ecf  Move Query sub-types to public package.
     add b9591b3  Specialize the resource type of SQL store to `FeatureSet`.
     add d058d30  Fix a NullPointerException occurring when a table has no primary key.
     add 96e85e7  Upgrade dependencies.
     add 987a326  Apply filter optimization before to create a feature subset.
     add d65b2a0  Provide a common ground between `FeatureQuery` and `CoverageQuery`.
     add 04c2145  Update Maven dependencies, JavaFX dependency, and fix a broken javadoc link.
     new 152b383  Merge branch 'geoapi-4.0' into geoapi-3.1.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 NOTICE                                             |   23 +-
 application/pom.xml                                |    5 +-
 application/sis-console/pom.xml                    |    2 +-
 application/sis-javafx/doc/readme.txt              |   19 +
 application/sis-javafx/pom.xml                     |  190 +-
 .../src/main/artifact/LICENSE                      |    0
 .../src/main/artifact/NOTICE                       |    0
 application/sis-javafx/src/main/artifact/README    |   86 +
 application/sis-javafx/src/main/artifact/bin/sisfx |   45 +
 .../sis-javafx/src/main/artifact/bin/sisfx.bat     |   36 +
 .../src/main/artifact/conf/logging.properties      |   67 +
 .../sis-javafx/src/main/artifact/conf/setenv.bat   |    2 +
 .../sis-javafx/src/main/artifact/conf/setenv.sh    |    2 +
 .../sis-javafx/src/main/artifact/data/README       |    1 +
 .../sis-javafx/src/main/artifact/lib/README        |    8 +
 .../sis-javafx/src/main/artifact/lib/logo.jpg      |  Bin 0 -> 44981 bytes
 .../sis-javafx/src/main/artifact/log/README        |    3 +
 .../main/java/org/apache/sis/gui/AboutDialog.java  |   71 +
 .../main/java/org/apache/sis/gui/DataViewer.java   |  308 +++
 .../src/main/java/org/apache/sis/gui/Main.java     |  204 --
 .../main/java/org/apache/sis/gui/RecentFiles.java  |  154 ++
 .../src/main/java/org/apache/sis/gui/Widget.java   |   57 +
 .../apache/sis/gui/coverage/BandRangeTable.java    |  161 ++
 .../sis/gui/coverage/BandSelectionListener.java    |   67 +
 .../org/apache/sis/gui/coverage/CellFormat.java    |  338 ++++
 .../java/org/apache/sis/gui/coverage/Controls.java |  136 ++
 .../apache/sis/gui/coverage/CoverageCanvas.java    |  963 +++++++++
 .../apache/sis/gui/coverage/CoverageControls.java  |  299 +++
 .../apache/sis/gui/coverage/CoverageExplorer.java  |  410 ++++
 .../apache/sis/gui/coverage/CoverageStyling.java   |  205 ++
 .../java/org/apache/sis/gui/coverage/GridCell.java |   73 +
 .../org/apache/sis/gui/coverage/GridControls.java  |  162 ++
 .../org/apache/sis/gui/coverage/GridError.java     |  130 ++
 .../java/org/apache/sis/gui/coverage/GridRow.java  |  113 ++
 .../org/apache/sis/gui/coverage/GridRowSkin.java   |  138 ++
 .../java/org/apache/sis/gui/coverage/GridTile.java |  194 ++
 .../org/apache/sis/gui/coverage/GridTileCache.java |   56 +
 .../java/org/apache/sis/gui/coverage/GridView.java |  651 ++++++
 .../org/apache/sis/gui/coverage/GridViewSkin.java  |  605 ++++++
 .../sis/gui/coverage/ImagePropertyExplorer.java    |  826 ++++++++
 .../org/apache/sis/gui/coverage/ImageRequest.java  |  342 ++++
 .../apache/sis/gui/coverage/IsolineRenderer.java   |  498 +++++
 .../org/apache/sis/gui/coverage/RenderingData.java |  621 ++++++
 .../org/apache/sis/gui/coverage/Stretching.java    |   79 +
 .../org/apache/sis/gui/coverage/package-info.java  |   26 +
 .../org/apache/sis/gui/dataset/CopyAction.java     |  137 ++
 .../org/apache/sis/gui/dataset/DataWindow.java     |  118 ++
 .../org/apache/sis/gui/dataset/ExpandableList.java |  425 ++++
 .../apache/sis/gui/dataset/ExpandedFeature.java    |  222 ++
 .../org/apache/sis/gui/dataset/FeatureList.java    |  340 ++++
 .../org/apache/sis/gui/dataset/FeatureLoader.java  |  343 ++++
 .../org/apache/sis/gui/dataset/FeatureTable.java   |  559 +++--
 .../java/org/apache/sis/gui/dataset/LoadEvent.java |   66 +
 .../java/org/apache/sis/gui/dataset/LogViewer.java |  537 +++++
 .../apache/sis/gui/dataset/ResourceExplorer.java   |  570 ++++++
 .../org/apache/sis/gui/dataset/ResourceTree.java   |  881 ++++++--
 .../org/apache/sis/gui/dataset/SelectedData.java   |  122 ++
 .../org/apache/sis/gui/dataset/WindowManager.java  |  203 ++
 .../org/apache/sis/gui/dataset/package-info.java   |   31 +
 .../java/org/apache/sis/gui/map/MapCanvas.java     | 1205 +++++++++++
 .../java/org/apache/sis/gui/map/MapCanvasAWT.java  |  559 +++++
 .../main/java/org/apache/sis/gui/map/MapMenu.java  |  217 ++
 .../org/apache/sis/gui/map/OperationFinder.java    |  243 +++
 .../java/org/apache/sis/gui/map/StatusBar.java     | 1309 ++++++++++++
 .../org/apache/sis/gui/map/ValuesUnderCursor.java  |  622 ++++++
 .../java/org/apache/sis/gui/map/package-info.java  |   29 +
 .../sis/gui/metadata/IdentificationInfo.java       |  501 +++++
 .../org/apache/sis/gui/metadata/MetadataNode.java  |  228 ---
 .../apache/sis/gui/metadata/MetadataOverview.java  |  430 ----
 .../apache/sis/gui/metadata/MetadataSummary.java   |  399 ++++
 .../org/apache/sis/gui/metadata/MetadataTree.java  |  379 ++++
 .../sis/gui/metadata/RepresentationInfo.java       |  133 ++
 .../org/apache/sis/gui/metadata/ResourceView.java  |  399 ----
 .../java/org/apache/sis/gui/metadata/Section.java  |  292 +++
 .../sis/gui/metadata/StandardMetadataTree.java     |  242 +++
 .../org/apache/sis/gui/metadata/package-info.java  |   30 +
 .../main/java/org/apache/sis/gui/package-info.java |   28 +
 .../apache/sis/gui/referencing/AuthorityCodes.java |  525 +++++
 .../org/apache/sis/gui/referencing/CRSButton.java  |   79 -
 .../org/apache/sis/gui/referencing/CRSChooser.java |  438 +++-
 .../org/apache/sis/gui/referencing/CRSTable.java   |  349 ----
 .../java/org/apache/sis/gui/referencing/Code.java  |   94 +-
 .../org/apache/sis/gui/referencing/CodeFilter.java |  108 +
 .../org/apache/sis/gui/referencing/MenuSync.java   |  277 +++
 .../sis/gui/referencing/ObjectStringConverter.java |  110 +
 .../gui/referencing/PositionableProjection.java    |  256 +++
 .../gui/referencing/RecentReferenceSystems.java    |  894 ++++++++
 .../java/org/apache/sis/gui/referencing/Utils.java |  104 +
 .../org/apache/sis/gui/referencing/WKTPane.java    |  189 +-
 .../apache/sis/gui/referencing/package-info.java   |   27 +
 .../apache/sis/internal/gui/BackgroundThreads.java |  150 ++
 .../org/apache/sis/internal/gui/ColorName.java     |   87 +
 .../org/apache/sis/internal/gui/DataFormats.java   |   47 +
 .../apache/sis/internal/gui/ExceptionReporter.java |  338 ++++
 .../org/apache/sis/internal/gui/FXUtilities.java   |   91 -
 .../org/apache/sis/internal/gui/FontGlyphs.java    |  143 --
 .../org/apache/sis/internal/gui/GUIUtilities.java  |  335 +++
 .../sis/internal/gui/IdentityValueFactory.java     |   75 +
 .../apache/sis/internal/gui/ImageConverter.java    |  193 ++
 .../sis/internal/gui/ImmutableObjectProperty.java  |  115 ++
 .../org/apache/sis/internal/gui/LogHandler.java    |  261 +++
 .../sis/internal/gui/NonNullObjectProperty.java    |   55 +
 .../org/apache/sis/internal/gui/PropertyView.java  |  361 ++++
 .../org/apache/sis/internal/gui/RecentChoices.java |  242 +++
 .../apache/sis/internal/gui/ResourceLoader.java    |  253 +++
 .../org/apache/sis/internal/gui/Resources.java     |  310 ++-
 .../apache/sis/internal/gui/Resources.properties   |   61 +-
 .../sis/internal/gui/Resources_fr.properties       |   61 +-
 .../java/org/apache/sis/internal/gui/Styles.java   |  217 ++
 .../org/apache/sis/internal/gui/ToolbarButton.java |  122 ++
 .../apache/sis/internal/gui/control/ColorCell.java |  457 +++++
 .../internal/gui/control/ColorColumnHandler.java   |  148 ++
 .../apache/sis/internal/gui/control/ColorRamp.java |  234 +++
 .../sis/internal/gui/control/FormatApplicator.java |  253 +++
 .../sis/internal/gui/control/FormatTableCell.java  |  261 +++
 .../sis/internal/gui/control/ValueColorMapper.java |  558 +++++
 .../sis/internal/gui/control/package-info.java     |   31 +
 .../org/apache/sis/internal/gui/package-info.java  |    5 +-
 .../org/apache/sis/internal/setup/FXFinder.java    |  433 ++++
 .../org/apache/sis/internal/setup/Inflater.java    |  175 ++
 .../sis/internal/setup/LoggingConfiguration.java   |   94 +
 .../java/org/apache/sis/internal/setup/Wizard.java |  757 +++++++
 .../org/apache/sis/internal/setup/WizardPage.java  |  114 ++
 .../apache/sis/internal/setup/package-info.java    |   29 +
 .../resources/org/apache/sis/gui/SIS_128px.png     |  Bin 0 -> 26619 bytes
 .../main/resources/org/apache/sis/gui/SIS_64px.png |  Bin 0 -> 8906 bytes
 .../org/apache/sis/gui/pseudo-classes.css          |    6 +
 .../org/apache/sis/gui/referencing/CRSChooser.fxml |   30 -
 .../org/apache/sis/gui/referencing/proj_conic.png  |  Bin 591 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_geo.png    |  Bin 834 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_square.png |  Bin 519 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_stereo.png |  Bin 959 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_utm.png    |  Bin 681 -> 0 bytes
 .../apache/sis/gui/coverage/CoverageCanvasApp.java |  129 ++
 .../sis/gui/coverage/CoverageStylingApp.java       |   85 +
 .../org/apache/sis/gui/coverage/GridViewApp.java   |  105 +
 .../apache/sis/gui/referencing/CRSChooserApp.java  |   92 +
 .../apache/sis/internal/gui/GUIUtilitiesTest.java  |   72 +
 .../internal/gui/control/ValueColorMapperApp.java  |   84 +
 .../sis/test/suite/ApplicationTestSuite.java       |   45 +
 application/sis-openoffice/pom.xml                 |    2 +-
 .../sis-openoffice/src/main/unopkg/license.txt     |    2 +-
 application/sis-webapp/pom.xml                     |   77 -
 .../java/org/apache/sis/index/tree/GeoRSSData.java |  177 --
 .../org/apache/sis/index/tree/QuadTreeReader.java  |  163 --
 .../org/apache/sis/services/LocationServlet.java   |  479 -----
 .../main/java/org/apache/sis/services/Servlet.java |   26 +
 .../java/org/apache/sis/services/package-info.java |   21 +
 .../src/main/resources/sis-location-config.xml     |   28 -
 .../src/main/webapp/META-INF/context.xml           |    9 +-
 .../sis-webapp/src/main/webapp/WEB-INF/web.xml     |   20 +-
 application/sis-webapp/src/main/webapp/demo.jsp    |  321 ---
 .../src/main/webapp/images/sis_logo_small.png      |  Bin 35560 -> 0 bytes
 core/pom.xml                                       |   12 +-
 core/sis-build-helper/pom.xml                      |    4 +-
 .../apache/sis/internal/book/CodeColorizer.java    |    6 +-
 .../util/resources/IndexedResourceCompiler.java    |    8 +-
 core/sis-cql/pom.xml                               |    2 +-
 .../src/main/java/org/apache/sis/cql/CQL.java      |  607 +++---
 .../org/apache/sis/cql/FilterToCQLVisitor.java     |  846 +++-----
 .../test/java/org/apache/sis/cql/CQLTestCase.java  |   22 +-
 .../test/java/org/apache/sis/cql/CQLTestSuite.java |    4 +-
 .../org/apache/sis/cql/ExpressionReadingTest.java  |  127 +-
 .../org/apache/sis/cql/ExpressionWritingTest.java  |   71 +-
 .../java/org/apache/sis/cql/FilterReadingTest.java |  768 ++-----
 .../java/org/apache/sis/cql/FilterWritingTest.java |  125 +-
 core/sis-feature/pom.xml                           |    8 +-
 .../org/apache/sis/coverage/BandedCoverage.java    |  149 ++
 .../java/org/apache/sis/coverage/Category.java     |   28 +
 .../java/org/apache/sis/coverage/CategoryList.java |  197 +-
 .../org/apache/sis/coverage/ConvertedCategory.java |   14 +-
 .../org/apache/sis/coverage/SampleDimension.java   |  119 +-
 .../org/apache/sis/coverage/SampleRangeFormat.java |    2 +-
 .../main/java/org/apache/sis/coverage/ToNaN.java   |    2 +-
 .../sis/coverage/grid/BufferedGridCoverage.java    |  317 +++
 .../sis/coverage/grid/ConvertedGridCoverage.java   |  296 +++
 .../coverage/grid/CoordinateOperationFinder.java   |  754 +++++++
 .../apache/sis/coverage/grid/DimensionReducer.java |  108 +
 .../sis/coverage/grid/DisjointExtentException.java |   18 +-
 .../apache/sis/coverage/grid/DomainLinearizer.java |  223 ++
 .../coverage/grid/FractionalGridCoordinates.java   |  501 +++++
 .../apache/sis/coverage/grid/GridClippingMode.java |   51 +
 .../sis/coverage/grid/GridCoordinatesView.java     |   23 +-
 .../org/apache/sis/coverage/grid/GridCoverage.java |  188 +-
 .../apache/sis/coverage/grid/GridCoverage2D.java   |  673 +++++++
 .../sis/coverage/grid/GridCoverageBuilder.java     |  566 ++++++
 .../sis/coverage/grid/GridCoverageProcessor.java   |  267 +++
 .../apache/sis/coverage/grid/GridDerivation.java   |  976 ++++++---
 .../apache/sis/coverage/grid/GridEvaluator.java    |  276 +++
 .../org/apache/sis/coverage/grid/GridExtent.java   |  597 ++++--
 .../apache/sis/coverage/grid/GridExtentCRS.java    |  191 ++
 .../org/apache/sis/coverage/grid/GridGeometry.java |  583 ++++--
 .../apache/sis/coverage/grid/GridOrientation.java  |  312 +++
 .../apache/sis/coverage/grid/GridRoundingMode.java |   27 +-
 .../grid/IllegalGridGeometryException.java         |   13 +-
 .../apache/sis/coverage/grid/ImageRenderer.java    |  464 ++++-
 .../sis/coverage/grid/ResampledGridCoverage.java   |  666 ++++++
 .../apache/sis/coverage/grid/ReshapedImage.java    |  303 +++
 .../apache/sis/coverage/grid/SliceGeometry.java    |  372 ++++
 .../org/apache/sis/coverage/grid/package-info.java |   24 +-
 .../org/apache/sis/feature/AbstractAttribute.java  |    3 +-
 .../org/apache/sis/feature/AbstractFeature.java    |   39 +-
 .../apache/sis/feature/AbstractIdentifiedType.java |    2 +-
 .../apache/sis/feature/DefaultAttributeType.java   |    2 +-
 .../java/org/apache/sis/feature/DenseFeature.java  |   25 +-
 .../org/apache/sis/feature/EnvelopeOperation.java  |  220 +-
 .../java/org/apache/sis/feature/FeatureFormat.java |   10 +-
 .../sis/feature/FeatureOperationException.java     |   75 +
 .../org/apache/sis/feature/FeatureOperations.java  |   21 +-
 .../main/java/org/apache/sis/feature/Features.java |   69 +-
 .../sis/feature/InvalidFeatureException.java       |    6 +-
 .../java/org/apache/sis/feature/LinkOperation.java |    9 +-
 .../apache/sis/feature/SingletonAssociation.java   |    2 +-
 .../org/apache/sis/feature/SingletonAttribute.java |    2 +-
 .../java/org/apache/sis/feature/SparseFeature.java |   27 +-
 .../apache/sis/feature/StringJoinOperation.java    |    2 +-
 .../sis/feature/builder/AttributeTypeBuilder.java  |   31 +-
 .../sis/feature/builder/FeatureTypeBuilder.java    |    6 +-
 .../apache/sis/feature/builder/package-info.java   |    3 +-
 .../java/org/apache/sis/feature/package-info.java  |    2 +-
 .../org/apache/sis/filter/ArithmeticFunction.java  |  228 ++-
 .../java/org/apache/sis/filter/BinaryFunction.java |  159 +-
 .../apache/sis/filter/BinaryGeometryFilter.java    |  251 +++
 .../org/apache/sis/filter/BinarySpatialFilter.java |  166 ++
 .../java/org/apache/sis/filter/Capabilities.java   |  154 ++
 .../org/apache/sis/filter/ComparisonFilter.java    |  827 ++++++++
 .../org/apache/sis/filter/ComparisonFunction.java  |  718 -------
 .../org/apache/sis/filter/ConvertFunction.java     |  197 ++
 .../apache/sis/filter/DefaultFilterFactory.java    | 1331 ++++++------
 .../org/apache/sis/filter/DefaultObjectId.java     |  111 -
 .../java/org/apache/sis/filter/DefaultSortBy.java  |  102 -
 .../org/apache/sis/filter/DefaultSortProperty.java |  166 ++
 .../java/org/apache/sis/filter/DistanceFilter.java |  183 ++
 .../org/apache/sis/filter/FilterByIdentifier.java  |  136 --
 .../java/org/apache/sis/filter/FilterNode.java     |   90 +
 .../org/apache/sis/filter/IdentifierFilter.java    |  100 +
 .../sis/filter/InvalidExpressionException.java     |   92 -
 .../java/org/apache/sis/filter/LeafExpression.java |  236 +--
 .../java/org/apache/sis/filter/LikeFilter.java     |  237 +++
 .../java/org/apache/sis/filter/LogicalFilter.java  |  319 +++
 .../org/apache/sis/filter/LogicalFunction.java     |  158 --
 .../java/org/apache/sis/filter/NamedFunction.java  |  210 --
 .../src/main/java/org/apache/sis/filter/Node.java  |  174 --
 .../java/org/apache/sis/filter/Optimization.java   |  490 +++++
 .../java/org/apache/sis/filter/PropertyValue.java  |  328 +++
 .../src/main/java/org/apache/sis/filter/SQLMM.java |   91 -
 .../main/java/org/apache/sis/filter/ST_Buffer.java |   99 -
 .../java/org/apache/sis/filter/ST_Centroid.java    |   96 -
 .../java/org/apache/sis/filter/ST_Transform.java   |  203 --
 .../java/org/apache/sis/filter/TemporalFilter.java |  799 ++++++++
 .../org/apache/sis/filter/TemporalFunction.java    |  722 -------
 .../java/org/apache/sis/filter/UnaryFunction.java  |  147 +-
 .../java/org/apache/sis/filter/package-info.java   |   38 +-
 .../java/org/apache/sis/image/AnnotatedImage.java  |  539 +++++
 .../java/org/apache/sis/image/BandSelectImage.java |  171 ++
 .../java/org/apache/sis/image/BandedIterator.java  |  444 ++++
 .../apache/sis/image/BandedSampleConverter.java    |  473 +++++
 .../java/org/apache/sis/image/ComputedImage.java   |  747 +++++++
 .../java/org/apache/sis/image/ComputedTiles.java   |  361 ++++
 .../main/java/org/apache/sis/image/DataType.java   |  257 +++
 .../java/org/apache/sis/image/DefaultIterator.java |  655 ------
 .../java/org/apache/sis/image/ErrorAction.java     |   83 +
 .../java/org/apache/sis/image/ErrorHandler.java    |  216 ++
 .../java/org/apache/sis/image/ImageAdapter.java    |  174 ++
 .../java/org/apache/sis/image/ImageCombiner.java   |  278 +++
 .../java/org/apache/sis/image/ImageProcessor.java  | 1177 +++++++++++
 .../java/org/apache/sis/image/Interpolation.java   |  177 ++
 .../org/apache/sis/image/LanczosInterpolation.java |  113 ++
 .../java/org/apache/sis/image/LinearIterator.java  |  124 --
 .../main/java/org/apache/sis/image/MaskImage.java  |  121 ++
 .../java/org/apache/sis/image/PixelIterator.java   |  942 ++++++++-
 .../java/org/apache/sis/image/PlanarImage.java     |  623 ++++++
 .../sis/image/PositionalConsistencyImage.java      |  144 ++
 .../java/org/apache/sis/image/PrefetchedImage.java |  361 ++++
 .../java/org/apache/sis/image/RecoloredImage.java  |  301 +++
 .../java/org/apache/sis/image/ResampledImage.java  |  940 +++++++++
 .../java/org/apache/sis/image/ResamplingGrid.java  |  589 ++++++
 .../org/apache/sis/image/SourceAlignedImage.java   |  149 ++
 .../org/apache/sis/image/StatisticsCalculator.java |  171 ++
 .../main/java/org/apache/sis/image/TileCache.java  |  170 ++
 .../java/org/apache/sis/image/TransferType.java    |   14 +-
 .../main/java/org/apache/sis/image/Transferer.java |  603 ++++++
 .../java/org/apache/sis/image/Visualization.java   |  351 ++++
 .../apache/sis/image/WritablePixelIterator.java    |  100 +-
 .../java/org/apache/sis/image/package-info.java    |    3 +-
 .../org/apache/sis/index/tree/NodeIterator.java    |  443 ++++
 .../java/org/apache/sis/index/tree/PointTree.java  |  533 +++++
 .../org/apache/sis/index/tree/PointTreeNode.java   |  268 +++
 .../org/apache/sis/index/tree/QuadTreeNode.java    |  131 ++
 .../org/apache/sis/index/tree/package-info.java    |   31 +
 .../internal/coverage/BufferedGridCoverage.java    |  164 --
 .../sis/internal/coverage/ColorModelFactory.java   |  531 -----
 .../sis/internal/coverage/ColorModelPatch.java     |  121 --
 .../sis/internal/coverage/CompoundTransform.java   |  216 ++
 .../internal/coverage/CompoundTransformOf1D.java   |  173 ++
 .../internal/coverage/ConvertedGridCoverage.java   |  497 -----
 .../coverage/MultiBandsIndexColorModel.java        |  236 ---
 .../sis/internal/coverage/RasterFactory.java       |  227 ---
 .../sis/internal/coverage/RepeatedTransform.java   |  161 ++
 .../sis/internal/coverage/ScaledColorSpace.java    |  171 --
 .../internal/coverage/j2d/ColorModelFactory.java   |  652 ++++++
 .../sis/internal/coverage/j2d/ColorModelPatch.java |  121 ++
 .../sis/internal/coverage/j2d/ColorModelType.java  |  100 +
 .../sis/internal/coverage/j2d/Colorizer.java       |  517 +++++
 .../sis/internal/coverage/j2d/ColorsForRange.java  |  171 ++
 .../internal/coverage/j2d/DeferredProperty.java    |  129 ++
 .../sis/internal/coverage/j2d/ImageLayout.java     |  335 +++
 .../sis/internal/coverage/j2d/ImageUtilities.java  |  610 ++++++
 .../coverage/j2d/MultiBandsIndexColorModel.java    |  281 +++
 .../sis/internal/coverage/j2d/RasterFactory.java   |  289 +++
 .../internal/coverage/j2d/SampleModelFactory.java  |  295 +++
 .../internal/coverage/j2d/ScaledColorModel.java    |  158 ++
 .../internal/coverage/j2d/ScaledColorSpace.java    |  230 +++
 .../internal/coverage/j2d/TileErrorHandler.java    |  123 ++
 .../sis/internal/coverage/j2d/TileOpExecutor.java  |  955 +++++++++
 .../sis/internal/coverage/j2d/TiledImage.java      |  265 +++
 .../internal/coverage/j2d/WritableTiledImage.java  |  220 ++
 .../sis/internal/coverage/j2d/WriteSupport.java    |  101 +
 .../sis/internal/coverage/j2d/package-info.java    |   34 +
 .../apache/sis/internal/coverage/package-info.java |    8 +-
 .../sis/internal/feature/AbstractGeometry.java     |   41 +
 .../sis/internal/feature/AttributeConvention.java  |   78 +-
 .../org/apache/sis/internal/feature/DateList.java  |   69 -
 .../java/org/apache/sis/internal/feature/ESRI.java |  230 ---
 .../sis/internal/feature/FeatureExpression.java    |   45 +-
 .../sis/internal/feature/FeatureUtilities.java     |   33 +-
 .../sis/internal/feature/FunctionRegister.java     |   68 -
 .../apache/sis/internal/feature/Geometries.java    |  690 +++----
 .../sis/internal/feature/GeometryFactories.java    |   73 +
 .../apache/sis/internal/feature/GeometryType.java  |  160 ++
 .../sis/internal/feature/GeometryWithCRS.java      |   98 +
 .../sis/internal/feature/GeometryWrapper.java      |  604 +++++-
 .../apache/sis/internal/feature/InstantList.java   |   83 +
 .../java/org/apache/sis/internal/feature/JTS.java  |  363 ----
 .../org/apache/sis/internal/feature/Java2D.java    |  259 ---
 .../apache/sis/internal/feature/MovingFeature.java |  317 ---
 .../sis/internal/feature/MovingFeatures.java       |  136 ++
 .../org/apache/sis/internal/feature/Resources.java |  256 ++-
 .../sis/internal/feature/Resources.properties      |   24 +-
 .../sis/internal/feature/Resources_fr.properties   |   27 +-
 .../internal/feature/SpatialOperationContext.java  |  454 +++++
 .../apache/sis/internal/feature/esri/Factory.java  |  193 ++
 .../apache/sis/internal/feature/esri/Wrapper.java  |  273 +++
 .../sis/internal/feature/esri/package-info.java    |   35 +
 .../sis/internal/feature/j2d/EmptyShape.java       |   64 +
 .../apache/sis/internal/feature/j2d/Factory.java   |  268 +++
 .../apache/sis/internal/feature/j2d/FlatShape.java |  129 ++
 .../sis/internal/feature/j2d/MultiPolylines.java   |  181 ++
 .../sis/internal/feature/j2d/PathBuilder.java      |  268 +++
 .../sis/internal/feature/j2d/PointWrapper.java     |  145 ++
 .../apache/sis/internal/feature/j2d/Polygon.java   |   39 +
 .../apache/sis/internal/feature/j2d/Polyline.java  |  307 +++
 .../sis/internal/feature/j2d/ShapeProperties.java  |   26 +-
 .../apache/sis/internal/feature/j2d/Wrapper.java   |  218 ++
 .../sis/internal/feature/j2d/package-info.java     |    5 +-
 .../apache/sis/internal/feature/jts/Factory.java   |  395 ++++
 .../sis/internal/feature/jts/FilteringContext.java |   89 +
 .../org/apache/sis/internal/feature/jts/JTS.java   |  140 +-
 .../apache/sis/internal/feature/jts/Wrapper.java   |  695 +++++++
 .../apache/sis/internal/feature/package-info.java  |    3 +-
 .../apache/sis/internal/filter/FunctionNames.java  |   92 +
 .../sis/internal/filter/FunctionRegister.java      |   70 +
 .../sis/internal/filter/GeometryConverter.java     |  176 ++
 .../java/org/apache/sis/internal/filter/Node.java  |  292 +++
 .../sis/internal/filter/SortByComparator.java      |  206 ++
 .../org/apache/sis/internal/filter/Visitor.java    |  348 ++++
 .../apache/sis/internal/filter/package-info.java   |   27 +
 .../internal/filter/sqlmm/FunctionWithSRID.java    |  222 ++
 .../internal/filter/sqlmm/GeometryConstructor.java |  141 ++
 .../sis/internal/filter/sqlmm/GeometryParser.java  |  132 ++
 .../sis/internal/filter/sqlmm/OneGeometry.java     |  154 ++
 .../apache/sis/internal/filter/sqlmm/Registry.java |  136 ++
 .../apache/sis/internal/filter/sqlmm/SQLMM.java    |  869 ++++++++
 .../sis/internal/filter/sqlmm/ST_FromBinary.java   |   86 +
 .../sis/internal/filter/sqlmm/ST_FromText.java     |   82 +
 .../apache/sis/internal/filter/sqlmm/ST_Point.java |  258 +++
 .../sis/internal/filter/sqlmm/ST_Transform.java    |  135 ++
 .../sis/internal/filter/sqlmm/SpatialFunction.java |  228 +++
 .../sis/internal/filter/sqlmm/TwoGeometries.java   |  201 ++
 .../sis/internal/filter/sqlmm/package-info.java    |   38 +
 .../internal/processing/image/CompoundFuture.java  |  202 ++
 .../internal/processing/image/IsolineTracer.java   | 1260 ++++++++++++
 .../sis/internal/processing/image/Isolines.java    |  506 +++++
 .../internal/processing/image/TiledProcess.java    |  394 ++++
 .../internal/processing/image/package-info.java    |   32 +
 .../org/apache/sis/coverage/CategoryListTest.java  |  102 +-
 .../apache/sis/coverage/SampleDimensionTest.java   |   65 +-
 .../coverage/grid/BufferedGridCoverageTest.java    |  128 ++
 .../coverage/grid/ConvertedGridCoverageTest.java   |   82 +
 .../grid/FractionalGridCoordinatesTest.java        |  101 +
 .../sis/coverage/grid/GridCoverage2DTest.java      |  306 +++
 .../sis/coverage/grid/GridCoverageBuilderTest.java |  226 +++
 .../sis/coverage/grid/GridDerivationTest.java      |  386 +++-
 .../apache/sis/coverage/grid/GridExtentTest.java   |  186 +-
 .../apache/sis/coverage/grid/GridGeometryTest.java |  267 ++-
 .../sis/coverage/grid/GridOrientationTest.java     |   75 +
 .../sis/coverage/grid/PixelTranslationTest.java    |   14 +-
 .../coverage/grid/ResampledGridCoverageTest.java   |  697 +++++++
 .../sis/coverage/grid/ReshapedImageTest.java       |  198 ++
 .../apache/sis/feature/AbstractFeatureTest.java    |   10 +-
 .../apache/sis/feature/EnvelopeOperationTest.java  |  294 ++-
 .../apache/sis/feature/FeatureOperationsTest.java  |  177 ++
 .../feature/builder/AttributeTypeBuilderTest.java  |   37 +-
 .../apache/sis/filter/ArithmeticFunctionTest.java  |   32 +-
 .../sis/filter/BinarySpatialFilterTestCase.java    |  350 ++++
 .../filter/BinarySpatialFilterUsingJTS_Test.java   |   38 +
 .../org/apache/sis/filter/CapabilitiesTest.java    |   71 +
 .../apache/sis/filter/ComparisonFilterTest.java    |  181 ++
 .../apache/sis/filter/ComparisonFunctionTest.java  |  151 --
 .../org/apache/sis/filter/DefaultObjectIdTest.java |  100 -
 .../apache/sis/filter/FilterByIdentifierTest.java  |   92 -
 .../apache/sis/filter/IdentifierFilterTest.java    |  111 +
 .../org/apache/sis/filter/LeafExpressionTest.java  |  116 +-
 .../java/org/apache/sis/filter/LikeFilterTest.java |   83 +
 .../org/apache/sis/filter/LogicalFilterTest.java   |  232 +++
 .../org/apache/sis/filter/LogicalFunctionTest.java |  146 --
 .../java/org/apache/sis/filter/PeriodLiteral.java  |   24 +-
 .../test/java/org/apache/sis/filter/SQLMMTest.java |  200 --
 .../org/apache/sis/filter/TemporalFilterTest.java  |  350 ++++
 .../apache/sis/filter/TemporalFunctionTest.java    |  341 ----
 .../org/apache/sis/filter/UnaryFunctionTest.java   |   76 -
 .../org/apache/sis/image/BandSelectImageTest.java  |  186 ++
 .../org/apache/sis/image/BandedIteratorTest.java   |   79 +
 .../sis/image/BandedSampleConverterTest.java       |  154 ++
 .../org/apache/sis/image/ComputedImageTest.java    |  212 ++
 .../java/org/apache/sis/image/DataTypeTest.java    |   99 +
 .../org/apache/sis/image/DefaultIteratorTest.java  | 1247 ------------
 .../org/apache/sis/image/ImageCombinerTest.java    |  217 ++
 .../org/apache/sis/image/ImageProcessorTest.java   |   60 +
 .../java/org/apache/sis/image/ImageTestCase.java   |    2 +-
 .../org/apache/sis/image/InterpolationTest.java    |  178 ++
 .../org/apache/sis/image/LinearIteratorTest.java   |   42 +-
 .../org/apache/sis/image/PixelIteratorTest.java    | 1392 +++++++++++++
 .../java/org/apache/sis/image/PlanarImageTest.java |   99 +
 .../org/apache/sis/image/ResampledImageTest.java   |  359 ++++
 .../org/apache/sis/image/ResamplingGridTest.java   |  221 ++
 .../apache/sis/image/StatisticsCalculatorTest.java |  151 ++
 .../java/org/apache/sis/image/TiledImageMock.java  |  321 ++-
 .../apache/sis/index/tree/PointTreeNodeTest.java   |  113 ++
 .../org/apache/sis/index/tree/PointTreeTest.java   |  184 ++
 .../coverage/BufferedGridCoverageTest.java         |  117 --
 .../internal/coverage/ScaledColorSpaceTest.java    |  104 -
 .../sis/internal/coverage/j2d/ColorizerTest.java   |  149 ++
 .../sis/internal/coverage/j2d/ImageLayoutTest.java |   44 +
 .../internal/coverage/j2d/ImageUtilitiesTest.java  |  233 +++
 .../coverage/j2d/SampleModelFactoryTest.java       |  148 ++
 .../coverage/j2d/ScaledColorSpaceTest.java         |  104 +
 .../org/apache/sis/internal/feature/ESRITest.java  |   78 -
 .../sis/internal/feature/GeometriesTestCase.java   |  154 +-
 .../sis/internal/feature/GeometryTypeTest.java     |   54 +
 .../org/apache/sis/internal/feature/JTSTest.java   |   88 -
 .../apache/sis/internal/feature/Java2DTest.java    |   60 -
 .../sis/internal/feature/esri/FactoryTest.java     |   79 +
 .../sis/internal/feature/j2d/FactoryTest.java      |   61 +
 .../sis/internal/feature/j2d/FlatShapeTest.java    |  129 ++
 .../sis/internal/feature/jts/FactoryTest.java      |   89 +
 .../apache/sis/internal/feature/jts/JTSTest.java   |    9 +-
 .../sis/internal/filter/FunctionNamesTest.java     |  149 ++
 .../internal/filter/sqlmm/RegistryTestCase.java    |  497 +++++
 .../filter/sqlmm/RegistryUsingJTS_Test.java        |   38 +
 .../sis/internal/filter/sqlmm/SQLMMTest.java       |   46 +
 .../internal/processing/image/IsolinesTest.java    |  375 ++++
 .../java/org/apache/sis/test/FeatureAssert.java    |  204 ++
 .../apache/sis/test/feature/FeatureComparator.java |  458 +++++
 .../org/apache/sis/test/feature/package-info.java  |   30 +
 .../java/org/apache/sis/test}/package-info.txt     |    0
 .../apache/sis/test/suite/FeatureTestSuite.java    |   68 +-
 core/sis-metadata/pom.xml                          |   10 +-
 .../apache/sis/internal/jaxb/cat/CodeListUID.java  |   94 +-
 .../apache/sis/internal/jaxb/cat/package-info.java |    2 +-
 .../sis/internal/jaxb/gco/GO_CharacterString.java  |    2 +-
 .../internal/jaxb/gco/ObjectIdentification.html    |    2 +-
 .../sis/internal/jaxb/gco/ObjectReference.java     |    2 +-
 .../apache/sis/internal/jaxb/gco/PropertyType.java |    6 +-
 .../sis/internal/jaxb/gml/CodeListAdapter.java     |   35 +-
 .../apache/sis/internal/jaxb/gml/CodeListUID.java  |   59 -
 .../org/apache/sis/internal/jaxb/gml/Measure.java  |   12 +-
 .../apache/sis/internal/jaxb/gml/package-info.java |    2 +-
 .../jaxb/lan/LocalisedCharacterString.java         |   10 +-
 .../apache/sis/internal/metadata/AxisNames.java    |   23 +-
 .../apache/sis/internal/metadata/Identifiers.java  |   14 +-
 .../apache/sis/internal/metadata/NameMeaning.java  |    4 +-
 .../apache/sis/internal/metadata/Resources.java    |    2 -
 .../apache/sis/internal/metadata/sql/Dialect.java  |   42 +-
 .../sis/internal/metadata/sql/Initializer.java     |  283 +--
 .../sis/internal/metadata/sql/LocalDataSource.java |  465 +++++
 .../sis/internal/metadata/sql/SQLBuilder.java      |  157 +-
 .../sis/internal/metadata/sql/ScriptRunner.java    |   14 +-
 .../apache/sis/internal/metadata/sql/Syntax.java   |   84 +
 .../sis/internal/metadata/sql/package-info.java    |    3 +-
 .../java/org/apache/sis/internal/xml/Schemas.java  |  100 -
 .../org/apache/sis/internal/xml/package-info.java  |    2 +-
 .../org/apache/sis/metadata/AbstractMetadata.java  |    2 +-
 .../org/apache/sis/metadata/MetadataCopier.java    |    2 +-
 .../org/apache/sis/metadata/MetadataFormat.java    |    2 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |    2 +-
 .../org/apache/sis/metadata/MetadataVisitor.java   |   35 +-
 .../apache/sis/metadata/ModifiableMetadata.java    |   75 +-
 .../org/apache/sis/metadata/PropertyAccessor.java  |    2 +-
 .../apache/sis/metadata/PropertyComparator.java    |    4 +-
 .../java/org/apache/sis/metadata/SpecialCases.java |   12 +-
 .../java/org/apache/sis/metadata/StateChanger.java |   27 +-
 .../org/apache/sis/metadata/TreeNodeChildren.java  |    5 +-
 .../apache/sis/metadata/iso/DefaultMetadata.java   |   58 +-
 .../org/apache/sis/metadata/iso/ISOMetadata.java   |    8 +-
 .../sis/metadata/iso/acquisition/package-info.java |    2 +-
 .../sis/metadata/iso/citation/Citations.java       |   43 +-
 .../iso/citation/DefaultResponsibleParty.java      |  109 +-
 .../sis/metadata/iso/citation/package-info.java    |    2 +-
 .../iso/constraint/DefaultReleasability.java       |   30 +-
 .../sis/metadata/iso/constraint/package-info.java  |    2 +-
 .../iso/content/DefaultFeatureTypeInfo.java        |    2 +-
 .../iso/content/DefaultSampleDimension.java        |   21 +-
 .../sis/metadata/iso/content/package-info.java     |    2 +-
 .../metadata/iso/distribution/package-info.java    |    2 +-
 .../iso/extent/DefaultGeographicBoundingBox.java   |   24 +-
 .../apache/sis/metadata/iso/extent/Extents.java    |  221 +-
 .../sis/metadata/iso/extent/package-info.java      |    2 +-
 .../metadata/iso/identification/package-info.java  |    2 +-
 .../sis/metadata/iso/lineage/package-info.java     |    2 +-
 .../sis/metadata/iso/maintenance/package-info.java |    2 +-
 .../org/apache/sis/metadata/iso/package-info.java  |    2 +-
 .../sis/metadata/iso/quality/package-info.java     |    2 +-
 .../sis/metadata/iso/spatial/package-info.java     |    2 +-
 .../apache/sis/metadata/sql/MetadataSource.java    |   18 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |   44 +-
 .../apache/sis/util/iso/DefaultNameFactory.java    |   15 +-
 .../org/apache/sis/util/iso/DefaultRecord.java     |   48 +-
 .../apache/sis/util/iso/DefaultRecordSchema.java   |   24 +-
 .../org/apache/sis/util/iso/DefaultRecordType.java |  131 +-
 .../org/apache/sis/util/iso/DefaultScopedName.java |    9 +-
 .../main/java/org/apache/sis/util/iso/Names.java   |    2 +
 .../org/apache/sis/util/iso/RecordDefinition.java  |   56 +-
 .../java/org/apache/sis/util/iso/package-info.java |    2 +-
 .../java/org/apache/sis/xml/IdentifiedObject.java  |    2 +-
 .../src/main/java/org/apache/sis/xml/Pooled.java   |    8 +-
 .../java/org/apache/sis/xml/TransformVersion.java  |    1 +
 .../src/main/java/org/apache/sis/xml/XML.java      |   57 +-
 .../org/apache/sis/metadata/sql/Citations.sql      |   20 +-
 .../internal/jaxb/cat/CodeListMarshallingTest.java |   19 +-
 .../apache/sis/internal/jaxb/gml/MeasureTest.java  |   24 +-
 .../sis/internal/jaxb/lan/LanguageCodeTest.java    |    8 +-
 .../sis/metadata/ModifiableMetadataTest.java       |   42 +-
 .../apache/sis/metadata/TreeNodeChildrenTest.java  |    4 +-
 .../org/apache/sis/metadata/TreeTableViewTest.java |    2 +-
 .../iso/citation/DefaultResponsibilityTest.java    |    4 +-
 .../metadata/iso/citation/HardCodedCitations.java  |    6 +-
 .../constraint/DefaultLegalConstraintsTest.java    |    2 +-
 .../extent/DefaultGeographicBoundingBoxTest.java   |   64 +-
 .../sis/metadata/iso/extent/ExtentsTest.java       |    6 +-
 .../iso/identification/DefaultResolutionTest.java  |   12 +-
 .../sis/metadata/sql/MetadataWriterTest.java       |    4 +-
 .../java/org/apache/sis/test/sql/TestDatabase.java |   23 +-
 .../java/org/apache/sis/test/sql/package-info.java |    3 +-
 .../sis/test/xml/AnnotationConsistencyCheck.java   |    6 +-
 .../org/apache/sis/test/xml/PackageVerifier.java   |   12 +-
 .../org/apache/sis/test/xml/SchemaCompliance.java  |    5 +-
 .../java/org/apache/sis/test/xml/TestCase.java     |    8 +-
 .../java/org/apache/sis/test/xml/package-info.java |    2 +-
 .../sis/util/iso/DefaultRecordSchemaTest.java      |   18 +-
 .../apache/sis/util/iso/DefaultRecordTypeTest.java |   46 +-
 .../java/org/apache/sis/xml/NamespacesTest.java    |    3 +-
 .../org/apache/sis/metadata/xml/2007/Citation.xml  |   12 +-
 .../org/apache/sis/metadata/xml/2007/Extent.xml    |    2 +-
 .../org/apache/sis/metadata/xml/2007/Locales.xml   |   26 +-
 .../org/apache/sis/metadata/xml/2007/Metadata.xml  |   88 +-
 .../apache/sis/metadata/xml/2007/Multiplicity.xml  |    2 +-
 .../sis/metadata/xml/2007/PositionalAccuracy.xml   |    4 +-
 .../apache/sis/metadata/xml/2007/ProcessStep.xml   |    2 +-
 .../metadata/xml/2007/ServiceIdentification.xml    |    4 +-
 .../org/apache/sis/metadata/xml/2016/Citation.xml  |    4 +-
 .../org/apache/sis/metadata/xml/2016/Extent.xml    |    2 +-
 .../org/apache/sis/metadata/xml/2016/Locales.xml   |    2 +-
 .../org/apache/sis/metadata/xml/2016/Metadata.xml  |   28 +-
 .../apache/sis/metadata/xml/2016/Multiplicity.xml  |    3 +-
 .../sis/metadata/xml/2016/PositionalAccuracy.xml   |    6 +-
 .../apache/sis/metadata/xml/2016/ProcessStep.xml   |    2 +-
 .../metadata/xml/2016/ServiceIdentification.xml    |    2 +-
 core/sis-portrayal/pom.xml                         |    9 +-
 .../sis/internal/map/ExceptionPresentation.java    |   66 +
 .../apache/sis/internal/map/ListChangeEvent.java   |   98 +
 .../org/apache/sis/internal/map/MapContext.java    |   79 -
 .../java/org/apache/sis/internal/map/MapGroup.java |   66 -
 .../java/org/apache/sis/internal/map/MapItem.java  |   88 -
 .../java/org/apache/sis/internal/map/MapLayer.java |  104 -
 .../org/apache/sis/internal/map/NotifiedList.java  |   72 +
 .../org/apache/sis/internal/map/Presentation.java  |  146 ++
 .../sis/internal/map/PropertyNameCollector.java    |   60 +
 .../sis/internal/map/ResourceSymbolizer.java       |   37 +
 .../org/apache/sis/internal/map/SEPortrayer.java   |  755 +++++++
 .../apache/sis/internal/map/SEPresentation.java    |   85 +
 .../apache/sis/internal/map/SymbologyVisitor.java  |  394 ++++
 .../org/apache/sis/internal/map/package-info.java  |    9 +-
 .../main/java/org/apache/sis/portrayal/Canvas.java | 1234 ++++++++++++
 .../org/apache/sis/portrayal/CanvasContext.java    |  222 ++
 .../org/apache/sis/portrayal/CanvasExtent.java     |  235 +++
 .../java/org/apache/sis/portrayal/MapItem.java     |  294 +++
 .../java/org/apache/sis/portrayal/MapLayer.java    |  264 +++
 .../java/org/apache/sis/portrayal/MapLayers.java   |  194 ++
 .../java/org/apache/sis/portrayal/Observable.java  |  162 ++
 .../org/apache/sis/portrayal/PlanarCanvas.java     |  189 ++
 .../org/apache/sis/portrayal/RenderException.java  |   61 +
 .../org/apache/sis/portrayal/package-info.java     |   32 +
 .../sis/internal/map/MockFeatureTypeStyle.java     |  104 +
 .../sis/internal/map/MockLineSymbolizer.java       |  113 ++
 .../java/org/apache/sis/internal/map/MockRule.java |  131 ++
 .../org/apache/sis/internal/map/MockStyle.java     |   86 +
 .../apache/sis/internal/map/SEPortrayerTest.java   |  772 +++++++
 .../org/apache/sis/portrayal/MapLayersTest.java    |   99 +
 .../apache/sis/test/suite/PortrayalTestSuite.java  |   46 +
 core/sis-referencing-by-identifiers/pom.xml        |    4 +-
 .../apache/sis/internal/gazetteer/Resources.java   |    2 -
 .../gazetteer/GeohashReferenceSystem.java          |    2 +-
 .../sis/referencing/gazetteer/LocationFormat.java  |    2 +-
 .../gazetteer/MilitaryGridReferenceSystem.java     |   16 +-
 .../sis/referencing/gazetteer/LocationViewer.java  |    2 +-
 .../gazetteer/MilitaryGridReferenceSystemTest.java |    2 +-
 core/sis-referencing/pom.xml                       |   27 +-
 .../sis/geometry/AbstractDirectPosition.java       |   34 +-
 .../org/apache/sis/geometry/AbstractEnvelope.java  |  157 +-
 .../org/apache/sis/geometry/ArrayEnvelope.java     |    2 +-
 .../org/apache/sis/geometry/CoordinateFormat.java  | 1314 +++++++++---
 .../java/org/apache/sis/geometry/Envelope2D.java   |  116 +-
 .../java/org/apache/sis/geometry/Envelopes.java    |  490 +++--
 .../apache/sis/geometry/GeneralDirectPosition.java |    2 +
 .../org/apache/sis/geometry/GeneralEnvelope.java   |  238 ++-
 .../java/org/apache/sis/geometry/Shapes2D.java     |  357 ++--
 .../apache/sis/geometry/WraparoundInEnvelope.java  |  235 +++
 .../org/apache/sis/geometry/WraparoundMethod.java  |  173 ++
 .../java/org/apache/sis/geometry/package-info.java |    5 +-
 .../apache/sis/internal/jaxb/referencing/Code.java |    2 +-
 .../internal/jaxb/referencing/SC_SingleCRS.java    |    2 +-
 .../sis/internal/referencing/AnnotatedMatrix.java  |  140 ++
 .../sis/internal/referencing/AxisDirections.java   |   38 +-
 .../internal/referencing/CoordinateOperations.java |   22 +-
 .../internal/referencing/DefinitionVerifier.java   |   95 +-
 .../internal/referencing/DirectPositionView.java   |   25 -
 .../referencing/EllipsoidalHeightCombiner.java     |    6 +-
 .../sis/internal/referencing/ExtentSelector.java   |  419 +++-
 .../apache/sis/internal/referencing/Formulas.java  |   29 +-
 .../referencing/GeodeticObjectBuilder.java         |   11 +-
 .../apache/sis/internal/referencing/LazySet.java   |    5 +-
 .../referencing/MathTransformsOrFactory.java       |  141 ++
 .../internal/referencing/PositionTransformer.java  |    2 +-
 .../referencing/PositionalAccuracyConstant.java    |   40 +-
 .../apache/sis/internal/referencing/RTreeNode.java |  357 ++++
 .../internal/referencing/ReferencingUtilities.java |   80 +-
 .../apache/sis/internal/referencing/Resources.java |   66 +-
 .../sis/internal/referencing/Resources.properties  |   14 +-
 .../internal/referencing/Resources_fr.properties   |   14 +-
 .../internal/referencing/ServicesForMetadata.java  |   49 +-
 .../internal/referencing/SignReversalComment.java  |    2 +-
 .../sis/internal/referencing/TemporalAccessor.java |   51 +-
 .../internal/referencing/VerticalDatumTypes.java   |    2 +-
 .../sis/internal/referencing/WKTKeywords.java      |   84 +-
 .../sis/internal/referencing/WKTUtilities.java     |   70 +-
 .../internal/referencing/WraparoundAdjustment.java |   36 +-
 .../internal/referencing/WraparoundApplicator.java |  156 ++
 .../sis/internal/referencing/j2d/Bezier.java       |    2 +-
 .../referencing/j2d/ImmutableAffineTransform.java  |    2 +-
 .../referencing/j2d/IntervalRectangle.java         |   65 +-
 .../apache/sis/internal/referencing/j2d/Tile.java  |  683 +++++++
 .../internal/referencing/j2d/TileOrganizer.java    |  566 ++++++
 .../sis/internal/referencing/j2d/package-info.java |    2 +-
 .../sis/internal/referencing/package-info.java     |    2 +-
 .../referencing/provider/AbstractProvider.java     |   31 +-
 .../sis/internal/referencing/provider/Affine.java  |   11 +-
 .../referencing/provider/AlbersEqualArea.java      |    2 +-
 .../provider/AzimuthalEquidistantSpherical.java    |   83 +
 .../referencing/provider/CassiniSoldner.java       |  176 ++
 .../provider/DatumShiftGridCompressed.java         |   58 +-
 .../referencing/provider/DatumShiftGridFile.java   |  415 +++-
 .../referencing/provider/DatumShiftGridGroup.java  |  306 +++
 .../referencing/provider/DatumShiftGridLoader.java |   39 +-
 .../provider/FranceGeocentricInterpolation.java    |   20 +-
 .../referencing/provider/GeocentricAffine.java     |   19 +-
 .../GeocentricAffineBetweenGeographic.java         |    8 +-
 .../provider/GeocentricToGeographic.java           |   10 +-
 .../referencing/provider/GeodeticOperation.java    |   14 +-
 .../referencing/provider/Geographic2Dto3D.java     |    8 +
 .../referencing/provider/Geographic3Dto2D.java     |   22 +
 .../provider/GeographicToGeocentric.java           |    8 +-
 .../provider/HyperbolicCassiniSoldner.java         |   66 +
 .../referencing/provider/Interpolation1D.java      |    2 +-
 .../provider/LambertConformalBelgium.java          |    2 +-
 .../referencing/provider/LambertConformalWest.java |    2 +-
 .../provider/LambertCylindricalEqualArea.java      |   24 +-
 .../LambertCylindricalEqualAreaSpherical.java      |    4 +-
 .../referencing/provider/MapProjection.java        |   10 +-
 .../referencing/provider/MapProjection3D.java      |    9 +
 .../provider/ModifiedAzimuthalEquidistant.java     |  167 ++
 .../internal/referencing/provider/Mollweide.java   |    2 +-
 .../internal/referencing/provider/Molodensky.java  |    5 +-
 .../sis/internal/referencing/provider/NADCON.java  |    7 +-
 .../sis/internal/referencing/provider/NTv1.java    |   90 +
 .../sis/internal/referencing/provider/NTv2.java    |  559 +++--
 .../referencing/provider/Orthographic.java         |    2 +-
 .../referencing/provider/PolarStereographicA.java  |    2 +-
 .../internal/referencing/provider/Providers.java   |    2 +
 .../referencing/provider/SatelliteTracking.java    |    2 +-
 .../provider/TransverseMercatorSouth.java          |    2 +-
 .../internal/referencing/provider/Wraparound.java  |  120 ++
 .../provider/ZonedTransverseMercator.java          |    2 +-
 .../java/org/apache/sis/io/wkt/AbstractParser.java |  197 +-
 .../main/java/org/apache/sis/io/wkt/Colors.java    |    1 +
 .../main/java/org/apache/sis/io/wkt/Element.java   |  367 ++--
 .../main/java/org/apache/sis/io/wkt/Formatter.java |   59 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |   51 +-
 .../org/apache/sis/io/wkt/MathTransformParser.java |    4 +-
 .../org/apache/sis/io/wkt/SingletonElement.java    |   83 +
 .../java/org/apache/sis/io/wkt/StoredTree.java     |  590 ++++++
 .../main/java/org/apache/sis/io/wkt/Symbols.java   |   24 +-
 .../java/org/apache/sis/io/wkt/Transliterator.java |   20 +-
 .../java/org/apache/sis/io/wkt/WKTDictionary.java  | 1131 +++++++++++
 .../main/java/org/apache/sis/io/wkt/WKTFormat.java |  333 ++-
 .../main/java/org/apache/sis/io/wkt/Warnings.java  |    3 +-
 .../java/org/apache/sis/io/wkt/doc-files/ESRI.txt  |   92 +
 .../java/org/apache/sis/io/wkt/package-info.java   |   11 +-
 .../sis/parameter/DefaultParameterValueGroup.java  |   63 +-
 .../sis/parameter/MapProjectionDescriptor.java     |    7 +-
 .../sis/parameter/MapProjectionParameters.java     |    8 +-
 .../org/apache/sis/parameter/ParameterFormat.java  |    2 +-
 .../apache/sis/parameter/ParameterValueList.java   |    7 +-
 .../java/org/apache/sis/parameter/Parameters.java  |   19 +-
 .../sis/parameter/UninitializedParameter.java      |    4 +-
 .../org/apache/sis/parameter/package-info.java     |    2 +-
 .../sis/referencing/AbstractIdentifiedObject.java  |    2 +-
 .../main/java/org/apache/sis/referencing/CRS.java  |   47 +-
 .../java/org/apache/sis/referencing/CommonCRS.java |  196 +-
 .../referencing/EllipsoidalHeightSeparator.java    |   66 +-
 .../sis/referencing/GeodesicsOnEllipsoid.java      |   59 +-
 .../apache/sis/referencing/GeodeticCalculator.java |  152 +-
 .../apache/sis/referencing/IdentifiedObjects.java  |  230 ++-
 .../org/apache/sis/referencing/Properties.java     |   37 +-
 .../sis/referencing/StandardDefinitions.java       |    8 +-
 .../apache/sis/referencing/crs/AbstractCRS.java    |   21 +-
 .../sis/referencing/crs/AbstractDerivedCRS.java    |   11 +-
 .../sis/referencing/crs/DefaultCompoundCRS.java    |    2 +-
 .../sis/referencing/crs/DefaultGeographicCRS.java  |    3 +-
 .../apache/sis/referencing/crs/package-info.java   |    2 +-
 .../org/apache/sis/referencing/cs/AbstractCS.java  |    4 +-
 .../apache/sis/referencing/cs/AxesConvention.java  |    2 +-
 .../org/apache/sis/referencing/cs/AxisFilter.java  |    2 +-
 .../sis/referencing/cs/CoordinateSystems.java      |   54 +-
 .../apache/sis/referencing/cs/package-info.java    |    2 +-
 .../sis/referencing/datum/BursaWolfParameters.java |    7 +-
 .../sis/referencing/datum/DatumShiftGrid.java      |  227 ++-
 .../sis/referencing/datum/DefaultEllipsoid.java    |    9 +-
 .../referencing/datum/DefaultGeodeticDatum.java    |   63 +-
 .../referencing/datum/DefaultPrimeMeridian.java    |    2 +-
 .../sis/referencing/datum/TimeDependentBWP.java    |    2 +-
 .../factory/CommonAuthorityFactory.java            |   40 +-
 .../factory/ConcurrentAuthorityFactory.java        |   80 +-
 .../factory/GeodeticAuthorityFactory.java          |    6 +-
 .../referencing/factory/GeodeticObjectFactory.java |    9 +-
 .../factory/IdentifiedObjectFinder.java            |   28 +-
 .../factory/MultiAuthoritiesFactory.java           |    5 +-
 .../sis/referencing/factory/ReferenceKeeper.java   |  151 ++
 .../sis/referencing/factory/package-info.java      |    2 +-
 .../referencing/factory/sql/EPSGDataAccess.java    |   85 +-
 .../factory/sql/InstallationScriptProvider.java    |    2 +-
 .../sis/referencing/factory/sql/SQLTranslator.java |    2 +-
 .../sis/referencing/factory/sql/TableInfo.java     |    4 +-
 .../sis/referencing/factory/sql/package-info.java  |    4 +-
 .../operation/AbstractCoordinateOperation.java     |    6 +-
 .../operation/AbstractSingleOperation.java         |  124 +-
 .../apache/sis/referencing/operation/CRSPair.java  |   15 +-
 .../operation/CoordinateOperationContext.java      |   34 +-
 .../operation/CoordinateOperationFinder.java       |  218 +-
 .../operation/CoordinateOperationRegistry.java     |  230 ++-
 .../operation/DefaultConicProjection.java          |    2 +-
 .../referencing/operation/DefaultConversion.java   |    6 +-
 .../DefaultCoordinateOperationFactory.java         |   11 +-
 .../operation/DefaultCylindricalProjection.java    |    2 +-
 .../operation/DefaultOperationMethod.java          |   39 +-
 .../operation/DefaultPassThroughOperation.java     |    2 +-
 .../operation/DefaultPlanarProjection.java         |    2 +-
 .../operation/InverseOperationMethod.java          |   60 +-
 .../operation/LooselyDefinedMethod.java            |   90 +
 .../referencing/operation/SubOperationInfo.java    |  349 +++-
 .../operation/builder/LinearTransformBuilder.java  |  365 +++-
 .../referencing/operation/builder/Linearizer.java  |  158 ++
 .../operation/builder/LocalizationGridBuilder.java |  326 ++-
 .../operation/builder/ProjectedTransformTry.java   |  179 +-
 .../operation/builder/ResidualGrid.java            |  135 +-
 .../operation/builder/package-info.java            |    2 +-
 .../sis/referencing/operation/builder/readme.html  |    6 +-
 .../operation/matrix/AffineTransforms2D.java       |   64 +-
 .../sis/referencing/operation/matrix/Matrices.java |  159 +-
 .../sis/referencing/operation/matrix/Matrix1.java  |   11 +-
 .../sis/referencing/operation/matrix/Matrix2.java  |   10 -
 .../referencing/operation/matrix/MatrixSIS.java    |   36 +-
 .../sis/referencing/operation/matrix/Solver.java   |    4 +-
 .../referencing/operation/matrix/package-info.java |    2 +-
 .../sis/referencing/operation/package-info.java    |    2 +-
 .../operation/projection/AlbersEqualArea.java      |   43 +-
 .../operation/projection/AzimuthalEquidistant.java |  239 +++
 .../operation/projection/CassiniSoldner.java       |  412 ++++
 .../operation/projection/CylindricalEqualArea.java |    7 +-
 .../operation/projection/Initializer.java          |   42 +
 .../referencing/operation/projection/Inverter.java |    4 +-
 .../projection/LambertConicConformal.java          |   38 +-
 .../referencing/operation/projection/Mercator.java |   15 +-
 .../projection/ModifiedAzimuthalEquidistant.java   |  259 +++
 .../operation/projection/Mollweide.java            |    4 +-
 .../operation/projection/NormalizedProjection.java |  158 +-
 .../operation/projection/ObliqueMercator.java      |   15 +-
 .../operation/projection/ObliqueStereographic.java |   58 +-
 .../operation/projection/Orthographic.java         |   43 +-
 .../operation/projection/PolarStereographic.java   |    7 +-
 .../operation/projection/Polyconic.java            |    5 +-
 .../operation/projection/SatelliteTracking.java    |   38 +-
 .../operation/projection/Sinusoidal.java           |    4 +-
 .../operation/projection/TransverseMercator.java   |  169 +-
 .../operation/projection/ZonedGridSystem.java      |    2 +-
 .../operation/projection/package-info.java         |    2 +-
 .../transform/AbstractLinearTransform.java         |   44 +-
 .../operation/transform/AbstractMathTransform.java |    2 +
 .../operation/transform/CartesianToPolar.java      |    4 +-
 .../operation/transform/CartesianToSpherical.java  |    4 +-
 .../operation/transform/ConcatenatedTransform.java |  112 +-
 .../transform/ConcatenatedTransformDirect.java     |    4 +-
 .../transform/ConcatenatedTransformDirect2D.java   |    4 +-
 .../operation/transform/ContextualParameter.java   |    2 +-
 .../transform/CoordinateSystemTransform.java       |   49 +-
 .../operation/transform/CopyTransform.java         |  112 +-
 .../operation/transform/DatumShiftTransform.java   |    2 +
 .../transform/DefaultMathTransformFactory.java     |  227 ++-
 .../operation/transform/IdentityTransform.java     |   10 +-
 .../operation/transform/InterpolatedTransform.java |   47 +-
 .../operation/transform/LinearTransform.java       |    5 +-
 .../operation/transform/MathTransforms.java        |   90 +-
 .../transform/MathTransformsOrFactory.java         |  129 --
 .../operation/transform/MolodenskyFormula.java     |    2 +-
 .../operation/transform/PassThroughTransform.java  |    1 +
 .../operation/transform/PolarToCartesian.java      |    4 +-
 .../operation/transform/ProjectiveTransform.java   |   59 +-
 .../transform/SpecializableTransform.java          |  330 ++-
 .../operation/transform/SphericalToCartesian.java  |    4 +-
 .../operation/transform/TransferFunction.java      |    4 +-
 .../operation/transform/TransformAdapter2D.java    |  101 +
 .../operation/transform/TransformSeparator.java    |  108 +-
 .../operation/transform/TranslationTransform.java  |   32 +-
 .../operation/transform/WraparoundTransform.java   |  669 ++++++
 .../operation/transform/package-info.java          |    2 +-
 .../org/apache/sis/referencing/package-info.java   |    4 +-
 ...g.opengis.referencing.operation.OperationMethod |    6 +
 .../apache/sis/geometry/AbstractEnvelopeTest.java  |    8 +-
 .../org/apache/sis/geometry/ArrayEnvelopeTest.java |    3 +-
 .../apache/sis/geometry/CoordinateFormatTest.java  |  138 +-
 .../org/apache/sis/geometry/Envelope2DTest.java    |    2 +-
 .../org/apache/sis/geometry/EnvelopesTest.java     |   21 +-
 .../sis/geometry/GeneralDirectPositionTest.java    |    2 +-
 .../apache/sis/geometry/GeneralEnvelopeTest.java   |   64 +-
 .../apache/sis/geometry/ImmutableEnvelopeTest.java |    2 +-
 .../java/org/apache/sis/geometry/Shapes2DTest.java |    2 +-
 .../org/apache/sis/geometry/SubEnvelopeTest.java   |    2 +-
 .../org/apache/sis/geometry/TransformTestCase.java |   44 +-
 .../sis/internal/jaxb/referencing/CodeTest.java    |    2 +-
 .../internal/referencing/AxisDirectionsTest.java   |   38 +-
 .../referencing/DefinitionVerifierTest.java        |   24 +-
 .../referencing/EllipsoidalHeightCombinerTest.java |    2 +-
 .../internal/referencing/ExtentSelectorTest.java   |  147 ++
 .../sis/internal/referencing/FormulasTest.java     |   18 +-
 .../referencing/ReferencingUtilitiesTest.java      |    2 +-
 .../referencing/ServicesForMetadataTest.java       |    4 +-
 .../sis/internal/referencing/WKTKeywordsTest.java  |   41 +-
 .../sis/internal/referencing/WKTUtilitiesTest.java |   14 +-
 .../FranceGeocentricInterpolationTest.java         |    8 +-
 .../provider/GeographicOffsetsTest.java            |    8 +-
 .../internal/referencing/provider/NADCONTest.java  |   20 +-
 .../internal/referencing/provider/NTv2Test.java    |  117 +-
 .../referencing/provider/ProviderMock.java         |    4 +-
 .../referencing/provider/ProvidersTest.java        |    8 +-
 .../java/org/apache/sis/io/wkt/ElementTest.java    |   31 +-
 .../sis/io/wkt/GeodeticObjectParserTest.java       |    4 +-
 .../apache/sis/io/wkt/MathTransformParserTest.java |    4 +-
 .../java/org/apache/sis/io/wkt/SymbolsTest.java    |   12 +-
 .../org/apache/sis/io/wkt/WKTDictionaryTest.java   |  401 ++++
 .../java/org/apache/sis/io/wkt/WKTFormatTest.java  |    3 +-
 .../sis/parameter/DefaultParameterValueTest.java   |    2 +-
 .../sis/parameter/ParameterValueGroupWrapper.java  |    3 +-
 .../java/org/apache/sis/referencing/CRSTest.java   |   30 +-
 .../org/apache/sis/referencing/CommonCRSTest.java  |   23 +-
 .../sis/referencing/GeodesicsOnEllipsoidTest.java  |   91 +-
 .../sis/referencing/GeodeticCalculatorTest.java    |  159 +-
 .../sis/referencing/IdentifiedObjectsTest.java     |    4 +-
 .../referencing/crs/DefaultCompoundCRSTest.java    |    2 +-
 .../sis/referencing/crs/DefaultDerivedCRSTest.java |    2 +-
 .../apache/sis/referencing/crs/HardCodedCRS.java   |   91 +-
 .../sis/referencing/crs/HardCodedCRSTest.java      |   20 +-
 .../sis/referencing/cs/CoordinateSystemsTest.java  |   15 +-
 .../apache/sis/referencing/cs/HardCodedAxes.java   |   13 +-
 .../org/apache/sis/referencing/cs/HardCodedCS.java |    9 +-
 .../datum/DefaultGeodeticDatumTest.java            |   44 +-
 .../datum/DefaultPrimeMeridianTest.java            |    2 -
 .../sis/referencing/datum/GeodeticDatumMock.java   |    8 +-
 .../sis/referencing/datum/HardCodedDatum.java      |    8 +-
 .../referencing/factory/AuthorityFactoryMock.java  |    2 +-
 .../factory/CommonAuthorityFactoryTest.java        |    1 -
 .../apache/sis/referencing/factory/GIGS2004.java   |    2 +-
 .../factory/MultiAuthoritiesFactoryTest.java       |   40 +-
 .../referencing/factory/sql/EPSGInstallerTest.java |    2 +-
 .../factory/sql/epsg/DataScriptFormatter.java      |    2 +-
 .../sis/referencing/factory/sql/epsg/package.html  |    8 +-
 .../referencing/geoapi/AuthorityFactoryTest.java   |   72 +
 .../geoapi/ParameterizedTransformTest.java         |   87 +
 .../operation/AbstractSingleOperationTest.java     |   82 -
 .../operation/CoordinateOperationFinderTest.java   |  134 +-
 .../operation/DefaultTransformationTest.java       |    1 -
 .../operation/HardCodedConversions.java            |  109 +-
 .../builder/LinearTransformBuilderTest.java        |   44 +-
 .../operation/builder/LinearizerTest.java          |   73 +
 .../operation/builder/ResidualGridTest.java        |    8 +-
 .../operation/matrix/AffineTransforms2DTest.java   |    2 +-
 .../referencing/operation/matrix/MatricesTest.java |   38 +-
 .../operation/matrix/MatrixTestCase.java           |   31 +-
 .../operation/projection/AlbersEqualAreaTest.java  |   50 +-
 .../projection/AzimuthalEquidistantTest.java       |  191 ++
 .../operation/projection/CassiniSoldnerTest.java   |  215 ++
 .../operation/projection/InitializerTest.java      |   10 +-
 .../projection/LambertConicConformalTest.java      |    9 +-
 .../projection/MapProjectionTestCase.java          |   45 +-
 .../ModifiedAzimuthalEquidistantTest.java          |   95 +
 .../sis/referencing/operation/projection/NoOp.java |    2 +-
 .../projection/ObliqueStereographicTest.java       |   27 +-
 .../projection/TransverseMercatorTest.java         |   71 +-
 .../doc-files/TransverseMercatorErrors.png         |  Bin 0 -> 7954 bytes
 .../transform/ConcatenatedTransformTest.java       |   71 +-
 .../transform/CoordinateSystemTransformTest.java   |   69 +-
 .../transform/DefaultMathTransformFactoryTest.java |   96 +-
 .../transform/InterpolatedTransformTest.java       |    2 +-
 .../transform/MathTransformFactoryMock.java        |    2 +-
 .../operation/transform/MathTransformTestCase.java |    2 +-
 .../operation/transform/MathTransformWrapper.java  |   14 +-
 .../operation/transform/MathTransformsTest.java    |   34 +-
 .../transform/ProjectiveTransformTest.java         |   63 +-
 .../transform/TransformResultComparator.java       |    4 +-
 .../transform/TransformSeparatorTest.java          |   65 +-
 .../transform/WraparoundTransformTest.java         |  182 ++
 .../report/CoordinateOperationMethods.java         |    2 +-
 .../sis/test/suite/ReferencingTestSuite.java       |   12 +-
 .../resources/org/apache/sis/io/wkt/ExtraCRS.txt   |   81 +
 .../resources/org/apache/sis/io/wkt/Malformed.txt  |   13 +
 .../integration/Metadata with vertical CRS.xml     |   14 +-
 .../org/apache/sis/test/integration/Metadata.xml   |   42 +-
 core/sis-utility/pom.xml                           |   10 +-
 .../sis/internal/converter/DateConverter.java      |    2 +-
 .../sis/internal/converter/StringConverter.java    |    2 +-
 .../java/org/apache/sis/internal/jdk9/JDK9.java    |  225 ++-
 .../apache/sis/internal/system/CommonExecutor.java |  133 ++
 .../apache/sis/internal/system/DataDirectory.java  |    8 +-
 .../sis/internal/system/DelayedExecutor.java       |    3 +-
 .../sis/internal/system/DelayedRunnable.java       |    8 +-
 .../org/apache/sis/internal/system/Modules.java    |   17 +-
 .../org/apache/sis/internal/system/Shutdown.java   |    5 +-
 .../org/apache/sis/internal/system/Threads.java    |    6 +-
 .../apache/sis/internal/system/package-info.java   |    2 +-
 .../sis/internal/util/AutoMessageFormat.java       |    2 +-
 .../apache/sis/internal/util/CheckedArrayList.java |    2 +-
 .../java/org/apache/sis/internal/util/Cloner.java  |   76 +-
 .../apache/sis/internal/util/CollectionsExt.java   |   31 +-
 .../org/apache/sis/internal/util/Constants.java    |   12 +-
 .../apache/sis/internal/util/DefinitionURI.java    |    8 +-
 .../org/apache/sis/internal/util/DoubleDouble.java |   13 +-
 .../org/apache/sis/internal/util/Numerics.java     |  101 +-
 .../apache/sis/internal/util/PropertyFormat.java   |  216 ++
 .../sis/internal/util/StandardDateFormat.java      |   89 +-
 .../java/org/apache/sis/internal/util/Strings.java |   68 +-
 .../java/org/apache/sis/internal/util/X364.java    |    2 +-
 .../java/org/apache/sis/internal/util/XPaths.java  |    4 +-
 .../org/apache/sis/internal/util/package-info.java |    2 +-
 .../main/java/org/apache/sis/io/ClassFormat.java   |    2 +-
 .../java/org/apache/sis/io/CompoundFormat.java     |   42 +-
 .../src/main/java/org/apache/sis/io/IO.java        |    2 +-
 .../org/apache/sis/io/IdentifiedObjectFormat.java  |    2 +-
 .../main/java/org/apache/sis/io/TableAppender.java |   12 +-
 .../main/java/org/apache/sis/io/package-info.java  |    4 +-
 .../main/java/org/apache/sis/math/ArrayVector.java |  207 +-
 .../org/apache/sis/math/ConcatenatedVector.java    |   23 +-
 .../main/java/org/apache/sis/math/Fraction.java    |   16 +-
 .../org/apache/sis/math/LinearlyDerivedVector.java |   51 +-
 .../java/org/apache/sis/math/MathFunctions.java    |   41 +-
 .../java/org/apache/sis/math/PackedVector.java     |   25 +-
 .../java/org/apache/sis/math/RepeatedVector.java   |   28 +-
 .../java/org/apache/sis/math/SequenceVector.java   |   10 +-
 .../main/java/org/apache/sis/math/Statistics.java  |    4 +-
 .../java/org/apache/sis/math/StatisticsFormat.java |    3 +-
 .../src/main/java/org/apache/sis/math/Vector.java  |   65 +-
 .../java/org/apache/sis/measure/AngleFormat.java   |   38 +-
 .../sis/measure/FormattedCharacterIterator.java    |    2 +-
 .../java/org/apache/sis/measure/Longitude.java     |   29 +-
 .../java/org/apache/sis/measure/NumberRange.java   |   93 +-
 .../java/org/apache/sis/measure/Quantities.java    |   76 +-
 .../org/apache/sis/measure/QuantityFormat.java     |  146 ++
 .../main/java/org/apache/sis/measure/Range.java    |    6 +-
 .../java/org/apache/sis/measure/RangeFormat.java   |   50 +-
 .../main/java/org/apache/sis/measure/Scalar.java   |    7 +-
 .../java/org/apache/sis/measure/UnitDimension.java |    2 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |    6 +-
 .../main/java/org/apache/sis/measure/Units.java    |    5 +-
 .../java/org/apache/sis/measure/package-info.java  |    2 +-
 .../src/main/java/org/apache/sis/setup/About.java  |   53 +-
 .../java/org/apache/sis/setup/Configuration.java   |   40 +-
 .../apache/sis/setup/InstallationResources.java    |    6 +-
 .../java/org/apache/sis/util/ArgumentChecks.java   |  103 +-
 .../main/java/org/apache/sis/util/ArraysExt.java   |   22 +-
 .../java/org/apache/sis/util/CharSequences.java    |  188 +-
 .../main/java/org/apache/sis/util/Characters.java  |   12 +-
 .../src/main/java/org/apache/sis/util/Classes.java |   43 +-
 .../main/java/org/apache/sis/util/Exceptions.java  |   19 +-
 .../src/main/java/org/apache/sis/util/Locales.java |    2 +-
 .../src/main/java/org/apache/sis/util/Numbers.java |   54 +-
 .../main/java/org/apache/sis/util/Workaround.java  |    8 +
 .../sis/util/collection/BackingStoreException.java |   22 +-
 .../java/org/apache/sis/util/collection/Cache.java |   36 +-
 .../org/apache/sis/util/collection/Containers.java |    2 +-
 .../sis/util/collection/FrequencySortedSet.java    |    3 +
 .../apache/sis/util/collection/IntegerList.java    |   38 +-
 .../org/apache/sis/util/collection/TreeTable.java  |    2 +-
 .../sis/util/collection/TreeTableFormat.java       |  211 +-
 .../apache/sis/util/collection/WeakHashSet.java    |   12 +-
 .../sis/util/collection/WeakValueHashMap.java      |   13 +-
 .../apache/sis/util/collection/package-info.java   |    2 +-
 .../org/apache/sis/util/logging/LoggerAdapter.java |    2 +-
 .../java/org/apache/sis/util/logging/Logging.java  |    4 +-
 .../apache/sis/util/logging/MonolineFormatter.java |   18 +-
 .../apache/sis/util/logging/PerformanceLevel.java  |   90 +-
 .../java/org/apache/sis/util/package-info.java     |    5 +-
 .../java/org/apache/sis/util/resources/Errors.java |   42 +-
 .../apache/sis/util/resources/Errors.properties    |    7 +-
 .../apache/sis/util/resources/Errors_fr.properties |   15 +-
 .../sis/util/resources/IndexedResourceBundle.java  |   37 +-
 .../org/apache/sis/util/resources/Messages.java    |    2 -
 .../org/apache/sis/util/resources/Vocabulary.java  |  787 ++++++--
 .../sis/util/resources/Vocabulary.properties       |  105 +-
 .../sis/util/resources/Vocabulary_fr.properties    |  107 +-
 .../apache/sis/util/resources/package-info.java    |    2 +-
 .../sis/internal/util/DefinitionURITest.java       |    1 +
 .../apache/sis/internal/util/DoubleDoubleTest.java |    9 +-
 .../org/apache/sis/internal/util/NumericsTest.java |   26 +-
 .../sis/internal/util/StandardDateFormatTest.java  |    4 +-
 .../org/apache/sis/internal/util/StringsTest.java  |    8 +-
 .../org/apache/sis/internal/util/XPathsTest.java   |    7 +-
 .../org/apache/sis/math/MathFunctionsTest.java     |   15 +-
 .../java/org/apache/sis/math/StatisticsTest.java   |    2 +-
 .../test/java/org/apache/sis/math/VectorTest.java  |   12 +-
 .../org/apache/sis/measure/AngleFormatTest.java    |   14 +-
 .../java/org/apache/sis/measure/AngleTest.java     |   51 +-
 .../measure/FormattedCharacterIteratorTest.java    |    2 +-
 .../org/apache/sis/measure/NumberRangeTest.java    |   19 +-
 .../org/apache/sis/measure/QuantitiesTest.java     |   16 +-
 .../org/apache/sis/measure/RangeFormatTest.java    |   51 +-
 .../java/org/apache/sis/measure/RangeTest.java     |   22 +-
 .../java/org/apache/sis/measure/ScalarTest.java    |   10 +-
 .../org/apache/sis/measure/UnitFormatTest.java     |    2 +-
 .../java/org/apache/sis/measure/UnitsTest.java     |    2 +-
 .../src/test/java/org/apache/sis/test/Assert.java  |    1 +
 .../src/test/java/org/apache/sis/test/Assume.java  |    2 +-
 .../java/org/apache/sis/test/LoggingWatcher.java   |    6 +-
 .../java/org/apache/sis/test/OptionalTestData.java |   37 +-
 .../test/java/org/apache/sis/test/TestCase.java    |    2 +-
 .../java/org/apache/sis/test/TestUtilities.java    |    2 +-
 .../org/apache/sis/util/CharSequencesTest.java     |   26 +-
 .../java/org/apache/sis/util/CharactersTest.java   |   27 +-
 .../test/java/org/apache/sis/util/ClassesTest.java |   34 +-
 .../test/java/org/apache/sis/util/NumbersTest.java |   68 +-
 .../org/apache/sis/util/collection/CacheTest.java  |    2 +-
 .../apache/sis/util/collection/RangeSetTest.java   |    2 +-
 .../sis/util/logging/PerformanceLevelTest.java     |   46 +-
 ide-project/NetBeans/build.xml                     |   17 +
 ide-project/NetBeans/nbproject/build-impl.xml      |   78 +-
 ide-project/NetBeans/nbproject/build-impl.xml~     | 2131 ++++++++++++++++++++
 ide-project/NetBeans/nbproject/genfiles.properties |    6 +-
 ide-project/NetBeans/nbproject/project.properties  |   64 +-
 ide-project/NetBeans/nbproject/project.xml         |    5 +
 pom.xml                                            |  139 +-
 profiles/pom.xml                                   |    6 +-
 profiles/sis-french-profile/pom.xml                |    6 +-
 .../sis/internal/profile/fra/package-info.java     |    6 +-
 .../internal/profile/fra/DirectReferenceSystem.xml |    6 +-
 profiles/sis-japan-profile/pom.xml                 |   10 +-
 .../sis/internal/earth/netcdf/FactoryForUCAR.java  |  123 ++
 .../apache/sis/internal/earth/netcdf/GCOM_C.java   |   70 +-
 .../apache/sis/internal/earth/netcdf/GCOM_W.java   |   83 +-
 .../ucar.nc2.dataset.spi.CoordSystemBuilderFactory |    1 +
 src/main/javadoc/overview.html                     |    4 +-
 src/main/javadoc/sis.css                           |    7 +-
 storage/pom.xml                                    |    8 +-
 storage/sis-earth-observation/pom.xml              |   13 +-
 .../storage/earthobservation/LandsatAggregate.java |  138 ++
 .../sis/storage/earthobservation/LandsatBand.java  |   73 +
 .../storage/earthobservation/LandsatBandGroup.java |   72 +
 .../storage/earthobservation/LandsatReader.java    |  450 ++---
 .../storage/earthobservation/LandsatResource.java  |  226 +++
 .../sis/storage/earthobservation/LandsatStore.java |  149 +-
 .../earthobservation/LandsatStoreProvider.java     |   37 +-
 .../doc-files/LandsatMetadata.html                 |   47 +-
 .../sis/storage/earthobservation/package-info.java |    3 +-
 .../earthobservation/LandsatReaderTest.java        |   92 +-
 storage/sis-gdal/pom.xml                           |    4 +-
 .../org/apache/sis/storage/gdal/Proj4Test.java     |    2 +-
 .../org/apache/sis/storage/gdal/TransformTest.java |    1 -
 storage/sis-geotiff/pom.xml                        |   15 +-
 .../apache/sis/internal/geotiff/Compression.java   |  162 ++
 .../org/apache/sis/internal/geotiff/Predictor.java |   65 +
 .../org/apache/sis/internal/geotiff/Resources.java |   27 +-
 .../sis/internal/geotiff/Resources.properties      |    5 +
 .../sis/internal/geotiff/Resources_fr.properties   |    7 +-
 .../sis/internal/geotiff/SchemaModifier.java       |  119 ++
 .../apache/sis/internal/geotiff/package-info.java  |    2 +-
 .../sis/internal/storage/inflater/CCITTRLE.java    |  273 +++
 .../storage/inflater/CompressionChannel.java       |  131 ++
 .../internal/storage/inflater/CopyFromBytes.java   |  416 ++++
 .../storage/inflater/HorizontalPredictor.java      |  517 +++++
 .../sis/internal/storage/inflater/Inflater.java    |  319 +++
 .../apache/sis/internal/storage/inflater/LZW.java  |  261 +++
 .../sis/internal/storage/inflater/PackBits.java    |  143 ++
 .../internal/storage/inflater/PixelChannel.java    |   55 +
 .../storage/inflater/PredictorChannel.java         |  130 ++
 .../apache/sis/internal/storage/inflater/ZIP.java  |  136 ++
 .../internal/storage/inflater/package-info.java    |   49 +
 .../org/apache/sis/storage/geotiff/CRSBuilder.java |   13 +-
 .../sis/storage/geotiff/CompressedSubset.java      |  278 +++
 .../apache/sis/storage/geotiff/Compression.java    |  154 --
 .../org/apache/sis/storage/geotiff/DataCube.java   |  214 ++
 .../org/apache/sis/storage/geotiff/DataSubset.java |  486 +++++
 .../org/apache/sis/storage/geotiff/GeoTIFF.java    |   12 +-
 .../apache/sis/storage/geotiff/GeoTiffStore.java   |  159 +-
 .../sis/storage/geotiff/GridGeometryBuilder.java   |   19 +-
 .../sis/storage/geotiff/ImageFileDirectory.java    |  673 +++++--
 .../org/apache/sis/storage/geotiff/Reader.java     |   27 +-
 .../sis/storage/geotiff/ReversedBitsChannel.java   |  163 ++
 .../java/org/apache/sis/storage/geotiff/Tags.java  |    2 +
 .../apache/sis/storage/geotiff/package-info.java   |   11 +-
 .../sis/internal/geotiff/CompressionTest.java      |   43 +
 .../internal/storage/inflater/CCITTRLETest.java    |  576 ++++++
 .../internal/storage/inflater/InflaterTest.java    |   64 +
 .../sis/storage/geotiff/CompressionTest.java       |   43 -
 .../sis/storage/geotiff/SelfConsistencyTest.java   |   85 +
 .../apache/sis/test/suite/GeoTiffTestSuite.java    |    9 +-
 storage/sis-netcdf/pom.xml                         |   18 +-
 .../java/org/apache/sis/internal/netcdf/Axis.java  |  247 ++-
 .../org/apache/sis/internal/netcdf/AxisType.java   |  179 ++
 .../org/apache/sis/internal/netcdf/CRSBuilder.java |  215 +-
 .../org/apache/sis/internal/netcdf/Convention.java |   87 +-
 .../org/apache/sis/internal/netcdf/DataType.java   |   72 +-
 .../org/apache/sis/internal/netcdf/Decoder.java    |  112 +-
 .../sis/internal/netcdf/DiscreteSampling.java      |   12 +-
 .../org/apache/sis/internal/netcdf/FeatureSet.java |  950 +++++++++
 .../java/org/apache/sis/internal/netcdf/Grid.java  |  152 +-
 .../apache/sis/internal/netcdf/GridAdjustment.java |  207 ++
 .../apache/sis/internal/netcdf/GridCacheKey.java   |   36 +-
 .../apache/sis/internal/netcdf/GridCacheValue.java |   82 +
 .../apache/sis/internal/netcdf/GridMapping.java    |   62 +-
 .../java/org/apache/sis/internal/netcdf/HYCOM.java |  129 ++
 .../org/apache/sis/internal/netcdf/Linearizer.java |  297 ++-
 .../java/org/apache/sis/internal/netcdf/Node.java  |   38 +-
 .../org/apache/sis/internal/netcdf/Raster.java     |    8 +-
 .../apache/sis/internal/netcdf/RasterResource.java |  155 +-
 .../org/apache/sis/internal/netcdf/Resources.java  |   37 +-
 .../sis/internal/netcdf/Resources.properties       |    8 +-
 .../sis/internal/netcdf/Resources_fr.properties    |   16 +-
 .../sis/internal/netcdf/SatelliteGroundTrack.java  |  246 ---
 .../org/apache/sis/internal/netcdf/Variable.java   |  633 ++++--
 .../apache/sis/internal/netcdf/VariableRole.java   |   13 +-
 .../sis/internal/netcdf/impl/ChannelDecoder.java   |  147 +-
 .../sis/internal/netcdf/impl/FeaturesInfo.java     |  426 ----
 .../apache/sis/internal/netcdf/impl/GridInfo.java  |  111 +-
 .../org/apache/sis/internal/netcdf/impl/HYCOM.java |  128 --
 .../sis/internal/netcdf/impl/VariableInfo.java     |  423 ++--
 .../sis/internal/netcdf/impl/package-info.java     |    4 +-
 .../internal/netcdf/ucar/CSBuilderFallback.java    |   93 -
 .../sis/internal/netcdf/ucar/DecoderWrapper.java   |  219 +-
 .../sis/internal/netcdf/ucar/DimensionWrapper.java |    7 +-
 .../sis/internal/netcdf/ucar/FeaturesWrapper.java  |   17 +-
 .../sis/internal/netcdf/ucar/GridWrapper.java      |   72 +-
 .../sis/internal/netcdf/ucar/GroupWrapper.java     |    8 +-
 .../org/apache/sis/internal/netcdf/ucar/Utils.java |    4 +-
 .../sis/internal/netcdf/ucar/VariableWrapper.java  |  267 ++-
 .../sis/internal/netcdf/ucar/package-info.java     |    4 +-
 .../apache/sis/storage/netcdf/AttributeNames.java  |    1 -
 .../apache/sis/storage/netcdf/MetadataReader.java  |   30 +-
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   31 +-
 .../sis/storage/netcdf/NetcdfStoreProvider.java    |   55 +-
 .../apache/sis/storage/netcdf/package-info.java    |   16 +-
 .../apache/sis/internal/netcdf/DataTypeTest.java   |   42 +-
 .../apache/sis/internal/netcdf/FeatureSetTest.java |  200 ++
 .../org/apache/sis/internal/netcdf/GridTest.java   |   45 +-
 .../internal/netcdf/SatelliteGroundTrackTest.java  |   81 -
 .../apache/sis/internal/netcdf/VariableTest.java   |   28 +-
 .../sis/internal/netcdf/impl/FeatureSetTest.java   |   47 +
 .../sis/internal/netcdf/impl/GridInfoTest.java     |    9 +-
 .../sis/internal/netcdf/impl/VariableInfoTest.java |    3 +-
 .../sis/storage/netcdf/MetadataReaderTest.java     |   16 +-
 .../apache/sis/storage/netcdf/NetcdfStoreTest.java |    4 +-
 .../sis/storage/netcdf/SelfConsistencyTest.java    |   86 +
 .../org/apache/sis/test/suite/NetcdfTestSuite.java |    8 +-
 .../apache/sis/internal/shapefile/AutoChecker.java |    3 +-
 .../internal/shapefile/ShapefileByteReader.java    |    3 +-
 .../sis/storage/shapefile/InputFeatureStream.java  |    3 +-
 .../apache/sis/storage/shapefile/cpg/CpgFiles.java |   79 +
 storage/sis-sqlstore/pom.xml                       |   12 +
 .../apache/sis/internal/sql/feature/Analyzer.java  |  633 +++++-
 .../apache/sis/internal/sql/feature/Column.java    |  241 +++
 .../apache/sis/internal/sql/feature/Database.java  |  437 +++-
 .../sis/internal/sql/feature/EWKBReader.java       |  207 ++
 .../sis/internal/sql/feature/FeatureAdapter.java   |  374 ++++
 .../sis/internal/sql/feature/FeatureIterator.java  |  337 ++++
 .../sis/internal/sql/feature/FeatureStream.java    |  406 ++++
 .../apache/sis/internal/sql/feature/Features.java  |  499 -----
 .../sis/internal/sql/feature/InfoStatements.java   |  419 ++++
 .../sis/internal/sql/feature/PrimaryKey.java       |  112 +
 .../apache/sis/internal/sql/feature/Relation.java  |   75 +-
 .../apache/sis/internal/sql/feature/Resources.java |   27 +-
 .../sis/internal/sql/feature/Resources.properties  |    5 +
 .../internal/sql/feature/Resources_fr.properties   |    7 +-
 .../sis/internal/sql/feature/SchemaModifier.java   |   63 +
 .../sis/internal/sql/feature/SelectionClause.java  |  176 ++
 .../sql/feature/SelectionClauseWriter.java         |  419 ++++
 .../sis/internal/sql/feature/SpatialFunctions.java |  144 --
 .../org/apache/sis/internal/sql/feature/Table.java |  529 ++---
 .../sis/internal/sql/feature/TableAnalyzer.java    |  189 ++
 .../sis/internal/sql/feature/TableReference.java   |   45 +-
 .../sis/internal/sql/feature/ValueGetter.java      |  372 ++++
 .../sis/internal/sql/feature/package-info.java     |    6 +-
 .../internal/sql/postgis/ExtendedClauseWriter.java |   70 +
 .../sis/internal/sql/postgis/ExtendedInfo.java     |   82 +
 .../apache/sis/internal/sql/postgis/Postgres.java  |  151 ++
 .../sis/internal/sql/postgis/package-info.java     |   27 +
 .../sis/internal/stream/BaseStreamWrapper.java     |   97 +
 .../apache/sis/internal/stream/DeferredStream.java |  168 ++
 .../sis/internal/stream/DoubleStreamWrapper.java   |  285 +++
 .../sis/internal/stream/PaginedDoubleStream.java   |  102 +
 .../apache/sis/internal/stream/PaginedStream.java  |  113 ++
 .../apache/sis/internal/stream/StreamWrapper.java  |  319 +++
 .../apache/sis/internal/stream/package-info.java   |   34 +
 .../java/org/apache/sis/storage/sql/SQLStore.java  |   66 +-
 .../apache/sis/storage/sql/SQLStoreProvider.java   |    9 +-
 .../org/apache/sis/storage/sql/package-info.java   |   20 +-
 .../apache/sis/internal/sql/feature/EWKBTest.java  |  125 ++
 .../sql/feature/SelectionClauseWriterTest.java     |  151 ++
 .../sis/internal/sql/postgis/PostgresTest.java     |   45 +
 .../org/apache/sis/storage/sql/SQLStoreTest.java   |  205 +-
 .../org/apache/sis/test/suite/SQLTestSuite.java    |    4 +-
 .../sis/internal/sql/feature/hexa_ewkb_4326.csv    |   21 +
 .../sis/internal/sql/feature/hexa_ewkb_4326.sql    |   43 +
 storage/sis-storage/pom.xml                        |   15 +-
 .../apache/sis/index/tree/LatLonPointRadius.java   |  138 --
 .../java/org/apache/sis/index/tree/NodeType.java   |   28 -
 .../java/org/apache/sis/index/tree/QuadTree.java   |  622 ------
 .../org/apache/sis/index/tree/QuadTreeData.java    |   59 -
 .../org/apache/sis/index/tree/QuadTreeNode.java    |  178 --
 .../org/apache/sis/index/tree/QuadTreeWriter.java  |  163 --
 .../java/org/apache/sis/index/tree/Quadrant.java   |   62 -
 .../org/apache/sis/index/tree/package-info.java    |   24 -
 .../sis/internal/storage/AbstractFeatureSet.java   |    2 +
 .../sis/internal/storage/AbstractGridResource.java |  319 ++-
 .../sis/internal/storage/AbstractResource.java     |   75 +-
 .../sis/internal/storage/AggregatedFeatureSet.java |    2 +
 .../apache/sis/internal/storage/Capability.java    |   10 +-
 .../internal/storage/ConcatenatedFeatureSet.java   |    4 +-
 .../sis/internal/storage/GridResourceWrapper.java  |  227 +++
 .../sis/internal/storage/JoinFeatureSet.java       |   44 +-
 .../sis/internal/storage/MemoryGridResource.java   |  181 ++
 .../sis/internal/storage/MetadataBuilder.java      |  327 ++-
 .../internal/storage/RasterLoadingStrategy.java    |  112 +
 .../org/apache/sis/internal/storage/Resources.java |   27 +-
 .../sis/internal/storage/Resources.properties      |    5 +
 .../sis/internal/storage/Resources_fr.properties   |    7 +-
 .../apache/sis/internal/storage/StoreMetadata.java |   27 +-
 .../sis/internal/storage/StoreUtilities.java       |   32 +-
 .../sis/internal/storage/TiledGridCoverage.java    |  776 +++++++
 .../sis/internal/storage/TiledGridResource.java    |  543 +++++
 .../apache/sis/internal/storage/URIDataStore.java  |   43 +-
 .../internal/storage/csv/MovingFeatureBuilder.java |  299 +++
 .../storage/csv/MovingFeatureIterator.java         |   11 +-
 .../org/apache/sis/internal/storage/csv/Store.java |    3 +-
 .../sis/internal/storage/csv/StoreProvider.java    |   10 +-
 .../storage/folder/FolderStoreProvider.java        |   29 +-
 .../apache/sis/internal/storage/folder/Store.java  |   19 +-
 .../sis/internal/storage/folder/package-info.java  |    2 +-
 .../sis/internal/storage/io/ChannelData.java       |   61 +-
 .../sis/internal/storage/io/ChannelDataInput.java  |   20 +-
 .../sis/internal/storage/io/ChannelDataOutput.java |   20 +-
 .../sis/internal/storage/io/ChannelFactory.java    |    5 +-
 .../sis/internal/storage/io/DataTransfer.java      |    7 +-
 .../internal/storage/io/HyperRectangleReader.java  |   83 +-
 .../sis/internal/storage/io/IOUtilities.java       |   48 +-
 .../internal/storage/io/MemoryDataTransfer.java    |    3 +-
 .../org/apache/sis/internal/storage/io/Region.java |   62 +-
 .../apache/sis/internal/storage/package-info.java  |    2 +-
 .../sis/internal/storage/query/FeatureSubset.java  |  148 --
 .../sis/internal/storage/query/SimpleQuery.java    |  486 -----
 .../internal/storage/query/SortByComparator.java   |  116 --
 .../sis/internal/storage/query/package-info.java   |   32 -
 .../sis/internal/storage/wkt/FirstKeywordPeek.java |  162 +-
 .../org/apache/sis/internal/storage/wkt/Store.java |    2 +-
 .../sis/internal/storage/wkt/StoreFormat.java      |   13 +-
 .../sis/internal/storage/wkt/package-info.java     |    2 +-
 .../org/apache/sis/internal/storage/xml/Store.java |    3 +-
 .../java/org/apache/sis/storage/CoverageQuery.java |  374 ++++
 .../org/apache/sis/storage/CoverageSubset.java     |  208 ++
 .../java/org/apache/sis/storage/DataStore.java     |   77 +-
 .../org/apache/sis/storage/DataStoreProvider.java  |    8 +-
 .../org/apache/sis/storage/DataStoreRegistry.java  |   85 +-
 .../java/org/apache/sis/storage/FeatureNaming.java |    3 +-
 .../java/org/apache/sis/storage/FeatureQuery.java  |  673 +++++++
 .../java/org/apache/sis/storage/FeatureSet.java    |    5 +-
 .../java/org/apache/sis/storage/FeatureSubset.java |  147 ++
 .../apache/sis/storage/GridCoverageResource.java   |   37 +-
 .../main/java/org/apache/sis/storage/Query.java    |   79 +-
 .../main/java/org/apache/sis/storage/Resource.java |    7 +
 .../org/apache/sis/storage/StorageConnector.java   |   65 +-
 .../sis/storage/UnsupportedEncodingException.java  |   62 +
 .../apache/sis/storage/event/StoreListeners.java   |   28 +-
 .../java/org/apache/sis/storage/package-info.java  |    2 +-
 .../org.apache.sis.storage.DataStoreProvider       |    1 +
 .../apache/sis/index/tree/TestQuadTreeNode.java    |   31 -
 .../storage/ConcatenatedFeatureSetTest.java        |    5 +-
 .../sis/internal/storage/JoinFeatureSetTest.java   |   14 +-
 .../internal/storage/MemoryGridResourceTest.java   |  105 +
 .../sis/internal/storage/MetadataBuilderTest.java  |   73 +-
 .../sis/internal/storage/StoreUtilitiesTest.java   |   47 +
 .../sis/internal/storage/folder/StoreTest.java     |    5 +-
 .../storage/io/HyperRectangleReaderTest.java       |    3 +-
 .../storage/io/RewindableLineReaderTest.java       |    2 +-
 .../internal/storage/query/SimpleQueryTest.java    |  197 --
 .../org/apache/sis/storage/CoverageQueryTest.java  |  182 ++
 .../org/apache/sis/storage/DataStoresTest.java     |   81 +-
 .../org/apache/sis/storage/FeatureQueryTest.java   |  212 ++
 .../org/apache/sis/storage/GridResourceMock.java   |  106 +
 .../sis/test/storage/CoverageReadConsistency.java  |  555 +++++
 .../apache/sis/test/storage/SubsampledImage.java   |  263 +++
 .../org/apache/sis/test/storage/package-info.java  |   34 +
 .../apache/sis/test/suite/StorageTestSuite.java    |    7 +-
 storage/sis-xmlstore/pom.xml                       |    2 +-
 .../apache/sis/internal/storage/gpx/Metadata.java  |    7 +-
 .../sis/internal/storage/gpx/StoreProvider.java    |   10 +-
 .../apache/sis/internal/storage/gpx/Writer.java    |    4 +-
 .../storage/xml/stream/StaxStreamReader.java       |   16 +-
 1341 files changed, 144536 insertions(+), 31768 deletions(-)
 create mode 100644 application/sis-javafx/doc/readme.txt
 copy application/{sis-console => sis-javafx}/src/main/artifact/LICENSE (100%)
 copy application/{sis-console => sis-javafx}/src/main/artifact/NOTICE (100%)
 create mode 100644 application/sis-javafx/src/main/artifact/README
 create mode 100755 application/sis-javafx/src/main/artifact/bin/sisfx
 create mode 100644 application/sis-javafx/src/main/artifact/bin/sisfx.bat
 create mode 100644 application/sis-javafx/src/main/artifact/conf/logging.properties
 create mode 100644 application/sis-javafx/src/main/artifact/conf/setenv.bat
 create mode 100644 application/sis-javafx/src/main/artifact/conf/setenv.sh
 create mode 120000 application/sis-javafx/src/main/artifact/data/README
 create mode 100644 application/sis-javafx/src/main/artifact/lib/README
 create mode 100644 application/sis-javafx/src/main/artifact/lib/logo.jpg
 create mode 100644 application/sis-javafx/src/main/artifact/log/README
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/AboutDialog.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/DataViewer.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/RecentFiles.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/Widget.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/BandRangeTable.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/BandSelectionListener.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CellFormat.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/Controls.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageExplorer.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageStyling.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridCell.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridControls.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridError.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridRow.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridRowSkin.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridTile.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridTileCache.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridViewSkin.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImageRequest.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/IsolineRenderer.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/RenderingData.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/Stretching.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/package-info.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/CopyAction.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/DataWindow.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandedFeature.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/FeatureList.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/FeatureLoader.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/LoadEvent.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/LogViewer.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ResourceExplorer.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/SelectedData.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/WindowManager.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/package-info.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/map/MapCanvas.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/map/MapCanvasAWT.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/map/MapMenu.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/map/OperationFinder.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/map/ValuesUnderCursor.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/map/package-info.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataNode.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataOverview.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataSummary.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataTree.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/RepresentationInfo.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/Section.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/StandardMetadataTree.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/package-info.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/package-info.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/AuthorityCodes.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSButton.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CodeFilter.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/MenuSync.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/ObjectStringConverter.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/PositionableProjection.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/Utils.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/package-info.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/BackgroundThreads.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/ColorName.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/DataFormats.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/ExceptionReporter.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java
 delete mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FontGlyphs.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/GUIUtilities.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/IdentityValueFactory.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/ImageConverter.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/ImmutableObjectProperty.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/LogHandler.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/NonNullObjectProperty.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/PropertyView.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/RecentChoices.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/ResourceLoader.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Styles.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/ToolbarButton.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/control/ColorCell.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/control/ColorColumnHandler.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/control/ColorRamp.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/control/FormatApplicator.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/control/FormatTableCell.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/control/ValueColorMapper.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/gui/control/package-info.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/setup/FXFinder.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/setup/Inflater.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/setup/LoggingConfiguration.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/setup/Wizard.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/setup/WizardPage.java
 create mode 100644 application/sis-javafx/src/main/java/org/apache/sis/internal/setup/package-info.java
 create mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/SIS_128px.png
 create mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/SIS_64px.png
 create mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/pseudo-classes.css
 delete mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
 delete mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_conic.png
 delete mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_geo.png
 delete mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_square.png
 delete mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_stereo.png
 delete mode 100644 application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_utm.png
 create mode 100644 application/sis-javafx/src/test/java/org/apache/sis/gui/coverage/CoverageCanvasApp.java
 create mode 100644 application/sis-javafx/src/test/java/org/apache/sis/gui/coverage/CoverageStylingApp.java
 create mode 100644 application/sis-javafx/src/test/java/org/apache/sis/gui/coverage/GridViewApp.java
 create mode 100644 application/sis-javafx/src/test/java/org/apache/sis/gui/referencing/CRSChooserApp.java
 create mode 100644 application/sis-javafx/src/test/java/org/apache/sis/internal/gui/GUIUtilitiesTest.java
 create mode 100644 application/sis-javafx/src/test/java/org/apache/sis/internal/gui/control/ValueColorMapperApp.java
 create mode 100644 application/sis-javafx/src/test/java/org/apache/sis/test/suite/ApplicationTestSuite.java
 delete mode 100644 application/sis-webapp/src/main/java/org/apache/sis/index/tree/GeoRSSData.java
 delete mode 100644 application/sis-webapp/src/main/java/org/apache/sis/index/tree/QuadTreeReader.java
 delete mode 100644 application/sis-webapp/src/main/java/org/apache/sis/services/LocationServlet.java
 create mode 100644 application/sis-webapp/src/main/java/org/apache/sis/services/Servlet.java
 create mode 100644 application/sis-webapp/src/main/java/org/apache/sis/services/package-info.java
 delete mode 100644 application/sis-webapp/src/main/resources/sis-location-config.xml
 delete mode 100644 application/sis-webapp/src/main/webapp/demo.jsp
 delete mode 100644 application/sis-webapp/src/main/webapp/images/sis_logo_small.png
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/BandedCoverage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ConvertedGridCoverage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/CoordinateOperationFinder.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DimensionReducer.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/FractionalGridCoordinates.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridClippingMode.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageProcessor.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridEvaluator.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtentCRS.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridOrientation.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ReshapedImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/coverage/grid/SliceGeometry.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/feature/FeatureOperationException.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/BinarySpatialFilter.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/Capabilities.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFilter.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/ComparisonFunction.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/ConvertFunction.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/DefaultObjectId.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/DefaultSortBy.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/DefaultSortProperty.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/FilterByIdentifier.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/FilterNode.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/InvalidExpressionException.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/LogicalFilter.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/LogicalFunction.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/NamedFunction.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/Node.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/Optimization.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/PropertyValue.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/SQLMM.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/ST_Buffer.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/ST_Centroid.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/ST_Transform.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/TemporalFilter.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/filter/TemporalFunction.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/AnnotatedImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/BandSelectImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/BandedIterator.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/BandedSampleConverter.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ComputedImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ComputedTiles.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/DataType.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/DefaultIterator.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ErrorAction.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ErrorHandler.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ImageAdapter.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/Interpolation.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/LanczosInterpolation.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/LinearIterator.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/MaskImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/PlanarImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/PositionalConsistencyImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/PrefetchedImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/RecoloredImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ResampledImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/ResamplingGrid.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/SourceAlignedImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/StatisticsCalculator.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/TileCache.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/Transferer.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/image/Visualization.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/index/tree/NodeIterator.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTree.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/index/tree/package-info.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/BufferedGridCoverage.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/ColorModelFactory.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/ColorModelPatch.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CompoundTransform.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/CompoundTransformOf1D.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/ConvertedGridCoverage.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/MultiBandsIndexColorModel.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/RasterFactory.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/RepeatedTransform.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/ScaledColorSpace.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ColorModelFactory.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ColorModelPatch.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ColorModelType.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/Colorizer.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ColorsForRange.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/DeferredProperty.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ImageLayout.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ImageUtilities.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/MultiBandsIndexColorModel.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/RasterFactory.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/SampleModelFactory.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ScaledColorModel.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ScaledColorSpace.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/TileErrorHandler.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/TileOpExecutor.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/TiledImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/WritableTiledImage.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/WriteSupport.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/package-info.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/AbstractGeometry.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/DateList.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/FunctionRegister.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/GeometryFactories.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/GeometryType.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/GeometryWithCRS.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/InstantList.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/MovingFeature.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/MovingFeatures.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/SpatialOperationContext.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/esri/Factory.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/esri/Wrapper.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/esri/package-info.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/EmptyShape.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Factory.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/FlatShape.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/MultiPolylines.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/PathBuilder.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/PointWrapper.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Polygon.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Polyline.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Wrapper.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Factory.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/FilteringContext.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Wrapper.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/FunctionNames.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/FunctionRegister.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/GeometryConverter.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/Node.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/SortByComparator.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/Visitor.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/package-info.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/FunctionWithSRID.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryParser.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/Registry.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/SQLMM.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_FromBinary.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_FromText.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/SpatialFunction.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/package-info.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/processing/image/CompoundFuture.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/processing/image/IsolineTracer.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/processing/image/Isolines.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/processing/image/TiledProcess.java
 create mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/processing/image/package-info.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/BufferedGridCoverageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/ConvertedGridCoverageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/FractionalGridCoordinatesTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridCoverage2DTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridCoverageBuilderTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridOrientationTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/ResampledGridCoverageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/coverage/grid/ReshapedImageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/feature/FeatureOperationsTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/BinarySpatialFilterTestCase.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/BinarySpatialFilterUsingJTS_Test.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/CapabilitiesTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/ComparisonFilterTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/ComparisonFunctionTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/DefaultObjectIdTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/FilterByIdentifierTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/IdentifierFilterTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/LikeFilterTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFunctionTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/SQLMMTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/TemporalFilterTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/TemporalFunctionTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/filter/UnaryFunctionTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/BandSelectImageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/BandedIteratorTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/BandedSampleConverterTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/ComputedImageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/DataTypeTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/DefaultIteratorTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/ImageCombinerTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/ImageProcessorTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/InterpolationTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/PixelIteratorTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/PlanarImageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/ResampledImageTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/ResamplingGridTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/image/StatisticsCalculatorTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/index/tree/PointTreeNodeTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/index/tree/PointTreeTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/coverage/BufferedGridCoverageTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/coverage/ScaledColorSpaceTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ColorizerTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ImageLayoutTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ImageUtilitiesTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/SampleModelFactoryTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/coverage/j2d/ScaledColorSpaceTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometryTypeTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java
 delete mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/esri/FactoryTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/j2d/FactoryTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/j2d/FlatShapeTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/feature/jts/FactoryTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/filter/sqlmm/RegistryTestCase.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/filter/sqlmm/RegistryUsingJTS_Test.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/filter/sqlmm/SQLMMTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/internal/processing/image/IsolinesTest.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/test/FeatureAssert.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/test/feature/FeatureComparator.java
 create mode 100644 core/sis-feature/src/test/java/org/apache/sis/test/feature/package-info.java
 copy {storage/sis-xmlstore/src/test/java/org/apache/sis/test/suite => core/sis-feature/src/test/java/org/apache/sis/test}/package-info.txt (100%)
 delete mode 100644 core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/CodeListUID.java
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/LocalDataSource.java
 create mode 100644 core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Syntax.java
 delete mode 100644 core/sis-metadata/src/main/java/org/apache/sis/internal/xml/Schemas.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/ExceptionPresentation.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/ListChangeEvent.java
 delete mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapContext.java
 delete mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapGroup.java
 delete mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapItem.java
 delete mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapLayer.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/NotifiedList.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/Presentation.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/PropertyNameCollector.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/ResourceSymbolizer.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/SEPortrayer.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/SEPresentation.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/internal/map/SymbologyVisitor.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/CanvasContext.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/CanvasExtent.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/MapItem.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/MapLayer.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/MapLayers.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Observable.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/PlanarCanvas.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/RenderException.java
 create mode 100644 core/sis-portrayal/src/main/java/org/apache/sis/portrayal/package-info.java
 create mode 100644 core/sis-portrayal/src/test/java/org/apache/sis/internal/map/MockFeatureTypeStyle.java
 create mode 100644 core/sis-portrayal/src/test/java/org/apache/sis/internal/map/MockLineSymbolizer.java
 create mode 100644 core/sis-portrayal/src/test/java/org/apache/sis/internal/map/MockRule.java
 create mode 100644 core/sis-portrayal/src/test/java/org/apache/sis/internal/map/MockStyle.java
 create mode 100644 core/sis-portrayal/src/test/java/org/apache/sis/internal/map/SEPortrayerTest.java
 create mode 100644 core/sis-portrayal/src/test/java/org/apache/sis/portrayal/MapLayersTest.java
 create mode 100644 core/sis-portrayal/src/test/java/org/apache/sis/test/suite/PortrayalTestSuite.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/geometry/WraparoundInEnvelope.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/geometry/WraparoundMethod.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/AnnotatedMatrix.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/MathTransformsOrFactory.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/RTreeNode.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/WraparoundApplicator.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/Tile.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/j2d/TileOrganizer.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/AzimuthalEquidistantSpherical.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/CassiniSoldner.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridGroup.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/HyperbolicCassiniSoldner.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/ModifiedAzimuthalEquidistant.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/NTv1.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/Wraparound.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/io/wkt/SingletonElement.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/io/wkt/StoredTree.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTDictionary.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/io/wkt/doc-files/ESRI.txt
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ReferenceKeeper.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/LooselyDefinedMethod.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/Linearizer.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/AzimuthalEquidistant.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CassiniSoldner.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ModifiedAzimuthalEquidistant.java
 delete mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MathTransformsOrFactory.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransformAdapter2D.java
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/WraparoundTransform.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/ExtentSelectorTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTDictionaryTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/geoapi/AuthorityFactoryTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/geoapi/ParameterizedTransformTest.java
 delete mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/AbstractSingleOperationTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/builder/LinearizerTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/AzimuthalEquidistantTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/CassiniSoldnerTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/ModifiedAzimuthalEquidistantTest.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/doc-files/TransverseMercatorErrors.png
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/WraparoundTransformTest.java
 create mode 100644 core/sis-referencing/src/test/resources/org/apache/sis/io/wkt/ExtraCRS.txt
 create mode 100644 core/sis-referencing/src/test/resources/org/apache/sis/io/wkt/Malformed.txt
 create mode 100644 core/sis-utility/src/main/java/org/apache/sis/internal/system/CommonExecutor.java
 create mode 100644 core/sis-utility/src/main/java/org/apache/sis/internal/util/PropertyFormat.java
 create mode 100644 core/sis-utility/src/main/java/org/apache/sis/measure/QuantityFormat.java
 create mode 100644 ide-project/NetBeans/nbproject/build-impl.xml~
 create mode 100644 profiles/sis-japan-profile/src/main/java/org/apache/sis/internal/earth/netcdf/FactoryForUCAR.java
 create mode 100644 profiles/sis-japan-profile/src/main/resources/META-INF/services/ucar.nc2.dataset.spi.CoordSystemBuilderFactory
 create mode 100644 storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatAggregate.java
 create mode 100644 storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatBand.java
 create mode 100644 storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatBandGroup.java
 create mode 100644 storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatResource.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Compression.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Predictor.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/SchemaModifier.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CCITTRLE.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CompressionChannel.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/HorizontalPredictor.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/Inflater.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/PackBits.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/PixelChannel.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/PredictorChannel.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/ZIP.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/package-info.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CompressedSubset.java
 delete mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Compression.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/DataCube.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/DataSubset.java
 create mode 100644 storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ReversedBitsChannel.java
 create mode 100644 storage/sis-geotiff/src/test/java/org/apache/sis/internal/geotiff/CompressionTest.java
 create mode 100644 storage/sis-geotiff/src/test/java/org/apache/sis/internal/storage/inflater/CCITTRLETest.java
 create mode 100644 storage/sis-geotiff/src/test/java/org/apache/sis/internal/storage/inflater/InflaterTest.java
 delete mode 100644 storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/CompressionTest.java
 create mode 100644 storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/SelfConsistencyTest.java
 create mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/AxisType.java
 create mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/FeatureSet.java
 create mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridAdjustment.java
 create mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridCacheValue.java
 create mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/HYCOM.java
 delete mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/SatelliteGroundTrack.java
 delete mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/FeaturesInfo.java
 delete mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/HYCOM.java
 delete mode 100644 storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/CSBuilderFallback.java
 create mode 100644 storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/FeatureSetTest.java
 delete mode 100644 storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/SatelliteGroundTrackTest.java
 create mode 100644 storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/impl/FeatureSetTest.java
 create mode 100644 storage/sis-netcdf/src/test/java/org/apache/sis/storage/netcdf/SelfConsistencyTest.java
 create mode 100644 storage/sis-shapefile/src/main/java/org/apache/sis/storage/shapefile/cpg/CpgFiles.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/Column.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/EWKBReader.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/FeatureAdapter.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/FeatureIterator.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/FeatureStream.java
 delete mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/Features.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/InfoStatements.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/PrimaryKey.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SchemaModifier.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClause.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SelectionClauseWriter.java
 delete mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/SpatialFunctions.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/ValueGetter.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/ExtendedClauseWriter.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/ExtendedInfo.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/Postgres.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/postgis/package-info.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/BaseStreamWrapper.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DoubleStreamWrapper.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/PaginedDoubleStream.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/PaginedStream.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/StreamWrapper.java
 create mode 100644 storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/package-info.java
 create mode 100644 storage/sis-sqlstore/src/test/java/org/apache/sis/internal/sql/feature/EWKBTest.java
 create mode 100644 storage/sis-sqlstore/src/test/java/org/apache/sis/internal/sql/feature/SelectionClauseWriterTest.java
 create mode 100644 storage/sis-sqlstore/src/test/java/org/apache/sis/internal/sql/postgis/PostgresTest.java
 create mode 100644 storage/sis-sqlstore/src/test/resources/org/apache/sis/internal/sql/feature/hexa_ewkb_4326.csv
 create mode 100644 storage/sis-sqlstore/src/test/resources/org/apache/sis/internal/sql/feature/hexa_ewkb_4326.sql
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/LatLonPointRadius.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/NodeType.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/QuadTree.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/QuadTreeData.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/QuadTreeWriter.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/Quadrant.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/index/tree/package-info.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/GridResourceWrapper.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MemoryGridResource.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/RasterLoadingStrategy.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridResource.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/MovingFeatureBuilder.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/FeatureSubset.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/SimpleQuery.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/SortByComparator.java
 delete mode 100644 storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/package-info.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageQuery.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/storage/CoverageSubset.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureQuery.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureSubset.java
 create mode 100644 storage/sis-storage/src/main/java/org/apache/sis/storage/UnsupportedEncodingException.java
 delete mode 100644 storage/sis-storage/src/test/java/org/apache/sis/index/tree/TestQuadTreeNode.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/internal/storage/MemoryGridResourceTest.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/internal/storage/StoreUtilitiesTest.java
 delete mode 100644 storage/sis-storage/src/test/java/org/apache/sis/internal/storage/query/SimpleQueryTest.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/storage/CoverageQueryTest.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/storage/FeatureQueryTest.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/storage/GridResourceMock.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/test/storage/CoverageReadConsistency.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/test/storage/SubsampledImage.java
 create mode 100644 storage/sis-storage/src/test/java/org/apache/sis/test/storage/package-info.java

[sis] 01/01: Merge branch 'geoapi-4.0' into geoapi-3.1.

Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-3.1
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 152b383de9265bf5dc6906a5c8621640d66979bf
Merge: 1105c74 04c2145
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Fri Sep 10 15:51:32 2021 +0200

    Merge branch 'geoapi-4.0' into geoapi-3.1.

 NOTICE                                             |   23 +-
 application/pom.xml                                |    5 +-
 application/sis-console/pom.xml                    |    2 +-
 application/sis-javafx/doc/readme.txt              |   19 +
 application/sis-javafx/pom.xml                     |  190 +-
 application/sis-javafx/src/main/artifact/LICENSE   |    1 +
 application/sis-javafx/src/main/artifact/NOTICE    |    1 +
 application/sis-javafx/src/main/artifact/README    |   86 +
 application/sis-javafx/src/main/artifact/bin/sisfx |   45 +
 .../sis-javafx/src/main/artifact/bin/sisfx.bat     |   36 +
 .../src/main/artifact/conf/logging.properties      |   67 +
 .../sis-javafx/src/main/artifact/conf/setenv.bat   |    2 +
 .../sis-javafx/src/main/artifact/conf/setenv.sh    |    2 +
 .../sis-javafx/src/main/artifact/data/README       |    1 +
 .../sis-javafx/src/main/artifact/lib/README        |    8 +
 .../sis-javafx/src/main/artifact/lib/logo.jpg      |  Bin 0 -> 44981 bytes
 .../sis-javafx/src/main/artifact/log/README        |    3 +
 .../main/java/org/apache/sis/gui/AboutDialog.java  |   71 +
 .../main/java/org/apache/sis/gui/DataViewer.java   |  308 +++
 .../src/main/java/org/apache/sis/gui/Main.java     |  204 --
 .../main/java/org/apache/sis/gui/RecentFiles.java  |  154 ++
 .../src/main/java/org/apache/sis/gui/Widget.java   |   57 +
 .../apache/sis/gui/coverage/BandRangeTable.java    |  161 ++
 .../sis/gui/coverage/BandSelectionListener.java    |   67 +
 .../org/apache/sis/gui/coverage/CellFormat.java    |  338 ++++
 .../java/org/apache/sis/gui/coverage/Controls.java |  136 ++
 .../apache/sis/gui/coverage/CoverageCanvas.java    |  963 +++++++++
 .../apache/sis/gui/coverage/CoverageControls.java  |  299 +++
 .../apache/sis/gui/coverage/CoverageExplorer.java  |  410 ++++
 .../apache/sis/gui/coverage/CoverageStyling.java   |  205 ++
 .../java/org/apache/sis/gui/coverage/GridCell.java |   73 +
 .../org/apache/sis/gui/coverage/GridControls.java  |  162 ++
 .../org/apache/sis/gui/coverage/GridError.java     |  130 ++
 .../java/org/apache/sis/gui/coverage/GridRow.java  |  113 ++
 .../org/apache/sis/gui/coverage/GridRowSkin.java   |  138 ++
 .../java/org/apache/sis/gui/coverage/GridTile.java |  194 ++
 .../org/apache/sis/gui/coverage/GridTileCache.java |   56 +
 .../java/org/apache/sis/gui/coverage/GridView.java |  651 ++++++
 .../org/apache/sis/gui/coverage/GridViewSkin.java  |  605 ++++++
 .../sis/gui/coverage/ImagePropertyExplorer.java    |  826 ++++++++
 .../org/apache/sis/gui/coverage/ImageRequest.java  |  342 ++++
 .../apache/sis/gui/coverage/IsolineRenderer.java   |  498 +++++
 .../org/apache/sis/gui/coverage/RenderingData.java |  621 ++++++
 .../org/apache/sis/gui/coverage/Stretching.java    |   79 +
 .../org/apache/sis/gui/coverage/package-info.java  |   26 +
 .../org/apache/sis/gui/dataset/CopyAction.java     |  137 ++
 .../org/apache/sis/gui/dataset/DataWindow.java     |  118 ++
 .../org/apache/sis/gui/dataset/ExpandableList.java |  425 ++++
 .../apache/sis/gui/dataset/ExpandedFeature.java    |  222 ++
 .../org/apache/sis/gui/dataset/FeatureList.java    |  340 ++++
 .../org/apache/sis/gui/dataset/FeatureLoader.java  |  343 ++++
 .../org/apache/sis/gui/dataset/FeatureTable.java   |  559 +++--
 .../java/org/apache/sis/gui/dataset/LoadEvent.java |   66 +
 .../java/org/apache/sis/gui/dataset/LogViewer.java |  537 +++++
 .../apache/sis/gui/dataset/ResourceExplorer.java   |  570 ++++++
 .../org/apache/sis/gui/dataset/ResourceTree.java   |  881 ++++++--
 .../org/apache/sis/gui/dataset/SelectedData.java   |  122 ++
 .../org/apache/sis/gui/dataset/WindowManager.java  |  203 ++
 .../org/apache/sis/gui/dataset/package-info.java   |   31 +
 .../java/org/apache/sis/gui/map/MapCanvas.java     | 1205 +++++++++++
 .../java/org/apache/sis/gui/map/MapCanvasAWT.java  |  559 +++++
 .../main/java/org/apache/sis/gui/map/MapMenu.java  |  217 ++
 .../org/apache/sis/gui/map/OperationFinder.java    |  243 +++
 .../java/org/apache/sis/gui/map/StatusBar.java     | 1309 ++++++++++++
 .../org/apache/sis/gui/map/ValuesUnderCursor.java  |  622 ++++++
 .../java/org/apache/sis/gui/map/package-info.java  |   29 +
 .../sis/gui/metadata/IdentificationInfo.java       |  501 +++++
 .../org/apache/sis/gui/metadata/MetadataNode.java  |  228 ---
 .../apache/sis/gui/metadata/MetadataOverview.java  |  430 ----
 .../apache/sis/gui/metadata/MetadataSummary.java   |  399 ++++
 .../org/apache/sis/gui/metadata/MetadataTree.java  |  379 ++++
 .../sis/gui/metadata/RepresentationInfo.java       |  133 ++
 .../org/apache/sis/gui/metadata/ResourceView.java  |  399 ----
 .../java/org/apache/sis/gui/metadata/Section.java  |  292 +++
 .../sis/gui/metadata/StandardMetadataTree.java     |  242 +++
 .../org/apache/sis/gui/metadata/package-info.java  |   30 +
 .../main/java/org/apache/sis/gui/package-info.java |   28 +
 .../apache/sis/gui/referencing/AuthorityCodes.java |  525 +++++
 .../org/apache/sis/gui/referencing/CRSButton.java  |   79 -
 .../org/apache/sis/gui/referencing/CRSChooser.java |  438 +++-
 .../org/apache/sis/gui/referencing/CRSTable.java   |  349 ----
 .../java/org/apache/sis/gui/referencing/Code.java  |   94 +-
 .../org/apache/sis/gui/referencing/CodeFilter.java |  108 +
 .../org/apache/sis/gui/referencing/MenuSync.java   |  277 +++
 .../sis/gui/referencing/ObjectStringConverter.java |  110 +
 .../gui/referencing/PositionableProjection.java    |  256 +++
 .../gui/referencing/RecentReferenceSystems.java    |  894 ++++++++
 .../java/org/apache/sis/gui/referencing/Utils.java |  104 +
 .../org/apache/sis/gui/referencing/WKTPane.java    |  189 +-
 .../apache/sis/gui/referencing/package-info.java   |   27 +
 .../apache/sis/internal/gui/BackgroundThreads.java |  150 ++
 .../org/apache/sis/internal/gui/ColorName.java     |   87 +
 .../org/apache/sis/internal/gui/DataFormats.java   |   47 +
 .../apache/sis/internal/gui/ExceptionReporter.java |  338 ++++
 .../org/apache/sis/internal/gui/FXUtilities.java   |   91 -
 .../org/apache/sis/internal/gui/FontGlyphs.java    |  143 --
 .../org/apache/sis/internal/gui/GUIUtilities.java  |  335 +++
 .../sis/internal/gui/IdentityValueFactory.java     |   75 +
 .../apache/sis/internal/gui/ImageConverter.java    |  193 ++
 .../sis/internal/gui/ImmutableObjectProperty.java  |  115 ++
 .../org/apache/sis/internal/gui/LogHandler.java    |  261 +++
 .../sis/internal/gui/NonNullObjectProperty.java    |   55 +
 .../org/apache/sis/internal/gui/PropertyView.java  |  361 ++++
 .../org/apache/sis/internal/gui/RecentChoices.java |  242 +++
 .../apache/sis/internal/gui/ResourceLoader.java    |  253 +++
 .../org/apache/sis/internal/gui/Resources.java     |  310 ++-
 .../apache/sis/internal/gui/Resources.properties   |   61 +-
 .../sis/internal/gui/Resources_fr.properties       |   61 +-
 .../java/org/apache/sis/internal/gui/Styles.java   |  217 ++
 .../org/apache/sis/internal/gui/ToolbarButton.java |  122 ++
 .../apache/sis/internal/gui/control/ColorCell.java |  457 +++++
 .../internal/gui/control/ColorColumnHandler.java   |  148 ++
 .../apache/sis/internal/gui/control/ColorRamp.java |  234 +++
 .../sis/internal/gui/control/FormatApplicator.java |  253 +++
 .../sis/internal/gui/control/FormatTableCell.java  |  261 +++
 .../sis/internal/gui/control/ValueColorMapper.java |  558 +++++
 .../sis/internal/gui/control/package-info.java     |   31 +
 .../org/apache/sis/internal/gui/package-info.java  |    5 +-
 .../org/apache/sis/internal/setup/FXFinder.java    |  433 ++++
 .../org/apache/sis/internal/setup/Inflater.java    |  175 ++
 .../sis/internal/setup/LoggingConfiguration.java   |   94 +
 .../java/org/apache/sis/internal/setup/Wizard.java |  757 +++++++
 .../org/apache/sis/internal/setup/WizardPage.java  |  114 ++
 .../apache/sis/internal/setup/package-info.java    |   29 +
 .../resources/org/apache/sis/gui/SIS_128px.png     |  Bin 0 -> 26619 bytes
 .../main/resources/org/apache/sis/gui/SIS_64px.png |  Bin 0 -> 8906 bytes
 .../org/apache/sis/gui/pseudo-classes.css          |    6 +
 .../org/apache/sis/gui/referencing/CRSChooser.fxml |   30 -
 .../org/apache/sis/gui/referencing/proj_conic.png  |  Bin 591 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_geo.png    |  Bin 834 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_square.png |  Bin 519 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_stereo.png |  Bin 959 -> 0 bytes
 .../org/apache/sis/gui/referencing/proj_utm.png    |  Bin 681 -> 0 bytes
 .../apache/sis/gui/coverage/CoverageCanvasApp.java |  129 ++
 .../sis/gui/coverage/CoverageStylingApp.java       |   85 +
 .../org/apache/sis/gui/coverage/GridViewApp.java   |  105 +
 .../apache/sis/gui/referencing/CRSChooserApp.java  |   92 +
 .../apache/sis/internal/gui/GUIUtilitiesTest.java  |   72 +
 .../internal/gui/control/ValueColorMapperApp.java  |   84 +
 .../sis/test/suite/ApplicationTestSuite.java       |   45 +
 application/sis-openoffice/pom.xml                 |    2 +-
 .../sis-openoffice/src/main/unopkg/license.txt     |    2 +-
 application/sis-webapp/pom.xml                     |   77 -
 .../java/org/apache/sis/index/tree/GeoRSSData.java |  177 --
 .../org/apache/sis/index/tree/QuadTreeReader.java  |  163 --
 .../org/apache/sis/services/LocationServlet.java   |  479 -----
 .../main/java/org/apache/sis/services/Servlet.java |   26 +
 .../java/org/apache/sis/services/package-info.java |   21 +
 .../src/main/resources/sis-location-config.xml     |   28 -
 .../src/main/webapp/META-INF/context.xml           |    9 +-
 .../sis-webapp/src/main/webapp/WEB-INF/web.xml     |   20 +-
 application/sis-webapp/src/main/webapp/demo.jsp    |  321 ---
 .../src/main/webapp/images/sis_logo_small.png      |  Bin 35560 -> 0 bytes
 core/pom.xml                                       |   12 +-
 core/sis-build-helper/pom.xml                      |    4 +-
 .../apache/sis/internal/book/CodeColorizer.java    |    6 +-
 .../util/resources/IndexedResourceCompiler.java    |    8 +-
 core/sis-cql/pom.xml                               |    2 +-
 .../src/main/java/org/apache/sis/cql/CQL.java      |  607 +++---
 .../org/apache/sis/cql/FilterToCQLVisitor.java     |  846 +++-----
 .../test/java/org/apache/sis/cql/CQLTestCase.java  |   22 +-
 .../test/java/org/apache/sis/cql/CQLTestSuite.java |    4 +-
 .../org/apache/sis/cql/ExpressionReadingTest.java  |  127 +-
 .../org/apache/sis/cql/ExpressionWritingTest.java  |   71 +-
 .../java/org/apache/sis/cql/FilterReadingTest.java |  768 ++-----
 .../java/org/apache/sis/cql/FilterWritingTest.java |  125 +-
 core/sis-feature/pom.xml                           |    8 +-
 .../org/apache/sis/coverage/BandedCoverage.java    |  149 ++
 .../java/org/apache/sis/coverage/Category.java     |   28 +
 .../java/org/apache/sis/coverage/CategoryList.java |  197 +-
 .../org/apache/sis/coverage/ConvertedCategory.java |   14 +-
 .../org/apache/sis/coverage/SampleDimension.java   |  119 +-
 .../org/apache/sis/coverage/SampleRangeFormat.java |    2 +-
 .../main/java/org/apache/sis/coverage/ToNaN.java   |    2 +-
 .../sis/coverage/grid/BufferedGridCoverage.java    |  317 +++
 .../sis/coverage/grid/ConvertedGridCoverage.java   |  296 +++
 .../coverage/grid/CoordinateOperationFinder.java   |  754 +++++++
 .../apache/sis/coverage/grid/DimensionReducer.java |  108 +
 .../sis/coverage/grid/DisjointExtentException.java |   18 +-
 .../apache/sis/coverage/grid/DomainLinearizer.java |  223 ++
 .../coverage/grid/FractionalGridCoordinates.java   |  501 +++++
 .../apache/sis/coverage/grid/GridClippingMode.java |   51 +
 .../sis/coverage/grid/GridCoordinatesView.java     |   23 +-
 .../org/apache/sis/coverage/grid/GridCoverage.java |  188 +-
 .../apache/sis/coverage/grid/GridCoverage2D.java   |  673 +++++++
 .../sis/coverage/grid/GridCoverageBuilder.java     |  566 ++++++
 .../sis/coverage/grid/GridCoverageProcessor.java   |  267 +++
 .../apache/sis/coverage/grid/GridDerivation.java   |  976 ++++++---
 .../apache/sis/coverage/grid/GridEvaluator.java    |  276 +++
 .../org/apache/sis/coverage/grid/GridExtent.java   |  597 ++++--
 .../apache/sis/coverage/grid/GridExtentCRS.java    |  191 ++
 .../org/apache/sis/coverage/grid/GridGeometry.java |  583 ++++--
 .../apache/sis/coverage/grid/GridOrientation.java  |  312 +++
 .../apache/sis/coverage/grid/GridRoundingMode.java |   27 +-
 .../grid/IllegalGridGeometryException.java         |   13 +-
 .../apache/sis/coverage/grid/ImageRenderer.java    |  464 ++++-
 .../sis/coverage/grid/ResampledGridCoverage.java   |  666 ++++++
 .../apache/sis/coverage/grid/ReshapedImage.java    |  303 +++
 .../apache/sis/coverage/grid/SliceGeometry.java    |  372 ++++
 .../org/apache/sis/coverage/grid/package-info.java |   24 +-
 .../org/apache/sis/feature/AbstractAttribute.java  |    3 +-
 .../org/apache/sis/feature/AbstractFeature.java    |   39 +-
 .../apache/sis/feature/AbstractIdentifiedType.java |    2 +-
 .../apache/sis/feature/DefaultAttributeType.java   |    2 +-
 .../java/org/apache/sis/feature/DenseFeature.java  |   25 +-
 .../org/apache/sis/feature/EnvelopeOperation.java  |  220 +-
 .../java/org/apache/sis/feature/FeatureFormat.java |   10 +-
 .../sis/feature/FeatureOperationException.java     |   75 +
 .../org/apache/sis/feature/FeatureOperations.java  |   21 +-
 .../main/java/org/apache/sis/feature/Features.java |   69 +-
 .../sis/feature/InvalidFeatureException.java       |    6 +-
 .../java/org/apache/sis/feature/LinkOperation.java |    9 +-
 .../apache/sis/feature/SingletonAssociation.java   |    2 +-
 .../org/apache/sis/feature/SingletonAttribute.java |    2 +-
 .../java/org/apache/sis/feature/SparseFeature.java |   27 +-
 .../apache/sis/feature/StringJoinOperation.java    |    2 +-
 .../sis/feature/builder/AttributeTypeBuilder.java  |   31 +-
 .../sis/feature/builder/FeatureTypeBuilder.java    |    6 +-
 .../apache/sis/feature/builder/package-info.java   |    3 +-
 .../java/org/apache/sis/feature/package-info.java  |    2 +-
 .../org/apache/sis/filter/ArithmeticFunction.java  |  228 ++-
 .../java/org/apache/sis/filter/BinaryFunction.java |  159 +-
 .../apache/sis/filter/BinaryGeometryFilter.java    |  251 +++
 .../org/apache/sis/filter/BinarySpatialFilter.java |  166 ++
 .../java/org/apache/sis/filter/Capabilities.java   |  154 ++
 .../org/apache/sis/filter/ComparisonFilter.java    |  827 ++++++++
 .../org/apache/sis/filter/ComparisonFunction.java  |  718 -------
 .../org/apache/sis/filter/ConvertFunction.java     |  197 ++
 .../apache/sis/filter/DefaultFilterFactory.java    | 1331 ++++++------
 .../org/apache/sis/filter/DefaultObjectId.java     |  111 -
 .../java/org/apache/sis/filter/DefaultSortBy.java  |  102 -
 .../org/apache/sis/filter/DefaultSortProperty.java |  166 ++
 .../java/org/apache/sis/filter/DistanceFilter.java |  183 ++
 .../org/apache/sis/filter/FilterByIdentifier.java  |  136 --
 .../java/org/apache/sis/filter/FilterNode.java     |   90 +
 .../org/apache/sis/filter/IdentifierFilter.java    |  100 +
 .../sis/filter/InvalidExpressionException.java     |   92 -
 .../java/org/apache/sis/filter/LeafExpression.java |  236 +--
 .../java/org/apache/sis/filter/LikeFilter.java     |  237 +++
 .../java/org/apache/sis/filter/LogicalFilter.java  |  319 +++
 .../org/apache/sis/filter/LogicalFunction.java     |  158 --
 .../java/org/apache/sis/filter/NamedFunction.java  |  210 --
 .../src/main/java/org/apache/sis/filter/Node.java  |  174 --
 .../java/org/apache/sis/filter/Optimization.java   |  490 +++++
 .../java/org/apache/sis/filter/PropertyValue.java  |  328 +++
 .../src/main/java/org/apache/sis/filter/SQLMM.java |   91 -
 .../main/java/org/apache/sis/filter/ST_Buffer.java |   99 -
 .../java/org/apache/sis/filter/ST_Centroid.java    |   96 -
 .../java/org/apache/sis/filter/ST_Transform.java   |  203 --
 .../java/org/apache/sis/filter/TemporalFilter.java |  799 ++++++++
 .../org/apache/sis/filter/TemporalFunction.java    |  722 -------
 .../java/org/apache/sis/filter/UnaryFunction.java  |  147 +-
 .../java/org/apache/sis/filter/package-info.java   |   38 +-
 .../java/org/apache/sis/image/AnnotatedImage.java  |  539 +++++
 .../java/org/apache/sis/image/BandSelectImage.java |  171 ++
 .../java/org/apache/sis/image/BandedIterator.java  |  444 ++++
 .../apache/sis/image/BandedSampleConverter.java    |  473 +++++
 .../java/org/apache/sis/image/ComputedImage.java   |  747 +++++++
 .../java/org/apache/sis/image/ComputedTiles.java   |  361 ++++
 .../main/java/org/apache/sis/image/DataType.java   |  257 +++
 .../java/org/apache/sis/image/DefaultIterator.java |  655 ------
 .../java/org/apache/sis/image/ErrorAction.java     |   83 +
 .../java/org/apache/sis/image/ErrorHandler.java    |  216 ++
 .../java/org/apache/sis/image/ImageAdapter.java    |  174 ++
 .../java/org/apache/sis/image/ImageCombiner.java   |  278 +++
 .../java/org/apache/sis/image/ImageProcessor.java  | 1177 +++++++++++
 .../java/org/apache/sis/image/Interpolation.java   |  177 ++
 .../org/apache/sis/image/LanczosInterpolation.java |  113 ++
 .../java/org/apache/sis/image/LinearIterator.java  |  124 --
 .../main/java/org/apache/sis/image/MaskImage.java  |  121 ++
 .../java/org/apache/sis/image/PixelIterator.java   |  942 ++++++++-
 .../java/org/apache/sis/image/PlanarImage.java     |  623 ++++++
 .../sis/image/PositionalConsistencyImage.java      |  144 ++
 .../java/org/apache/sis/image/PrefetchedImage.java |  361 ++++
 .../java/org/apache/sis/image/RecoloredImage.java  |  301 +++
 .../java/org/apache/sis/image/ResampledImage.java  |  940 +++++++++
 .../java/org/apache/sis/image/ResamplingGrid.java  |  589 ++++++
 .../org/apache/sis/image/SourceAlignedImage.java   |  149 ++
 .../org/apache/sis/image/StatisticsCalculator.java |  171 ++
 .../main/java/org/apache/sis/image/TileCache.java  |  170 ++
 .../java/org/apache/sis/image/TransferType.java    |   14 +-
 .../main/java/org/apache/sis/image/Transferer.java |  603 ++++++
 .../java/org/apache/sis/image/Visualization.java   |  351 ++++
 .../apache/sis/image/WritablePixelIterator.java    |  100 +-
 .../java/org/apache/sis/image/package-info.java    |    3 +-
 .../org/apache/sis/index/tree/NodeIterator.java    |  443 ++++
 .../java/org/apache/sis/index/tree/PointTree.java  |  533 +++++
 .../org/apache/sis/index/tree/PointTreeNode.java   |  268 +++
 .../org/apache/sis/index/tree/QuadTreeNode.java    |  131 ++
 .../org/apache/sis/index/tree/package-info.java    |   31 +
 .../internal/coverage/BufferedGridCoverage.java    |  164 --
 .../sis/internal/coverage/ColorModelFactory.java   |  531 -----
 .../sis/internal/coverage/ColorModelPatch.java     |  121 --
 .../sis/internal/coverage/CompoundTransform.java   |  216 ++
 .../internal/coverage/CompoundTransformOf1D.java   |  173 ++
 .../internal/coverage/ConvertedGridCoverage.java   |  497 -----
 .../coverage/MultiBandsIndexColorModel.java        |  236 ---
 .../sis/internal/coverage/RasterFactory.java       |  227 ---
 .../sis/internal/coverage/RepeatedTransform.java   |  161 ++
 .../sis/internal/coverage/ScaledColorSpace.java    |  171 --
 .../internal/coverage/j2d/ColorModelFactory.java   |  652 ++++++
 .../sis/internal/coverage/j2d/ColorModelPatch.java |  121 ++
 .../sis/internal/coverage/j2d/ColorModelType.java  |  100 +
 .../sis/internal/coverage/j2d/Colorizer.java       |  517 +++++
 .../sis/internal/coverage/j2d/ColorsForRange.java  |  171 ++
 .../internal/coverage/j2d/DeferredProperty.java    |  129 ++
 .../sis/internal/coverage/j2d/ImageLayout.java     |  335 +++
 .../sis/internal/coverage/j2d/ImageUtilities.java  |  610 ++++++
 .../coverage/j2d/MultiBandsIndexColorModel.java    |  281 +++
 .../sis/internal/coverage/j2d/RasterFactory.java   |  289 +++
 .../internal/coverage/j2d/SampleModelFactory.java  |  295 +++
 .../internal/coverage/j2d/ScaledColorModel.java    |  158 ++
 .../internal/coverage/j2d/ScaledColorSpace.java    |  230 +++
 .../internal/coverage/j2d/TileErrorHandler.java    |  123 ++
 .../sis/internal/coverage/j2d/TileOpExecutor.java  |  955 +++++++++
 .../sis/internal/coverage/j2d/TiledImage.java      |  265 +++
 .../internal/coverage/j2d/WritableTiledImage.java  |  220 ++
 .../sis/internal/coverage/j2d/WriteSupport.java    |  101 +
 .../sis/internal/coverage/j2d/package-info.java    |   34 +
 .../apache/sis/internal/coverage/package-info.java |    8 +-
 .../sis/internal/feature/AbstractGeometry.java     |   41 +
 .../sis/internal/feature/AttributeConvention.java  |   78 +-
 .../org/apache/sis/internal/feature/DateList.java  |   69 -
 .../java/org/apache/sis/internal/feature/ESRI.java |  230 ---
 .../sis/internal/feature/FeatureExpression.java    |   45 +-
 .../sis/internal/feature/FeatureUtilities.java     |   33 +-
 .../sis/internal/feature/FunctionRegister.java     |   68 -
 .../apache/sis/internal/feature/Geometries.java    |  690 +++----
 .../sis/internal/feature/GeometryFactories.java    |   73 +
 .../apache/sis/internal/feature/GeometryType.java  |  160 ++
 .../sis/internal/feature/GeometryWithCRS.java      |   98 +
 .../sis/internal/feature/GeometryWrapper.java      |  604 +++++-
 .../apache/sis/internal/feature/InstantList.java   |   83 +
 .../java/org/apache/sis/internal/feature/JTS.java  |  363 ----
 .../org/apache/sis/internal/feature/Java2D.java    |  259 ---
 .../apache/sis/internal/feature/MovingFeature.java |  317 ---
 .../sis/internal/feature/MovingFeatures.java       |  136 ++
 .../org/apache/sis/internal/feature/Resources.java |  256 ++-
 .../sis/internal/feature/Resources.properties      |   24 +-
 .../sis/internal/feature/Resources_fr.properties   |   27 +-
 .../internal/feature/SpatialOperationContext.java  |  454 +++++
 .../apache/sis/internal/feature/esri/Factory.java  |  193 ++
 .../apache/sis/internal/feature/esri/Wrapper.java  |  273 +++
 .../sis/internal/feature/esri/package-info.java    |   35 +
 .../sis/internal/feature/j2d/EmptyShape.java       |   64 +
 .../apache/sis/internal/feature/j2d/Factory.java   |  268 +++
 .../apache/sis/internal/feature/j2d/FlatShape.java |  129 ++
 .../sis/internal/feature/j2d/MultiPolylines.java   |  181 ++
 .../sis/internal/feature/j2d/PathBuilder.java      |  268 +++
 .../sis/internal/feature/j2d/PointWrapper.java     |  145 ++
 .../apache/sis/internal/feature/j2d/Polygon.java   |   39 +
 .../apache/sis/internal/feature/j2d/Polyline.java  |  307 +++
 .../sis/internal/feature/j2d/ShapeProperties.java  |   26 +-
 .../apache/sis/internal/feature/j2d/Wrapper.java   |  218 ++
 .../sis/internal/feature/j2d/package-info.java     |    5 +-
 .../apache/sis/internal/feature/jts/Factory.java   |  395 ++++
 .../sis/internal/feature/jts/FilteringContext.java |   89 +
 .../org/apache/sis/internal/feature/jts/JTS.java   |  140 +-
 .../apache/sis/internal/feature/jts/Wrapper.java   |  695 +++++++
 .../apache/sis/internal/feature/package-info.java  |    3 +-
 .../apache/sis/internal/filter/FunctionNames.java  |   92 +
 .../sis/internal/filter/FunctionRegister.java      |   70 +
 .../sis/internal/filter/GeometryConverter.java     |  176 ++
 .../java/org/apache/sis/internal/filter/Node.java  |  292 +++
 .../sis/internal/filter/SortByComparator.java      |  206 ++
 .../org/apache/sis/internal/filter/Visitor.java    |  348 ++++
 .../apache/sis/internal/filter/package-info.java   |   27 +
 .../internal/filter/sqlmm/FunctionWithSRID.java    |  222 ++
 .../internal/filter/sqlmm/GeometryConstructor.java |  141 ++
 .../sis/internal/filter/sqlmm/GeometryParser.java  |  132 ++
 .../sis/internal/filter/sqlmm/OneGeometry.java     |  154 ++
 .../apache/sis/internal/filter/sqlmm/Registry.java |  136 ++
 .../apache/sis/internal/filter/sqlmm/SQLMM.java    |  869 ++++++++
 .../sis/internal/filter/sqlmm/ST_FromBinary.java   |   86 +
 .../sis/internal/filter/sqlmm/ST_FromText.java     |   82 +
 .../apache/sis/internal/filter/sqlmm/ST_Point.java |  258 +++
 .../sis/internal/filter/sqlmm/ST_Transform.java    |  135 ++
 .../sis/internal/filter/sqlmm/SpatialFunction.java |  228 +++
 .../sis/internal/filter/sqlmm/TwoGeometries.java   |  201 ++
 .../sis/internal/filter/sqlmm/package-info.java    |   38 +
 .../internal/processing/image/CompoundFuture.java  |  202 ++
 .../internal/processing/image/IsolineTracer.java   | 1260 ++++++++++++
 .../sis/internal/processing/image/Isolines.java    |  506 +++++
 .../internal/processing/image/TiledProcess.java    |  394 ++++
 .../internal/processing/image/package-info.java    |   32 +
 .../org/apache/sis/coverage/CategoryListTest.java  |  102 +-
 .../apache/sis/coverage/SampleDimensionTest.java   |   65 +-
 .../coverage/grid/BufferedGridCoverageTest.java    |  128 ++
 .../coverage/grid/ConvertedGridCoverageTest.java   |   82 +
 .../grid/FractionalGridCoordinatesTest.java        |  101 +
 .../sis/coverage/grid/GridCoverage2DTest.java      |  306 +++
 .../sis/coverage/grid/GridCoverageBuilderTest.java |  226 +++
 .../sis/coverage/grid/GridDerivationTest.java      |  386 +++-
 .../apache/sis/coverage/grid/GridExtentTest.java   |  186 +-
 .../apache/sis/coverage/grid/GridGeometryTest.java |  267 ++-
 .../sis/coverage/grid/GridOrientationTest.java     |   75 +
 .../sis/coverage/grid/PixelTranslationTest.java    |   14 +-
 .../coverage/grid/ResampledGridCoverageTest.java   |  697 +++++++
 .../sis/coverage/grid/ReshapedImageTest.java       |  198 ++
 .../apache/sis/feature/AbstractFeatureTest.java    |   10 +-
 .../apache/sis/feature/EnvelopeOperationTest.java  |  294 ++-
 .../apache/sis/feature/FeatureOperationsTest.java  |  177 ++
 .../feature/builder/AttributeTypeBuilderTest.java  |   37 +-
 .../apache/sis/filter/ArithmeticFunctionTest.java  |   32 +-
 .../sis/filter/BinarySpatialFilterTestCase.java    |  350 ++++
 .../filter/BinarySpatialFilterUsingJTS_Test.java   |   38 +
 .../org/apache/sis/filter/CapabilitiesTest.java    |   71 +
 .../apache/sis/filter/ComparisonFilterTest.java    |  181 ++
 .../apache/sis/filter/ComparisonFunctionTest.java  |  151 --
 .../org/apache/sis/filter/DefaultObjectIdTest.java |  100 -
 .../apache/sis/filter/FilterByIdentifierTest.java  |   92 -
 .../apache/sis/filter/IdentifierFilterTest.java    |  111 +
 .../org/apache/sis/filter/LeafExpressionTest.java  |  116 +-
 .../java/org/apache/sis/filter/LikeFilterTest.java |   83 +
 .../org/apache/sis/filter/LogicalFilterTest.java   |  232 +++
 .../org/apache/sis/filter/LogicalFunctionTest.java |  146 --
 .../java/org/apache/sis/filter/PeriodLiteral.java  |   24 +-
 .../test/java/org/apache/sis/filter/SQLMMTest.java |  200 --
 .../org/apache/sis/filter/TemporalFilterTest.java  |  350 ++++
 .../apache/sis/filter/TemporalFunctionTest.java    |  341 ----
 .../org/apache/sis/filter/UnaryFunctionTest.java   |   76 -
 .../org/apache/sis/image/BandSelectImageTest.java  |  186 ++
 .../org/apache/sis/image/BandedIteratorTest.java   |   79 +
 .../sis/image/BandedSampleConverterTest.java       |  154 ++
 .../org/apache/sis/image/ComputedImageTest.java    |  212 ++
 .../java/org/apache/sis/image/DataTypeTest.java    |   99 +
 .../org/apache/sis/image/DefaultIteratorTest.java  | 1247 ------------
 .../org/apache/sis/image/ImageCombinerTest.java    |  217 ++
 .../org/apache/sis/image/ImageProcessorTest.java   |   60 +
 .../java/org/apache/sis/image/ImageTestCase.java   |    2 +-
 .../org/apache/sis/image/InterpolationTest.java    |  178 ++
 .../org/apache/sis/image/LinearIteratorTest.java   |   42 +-
 .../org/apache/sis/image/PixelIteratorTest.java    | 1392 +++++++++++++
 .../java/org/apache/sis/image/PlanarImageTest.java |   99 +
 .../org/apache/sis/image/ResampledImageTest.java   |  359 ++++
 .../org/apache/sis/image/ResamplingGridTest.java   |  221 ++
 .../apache/sis/image/StatisticsCalculatorTest.java |  151 ++
 .../java/org/apache/sis/image/TiledImageMock.java  |  321 ++-
 .../apache/sis/index/tree/PointTreeNodeTest.java   |  113 ++
 .../org/apache/sis/index/tree/PointTreeTest.java   |  184 ++
 .../coverage/BufferedGridCoverageTest.java         |  117 --
 .../internal/coverage/ScaledColorSpaceTest.java    |  104 -
 .../sis/internal/coverage/j2d/ColorizerTest.java   |  149 ++
 .../sis/internal/coverage/j2d/ImageLayoutTest.java |   44 +
 .../internal/coverage/j2d/ImageUtilitiesTest.java  |  233 +++
 .../coverage/j2d/SampleModelFactoryTest.java       |  148 ++
 .../coverage/j2d/ScaledColorSpaceTest.java         |  104 +
 .../org/apache/sis/internal/feature/ESRITest.java  |   78 -
 .../sis/internal/feature/GeometriesTestCase.java   |  154 +-
 .../sis/internal/feature/GeometryTypeTest.java     |   54 +
 .../org/apache/sis/internal/feature/JTSTest.java   |   88 -
 .../apache/sis/internal/feature/Java2DTest.java    |   60 -
 .../sis/internal/feature/esri/FactoryTest.java     |   79 +
 .../sis/internal/feature/j2d/FactoryTest.java      |   61 +
 .../sis/internal/feature/j2d/FlatShapeTest.java    |  129 ++
 .../sis/internal/feature/jts/FactoryTest.java      |   89 +
 .../apache/sis/internal/feature/jts/JTSTest.java   |    9 +-
 .../sis/internal/filter/FunctionNamesTest.java     |  149 ++
 .../internal/filter/sqlmm/RegistryTestCase.java    |  497 +++++
 .../filter/sqlmm/RegistryUsingJTS_Test.java        |   38 +
 .../sis/internal/filter/sqlmm/SQLMMTest.java       |   46 +
 .../internal/processing/image/IsolinesTest.java    |  375 ++++
 .../java/org/apache/sis/test/FeatureAssert.java    |  204 ++
 .../apache/sis/test/feature/FeatureComparator.java |  458 +++++
 .../org/apache/sis/test/feature/package-info.java  |   30 +
 .../test/java/org/apache/sis/test/package-info.txt |    3 +
 .../apache/sis/test/suite/FeatureTestSuite.java    |   68 +-
 core/sis-metadata/pom.xml                          |   10 +-
 .../apache/sis/internal/jaxb/cat/CodeListUID.java  |   94 +-
 .../apache/sis/internal/jaxb/cat/package-info.java |    2 +-
 .../sis/internal/jaxb/gco/GO_CharacterString.java  |    2 +-
 .../internal/jaxb/gco/ObjectIdentification.html    |    2 +-
 .../sis/internal/jaxb/gco/ObjectReference.java     |    2 +-
 .../apache/sis/internal/jaxb/gco/PropertyType.java |    6 +-
 .../sis/internal/jaxb/gml/CodeListAdapter.java     |   35 +-
 .../apache/sis/internal/jaxb/gml/CodeListUID.java  |   59 -
 .../org/apache/sis/internal/jaxb/gml/Measure.java  |   12 +-
 .../apache/sis/internal/jaxb/gml/package-info.java |    2 +-
 .../jaxb/lan/LocalisedCharacterString.java         |   10 +-
 .../apache/sis/internal/metadata/AxisNames.java    |   23 +-
 .../apache/sis/internal/metadata/Identifiers.java  |   14 +-
 .../apache/sis/internal/metadata/NameMeaning.java  |    4 +-
 .../apache/sis/internal/metadata/Resources.java    |    2 -
 .../apache/sis/internal/metadata/sql/Dialect.java  |   42 +-
 .../sis/internal/metadata/sql/Initializer.java     |  283 +--
 .../sis/internal/metadata/sql/LocalDataSource.java |  465 +++++
 .../sis/internal/metadata/sql/SQLBuilder.java      |  157 +-
 .../sis/internal/metadata/sql/ScriptRunner.java    |   14 +-
 .../apache/sis/internal/metadata/sql/Syntax.java   |   84 +
 .../sis/internal/metadata/sql/package-info.java    |    3 +-
 .../java/org/apache/sis/internal/xml/Schemas.java  |  100 -
 .../org/apache/sis/internal/xml/package-info.java  |    2 +-
 .../org/apache/sis/metadata/AbstractMetadata.java  |    2 +-
 .../org/apache/sis/metadata/MetadataCopier.java    |    2 +-
 .../org/apache/sis/metadata/MetadataFormat.java    |    2 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |    2 +-
 .../org/apache/sis/metadata/MetadataVisitor.java   |   35 +-
 .../apache/sis/metadata/ModifiableMetadata.java    |   75 +-
 .../org/apache/sis/metadata/PropertyAccessor.java  |    2 +-
 .../apache/sis/metadata/PropertyComparator.java    |    4 +-
 .../java/org/apache/sis/metadata/SpecialCases.java |   12 +-
 .../java/org/apache/sis/metadata/StateChanger.java |   27 +-
 .../org/apache/sis/metadata/TreeNodeChildren.java  |    5 +-
 .../apache/sis/metadata/iso/DefaultMetadata.java   |   58 +-
 .../org/apache/sis/metadata/iso/ISOMetadata.java   |    8 +-
 .../sis/metadata/iso/acquisition/package-info.java |    2 +-
 .../sis/metadata/iso/citation/Citations.java       |   43 +-
 .../iso/citation/DefaultResponsibleParty.java      |  109 +-
 .../sis/metadata/iso/citation/package-info.java    |    2 +-
 .../iso/constraint/DefaultReleasability.java       |   30 +-
 .../sis/metadata/iso/constraint/package-info.java  |    2 +-
 .../iso/content/DefaultFeatureTypeInfo.java        |    2 +-
 .../iso/content/DefaultSampleDimension.java        |   21 +-
 .../sis/metadata/iso/content/package-info.java     |    2 +-
 .../metadata/iso/distribution/package-info.java    |    2 +-
 .../iso/extent/DefaultGeographicBoundingBox.java   |   24 +-
 .../apache/sis/metadata/iso/extent/Extents.java    |  221 +-
 .../sis/metadata/iso/extent/package-info.java      |    2 +-
 .../metadata/iso/identification/package-info.java  |    2 +-
 .../sis/metadata/iso/lineage/package-info.java     |    2 +-
 .../sis/metadata/iso/maintenance/package-info.java |    2 +-
 .../org/apache/sis/metadata/iso/package-info.java  |    2 +-
 .../sis/metadata/iso/quality/package-info.java     |    2 +-
 .../sis/metadata/iso/spatial/package-info.java     |    2 +-
 .../apache/sis/metadata/sql/MetadataSource.java    |   18 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |   44 +-
 .../apache/sis/util/iso/DefaultNameFactory.java    |   15 +-
 .../org/apache/sis/util/iso/DefaultRecord.java     |   48 +-
 .../apache/sis/util/iso/DefaultRecordSchema.java   |   24 +-
 .../org/apache/sis/util/iso/DefaultRecordType.java |  131 +-
 .../org/apache/sis/util/iso/DefaultScopedName.java |    9 +-
 .../main/java/org/apache/sis/util/iso/Names.java   |    2 +
 .../org/apache/sis/util/iso/RecordDefinition.java  |   56 +-
 .../java/org/apache/sis/util/iso/package-info.java |    2 +-
 .../java/org/apache/sis/xml/IdentifiedObject.java  |    2 +-
 .../src/main/java/org/apache/sis/xml/Pooled.java   |    8 +-
 .../java/org/apache/sis/xml/TransformVersion.java  |    1 +
 .../src/main/java/org/apache/sis/xml/XML.java      |   57 +-
 .../org/apache/sis/metadata/sql/Citations.sql      |   20 +-
 .../internal/jaxb/cat/CodeListMarshallingTest.java |   19 +-
 .../apache/sis/internal/jaxb/gml/MeasureTest.java  |   24 +-
 .../sis/internal/jaxb/lan/LanguageCodeTest.java    |    8 +-
 .../sis/metadata/ModifiableMetadataTest.java       |   42 +-
 .../apache/sis/metadata/TreeNodeChildrenTest.java  |    4 +-
 .../org/apache/sis/metadata/TreeTableViewTest.java |    2 +-
 .../iso/citation/DefaultResponsibilityTest.java    |    4 +-
 .../metadata/iso/citation/HardCodedCitations.java  |    6 +-
 .../constraint/DefaultLegalConstraintsTest.java    |    2 +-
 .../extent/DefaultGeographicBoundingBoxTest.java   |   64 +-
 .../sis/metadata/iso/extent/ExtentsTest.java       |    6 +-
 .../iso/identification/DefaultResolutionTest.java  |   12 +-
 .../sis/metadata/sql/MetadataWriterTest.java       |    4 +-
 .../java/org/apache/sis/test/sql/TestDatabase.java |   23 +-
 .../java/org/apache/sis/test/sql/package-info.java |    3 +-
 .../sis/test/xml/AnnotationConsistencyCheck.java   |    6 +-
 .../org/apache/sis/test/xml/PackageVerifier.java   |   12 +-
 .../org/apache/sis/test/xml/SchemaCompliance.java  |    5 +-
 .../java/org/apache/sis/test/xml/TestCase.java     |    8 +-
 .../java/org/apache/sis/test/xml/package-info.java |    2 +-
 .../sis/util/iso/DefaultRecordSchemaTest.java      |   18 +-
 .../apache/sis/util/iso/DefaultRecordTypeTest.java |   46 +-
 .../java/org/apache/sis/xml/NamespacesTest.java    |    3 +-
 .../org/apache/sis/metadata/xml/2007/Citation.xml  |   12 +-
 .../org/apache/sis/metadata/xml/2007/Extent.xml    |    2 +-
 .../org/apache/sis/metadata/xml/2007/Locales.xml   |   26 +-
 .../org/apache/sis/metadata/xml/2007/Metadata.xml  |   88 +-
 .../apache/sis/metadata/xml/2007/Multiplicity.xml  |    2 +-
 .../sis/metadata/xml/2007/PositionalAccuracy.xml   |    4 +-
 .../apache/sis/metadata/xml/2007/ProcessStep.xml   |    2 +-
 .../metadata/xml/2007/ServiceIdentification.xml    |    4 +-
 .../org/apache/sis/metadata/xml/2016/Citation.xml  |    4 +-
 .../org/apache/sis/metadata/xml/2016/Extent.xml    |    2 +-
 .../org/apache/sis/metadata/xml/2016/Locales.xml   |    2 +-
 .../org/apache/sis/metadata/xml/2016/Metadata.xml  |   28 +-
 .../apache/sis/metadata/xml/2016/Multiplicity.xml  |    3 +-
 .../sis/metadata/xml/2016/PositionalAccuracy.xml   |    6 +-
 .../apache/sis/metadata/xml/2016/ProcessStep.xml   |    2 +-
 .../metadata/xml/2016/ServiceIdentification.xml    |    2 +-
 core/sis-portrayal/pom.xml                         |    9 +-
 .../sis/internal/map/ExceptionPresentation.java    |   66 +
 .../apache/sis/internal/map/ListChangeEvent.java   |   98 +
 .../org/apache/sis/internal/map/MapContext.java    |   79 -
 .../java/org/apache/sis/internal/map/MapGroup.java |   66 -
 .../java/org/apache/sis/internal/map/MapItem.java  |   88 -
 .../java/org/apache/sis/internal/map/MapLayer.java |  104 -
 .../org/apache/sis/internal/map/NotifiedList.java  |   72 +
 .../org/apache/sis/internal/map/Presentation.java  |  146 ++
 .../sis/internal/map/PropertyNameCollector.java    |   60 +
 .../sis/internal/map/ResourceSymbolizer.java       |   37 +
 .../org/apache/sis/internal/map/SEPortrayer.java   |  755 +++++++
 .../apache/sis/internal/map/SEPresentation.java    |   85 +
 .../apache/sis/internal/map/SymbologyVisitor.java  |  394 ++++
 .../org/apache/sis/internal/map/package-info.java  |    9 +-
 .../main/java/org/apache/sis/portrayal/Canvas.java | 1234 ++++++++++++
 .../org/apache/sis/portrayal/CanvasContext.java    |  222 ++
 .../org/apache/sis/portrayal/CanvasExtent.java     |  235 +++
 .../java/org/apache/sis/portrayal/MapItem.java     |  294 +++
 .../java/org/apache/sis/portrayal/MapLayer.java    |  264 +++
 .../java/org/apache/sis/portrayal/MapLayers.java   |  194 ++
 .../java/org/apache/sis/portrayal/Observable.java  |  162 ++
 .../org/apache/sis/portrayal/PlanarCanvas.java     |  189 ++
 .../org/apache/sis/portrayal/RenderException.java  |   61 +
 .../org/apache/sis/portrayal/package-info.java     |   32 +
 .../sis/internal/map/MockFeatureTypeStyle.java     |  104 +
 .../sis/internal/map/MockLineSymbolizer.java       |  113 ++
 .../java/org/apache/sis/internal/map/MockRule.java |  131 ++
 .../org/apache/sis/internal/map/MockStyle.java     |   86 +
 .../apache/sis/internal/map/SEPortrayerTest.java   |  772 +++++++
 .../org/apache/sis/portrayal/MapLayersTest.java    |   99 +
 .../apache/sis/test/suite/PortrayalTestSuite.java  |   46 +
 core/sis-referencing-by-identifiers/pom.xml        |    4 +-
 .../apache/sis/internal/gazetteer/Resources.java   |    2 -
 .../gazetteer/GeohashReferenceSystem.java          |    2 +-
 .../sis/referencing/gazetteer/LocationFormat.java  |    2 +-
 .../gazetteer/MilitaryGridReferenceSystem.java     |   16 +-
 .../sis/referencing/gazetteer/LocationViewer.java  |    2 +-
 .../gazetteer/MilitaryGridReferenceSystemTest.java |    2 +-
 core/sis-referencing/pom.xml                       |   27 +-
 .../sis/geometry/AbstractDirectPosition.java       |   34 +-
 .../org/apache/sis/geometry/AbstractEnvelope.java  |  157 +-
 .../org/apache/sis/geometry/ArrayEnvelope.java     |    2 +-
 .../org/apache/sis/geometry/CoordinateFormat.java  | 1314 +++++++++---
 .../java/org/apache/sis/geometry/Envelope2D.java   |  116 +-
 .../java/org/apache/sis/geometry/Envelopes.java    |  490 +++--
 .../apache/sis/geometry/GeneralDirectPosition.java |    2 +
 .../org/apache/sis/geometry/GeneralEnvelope.java   |  238 ++-
 .../java/org/apache/sis/geometry/Shapes2D.java     |  357 ++--
 .../apache/sis/geometry/WraparoundInEnvelope.java  |  235 +++
 .../org/apache/sis/geometry/WraparoundMethod.java  |  173 ++
 .../java/org/apache/sis/geometry/package-info.java |    5 +-
 .../apache/sis/internal/jaxb/referencing/Code.java |    2 +-
 .../internal/jaxb/referencing/SC_SingleCRS.java    |    2 +-
 .../sis/internal/referencing/AnnotatedMatrix.java  |  140 ++
 .../sis/internal/referencing/AxisDirections.java   |   38 +-
 .../internal/referencing/CoordinateOperations.java |   22 +-
 .../internal/referencing/DefinitionVerifier.java   |   95 +-
 .../internal/referencing/DirectPositionView.java   |   25 -
 .../referencing/EllipsoidalHeightCombiner.java     |    6 +-
 .../sis/internal/referencing/ExtentSelector.java   |  419 +++-
 .../apache/sis/internal/referencing/Formulas.java  |   29 +-
 .../referencing/GeodeticObjectBuilder.java         |   11 +-
 .../apache/sis/internal/referencing/LazySet.java   |    5 +-
 .../referencing/MathTransformsOrFactory.java       |  141 ++
 .../internal/referencing/PositionTransformer.java  |    2 +-
 .../referencing/PositionalAccuracyConstant.java    |   40 +-
 .../apache/sis/internal/referencing/RTreeNode.java |  357 ++++
 .../internal/referencing/ReferencingUtilities.java |   80 +-
 .../apache/sis/internal/referencing/Resources.java |   66 +-
 .../sis/internal/referencing/Resources.properties  |   14 +-
 .../internal/referencing/Resources_fr.properties   |   14 +-
 .../internal/referencing/ServicesForMetadata.java  |   49 +-
 .../internal/referencing/SignReversalComment.java  |    2 +-
 .../sis/internal/referencing/TemporalAccessor.java |   51 +-
 .../internal/referencing/VerticalDatumTypes.java   |    2 +-
 .../sis/internal/referencing/WKTKeywords.java      |   84 +-
 .../sis/internal/referencing/WKTUtilities.java     |   70 +-
 .../internal/referencing/WraparoundAdjustment.java |   36 +-
 .../internal/referencing/WraparoundApplicator.java |  156 ++
 .../sis/internal/referencing/j2d/Bezier.java       |    2 +-
 .../referencing/j2d/ImmutableAffineTransform.java  |    2 +-
 .../referencing/j2d/IntervalRectangle.java         |   65 +-
 .../apache/sis/internal/referencing/j2d/Tile.java  |  683 +++++++
 .../internal/referencing/j2d/TileOrganizer.java    |  566 ++++++
 .../sis/internal/referencing/j2d/package-info.java |    2 +-
 .../sis/internal/referencing/package-info.java     |    2 +-
 .../referencing/provider/AbstractProvider.java     |   31 +-
 .../sis/internal/referencing/provider/Affine.java  |   11 +-
 .../referencing/provider/AlbersEqualArea.java      |    2 +-
 .../provider/AzimuthalEquidistantSpherical.java    |   83 +
 .../referencing/provider/CassiniSoldner.java       |  176 ++
 .../provider/DatumShiftGridCompressed.java         |   58 +-
 .../referencing/provider/DatumShiftGridFile.java   |  415 +++-
 .../referencing/provider/DatumShiftGridGroup.java  |  306 +++
 .../referencing/provider/DatumShiftGridLoader.java |   39 +-
 .../provider/FranceGeocentricInterpolation.java    |   20 +-
 .../referencing/provider/GeocentricAffine.java     |   19 +-
 .../GeocentricAffineBetweenGeographic.java         |    8 +-
 .../provider/GeocentricToGeographic.java           |   10 +-
 .../referencing/provider/GeodeticOperation.java    |   14 +-
 .../referencing/provider/Geographic2Dto3D.java     |    8 +
 .../referencing/provider/Geographic3Dto2D.java     |   22 +
 .../provider/GeographicToGeocentric.java           |    8 +-
 .../provider/HyperbolicCassiniSoldner.java         |   66 +
 .../referencing/provider/Interpolation1D.java      |    2 +-
 .../provider/LambertConformalBelgium.java          |    2 +-
 .../referencing/provider/LambertConformalWest.java |    2 +-
 .../provider/LambertCylindricalEqualArea.java      |   24 +-
 .../LambertCylindricalEqualAreaSpherical.java      |    4 +-
 .../referencing/provider/MapProjection.java        |   10 +-
 .../referencing/provider/MapProjection3D.java      |    9 +
 .../provider/ModifiedAzimuthalEquidistant.java     |  167 ++
 .../internal/referencing/provider/Mollweide.java   |    2 +-
 .../internal/referencing/provider/Molodensky.java  |    5 +-
 .../sis/internal/referencing/provider/NADCON.java  |    7 +-
 .../sis/internal/referencing/provider/NTv1.java    |   90 +
 .../sis/internal/referencing/provider/NTv2.java    |  559 +++--
 .../referencing/provider/Orthographic.java         |    2 +-
 .../referencing/provider/PolarStereographicA.java  |    2 +-
 .../internal/referencing/provider/Providers.java   |    2 +
 .../referencing/provider/SatelliteTracking.java    |    2 +-
 .../provider/TransverseMercatorSouth.java          |    2 +-
 .../internal/referencing/provider/Wraparound.java  |  120 ++
 .../provider/ZonedTransverseMercator.java          |    2 +-
 .../java/org/apache/sis/io/wkt/AbstractParser.java |  197 +-
 .../main/java/org/apache/sis/io/wkt/Colors.java    |    1 +
 .../main/java/org/apache/sis/io/wkt/Element.java   |  367 ++--
 .../main/java/org/apache/sis/io/wkt/Formatter.java |   59 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |   51 +-
 .../org/apache/sis/io/wkt/MathTransformParser.java |    4 +-
 .../org/apache/sis/io/wkt/SingletonElement.java    |   83 +
 .../java/org/apache/sis/io/wkt/StoredTree.java     |  590 ++++++
 .../main/java/org/apache/sis/io/wkt/Symbols.java   |   24 +-
 .../java/org/apache/sis/io/wkt/Transliterator.java |   20 +-
 .../java/org/apache/sis/io/wkt/WKTDictionary.java  | 1131 +++++++++++
 .../main/java/org/apache/sis/io/wkt/WKTFormat.java |  333 ++-
 .../main/java/org/apache/sis/io/wkt/Warnings.java  |    3 +-
 .../java/org/apache/sis/io/wkt/doc-files/ESRI.txt  |   92 +
 .../java/org/apache/sis/io/wkt/package-info.java   |   11 +-
 .../sis/parameter/DefaultParameterValueGroup.java  |   63 +-
 .../sis/parameter/MapProjectionDescriptor.java     |    7 +-
 .../sis/parameter/MapProjectionParameters.java     |    8 +-
 .../org/apache/sis/parameter/ParameterFormat.java  |    2 +-
 .../apache/sis/parameter/ParameterValueList.java   |    7 +-
 .../java/org/apache/sis/parameter/Parameters.java  |   19 +-
 .../sis/parameter/UninitializedParameter.java      |    4 +-
 .../org/apache/sis/parameter/package-info.java     |    2 +-
 .../sis/referencing/AbstractIdentifiedObject.java  |    2 +-
 .../main/java/org/apache/sis/referencing/CRS.java  |   47 +-
 .../java/org/apache/sis/referencing/CommonCRS.java |  196 +-
 .../referencing/EllipsoidalHeightSeparator.java    |   66 +-
 .../sis/referencing/GeodesicsOnEllipsoid.java      |   59 +-
 .../apache/sis/referencing/GeodeticCalculator.java |  152 +-
 .../apache/sis/referencing/IdentifiedObjects.java  |  230 ++-
 .../org/apache/sis/referencing/Properties.java     |   37 +-
 .../sis/referencing/StandardDefinitions.java       |    8 +-
 .../apache/sis/referencing/crs/AbstractCRS.java    |   21 +-
 .../sis/referencing/crs/AbstractDerivedCRS.java    |   11 +-
 .../sis/referencing/crs/DefaultCompoundCRS.java    |    2 +-
 .../sis/referencing/crs/DefaultGeographicCRS.java  |    3 +-
 .../apache/sis/referencing/crs/package-info.java   |    2 +-
 .../org/apache/sis/referencing/cs/AbstractCS.java  |    4 +-
 .../apache/sis/referencing/cs/AxesConvention.java  |    2 +-
 .../org/apache/sis/referencing/cs/AxisFilter.java  |    2 +-
 .../sis/referencing/cs/CoordinateSystems.java      |   54 +-
 .../apache/sis/referencing/cs/package-info.java    |    2 +-
 .../sis/referencing/datum/BursaWolfParameters.java |    7 +-
 .../sis/referencing/datum/DatumShiftGrid.java      |  227 ++-
 .../sis/referencing/datum/DefaultEllipsoid.java    |    9 +-
 .../referencing/datum/DefaultGeodeticDatum.java    |   63 +-
 .../referencing/datum/DefaultPrimeMeridian.java    |    2 +-
 .../sis/referencing/datum/TimeDependentBWP.java    |    2 +-
 .../factory/CommonAuthorityFactory.java            |   40 +-
 .../factory/ConcurrentAuthorityFactory.java        |   80 +-
 .../factory/GeodeticAuthorityFactory.java          |    6 +-
 .../referencing/factory/GeodeticObjectFactory.java |    9 +-
 .../factory/IdentifiedObjectFinder.java            |   28 +-
 .../factory/MultiAuthoritiesFactory.java           |    5 +-
 .../sis/referencing/factory/ReferenceKeeper.java   |  151 ++
 .../sis/referencing/factory/package-info.java      |    2 +-
 .../referencing/factory/sql/EPSGDataAccess.java    |   85 +-
 .../factory/sql/InstallationScriptProvider.java    |    2 +-
 .../sis/referencing/factory/sql/SQLTranslator.java |    2 +-
 .../sis/referencing/factory/sql/TableInfo.java     |    4 +-
 .../sis/referencing/factory/sql/package-info.java  |    4 +-
 .../operation/AbstractCoordinateOperation.java     |    6 +-
 .../operation/AbstractSingleOperation.java         |  124 +-
 .../apache/sis/referencing/operation/CRSPair.java  |   15 +-
 .../operation/CoordinateOperationContext.java      |   34 +-
 .../operation/CoordinateOperationFinder.java       |  218 +-
 .../operation/CoordinateOperationRegistry.java     |  230 ++-
 .../operation/DefaultConicProjection.java          |    2 +-
 .../referencing/operation/DefaultConversion.java   |    6 +-
 .../DefaultCoordinateOperationFactory.java         |   11 +-
 .../operation/DefaultCylindricalProjection.java    |    2 +-
 .../operation/DefaultOperationMethod.java          |   39 +-
 .../operation/DefaultPassThroughOperation.java     |    2 +-
 .../operation/DefaultPlanarProjection.java         |    2 +-
 .../operation/InverseOperationMethod.java          |   60 +-
 .../operation/LooselyDefinedMethod.java            |   90 +
 .../referencing/operation/SubOperationInfo.java    |  349 +++-
 .../operation/builder/LinearTransformBuilder.java  |  365 +++-
 .../referencing/operation/builder/Linearizer.java  |  158 ++
 .../operation/builder/LocalizationGridBuilder.java |  326 ++-
 .../operation/builder/ProjectedTransformTry.java   |  179 +-
 .../operation/builder/ResidualGrid.java            |  135 +-
 .../operation/builder/package-info.java            |    2 +-
 .../sis/referencing/operation/builder/readme.html  |    6 +-
 .../operation/matrix/AffineTransforms2D.java       |   64 +-
 .../sis/referencing/operation/matrix/Matrices.java |  159 +-
 .../sis/referencing/operation/matrix/Matrix1.java  |   11 +-
 .../sis/referencing/operation/matrix/Matrix2.java  |   10 -
 .../referencing/operation/matrix/MatrixSIS.java    |   36 +-
 .../sis/referencing/operation/matrix/Solver.java   |    4 +-
 .../referencing/operation/matrix/package-info.java |    2 +-
 .../sis/referencing/operation/package-info.java    |    2 +-
 .../operation/projection/AlbersEqualArea.java      |   43 +-
 .../operation/projection/AzimuthalEquidistant.java |  239 +++
 .../operation/projection/CassiniSoldner.java       |  412 ++++
 .../operation/projection/CylindricalEqualArea.java |    7 +-
 .../operation/projection/Initializer.java          |   42 +
 .../referencing/operation/projection/Inverter.java |    4 +-
 .../projection/LambertConicConformal.java          |   38 +-
 .../referencing/operation/projection/Mercator.java |   15 +-
 .../projection/ModifiedAzimuthalEquidistant.java   |  259 +++
 .../operation/projection/Mollweide.java            |    4 +-
 .../operation/projection/NormalizedProjection.java |  158 +-
 .../operation/projection/ObliqueMercator.java      |   15 +-
 .../operation/projection/ObliqueStereographic.java |   58 +-
 .../operation/projection/Orthographic.java         |   43 +-
 .../operation/projection/PolarStereographic.java   |    7 +-
 .../operation/projection/Polyconic.java            |    5 +-
 .../operation/projection/SatelliteTracking.java    |   38 +-
 .../operation/projection/Sinusoidal.java           |    4 +-
 .../operation/projection/TransverseMercator.java   |  169 +-
 .../operation/projection/ZonedGridSystem.java      |    2 +-
 .../operation/projection/package-info.java         |    2 +-
 .../transform/AbstractLinearTransform.java         |   44 +-
 .../operation/transform/AbstractMathTransform.java |    2 +
 .../operation/transform/CartesianToPolar.java      |    4 +-
 .../operation/transform/CartesianToSpherical.java  |    4 +-
 .../operation/transform/ConcatenatedTransform.java |  112 +-
 .../transform/ConcatenatedTransformDirect.java     |    4 +-
 .../transform/ConcatenatedTransformDirect2D.java   |    4 +-
 .../operation/transform/ContextualParameter.java   |    2 +-
 .../transform/CoordinateSystemTransform.java       |   49 +-
 .../operation/transform/CopyTransform.java         |  112 +-
 .../operation/transform/DatumShiftTransform.java   |    2 +
 .../transform/DefaultMathTransformFactory.java     |  227 ++-
 .../operation/transform/IdentityTransform.java     |   10 +-
 .../operation/transform/InterpolatedTransform.java |   47 +-
 .../operation/transform/LinearTransform.java       |    5 +-
 .../operation/transform/MathTransforms.java        |   90 +-
 .../transform/MathTransformsOrFactory.java         |  129 --
 .../operation/transform/MolodenskyFormula.java     |    2 +-
 .../operation/transform/PassThroughTransform.java  |    1 +
 .../operation/transform/PolarToCartesian.java      |    4 +-
 .../operation/transform/ProjectiveTransform.java   |   59 +-
 .../transform/SpecializableTransform.java          |  330 ++-
 .../operation/transform/SphericalToCartesian.java  |    4 +-
 .../operation/transform/TransferFunction.java      |    4 +-
 .../operation/transform/TransformAdapter2D.java    |  101 +
 .../operation/transform/TransformSeparator.java    |  108 +-
 .../operation/transform/TranslationTransform.java  |   32 +-
 .../operation/transform/WraparoundTransform.java   |  669 ++++++
 .../operation/transform/package-info.java          |    2 +-
 .../org/apache/sis/referencing/package-info.java   |    4 +-
 ...g.opengis.referencing.operation.OperationMethod |    6 +
 .../apache/sis/geometry/AbstractEnvelopeTest.java  |    8 +-
 .../org/apache/sis/geometry/ArrayEnvelopeTest.java |    3 +-
 .../apache/sis/geometry/CoordinateFormatTest.java  |  138 +-
 .../org/apache/sis/geometry/Envelope2DTest.java    |    2 +-
 .../org/apache/sis/geometry/EnvelopesTest.java     |   21 +-
 .../sis/geometry/GeneralDirectPositionTest.java    |    2 +-
 .../apache/sis/geometry/GeneralEnvelopeTest.java   |   64 +-
 .../apache/sis/geometry/ImmutableEnvelopeTest.java |    2 +-
 .../java/org/apache/sis/geometry/Shapes2DTest.java |    2 +-
 .../org/apache/sis/geometry/SubEnvelopeTest.java   |    2 +-
 .../org/apache/sis/geometry/TransformTestCase.java |   44 +-
 .../sis/internal/jaxb/referencing/CodeTest.java    |    2 +-
 .../internal/referencing/AxisDirectionsTest.java   |   38 +-
 .../referencing/DefinitionVerifierTest.java        |   24 +-
 .../referencing/EllipsoidalHeightCombinerTest.java |    2 +-
 .../internal/referencing/ExtentSelectorTest.java   |  147 ++
 .../sis/internal/referencing/FormulasTest.java     |   18 +-
 .../referencing/ReferencingUtilitiesTest.java      |    2 +-
 .../referencing/ServicesForMetadataTest.java       |    4 +-
 .../sis/internal/referencing/WKTKeywordsTest.java  |   41 +-
 .../sis/internal/referencing/WKTUtilitiesTest.java |   14 +-
 .../FranceGeocentricInterpolationTest.java         |    8 +-
 .../provider/GeographicOffsetsTest.java            |    8 +-
 .../internal/referencing/provider/NADCONTest.java  |   20 +-
 .../internal/referencing/provider/NTv2Test.java    |  117 +-
 .../referencing/provider/ProviderMock.java         |    4 +-
 .../referencing/provider/ProvidersTest.java        |    8 +-
 .../java/org/apache/sis/io/wkt/ElementTest.java    |   31 +-
 .../sis/io/wkt/GeodeticObjectParserTest.java       |    4 +-
 .../apache/sis/io/wkt/MathTransformParserTest.java |    4 +-
 .../java/org/apache/sis/io/wkt/SymbolsTest.java    |   12 +-
 .../org/apache/sis/io/wkt/WKTDictionaryTest.java   |  401 ++++
 .../java/org/apache/sis/io/wkt/WKTFormatTest.java  |    3 +-
 .../sis/parameter/DefaultParameterValueTest.java   |    2 +-
 .../sis/parameter/ParameterValueGroupWrapper.java  |    3 +-
 .../java/org/apache/sis/referencing/CRSTest.java   |   30 +-
 .../org/apache/sis/referencing/CommonCRSTest.java  |   23 +-
 .../sis/referencing/GeodesicsOnEllipsoidTest.java  |   91 +-
 .../sis/referencing/GeodeticCalculatorTest.java    |  159 +-
 .../sis/referencing/IdentifiedObjectsTest.java     |    4 +-
 .../referencing/crs/DefaultCompoundCRSTest.java    |    2 +-
 .../sis/referencing/crs/DefaultDerivedCRSTest.java |    2 +-
 .../apache/sis/referencing/crs/HardCodedCRS.java   |   91 +-
 .../sis/referencing/crs/HardCodedCRSTest.java      |   20 +-
 .../sis/referencing/cs/CoordinateSystemsTest.java  |   15 +-
 .../apache/sis/referencing/cs/HardCodedAxes.java   |   13 +-
 .../org/apache/sis/referencing/cs/HardCodedCS.java |    9 +-
 .../datum/DefaultGeodeticDatumTest.java            |   44 +-
 .../datum/DefaultPrimeMeridianTest.java            |    2 -
 .../sis/referencing/datum/GeodeticDatumMock.java   |    8 +-
 .../sis/referencing/datum/HardCodedDatum.java      |    8 +-
 .../referencing/factory/AuthorityFactoryMock.java  |    2 +-
 .../factory/CommonAuthorityFactoryTest.java        |    1 -
 .../apache/sis/referencing/factory/GIGS2004.java   |    2 +-
 .../factory/MultiAuthoritiesFactoryTest.java       |   40 +-
 .../referencing/factory/sql/EPSGInstallerTest.java |    2 +-
 .../factory/sql/epsg/DataScriptFormatter.java      |    2 +-
 .../sis/referencing/factory/sql/epsg/package.html  |    8 +-
 .../referencing/geoapi/AuthorityFactoryTest.java   |   72 +
 .../geoapi/ParameterizedTransformTest.java         |   87 +
 .../operation/AbstractSingleOperationTest.java     |   82 -
 .../operation/CoordinateOperationFinderTest.java   |  134 +-
 .../operation/DefaultTransformationTest.java       |    1 -
 .../operation/HardCodedConversions.java            |  109 +-
 .../builder/LinearTransformBuilderTest.java        |   44 +-
 .../operation/builder/LinearizerTest.java          |   73 +
 .../operation/builder/ResidualGridTest.java        |    8 +-
 .../operation/matrix/AffineTransforms2DTest.java   |    2 +-
 .../referencing/operation/matrix/MatricesTest.java |   38 +-
 .../operation/matrix/MatrixTestCase.java           |   31 +-
 .../operation/projection/AlbersEqualAreaTest.java  |   50 +-
 .../projection/AzimuthalEquidistantTest.java       |  191 ++
 .../operation/projection/CassiniSoldnerTest.java   |  215 ++
 .../operation/projection/InitializerTest.java      |   10 +-
 .../projection/LambertConicConformalTest.java      |    9 +-
 .../projection/MapProjectionTestCase.java          |   45 +-
 .../ModifiedAzimuthalEquidistantTest.java          |   95 +
 .../sis/referencing/operation/projection/NoOp.java |    2 +-
 .../projection/ObliqueStereographicTest.java       |   27 +-
 .../projection/TransverseMercatorTest.java         |   71 +-
 .../doc-files/TransverseMercatorErrors.png         |  Bin 0 -> 7954 bytes
 .../transform/ConcatenatedTransformTest.java       |   71 +-
 .../transform/CoordinateSystemTransformTest.java   |   69 +-
 .../transform/DefaultMathTransformFactoryTest.java |   96 +-
 .../transform/InterpolatedTransformTest.java       |    2 +-
 .../transform/MathTransformFactoryMock.java        |    2 +-
 .../operation/transform/MathTransformTestCase.java |    2 +-
 .../operation/transform/MathTransformWrapper.java  |   14 +-
 .../operation/transform/MathTransformsTest.java    |   34 +-
 .../transform/ProjectiveTransformTest.java         |   63 +-
 .../transform/TransformResultComparator.java       |    4 +-
 .../transform/TransformSeparatorTest.java          |   65 +-
 .../transform/WraparoundTransformTest.java         |  182 ++
 .../report/CoordinateOperationMethods.java         |    2 +-
 .../sis/test/suite/ReferencingTestSuite.java       |   12 +-
 .../resources/org/apache/sis/io/wkt/ExtraCRS.txt   |   81 +
 .../resources/org/apache/sis/io/wkt/Malformed.txt  |   13 +
 .../integration/Metadata with vertical CRS.xml     |   14 +-
 .../org/apache/sis/test/integration/Metadata.xml   |   42 +-
 core/sis-utility/pom.xml                           |   10 +-
 .../sis/internal/converter/DateConverter.java      |    2 +-
 .../sis/internal/converter/StringConverter.java    |    2 +-
 .../java/org/apache/sis/internal/jdk9/JDK9.java    |  225 ++-
 .../apache/sis/internal/system/CommonExecutor.java |  133 ++
 .../apache/sis/internal/system/DataDirectory.java  |    8 +-
 .../sis/internal/system/DelayedExecutor.java       |    3 +-
 .../sis/internal/system/DelayedRunnable.java       |    8 +-
 .../org/apache/sis/internal/system/Modules.java    |   17 +-
 .../org/apache/sis/internal/system/Shutdown.java   |    5 +-
 .../org/apache/sis/internal/system/Threads.java    |    6 +-
 .../apache/sis/internal/system/package-info.java   |    2 +-
 .../sis/internal/util/AutoMessageFormat.java       |    2 +-
 .../apache/sis/internal/util/CheckedArrayList.java |    2 +-
 .../java/org/apache/sis/internal/util/Cloner.java  |   76 +-
 .../apache/sis/internal/util/CollectionsExt.java   |   31 +-
 .../org/apache/sis/internal/util/Constants.java    |   12 +-
 .../apache/sis/internal/util/DefinitionURI.java    |    8 +-
 .../org/apache/sis/internal/util/DoubleDouble.java |   13 +-
 .../org/apache/sis/internal/util/Numerics.java     |  101 +-
 .../apache/sis/internal/util/PropertyFormat.java   |  216 ++
 .../sis/internal/util/StandardDateFormat.java      |   89 +-
 .../java/org/apache/sis/internal/util/Strings.java |   68 +-
 .../java/org/apache/sis/internal/util/X364.java    |    2 +-
 .../java/org/apache/sis/internal/util/XPaths.java  |    4 +-
 .../org/apache/sis/internal/util/package-info.java |    2 +-
 .../main/java/org/apache/sis/io/ClassFormat.java   |    2 +-
 .../java/org/apache/sis/io/CompoundFormat.java     |   42 +-
 .../src/main/java/org/apache/sis/io/IO.java        |    2 +-
 .../org/apache/sis/io/IdentifiedObjectFormat.java  |    2 +-
 .../main/java/org/apache/sis/io/TableAppender.java |   12 +-
 .../main/java/org/apache/sis/io/package-info.java  |    4 +-
 .../main/java/org/apache/sis/math/ArrayVector.java |  207 +-
 .../org/apache/sis/math/ConcatenatedVector.java    |   23 +-
 .../main/java/org/apache/sis/math/Fraction.java    |   16 +-
 .../org/apache/sis/math/LinearlyDerivedVector.java |   51 +-
 .../java/org/apache/sis/math/MathFunctions.java    |   41 +-
 .../java/org/apache/sis/math/PackedVector.java     |   25 +-
 .../java/org/apache/sis/math/RepeatedVector.java   |   28 +-
 .../java/org/apache/sis/math/SequenceVector.java   |   10 +-
 .../main/java/org/apache/sis/math/Statistics.java  |    4 +-
 .../java/org/apache/sis/math/StatisticsFormat.java |    3 +-
 .../src/main/java/org/apache/sis/math/Vector.java  |   65 +-
 .../java/org/apache/sis/measure/AngleFormat.java   |   38 +-
 .../sis/measure/FormattedCharacterIterator.java    |    2 +-
 .../java/org/apache/sis/measure/Longitude.java     |   29 +-
 .../java/org/apache/sis/measure/NumberRange.java   |   93 +-
 .../java/org/apache/sis/measure/Quantities.java    |   76 +-
 .../org/apache/sis/measure/QuantityFormat.java     |  146 ++
 .../main/java/org/apache/sis/measure/Range.java    |    6 +-
 .../java/org/apache/sis/measure/RangeFormat.java   |   50 +-
 .../main/java/org/apache/sis/measure/Scalar.java   |    7 +-
 .../java/org/apache/sis/measure/UnitDimension.java |    2 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |    6 +-
 .../main/java/org/apache/sis/measure/Units.java    |    5 +-
 .../java/org/apache/sis/measure/package-info.java  |    2 +-
 .../src/main/java/org/apache/sis/setup/About.java  |   53 +-
 .../java/org/apache/sis/setup/Configuration.java   |   40 +-
 .../apache/sis/setup/InstallationResources.java    |    6 +-
 .../java/org/apache/sis/util/ArgumentChecks.java   |  103 +-
 .../main/java/org/apache/sis/util/ArraysExt.java   |   22 +-
 .../java/org/apache/sis/util/CharSequences.java    |  188 +-
 .../main/java/org/apache/sis/util/Characters.java  |   12 +-
 .../src/main/java/org/apache/sis/util/Classes.java |   43 +-
 .../main/java/org/apache/sis/util/Exceptions.java  |   19 +-
 .../src/main/java/org/apache/sis/util/Locales.java |    2 +-
 .../src/main/java/org/apache/sis/util/Numbers.java |   54 +-
 .../main/java/org/apache/sis/util/Workaround.java  |    8 +
 .../sis/util/collection/BackingStoreException.java |   22 +-
 .../java/org/apache/sis/util/collection/Cache.java |   36 +-
 .../org/apache/sis/util/collection/Containers.java |    2 +-
 .../sis/util/collection/FrequencySortedSet.java    |    3 +
 .../apache/sis/util/collection/IntegerList.java    |   38 +-
 .../org/apache/sis/util/collection/TreeTable.java  |    2 +-
 .../sis/util/collection/TreeTableFormat.java       |  211 +-
 .../apache/sis/util/collection/WeakHashSet.java    |   12 +-
 .../sis/util/collection/WeakValueHashMap.java      |   13 +-
 .../apache/sis/util/collection/package-info.java   |    2 +-
 .../org/apache/sis/util/logging/LoggerAdapter.java |    2 +-
 .../java/org/apache/sis/util/logging/Logging.java  |    4 +-
 .../apache/sis/util/logging/MonolineFormatter.java |   18 +-
 .../apache/sis/util/logging/PerformanceLevel.java  |   90 +-
 .../java/org/apache/sis/util/package-info.java     |    5 +-
 .../java/org/apache/sis/util/resources/Errors.java |   42 +-
 .../apache/sis/util/resources/Errors.properties    |    7 +-
 .../apache/sis/util/resources/Errors_fr.properties |   15 +-
 .../sis/util/resources/IndexedResourceBundle.java  |   37 +-
 .../org/apache/sis/util/resources/Messages.java    |    2 -
 .../org/apache/sis/util/resources/Vocabulary.java  |  787 ++++++--
 .../sis/util/resources/Vocabulary.properties       |  105 +-
 .../sis/util/resources/Vocabulary_fr.properties    |  107 +-
 .../apache/sis/util/resources/package-info.java    |    2 +-
 .../sis/internal/util/DefinitionURITest.java       |    1 +
 .../apache/sis/internal/util/DoubleDoubleTest.java |    9 +-
 .../org/apache/sis/internal/util/NumericsTest.java |   26 +-
 .../sis/internal/util/StandardDateFormatTest.java  |    4 +-
 .../org/apache/sis/internal/util/StringsTest.java  |    8 +-
 .../org/apache/sis/internal/util/XPathsTest.java   |    7 +-
 .../org/apache/sis/math/MathFunctionsTest.java     |   15 +-
 .../java/org/apache/sis/math/StatisticsTest.java   |    2 +-
 .../test/java/org/apache/sis/math/VectorTest.java  |   12 +-
 .../org/apache/sis/measure/AngleFormatTest.java    |   14 +-
 .../java/org/apache/sis/measure/AngleTest.java     |   51 +-
 .../measure/FormattedCharacterIteratorTest.java    |    2 +-
 .../org/apache/sis/measure/NumberRangeTest.java    |   19 +-
 .../org/apache/sis/measure/QuantitiesTest.java     |   16 +-
 .../org/apache/sis/measure/RangeFormatTest.java    |   51 +-
 .../java/org/apache/sis/measure/RangeTest.java     |   22 +-
 .../java/org/apache/sis/measure/ScalarTest.java    |   10 +-
 .../org/apache/sis/measure/UnitFormatTest.java     |    2 +-
 .../java/org/apache/sis/measure/UnitsTest.java     |    2 +-
 .../src/test/java/org/apache/sis/test/Assert.java  |    1 +
 .../src/test/java/org/apache/sis/test/Assume.java  |    2 +-
 .../java/org/apache/sis/test/LoggingWatcher.java   |    6 +-
 .../java/org/apache/sis/test/OptionalTestData.java |   37 +-
 .../test/java/org/apache/sis/test/TestCase.java    |    2 +-
 .../java/org/apache/sis/test/TestUtilities.java    |    2 +-
 .../org/apache/sis/util/CharSequencesTest.java     |   26 +-
 .../java/org/apache/sis/util/CharactersTest.java   |   27 +-
 .../test/java/org/apache/sis/util/ClassesTest.java |   34 +-
 .../test/java/org/apache/sis/util/NumbersTest.java |   68 +-
 .../org/apache/sis/util/collection/CacheTest.java  |    2 +-
 .../apache/sis/util/collection/RangeSetTest.java   |    2 +-
 .../sis/util/logging/PerformanceLevelTest.java     |   46 +-
 ide-project/NetBeans/build.xml                     |   17 +
 ide-project/NetBeans/nbproject/build-impl.xml      |   78 +-
 ide-project/NetBeans/nbproject/build-impl.xml~     | 2131 ++++++++++++++++++++
 ide-project/NetBeans/nbproject/genfiles.properties |    6 +-
 ide-project/NetBeans/nbproject/project.properties  |   64 +-
 ide-project/NetBeans/nbproject/project.xml         |    5 +
 pom.xml                                            |  139 +-
 profiles/pom.xml                                   |    6 +-
 profiles/sis-french-profile/pom.xml                |    6 +-
 .../sis/internal/profile/fra/package-info.java     |    6 +-
 .../internal/profile/fra/DirectReferenceSystem.xml |    6 +-
 profiles/sis-japan-profile/pom.xml                 |   10 +-
 .../sis/internal/earth/netcdf/FactoryForUCAR.java  |  123 ++
 .../apache/sis/internal/earth/netcdf/GCOM_C.java   |   70 +-
 .../apache/sis/internal/earth/netcdf/GCOM_W.java   |   83 +-
 .../ucar.nc2.dataset.spi.CoordSystemBuilderFactory |    1 +
 src/main/javadoc/overview.html                     |    4 +-
 src/main/javadoc/sis.css                           |    7 +-
 storage/pom.xml                                    |    8 +-
 storage/sis-earth-observation/pom.xml              |   13 +-
 .../storage/earthobservation/LandsatAggregate.java |  138 ++
 .../sis/storage/earthobservation/LandsatBand.java  |   73 +
 .../storage/earthobservation/LandsatBandGroup.java |   72 +
 .../storage/earthobservation/LandsatReader.java    |  450 ++---
 .../storage/earthobservation/LandsatResource.java  |  226 +++
 .../sis/storage/earthobservation/LandsatStore.java |  149 +-
 .../earthobservation/LandsatStoreProvider.java     |   37 +-
 .../doc-files/LandsatMetadata.html                 |   47 +-
 .../sis/storage/earthobservation/package-info.java |    3 +-
 .../earthobservation/LandsatReaderTest.java        |   92 +-
 storage/sis-gdal/pom.xml                           |    4 +-
 .../org/apache/sis/storage/gdal/Proj4Test.java     |    2 +-
 .../org/apache/sis/storage/gdal/TransformTest.java |    1 -
 storage/sis-geotiff/pom.xml                        |   15 +-
 .../apache/sis/internal/geotiff/Compression.java   |  162 ++
 .../org/apache/sis/internal/geotiff/Predictor.java |   65 +
 .../org/apache/sis/internal/geotiff/Resources.java |   27 +-
 .../sis/internal/geotiff/Resources.properties      |    5 +
 .../sis/internal/geotiff/Resources_fr.properties   |    7 +-
 .../sis/internal/geotiff/SchemaModifier.java       |  119 ++
 .../apache/sis/internal/geotiff/package-info.java  |    2 +-
 .../sis/internal/storage/inflater/CCITTRLE.java    |  273 +++
 .../storage/inflater/CompressionChannel.java       |  131 ++
 .../internal/storage/inflater/CopyFromBytes.java   |  416 ++++
 .../storage/inflater/HorizontalPredictor.java      |  517 +++++
 .../sis/internal/storage/inflater/Inflater.java    |  319 +++
 .../apache/sis/internal/storage/inflater/LZW.java  |  261 +++
 .../sis/internal/storage/inflater/PackBits.java    |  143 ++
 .../internal/storage/inflater/PixelChannel.java    |   55 +
 .../storage/inflater/PredictorChannel.java         |  130 ++
 .../apache/sis/internal/storage/inflater/ZIP.java  |  136 ++
 .../internal/storage/inflater/package-info.java    |   49 +
 .../org/apache/sis/storage/geotiff/CRSBuilder.java |   13 +-
 .../sis/storage/geotiff/CompressedSubset.java      |  278 +++
 .../apache/sis/storage/geotiff/Compression.java    |  154 --
 .../org/apache/sis/storage/geotiff/DataCube.java   |  214 ++
 .../org/apache/sis/storage/geotiff/DataSubset.java |  486 +++++
 .../org/apache/sis/storage/geotiff/GeoTIFF.java    |   12 +-
 .../apache/sis/storage/geotiff/GeoTiffStore.java   |  159 +-
 .../sis/storage/geotiff/GridGeometryBuilder.java   |   19 +-
 .../sis/storage/geotiff/ImageFileDirectory.java    |  673 +++++--
 .../org/apache/sis/storage/geotiff/Reader.java     |   27 +-
 .../sis/storage/geotiff/ReversedBitsChannel.java   |  163 ++
 .../java/org/apache/sis/storage/geotiff/Tags.java  |    2 +
 .../apache/sis/storage/geotiff/package-info.java   |   11 +-
 .../sis/internal/geotiff/CompressionTest.java      |   43 +
 .../internal/storage/inflater/CCITTRLETest.java    |  576 ++++++
 .../internal/storage/inflater/InflaterTest.java    |   64 +
 .../sis/storage/geotiff/CompressionTest.java       |   43 -
 .../sis/storage/geotiff/SelfConsistencyTest.java   |   85 +
 .../apache/sis/test/suite/GeoTiffTestSuite.java    |    9 +-
 storage/sis-netcdf/pom.xml                         |   18 +-
 .../java/org/apache/sis/internal/netcdf/Axis.java  |  247 ++-
 .../org/apache/sis/internal/netcdf/AxisType.java   |  179 ++
 .../org/apache/sis/internal/netcdf/CRSBuilder.java |  215 +-
 .../org/apache/sis/internal/netcdf/Convention.java |   87 +-
 .../org/apache/sis/internal/netcdf/DataType.java   |   72 +-
 .../org/apache/sis/internal/netcdf/Decoder.java    |  112 +-
 .../sis/internal/netcdf/DiscreteSampling.java      |   12 +-
 .../org/apache/sis/internal/netcdf/FeatureSet.java |  950 +++++++++
 .../java/org/apache/sis/internal/netcdf/Grid.java  |  152 +-
 .../apache/sis/internal/netcdf/GridAdjustment.java |  207 ++
 .../apache/sis/internal/netcdf/GridCacheKey.java   |   36 +-
 .../apache/sis/internal/netcdf/GridCacheValue.java |   82 +
 .../apache/sis/internal/netcdf/GridMapping.java    |   62 +-
 .../java/org/apache/sis/internal/netcdf/HYCOM.java |  129 ++
 .../org/apache/sis/internal/netcdf/Linearizer.java |  297 ++-
 .../java/org/apache/sis/internal/netcdf/Node.java  |   38 +-
 .../org/apache/sis/internal/netcdf/Raster.java     |    8 +-
 .../apache/sis/internal/netcdf/RasterResource.java |  155 +-
 .../org/apache/sis/internal/netcdf/Resources.java  |   37 +-
 .../sis/internal/netcdf/Resources.properties       |    8 +-
 .../sis/internal/netcdf/Resources_fr.properties    |   16 +-
 .../sis/internal/netcdf/SatelliteGroundTrack.java  |  246 ---
 .../org/apache/sis/internal/netcdf/Variable.java   |  633 ++++--
 .../apache/sis/internal/netcdf/VariableRole.java   |   13 +-
 .../sis/internal/netcdf/impl/ChannelDecoder.java   |  147 +-
 .../sis/internal/netcdf/impl/FeaturesInfo.java     |  426 ----
 .../apache/sis/internal/netcdf/impl/GridInfo.java  |  111 +-
 .../org/apache/sis/internal/netcdf/impl/HYCOM.java |  128 --
 .../sis/internal/netcdf/impl/VariableInfo.java     |  423 ++--
 .../sis/internal/netcdf/impl/package-info.java     |    4 +-
 .../internal/netcdf/ucar/CSBuilderFallback.java    |   93 -
 .../sis/internal/netcdf/ucar/DecoderWrapper.java   |  219 +-
 .../sis/internal/netcdf/ucar/DimensionWrapper.java |    7 +-
 .../sis/internal/netcdf/ucar/FeaturesWrapper.java  |   17 +-
 .../sis/internal/netcdf/ucar/GridWrapper.java      |   72 +-
 .../sis/internal/netcdf/ucar/GroupWrapper.java     |    8 +-
 .../org/apache/sis/internal/netcdf/ucar/Utils.java |    4 +-
 .../sis/internal/netcdf/ucar/VariableWrapper.java  |  267 ++-
 .../sis/internal/netcdf/ucar/package-info.java     |    4 +-
 .../apache/sis/storage/netcdf/AttributeNames.java  |    1 -
 .../apache/sis/storage/netcdf/MetadataReader.java  |   30 +-
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   31 +-
 .../sis/storage/netcdf/NetcdfStoreProvider.java    |   55 +-
 .../apache/sis/storage/netcdf/package-info.java    |   16 +-
 .../apache/sis/internal/netcdf/DataTypeTest.java   |   42 +-
 .../apache/sis/internal/netcdf/FeatureSetTest.java |  200 ++
 .../org/apache/sis/internal/netcdf/GridTest.java   |   45 +-
 .../internal/netcdf/SatelliteGroundTrackTest.java  |   81 -
 .../apache/sis/internal/netcdf/VariableTest.java   |   28 +-
 .../sis/internal/netcdf/impl/FeatureSetTest.java   |   47 +
 .../sis/internal/netcdf/impl/GridInfoTest.java     |    9 +-
 .../sis/internal/netcdf/impl/VariableInfoTest.java |    3 +-
 .../sis/storage/netcdf/MetadataReaderTest.java     |   16 +-
 .../apache/sis/storage/netcdf/NetcdfStoreTest.java |    4 +-
 .../sis/storage/netcdf/SelfConsistencyTest.java    |   86 +
 .../org/apache/sis/test/suite/NetcdfTestSuite.java |    8 +-
 .../apache/sis/internal/shapefile/AutoChecker.java |    3 +-
 .../internal/shapefile/ShapefileByteReader.java    |    3 +-
 .../sis/storage/shapefile/InputFeatureStream.java  |    3 +-
 .../apache/sis/storage/shapefile/cpg/CpgFiles.java |   79 +
 storage/sis-sqlstore/pom.xml                       |   12 +
 .../apache/sis/internal/sql/feature/Analyzer.java  |  633 +++++-
 .../apache/sis/internal/sql/feature/Column.java    |  241 +++
 .../apache/sis/internal/sql/feature/Database.java  |  437 +++-
 .../sis/internal/sql/feature/EWKBReader.java       |  207 ++
 .../sis/internal/sql/feature/FeatureAdapter.java   |  374 ++++
 .../sis/internal/sql/feature/FeatureIterator.java  |  337 ++++
 .../sis/internal/sql/feature/FeatureStream.java    |  406 ++++
 .../apache/sis/internal/sql/feature/Features.java  |  499 -----
 .../sis/internal/sql/feature/InfoStatements.java   |  419 ++++
 .../sis/internal/sql/feature/PrimaryKey.java       |  112 +
 .../apache/sis/internal/sql/feature/Relation.java  |   75 +-
 .../apache/sis/internal/sql/feature/Resources.java |   27 +-
 .../sis/internal/sql/feature/Resources.properties  |    5 +
 .../internal/sql/feature/Resources_fr.properties   |    7 +-
 .../sis/internal/sql/feature/SchemaModifier.java   |   63 +
 .../sis/internal/sql/feature/SelectionClause.java  |  176 ++
 .../sql/feature/SelectionClauseWriter.java         |  419 ++++
 .../sis/internal/sql/feature/SpatialFunctions.java |  144 --
 .../org/apache/sis/internal/sql/feature/Table.java |  529 ++---
 .../sis/internal/sql/feature/TableAnalyzer.java    |  189 ++
 .../sis/internal/sql/feature/TableReference.java   |   45 +-
 .../sis/internal/sql/feature/ValueGetter.java      |  372 ++++
 .../sis/internal/sql/feature/package-info.java     |    6 +-
 .../internal/sql/postgis/ExtendedClauseWriter.java |   70 +
 .../sis/internal/sql/postgis/ExtendedInfo.java     |   82 +
 .../apache/sis/internal/sql/postgis/Postgres.java  |  151 ++
 .../sis/internal/sql/postgis/package-info.java     |   27 +
 .../sis/internal/stream/BaseStreamWrapper.java     |   97 +
 .../apache/sis/internal/stream/DeferredStream.java |  168 ++
 .../sis/internal/stream/DoubleStreamWrapper.java   |  285 +++
 .../sis/internal/stream/PaginedDoubleStream.java   |  102 +
 .../apache/sis/internal/stream/PaginedStream.java  |  113 ++
 .../apache/sis/internal/stream/StreamWrapper.java  |  319 +++
 .../apache/sis/internal/stream/package-info.java   |   34 +
 .../java/org/apache/sis/storage/sql/SQLStore.java  |   66 +-
 .../apache/sis/storage/sql/SQLStoreProvider.java   |    9 +-
 .../org/apache/sis/storage/sql/package-info.java   |   20 +-
 .../apache/sis/internal/sql/feature/EWKBTest.java  |  125 ++
 .../sql/feature/SelectionClauseWriterTest.java     |  151 ++
 .../sis/internal/sql/postgis/PostgresTest.java     |   45 +
 .../org/apache/sis/storage/sql/SQLStoreTest.java   |  205 +-
 .../org/apache/sis/test/suite/SQLTestSuite.java    |    4 +-
 .../sis/internal/sql/feature/hexa_ewkb_4326.csv    |   21 +
 .../sis/internal/sql/feature/hexa_ewkb_4326.sql    |   43 +
 storage/sis-storage/pom.xml                        |   15 +-
 .../apache/sis/index/tree/LatLonPointRadius.java   |  138 --
 .../java/org/apache/sis/index/tree/NodeType.java   |   28 -
 .../java/org/apache/sis/index/tree/QuadTree.java   |  622 ------
 .../org/apache/sis/index/tree/QuadTreeData.java    |   59 -
 .../org/apache/sis/index/tree/QuadTreeNode.java    |  178 --
 .../org/apache/sis/index/tree/QuadTreeWriter.java  |  163 --
 .../java/org/apache/sis/index/tree/Quadrant.java   |   62 -
 .../org/apache/sis/index/tree/package-info.java    |   24 -
 .../sis/internal/storage/AbstractFeatureSet.java   |    2 +
 .../sis/internal/storage/AbstractGridResource.java |  319 ++-
 .../sis/internal/storage/AbstractResource.java     |   75 +-
 .../sis/internal/storage/AggregatedFeatureSet.java |    2 +
 .../apache/sis/internal/storage/Capability.java    |   10 +-
 .../internal/storage/ConcatenatedFeatureSet.java   |    4 +-
 .../sis/internal/storage/GridResourceWrapper.java  |  227 +++
 .../sis/internal/storage/JoinFeatureSet.java       |   44 +-
 .../sis/internal/storage/MemoryGridResource.java   |  181 ++
 .../sis/internal/storage/MetadataBuilder.java      |  327 ++-
 .../internal/storage/RasterLoadingStrategy.java    |  112 +
 .../org/apache/sis/internal/storage/Resources.java |   27 +-
 .../sis/internal/storage/Resources.properties      |    5 +
 .../sis/internal/storage/Resources_fr.properties   |    7 +-
 .../apache/sis/internal/storage/StoreMetadata.java |   27 +-
 .../sis/internal/storage/StoreUtilities.java       |   32 +-
 .../sis/internal/storage/TiledGridCoverage.java    |  776 +++++++
 .../sis/internal/storage/TiledGridResource.java    |  543 +++++
 .../apache/sis/internal/storage/URIDataStore.java  |   43 +-
 .../internal/storage/csv/MovingFeatureBuilder.java |  299 +++
 .../storage/csv/MovingFeatureIterator.java         |   11 +-
 .../org/apache/sis/internal/storage/csv/Store.java |    3 +-
 .../sis/internal/storage/csv/StoreProvider.java    |   10 +-
 .../storage/folder/FolderStoreProvider.java        |   29 +-
 .../apache/sis/internal/storage/folder/Store.java  |   19 +-
 .../sis/internal/storage/folder/package-info.java  |    2 +-
 .../sis/internal/storage/io/ChannelData.java       |   61 +-
 .../sis/internal/storage/io/ChannelDataInput.java  |   20 +-
 .../sis/internal/storage/io/ChannelDataOutput.java |   20 +-
 .../sis/internal/storage/io/ChannelFactory.java    |    5 +-
 .../sis/internal/storage/io/DataTransfer.java      |    7 +-
 .../internal/storage/io/HyperRectangleReader.java  |   83 +-
 .../sis/internal/storage/io/IOUtilities.java       |   48 +-
 .../internal/storage/io/MemoryDataTransfer.java    |    3 +-
 .../org/apache/sis/internal/storage/io/Region.java |   62 +-
 .../apache/sis/internal/storage/package-info.java  |    2 +-
 .../sis/internal/storage/query/FeatureSubset.java  |  148 --
 .../sis/internal/storage/query/SimpleQuery.java    |  486 -----
 .../internal/storage/query/SortByComparator.java   |  116 --
 .../sis/internal/storage/query/package-info.java   |   32 -
 .../sis/internal/storage/wkt/FirstKeywordPeek.java |  162 +-
 .../org/apache/sis/internal/storage/wkt/Store.java |    2 +-
 .../sis/internal/storage/wkt/StoreFormat.java      |   13 +-
 .../sis/internal/storage/wkt/package-info.java     |    2 +-
 .../org/apache/sis/internal/storage/xml/Store.java |    3 +-
 .../java/org/apache/sis/storage/CoverageQuery.java |  374 ++++
 .../org/apache/sis/storage/CoverageSubset.java     |  208 ++
 .../java/org/apache/sis/storage/DataStore.java     |   77 +-
 .../org/apache/sis/storage/DataStoreProvider.java  |    8 +-
 .../org/apache/sis/storage/DataStoreRegistry.java  |   85 +-
 .../java/org/apache/sis/storage/FeatureNaming.java |    3 +-
 .../java/org/apache/sis/storage/FeatureQuery.java  |  673 +++++++
 .../java/org/apache/sis/storage/FeatureSet.java    |    5 +-
 .../java/org/apache/sis/storage/FeatureSubset.java |  147 ++
 .../apache/sis/storage/GridCoverageResource.java   |   37 +-
 .../main/java/org/apache/sis/storage/Query.java    |   79 +-
 .../main/java/org/apache/sis/storage/Resource.java |    7 +
 .../org/apache/sis/storage/StorageConnector.java   |   65 +-
 .../sis/storage/UnsupportedEncodingException.java  |   62 +
 .../apache/sis/storage/event/StoreListeners.java   |   28 +-
 .../java/org/apache/sis/storage/package-info.java  |    2 +-
 .../org.apache.sis.storage.DataStoreProvider       |    1 +
 .../apache/sis/index/tree/TestQuadTreeNode.java    |   31 -
 .../storage/ConcatenatedFeatureSetTest.java        |    5 +-
 .../sis/internal/storage/JoinFeatureSetTest.java   |   14 +-
 .../internal/storage/MemoryGridResourceTest.java   |  105 +
 .../sis/internal/storage/MetadataBuilderTest.java  |   73 +-
 .../sis/internal/storage/StoreUtilitiesTest.java   |   47 +
 .../sis/internal/storage/folder/StoreTest.java     |    5 +-
 .../storage/io/HyperRectangleReaderTest.java       |    3 +-
 .../storage/io/RewindableLineReaderTest.java       |    2 +-
 .../internal/storage/query/SimpleQueryTest.java    |  197 --
 .../org/apache/sis/storage/CoverageQueryTest.java  |  182 ++
 .../org/apache/sis/storage/DataStoresTest.java     |   81 +-
 .../org/apache/sis/storage/FeatureQueryTest.java   |  212 ++
 .../org/apache/sis/storage/GridResourceMock.java   |  106 +
 .../sis/test/storage/CoverageReadConsistency.java  |  555 +++++
 .../apache/sis/test/storage/SubsampledImage.java   |  263 +++
 .../org/apache/sis/test/storage/package-info.java  |   34 +
 .../apache/sis/test/suite/StorageTestSuite.java    |    7 +-
 storage/sis-xmlstore/pom.xml                       |    2 +-
 .../apache/sis/internal/storage/gpx/Metadata.java  |    7 +-
 .../sis/internal/storage/gpx/StoreProvider.java    |   10 +-
 .../apache/sis/internal/storage/gpx/Writer.java    |    4 +-
 .../storage/xml/stream/StaxStreamReader.java       |   16 +-
 1341 files changed, 144541 insertions(+), 31768 deletions(-)

diff --cc application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java
index 0000000,1c83184..597bb89
mode 000000,100644..100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java
@@@ -1,0 -1,502 +1,501 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *     http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package org.apache.sis.gui.metadata;
+ 
+ import java.util.Date;
+ import java.util.Set;
+ import java.util.Collection;
+ import java.util.LinkedHashSet;
+ import java.util.StringJoiner;
+ import javafx.concurrent.Task;
+ import javafx.geometry.HPos;
+ import javafx.scene.canvas.Canvas;
+ import javafx.scene.canvas.GraphicsContext;
+ import javafx.scene.control.Label;
+ import javafx.scene.image.Image;
+ import javafx.scene.paint.Color;
+ import javafx.scene.text.Font;
+ import javafx.scene.text.FontWeight;
+ import org.opengis.metadata.Metadata;
+ import org.opengis.metadata.Identifier;
+ import org.opengis.metadata.citation.Citation;
+ import org.opengis.metadata.citation.CitationDate;
+ import org.opengis.metadata.citation.DateType;
+ import org.opengis.metadata.extent.Extent;
+ import org.opengis.metadata.extent.GeographicBoundingBox;
+ import org.opengis.metadata.extent.GeographicDescription;
+ import org.opengis.metadata.extent.GeographicExtent;
+ import org.opengis.metadata.identification.Identification;
+ import org.opengis.metadata.distribution.Format;
 -import org.opengis.util.InternationalString;
+ import org.apache.sis.metadata.iso.citation.Citations;
+ import org.apache.sis.metadata.iso.extent.Extents;
+ import org.apache.sis.referencing.IdentifiedObjects;
+ import org.apache.sis.internal.referencing.Formulas;
+ import org.apache.sis.internal.gui.BackgroundThreads;
+ import org.apache.sis.measure.Latitude;
+ import org.apache.sis.measure.Longitude;
+ import org.apache.sis.storage.Aggregate;
+ import org.apache.sis.storage.Resource;
+ import org.apache.sis.storage.DataStoreException;
+ import org.apache.sis.util.CharSequences;
+ import org.apache.sis.util.Workaround;
+ import org.apache.sis.util.resources.Vocabulary;
+ 
+ import static org.apache.sis.internal.util.CollectionsExt.nonNull;
+ 
+ 
+ /**
+  * The pane where to show the values of {@link Identification} objects.
+  * The same pane can be used for an arbitrary amount of identifications.
+  * Each instance is identified by its title.
+  * The content is:
+  *
+  * <ol>
+  *   <li>The title in bold font.</li>
+  *   <li>Identifiers.</li>
+  *   <li>Abstract, or purpose, or credit (in this preference order).</li>
+  *   <li>Topic category.</li>
+  *   <li>Release date, or publication date, or creation date, or any date (in this preference order).</li>
+  *   <li>Type of resource.</li>
+  *   <li>Resource format.</li>
+  *   <li>Spatiotemporal extent as a textual description.</li>
+  *   <li>Extent shown as a rectangle on a world map.</li>
+  * </ol>
+  *
+  * @author  Smaniotto Enzo (GSoC)
+  * @author  Martin Desruisseaux (Geomatys)
+  * @version 1.1
+  * @since   1.1
+  * @module
+  */
+ final class IdentificationInfo extends Section<Identification> {
+     /**
+      * Size of the map. Current version uses a size of 360×180° so that the scale factor
+      * from the map to degrees is 1. Future version may use a different size, in which
+      * case the scale factor will need to be added in the code.
+      */
+     private static final double MAP_WIDTH  = Longitude.MAX_VALUE - Longitude.MIN_VALUE,
+                                 MAP_HEIGHT =  Latitude.MAX_VALUE -  Latitude.MIN_VALUE;
+ 
+     /**
+      * Minimal size of rectangles to be drawn by {@link IdentificationInfo#drawOnMap(GeographicBoundingBox)}.
+      * If a rectangle is smaller, it will be expanded to this size. We use a minimal size because otherwise
+      * small rectangles may be practically invisible.
+      */
+     private static final double MIN_RECT_SIZE = 6;
+ 
+     /**
+      * The resource title, or if non the identifier as a fallback.
+      */
+     private final Label title;
+ 
+     /**
+      * The canvas where to draw geographic bounding boxes over a world map.
+      * Shall never be null, but need to be recreated for each new map.
+      * A canvas of size (0,0) is available at initialization time for drawing a new map.
+      *
+      * @see #isWorldMapEmpty()
+      * @see #drawOnMap(GeographicBoundingBox)
+      */
+     private Canvas extentOnMap;
+ 
+     /**
+      * Whether the geographic bounding box covers the world.
+      */
+     private boolean isWorld;
+ 
+     /**
+      * Whether the map was visible with previous data, before {@link #buildContent(Identification)} call.
+      * We use this information for avoiding flicker effect when a map is removed, then added back after a
+      * slight delay by {@link #completeMissingGeographicBounds(Aggregate)}.
+      */
+     private boolean mapWasVisible;
+ 
+     /**
+      * The task which is running in background thread for searching bounding boxes in {@link Aggregate} children.
+      * We use this reference for cancelling the task if a new resource is selected before the previous task finished.
+      */
+     private Task<?> aggregateWalker;
+ 
+     /**
+      * Creates an initially empty view for identification information.
+      */
+     IdentificationInfo(final MetadataSummary owner) {
+         super(owner);
+         title = new Label();
+         title.setFont(Font.font(null, FontWeight.BOLD, 15));
+         add(title, 0, 0, NUM_CHILD_PER_LINE, 1);
+ 
+         extentOnMap = new Canvas();                     // Size of (0,0) by default.
+         add(extentOnMap, 0, 0, NUM_CHILD_PER_LINE, 1);  // Will be moved to a different location by buildContent(…).
+         setHalignment(extentOnMap, HPos.CENTER);
+         finished();
+     }
+ 
+     /**
+      * If the world map contains a map from some previous metadata, discards the old canvas and create a new one.
+      * We do that because as of JavaFX 13, we found no way to clear the content of an existing {@link Canvas}.
+      */
+     @Workaround(library = "JavaFX", version = "13")
+     private void clearWorldMap() {
+         // Do not clear `isWorld` because caller may want the clear the map because it is world map.
+         if (!isWorldMapEmpty()) {
+             final int p = linesStartIndex() - 1;
+             assert getChildren().get(p) == extentOnMap;
+             getChildren().set(p, extentOnMap = new Canvas());
+             setColumnSpan(extentOnMap, NUM_CHILD_PER_LINE);
+             setHalignment(extentOnMap, HPos.CENTER);
+         }
+     }
+ 
+     /**
+      * Returns whether {@link #extentOnMap} is considered empty and available for use.
+      */
+     private boolean isWorldMapEmpty() {
+         return extentOnMap.getWidth() == 0 && extentOnMap.getHeight() == 0;
+     }
+ 
+     /**
+      * Returns {@code true} if this section contains no data.
+      */
+     @Override
+     boolean isEmpty() {
+         return super.isEmpty() && isWorldMapEmpty();
+     }
+ 
+     /**
+      * If this pane has no geographic bounds information, search for geographic bounds in the child resources.
+      * This method is used as a fallback when {@link #buildContent(Identification)} did not find bounding box
+      * in the metadata directly provided. If bounds has been found, then this method does nothing.
+      *
+      * <p>The method does nothing if there is more than one {@link Identification} metadata element,
+      * because we would not know to which element to assign the extent of children resources.</p>
+      */
+     final void completeMissingGeographicBounds(final Aggregate resource) {
+         if (!isWorld && isWorldMapEmpty() && !super.isEmpty() && numPages() == 1) {
+             /*
+              * If a map was visible previously, add back an empty map for avoiding flicking effect.
+              * If it appears that the map has no bounding box to show, it will be removed after the
+              * background thread finished its work.
+              */
+             if (mapWasVisible) {
+                 drawMapBackground();
+             }
+             BackgroundThreads.execute(aggregateWalker = new Task<Set<GeographicBoundingBox>>() {
+                 /** Invoked in a background thread for fetching bounding boxes. */
+                 @Override protected Set<GeographicBoundingBox> call() throws DataStoreException {
+                     final Set<GeographicBoundingBox> boxes = new LinkedHashSet<>();
+                     for (final Resource child : resource.components()) {
+                         final Metadata metadata = child.getMetadata();
+                         if (isCancelled()) break;
+                         if (metadata != null) {
+                             for (final Identification id : nonNull(metadata.getIdentificationInfo())) {
+                                 if (id != null) {
+                                     for (final Extent extent : id.getExtents()) {
+                                         final GeographicBoundingBox b = Extents.getGeographicBoundingBox(extent);
+                                         if (b != null) boxes.add(b);
+                                     }
+                                 }
+                             }
+                         }
+                     }
+                     return boxes;
+                 }
+ 
+                 /** Shows the result in JavaFX thread. */
+                 @Override protected void succeeded() {
+                     aggregateWalker = null;
+                     drawOnMap(getValue());
+                 }
+ 
+                 /** Invoked in JavaFX thread if metadata loading failed. */
+                 @Override protected void failed() {
+                     aggregateWalker = null;
+                     owner.setError(getException());
+                 }
+             });
+         }
+     }
+ 
+     /**
+      * Sets the identification information from the given metadata.
+      */
+     @Override
+     void setInformation(final Metadata metadata) {
+         if (aggregateWalker != null) {
+             aggregateWalker.cancel();
+             aggregateWalker = null;
+         }
+         final Collection<? extends Identification> info;
+         if (metadata == null) {
+             clearWorldMap();
+             info = null;
+         } else {
+             info = metadata.getIdentificationInfo();
+         }
+         setInformation(nonNull(info), Identification[]::new);
+     }
+ 
+     /**
+      * Invoked when new identification information should be shown.
+      * This method updates all fields in this section with the content of given identification information.
+      * The content is summarized in {@linkplain IdentificationInfo class javadoc}.
+      */
+     @Override
+     void buildContent(final Identification info) {
+         mapWasVisible = !isWorldMapEmpty();
+         isWorld = false;
+         clearWorldMap();
+         String text = null;
+         final Citation citation = info.getCitation();
+         if (citation != null) {
+             text = owner.string(citation.getTitle());
+             if (text == null) {
+                 text = Citations.getIdentifier(citation);
+             }
+         }
+         if (text == null) {
+             text = owner.vocabulary.getString(Vocabulary.Keys.Untitled);
+         } else if (CharSequences.isUnicodeIdentifier(text)) {
+             text = CharSequences.camelCaseToSentence(text).toString();
+         }
+         title.setText(text);
+         /*
+          * Identifiers as a comma-separated list on a single line. Each identifier
+          * is formatted as "codespace:code" or only "code" if there is no codespace.
+          */
+         if (citation != null) {
+             final StringJoiner buffer = new StringJoiner(", ");
+             for (final Identifier id : citation.getIdentifiers()) {
+                 buffer.add(IdentifiedObjects.toString(id));
+             }
+             if (buffer.length() != 0) {
+                 addLine(Vocabulary.Keys.Identifiers, buffer.toString());
+             }
+         }
+         /*
+          * The abstract, or if there is no abstract the purpose, or if no purpose the credit as a fallback.
+          * We use those fallback because they can provide some hints about the product.
+          * The topic category (climatology, health, etc.) follows.
+          */
+         short label = Vocabulary.Keys.Abstract;
+         text = owner.string(info.getAbstract());
+         if (text == null) {
+             label = Vocabulary.Keys.Purpose;
+             text = owner.string(info.getPurpose());
+             if (text == null) {
 -                for (final InternationalString c : nonNull(info.getCredits())) {
 -                    text = owner.string(c);
++                for (final String c : nonNull(info.getCredits())) {
++                    text = c;
+                     if (text != null) {
+                         label = Vocabulary.Keys.Credit;
+                         break;
+                     }
+                 }
+             }
+         }
+         addLine(label, text);
+         /*
+          * Topic category.
+          */
+         addLine(Vocabulary.Keys.TopicCategory, owner.string(nonNull(info.getTopicCategories())));
+         /*
+          * Select a single, arbitrary date. We take the release or publication date if available.
+          * If no publication date is found, fallback on the creation date. If no creation date is
+          * found neither, fallback on the first date regardless its type.
+          */
+         if (citation != null) {
+             Date date = null;
+             label = Vocabulary.Keys.Date;
+             for (final CitationDate c : nonNull(citation.getDates())) {
+                 final Date cd = c.getDate();
+                 if (cd != null) {
+                     final DateType type = c.getDateType();
+                     if (DateType.PUBLICATION.equals(type) || DateType.RELEASED.equals(type)) {
+                         label = Vocabulary.Keys.PublicationDate;
+                         date  = cd;
+                         break;                      // Take the first publication or release date.
+                     }
+                     final boolean isCreation = DateType.CREATION.equals(type);
+                     if (date == null || isCreation) {
+                         label = isCreation ? Vocabulary.Keys.CreationDate : Vocabulary.Keys.Date;
+                         date  = cd;     // Fallback date: creation date, or the first date otherwise.
+                     }
+                 }
+             }
+             if (date != null) {
+                 addLine(label, owner.getDateFormat().format(date));
+             }
+         }
+         /*
+          * Type of resource: vector, grid, table, tin, video, etc. It gives a slight overview
+          * of the next section, "Spatial representation". For that reason we put it close to
+          * that next section, i.e. last in this section but just before the map.
+          */
+         addLine(Vocabulary.Keys.TypeOfResource, owner.string(nonNull(info.getSpatialRepresentationTypes())));
+         /*
+          * Resource format. Current implementation shows only the first format found.
+          */
+         for (final Format format : nonNull(info.getResourceFormats())) {
+             final Citation c = format.getFormatSpecificationCitation();
+             if (c != null) {
+                 text = owner.string(c.getTitle());
+                 if (text != null) {
+                     addLine(Vocabulary.Keys.Format, text);
+                     break;
+                 }
+             }
+         }
+         /*
+          * Write the first description about the spatio-temporal extent, then draw all geographic bounding boxes
+          * on a world map. If the bounding box encompasses the whole world, replace it by a "World" description.
+          * The reason is that drawing a box over the whole world is not very informative; it rather looks like a
+          * border around the image.
+          */
+         text = null;
+         Identifier identifier = null;
+         for (final Extent extent : nonNull(info.getExtents())) {
+             if (extent != null) {
+                 if (text == null) {
+                     text = owner.string(extent.getDescription());
+                 }
+                 for (final GeographicExtent ge : nonNull(extent.getGeographicElements())) {
+                     if (identifier == null && ge instanceof GeographicDescription) {
+                         identifier = ((GeographicDescription) ge).getGeographicIdentifier();
+                     }
+                     if (!isWorld && ge instanceof GeographicBoundingBox) {
+                         isWorld = drawOnMap((GeographicBoundingBox) ge);
+                     }
+                 }
+             }
+         }
+         if (text == null) {
+             text = IdentifiedObjects.toString(identifier);
+         }
+         if (isWorld) {
+             clearWorldMap();
+             if (text == null) {
+                 text = owner.vocabulary.getString(Vocabulary.Keys.World);
+             }
+         }
+         addLine(Vocabulary.Keys.Extent, text);
+         setRowIndex(extentOnMap, nextRowIndex());
+     }
+ 
+     /**
+      * Draws all given geographic bounding boxes on the map.
+      */
+     private void drawOnMap(final Set<GeographicBoundingBox> boxes) {
+         if (boxes.isEmpty()) {
+             clearWorldMap();
+             return;
+         }
+         for (final GeographicBoundingBox box : boxes) {
+             isWorld = drawOnMap(box);
+             if (isWorld) {
+                 clearWorldMap();
+                 return;
+             }
+         }
+     }
+ 
+     /**
+      * Draws the given geographic bounding box on the map. This method can be invoked many times
+      * if there is many bounding boxes on the same map.
+      *
+      * @param  bbox  the bounding box to draw.
+      * @return {@code true} if the given bounding box encompasses the whole world.
+      */
+     private boolean drawOnMap(final GeographicBoundingBox bbox) {
+         double north = Latitude.clamp(bbox.getNorthBoundLatitude());
+         double south = Latitude.clamp(bbox.getSouthBoundLatitude());
+         double east  =                bbox.getEastBoundLongitude();
+         double west  =                bbox.getWestBoundLongitude();
+         if (Math.abs(east - west) >= (Longitude.MAX_VALUE - Longitude.MIN_VALUE - 2*Formulas.ANGULAR_TOLERANCE)) {
+             if (north >= Latitude.MAX_VALUE - Formulas.ANGULAR_TOLERANCE &&
+                 south <= Latitude.MIN_VALUE + Formulas.ANGULAR_TOLERANCE)
+             {
+                 return true;                            // Bounding box encompasses the whole world.
+             }
+             west = Longitude.MIN_VALUE;
+             east = Longitude.MAX_VALUE;                 // Whole world in longitudes, but not in latitude.
+         } else {
+             if (west != 180) west = Longitude.normalize(west);
+             if (east != 180) east = Longitude.normalize(east);
+             if (east < west) {
+                 east += Longitude.MAX_VALUE - Longitude.MIN_VALUE;      // Box crosses the anti-meridian.
+             }
+         }
+         if (north >= south && Double.isFinite(east) && Double.isFinite(west)) {
+             double x = MAP_WIDTH  / 2 + west;
+             double y = MAP_HEIGHT / 2 - north;
+             double w = east  - west;
+             double h = north - south;
+             if (w < MIN_RECT_SIZE) {
+                 x -= (MIN_RECT_SIZE - w) / 2;
+                 w  =  MIN_RECT_SIZE;
+             }
+             if (h < MIN_RECT_SIZE) {
+                 y -= (MIN_RECT_SIZE - h) / 2;
+                 h  =  MIN_RECT_SIZE;
+             }
+             final double wi = Math.min(w, MAP_WIDTH - x);               // Width of part inside [-180 … +180]°.
+             w -= wi;                                                    // Width of part not drawn by `wi`.
+             final boolean crossAntimeridian = (w > 0);
+             /*
+              * At this point we got the coordinates of the rectangle to draw, adjusted for making sure
+              * that they are inside valid ranges. The `w` variable is usually 0, unless we had to cut
+              * the rectangle in two parts because of anti-meridian crossing.
+              */
+             if (isWorldMapEmpty()) {
+                 drawMapBackground();
+             }
+             final GraphicsContext gc = extentOnMap.getGraphicsContext2D();
+             gc.setStroke(Color.DARKBLUE);
+             gc.setGlobalAlpha(0.1);
+             gc.fillRect(x, y, wi, h);
+             if (crossAntimeridian) {
+                 gc.fillRect(0, y, w, h);            // Second half of rectangle crossing anti-meridian.
+             }
+             gc.setGlobalAlpha(1.0);
+             if (!crossAntimeridian) {
+                 gc.strokeRect(x, y, wi, h);
+             } else {
+                 double xw = x + wi;
+                 double yh = y + h;
+                 gc.strokePolyline(new double[] {xw, x, x,  xw},
+                                   new double[] {y,  y, yh, yh}, 4);
+                 gc.strokePolyline(new double[] {0, w, w,  0},
+                                   new double[] {y, y, yh, yh}, 4);
+             }
+         }
+         return false;
+     }
+ 
+     /**
+      * Draws the map where bounding boxes will be overlay.
+      */
+     private boolean drawMapBackground() {
+         final Image image = MetadataSummary.getWorldMap();
+         if (image == null) {
+             return false;
+         }
+         extentOnMap.setWidth (image.getWidth());
+         extentOnMap.setHeight(image.getHeight());
+         extentOnMap.getGraphicsContext2D().drawImage(image, 0, 0);
+         return true;
+     }
+ }
diff --cc core/sis-feature/src/test/java/org/apache/sis/filter/PeriodLiteral.java
index 3adffe2,ab10b06..49e4412
--- a/core/sis-feature/src/test/java/org/apache/sis/filter/PeriodLiteral.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/filter/PeriodLiteral.java
@@@ -18,16 -18,20 +18,20 @@@ package org.apache.sis.filter
  
  import java.util.Date;
  import java.io.Serializable;
+ import org.opengis.util.ScopedName;
 -import org.opengis.metadata.Identifier;
+ import org.apache.sis.test.TestUtilities;
+ 
+ // Branch-dependent imports
+ import org.opengis.feature.Feature;
+ import org.opengis.filter.Expression;
+ import org.opengis.filter.Literal;
  import org.opengis.temporal.Period;
  import org.opengis.temporal.Duration;
  import org.opengis.temporal.RelativePosition;
  import org.opengis.temporal.TemporalPosition;
  import org.opengis.temporal.TemporalPrimitive;
  import org.opengis.temporal.TemporalGeometricPrimitive;
- import org.opengis.filter.expression.Literal;
- import org.opengis.filter.expression.ExpressionVisitor;
 +import org.opengis.referencing.ReferenceIdentifier;
- import org.apache.sis.test.TestUtilities;
  
  
  /**
@@@ -79,7 -75,8 +75,8 @@@ final strictfp class PeriodLiteral impl
      }
  
      /** Not needed for the tests. */
 -    @Override public Identifier       getName()                              {throw new UnsupportedOperationException();}
 +    @Override public ReferenceIdentifier getName()                           {throw new UnsupportedOperationException();}
+     @Override public ScopedName       getFunctionName()                      {throw new UnsupportedOperationException();}
      @Override public RelativePosition relativePosition(TemporalPrimitive o)  {throw new UnsupportedOperationException();}
      @Override public Duration         distance(TemporalGeometricPrimitive o) {throw new UnsupportedOperationException();}
      @Override public Duration         length()                               {throw new UnsupportedOperationException();}
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/HardCodedCitations.java
index f23a5eb,33e3787..a41e840
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/HardCodedCitations.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/HardCodedCitations.java
@@@ -90,12 -88,11 +90,12 @@@ public final strictfp class HardCodedCi
       */
      public static final DefaultCitation EPSG;
      static {
-         final DefaultOnlineResource r = new DefaultOnlineResource(URI.create("http://www.epsg.org"));
+         final DefaultOnlineResource r = new DefaultOnlineResource(URI.create("https://epsg.org/"));
          r.setFunction(OnLineFunction.INFORMATION);
  
 -        final DefaultResponsibility p = new DefaultResponsibility(Role.PRINCIPAL_INVESTIGATOR, null,
 -                new DefaultOrganisation("International Association of Oil & Gas Producers", null, null, new DefaultContact(r)));
 +        final DefaultResponsibleParty p = new DefaultResponsibleParty(Role.PRINCIPAL_INVESTIGATOR);
 +        p.setParties(singleton(new DefaultOrganisation("International Association of Oil & Gas Producers",
 +                null, null, new DefaultContact(r))));
  
          final DefaultCitation c = new DefaultCitation("EPSG Geodetic Parameter Dataset");
          c.getPresentationForms().add(PresentationForm.TABLE_DIGITAL);
diff --cc core/sis-referencing/src/main/java/org/apache/sis/referencing/Properties.java
index 10c7911,6ad7f91..de893f1
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/Properties.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/Properties.java
@@@ -24,11 -24,13 +24,13 @@@ import org.opengis.util.GenericName
  import org.opengis.referencing.datum.Datum;
  import org.opengis.referencing.ReferenceSystem;
  import org.opengis.referencing.IdentifiedObject;
 +import org.opengis.referencing.ReferenceIdentifier;
  import org.opengis.referencing.operation.CoordinateOperation;
  import org.opengis.referencing.operation.OperationMethod;
+ import org.opengis.referencing.operation.SingleOperation;
  import org.opengis.metadata.quality.PositionalAccuracy;
  import org.apache.sis.internal.util.AbstractMap;
+ import org.apache.sis.internal.referencing.CoordinateOperations;
  import org.apache.sis.util.Deprecable;
  
  
diff --cc core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java
index dd64de3,8997504..b3c2b57
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java
@@@ -977,31 -1010,14 +1010,29 @@@ public class CoordinateOperationFinder 
              int delta = source.getCoordinateSystem().getDimension();
              final int startAtDimension = endAtDimension;
              endAtDimension += delta;
-             /*
-              * Constructs the pass through transform only if there is at least one coordinate to pass.
-              * Actually the code below would work inconditionally, but we perform this check anyway
-              * for avoiding the creation of intermediate objects.
-              */
-             if (!(startAtDimension == 0 && endAtDimension == remainingSourceDimensions)) {
+             final int numTrailingCoordinates = remainingSourceDimensions - endAtDimension;
+             CoordinateOperation subOperation = info.operation;
+             if ((startAtDimension | numTrailingCoordinates) != 0) {
 -                subOperation = new DefaultPassThroughOperation(IdentifiedObjects.getProperties(subOperation),
 -                        stepSourceCRS, stepTargetCRS, subOperation, startAtDimension, numTrailingCoordinates);
 +                final Map<String,?> properties = IdentifiedObjects.getProperties(subOperation);
 +                /*
 +                 * The DefaultPassThroughOperation constuctor expect a SingleOperation.
 +                 * In most case, the 'subOperation' is already of this kind. However if
 +                 * it is not, try to copy it in such object.
 +                 */
 +                final SingleOperation op;
 +                if (SubTypes.isSingleOperation(subOperation)) {
 +                    op = (SingleOperation) subOperation;
 +                } else {
++                    final MathTransform subTransform = subOperation.getMathTransform();
 +                    op = factorySIS.createSingleOperation(properties,
 +                            subOperation.getSourceCRS(), subOperation.getTargetCRS(), null,
 +                            new DefaultOperationMethod(subTransform), subTransform);
 +                }
 +                subOperation = new DefaultPassThroughOperation(properties, stepSourceCRS, stepTargetCRS,
-                         op, startAtDimension, remainingSourceDimensions - endAtDimension);
++                        op, startAtDimension, numTrailingCoordinates);
              }
              /*
-              * Concatenate the operation with the ones we have found so far, and use the current 'stepTargetCRS'
+              * Concatenate the operation with the ones we have found so far, and use the current `stepTargetCRS`
               * as the source CRS for the next operation step. We also need to adjust the dimension indices,
               * since the previous operations may have removed some dimensions. Note that the delta may also
               * be negative in a few occasions.
diff --cc core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
index 43f8db0,505f3ec..a5021e2
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
@@@ -785,10 -882,10 +882,10 @@@ class CoordinateOperationRegistry 
          /*
           * Reuse the same operation method, but we may need to change its number of dimension.
           * The capability to resize an OperationMethod is specific to Apache SIS, so we must
-          * be prepared to see the 'redimension' call fails. In such case, we will try to get
+          * be prepared to see the `redimension` call fails. In such case, we will try to get
           * the SIS implementation of the operation method and try again.
           */
 -        if (operation instanceof SingleOperation) {
 +        if (SubTypes.isSingleOperation(operation)) {
              final SingleOperation single = (SingleOperation) operation;
              properties.put(CoordinateOperations.PARAMETERS_KEY, single.getParameterValues());
              if (method == null) {
diff --cc core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
index 0a7026c,717129a..38e0cfb
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
@@@ -71,10 -68,10 +71,10 @@@ public class DefaultPassThroughOperatio
       *
       * @see #getOperation()
       */
 -    private CoordinateOperation operation;
 +    private SingleOperation operation;
  
      /**
-      * Constructs a single operation from a set of properties.
+      * Constructs a pass-through operation from a set of properties.
       * The properties given in argument follow the same rules than for the
       * {@linkplain AbstractCoordinateOperation#AbstractCoordinateOperation(Map, CoordinateReferenceSystem,
       * CoordinateReferenceSystem, CoordinateReferenceSystem, MathTransform) super-class constructor}.
diff --cc ide-project/NetBeans/nbproject/build-impl.xml~
index 0000000,fb2b9ce..7cbe9a0
mode 000000,100644..100644
--- a/ide-project/NetBeans/nbproject/build-impl.xml~
+++ b/ide-project/NetBeans/nbproject/build-impl.xml~
@@@ -1,0 -1,2149 +1,2131 @@@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ *** GENERATED FROM project.xml - DO NOT EDIT  ***
+ ***         EDIT ../build.xml INSTEAD         ***
+ 
+ For the purpose of easier reading the script
+ is divided into following sections:
+ 
+   - initialization
+   - compilation
+   - jar
+   - execution
+   - debugging
+   - javadoc
+   - test compilation
+   - test execution
+   - test debugging
+   - applet
+   - cleanup
+ 
+         -->
 -<project xmlns:if="ant:if" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" xmlns:unless="ant:unless" basedir=".." default="default" name="Apache_SIS_on_GeoAPI_4.0-impl">
++<project xmlns:if="ant:if" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" xmlns:unless="ant:unless" basedir=".." default="default" name="Apache_SIS_on_GeoAPI_3.1-impl">
+     <fail message="Please build using Ant 1.8.0 or higher.">
+         <condition>
+             <not>
+                 <antversion atleast="1.8.0"/>
+             </not>
+         </condition>
+     </fail>
+     <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
+     <!-- 
+                 ======================
+                 INITIALIZATION SECTION 
+                 ======================
+             -->
+     <target name="-pre-init">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="-pre-init" name="-init-private">
+         <property file="nbproject/private/config.properties"/>
+         <property file="nbproject/private/configs/${config}.properties"/>
+         <property file="nbproject/private/private.properties"/>
+     </target>
+     <target depends="-pre-init,-init-private" name="-init-user">
+         <property file="${user.properties.file}"/>
+         <!-- The two properties below are usually overridden -->
+         <!-- by the active platform. Just a fallback. -->
+         <property name="default.javac.source" value="1.6"/>
+         <property name="default.javac.target" value="1.6"/>
+     </target>
+     <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+         <property file="nbproject/configs/${config}.properties"/>
+         <property file="nbproject/project.properties"/>
+     </target>
+     <target name="-init-modules-supported">
+         <condition property="modules.supported.internal" value="true">
+             <not>
+                 <matches pattern="1\.[0-8](\..*)?" string="${javac.source}"/>
+             </not>
+         </condition>
+     </target>
+     <target depends="-init-modules-supported" if="modules.supported.internal" name="-init-macrodef-modulename">
+         <macrodef name="modulename" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute name="property"/>
+             <attribute name="sourcepath"/>
+             <sequential>
+                 <loadresource property="@{property}" quiet="true">
+                     <javaresource classpath="@{sourcepath}" name="module-info.java" parentFirst="false"/>
+                     <filterchain>
+                         <stripjavacomments/>
+                         <linecontainsregexp>
+                             <regexp pattern="module .* \{"/>
+                         </linecontainsregexp>
+                         <tokenfilter>
+                             <linetokenizer/>
+                             <replaceregex flags="s" pattern="(\s*module\s+)(\S*)(\s*\{.*)" replace="\2"/>
+                         </tokenfilter>
+                         <striplinebreaks/>
+                     </filterchain>
+                 </loadresource>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-modules-supported,-init-macrodef-modulename" if="modules.supported.internal" name="-init-source-module-properties">
+         <fail message="Java 9 support requires Ant 1.10.0 or higher.">
+             <condition>
+                 <not>
+                     <antversion atleast="1.10.0"/>
+                 </not>
+             </condition>
+         </fail>
+         <j2seproject3:modulename property="module.name" sourcepath="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.jpn-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}"/>
+         <condition property="named.module.internal">
+             <and>
+                 <isset property="module.name"/>
+                 <length length="0" string="${module.name}" when="greater"/>
+             </and>
+         </condition>
+         <condition property="unnamed.module.internal">
+             <not>
+                 <isset property="named.module.internal"/>
+             </not>
+         </condition>
+         <property name="javac.modulepath" value=""/>
+         <property name="run.modulepath" value="${javac.modulepath}"/>
+         <property name="module.build.classes.dir" value="${build.classes.dir}"/>
+         <property name="debug.modulepath" value="${run.modulepath}"/>
+         <property name="javac.upgrademodulepath" value=""/>
+         <property name="run.upgrademodulepath" value="${javac.upgrademodulepath}"/>
+         <condition else="" property="javac.systemmodulepath.cmd.line.arg" value="--system '${javac.systemmodulepath}'">
+             <and>
+                 <isset property="javac.systemmodulepath"/>
+                 <length length="0" string="${javac.systemmodulepath}" when="greater"/>
+             </and>
+         </condition>
+         <property name="dist.jlink.dir" value="${dist.dir}/jlink"/>
+         <property name="dist.jlink.output" value="${dist.jlink.dir}/${application.title}"/>
+         <property name="module.name" value=""/>
+     </target>
+     <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property,-init-modules-supported" name="-do-init">
+         <property name="platform.java" value="${java.home}/bin/java"/>
+         <available file="${manifest.file}" property="manifest.available"/>
+         <condition property="splashscreen.available">
+             <and>
+                 <not>
+                     <equals arg1="${application.splash}" arg2="" trim="true"/>
+                 </not>
+                 <available file="${application.splash}"/>
+             </and>
+         </condition>
+         <condition property="main.class.available">
+             <and>
+                 <isset property="main.class"/>
+                 <not>
+                     <equals arg1="${main.class}" arg2="" trim="true"/>
+                 </not>
+             </and>
+         </condition>
+         <condition property="profile.available">
+             <and>
+                 <isset property="javac.profile"/>
+                 <length length="0" string="${javac.profile}" when="greater"/>
+                 <not>
+                     <matches pattern="1\.[0-7](\..*)?" string="${javac.source}"/>
+                 </not>
+             </and>
+         </condition>
+         <condition property="do.archive">
+             <or>
+                 <not>
+                     <istrue value="${jar.archive.disabled}"/>
+                 </not>
+                 <istrue value="${not.archive.disabled}"/>
+             </or>
+         </condition>
+         <condition property="do.archive+manifest.available">
+             <and>
+                 <isset property="manifest.available"/>
+                 <istrue value="${do.archive}"/>
+             </and>
+         </condition>
+         <condition property="do.archive+main.class.available">
+             <and>
+                 <isset property="main.class.available"/>
+                 <istrue value="${do.archive}"/>
+             </and>
+         </condition>
+         <condition property="do.archive+splashscreen.available">
+             <and>
+                 <isset property="splashscreen.available"/>
+                 <istrue value="${do.archive}"/>
+             </and>
+         </condition>
+         <condition property="do.archive+profile.available">
+             <and>
+                 <isset property="profile.available"/>
+                 <istrue value="${do.archive}"/>
+             </and>
+         </condition>
+         <condition property="have.tests">
+             <or>
+                 <available file="${test.javafx.dir}"/>
+                 <available file="${test.webapp.dir}"/>
+                 <available file="${test.console.dir}"/>
+                 <available file="${test.portrayal.dir}"/>
+                 <available file="${test.earth-obs.dir}"/>
+                 <available file="${test.geotiff.dir}"/>
+                 <available file="${test.netcdf.dir}"/>
+                 <available file="${test.shapefile.dir}"/>
+                 <available file="${test.sql.dir}"/>
+                 <available file="${test.xmlstore.dir}"/>
+                 <available file="${test.storage.dir}"/>
+                 <available file="${test.feature.dir}"/>
+                 <available file="${test.referencing.dir}"/>
+                 <available file="${test.ref-by-id.dir}"/>
+                 <available file="${test.metadata.dir}"/>
+                 <available file="${test.utility.dir}"/>
+                 <available file="${test.fra-profile.dir}"/>
+                 <available file="${test.jpn-profile.dir}"/>
+                 <available file="${test.gdal.dir}"/>
+             </or>
+         </condition>
+         <condition property="have.sources">
+             <or>
+                 <available file="${src.local-src.dir}"/>
+                 <available file="${src.javafx.dir}"/>
+                 <available file="${src.webapp.dir}"/>
+                 <available file="${src.console.dir}"/>
+                 <available file="${src.portrayal.dir}"/>
+                 <available file="${src.earth-obs.dir}"/>
+                 <available file="${src.geotiff.dir}"/>
+                 <available file="${src.netcdf.dir}"/>
+                 <available file="${src.shapefile.dir}"/>
+                 <available file="${src.sql.dir}"/>
+                 <available file="${src.xmlstore.dir}"/>
+                 <available file="${src.storage.dir}"/>
+                 <available file="${src.feature.dir}"/>
+                 <available file="${src.referencing.dir}"/>
+                 <available file="${src.ref-by-id.dir}"/>
+                 <available file="${src.metadata.dir}"/>
+                 <available file="${src.utility.dir}"/>
+                 <available file="${src.fra-profile.dir}"/>
+                 <available file="${src.jpn-profile.dir}"/>
+                 <available file="${src.gdal.dir}"/>
+                 <available file="${src.c.gdal.dir}"/>
+             </or>
+         </condition>
+         <condition property="netbeans.home+have.tests">
+             <and>
+                 <isset property="netbeans.home"/>
+                 <isset property="have.tests"/>
+             </and>
+         </condition>
+         <condition property="no.javadoc.preview">
+             <and>
+                 <isset property="javadoc.preview"/>
+                 <isfalse value="${javadoc.preview}"/>
+             </and>
+         </condition>
+         <property name="run.jvmargs" value=""/>
+         <property name="run.jvmargs.ide" value=""/>
+         <property name="javac.compilerargs" value=""/>
+         <property name="work.dir" value="${basedir}"/>
+         <condition property="no.deps">
+             <and>
+                 <istrue value="${no.dependencies}"/>
+             </and>
+         </condition>
+         <property name="javac.debug" value="true"/>
+         <property name="javadoc.preview" value="true"/>
+         <property name="application.args" value=""/>
+         <property name="source.encoding" value="${file.encoding}"/>
+         <property name="runtime.encoding" value="${source.encoding}"/>
+         <property name="manifest.encoding" value="${source.encoding}"/>
+         <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+             <and>
+                 <isset property="javadoc.encoding"/>
+                 <not>
+                     <equals arg1="${javadoc.encoding}" arg2=""/>
+                 </not>
+             </and>
+         </condition>
+         <property name="javadoc.encoding.used" value="${source.encoding}"/>
+         <property name="includes" value="**"/>
+         <property name="excludes" value=""/>
+         <property name="do.depend" value="false"/>
+         <condition property="do.depend.true">
+             <istrue value="${do.depend}"/>
+         </condition>
+         <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+         <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+             <and>
+                 <isset property="endorsed.classpath"/>
+                 <not>
+                     <equals arg1="${endorsed.classpath}" arg2="" trim="true"/>
+                 </not>
+             </and>
+         </condition>
+         <condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
+             <isset property="profile.available"/>
+         </condition>
+         <condition else="false" property="jdkBug6558476">
+             <and>
+                 <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                 <not>
+                     <os family="unix"/>
+                 </not>
+             </and>
+         </condition>
+         <condition else="false" property="javac.fork">
+             <or>
+                 <istrue value="${jdkBug6558476}"/>
+                 <istrue value="${javac.external.vm}"/>
+             </or>
+         </condition>
+         <property name="jar.index" value="false"/>
+         <property name="jar.index.metainf" value="${jar.index}"/>
+         <property name="copylibs.rebase" value="true"/>
+         <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
+         <condition property="junit.available">
+             <or>
+                 <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
+                 <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
+             </or>
+         </condition>
+         <condition property="testng.available">
+             <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
+         </condition>
+         <condition property="junit+testng.available">
+             <and>
+                 <istrue value="${junit.available}"/>
+                 <istrue value="${testng.available}"/>
+             </and>
+         </condition>
+         <condition else="testng" property="testng.mode" value="mixed">
+             <istrue value="${junit+testng.available}"/>
+         </condition>
+         <condition else="" property="testng.debug.mode" value="-mixed">
+             <istrue value="${junit+testng.available}"/>
+         </condition>
+         <property name="java.failonerror" value="true"/>
+     </target>
+     <target name="-post-init">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+         <fail unless="src.local-src.dir">Must set src.local-src.dir</fail>
+         <fail unless="src.javafx.dir">Must set src.javafx.dir</fail>
+         <fail unless="src.webapp.dir">Must set src.webapp.dir</fail>
+         <fail unless="src.console.dir">Must set src.console.dir</fail>
+         <fail unless="src.portrayal.dir">Must set src.portrayal.dir</fail>
+         <fail unless="src.earth-obs.dir">Must set src.earth-obs.dir</fail>
+         <fail unless="src.geotiff.dir">Must set src.geotiff.dir</fail>
+         <fail unless="src.netcdf.dir">Must set src.netcdf.dir</fail>
+         <fail unless="src.shapefile.dir">Must set src.shapefile.dir</fail>
+         <fail unless="src.sql.dir">Must set src.sql.dir</fail>
+         <fail unless="src.xmlstore.dir">Must set src.xmlstore.dir</fail>
+         <fail unless="src.storage.dir">Must set src.storage.dir</fail>
+         <fail unless="src.feature.dir">Must set src.feature.dir</fail>
+         <fail unless="src.referencing.dir">Must set src.referencing.dir</fail>
+         <fail unless="src.ref-by-id.dir">Must set src.ref-by-id.dir</fail>
+         <fail unless="src.metadata.dir">Must set src.metadata.dir</fail>
+         <fail unless="src.utility.dir">Must set src.utility.dir</fail>
+         <fail unless="src.fra-profile.dir">Must set src.fra-profile.dir</fail>
+         <fail unless="src.jpn-profile.dir">Must set src.jpn-profile.dir</fail>
+         <fail unless="src.gdal.dir">Must set src.gdal.dir</fail>
+         <fail unless="src.c.gdal.dir">Must set src.c.gdal.dir</fail>
+         <fail unless="test.javafx.dir">Must set test.javafx.dir</fail>
+         <fail unless="test.webapp.dir">Must set test.webapp.dir</fail>
+         <fail unless="test.console.dir">Must set test.console.dir</fail>
+         <fail unless="test.portrayal.dir">Must set test.portrayal.dir</fail>
+         <fail unless="test.earth-obs.dir">Must set test.earth-obs.dir</fail>
+         <fail unless="test.geotiff.dir">Must set test.geotiff.dir</fail>
+         <fail unless="test.netcdf.dir">Must set test.netcdf.dir</fail>
+         <fail unless="test.shapefile.dir">Must set test.shapefile.dir</fail>
+         <fail unless="test.sql.dir">Must set test.sql.dir</fail>
+         <fail unless="test.xmlstore.dir">Must set test.xmlstore.dir</fail>
+         <fail unless="test.storage.dir">Must set test.storage.dir</fail>
+         <fail unless="test.feature.dir">Must set test.feature.dir</fail>
+         <fail unless="test.referencing.dir">Must set test.referencing.dir</fail>
+         <fail unless="test.ref-by-id.dir">Must set test.ref-by-id.dir</fail>
+         <fail unless="test.metadata.dir">Must set test.metadata.dir</fail>
+         <fail unless="test.utility.dir">Must set test.utility.dir</fail>
+         <fail unless="test.fra-profile.dir">Must set test.fra-profile.dir</fail>
+         <fail unless="test.jpn-profile.dir">Must set test.jpn-profile.dir</fail>
+         <fail unless="test.gdal.dir">Must set test.gdal.dir</fail>
+         <fail unless="build.dir">Must set build.dir</fail>
+         <fail unless="dist.dir">Must set dist.dir</fail>
+         <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+         <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+         <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+         <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+         <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+         <fail unless="dist.jar">Must set dist.jar</fail>
+     </target>
+     <target name="-init-macrodef-property">
+         <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
+             <attribute name="name"/>
+             <attribute name="value"/>
+             <sequential>
+                 <property name="@{name}" value="${@{value}}"/>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="modules.supported.internal" name="-init-macrodef-javac-with-module">
+         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.jpn-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
+             <attribute default="${build.classes.dir}" name="destdir"/>
+             <attribute default="${javac.classpath}" name="classpath"/>
+             <attribute default="${javac.modulepath}" name="modulepath"/>
+             <attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
+             <attribute default="${javac.processorpath}" name="processorpath"/>
+             <attribute default="${javac.processormodulepath}" name="processormodulepath"/>
+             <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="${javac.debug}" name="debug"/>
+             <attribute default="${empty.dir}" name="sourcepath" unless:set="named.module.internal"/>
+             <attribute default="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.jpn-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" if:set="named.module.internal" name="sourcepath"/>
+             <attribute default="${empty.dir}" name="gensrcdir"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <condition property="warn.excludes.internal">
+                     <and>
+                         <isset property="named.module.internal"/>
+                         <length length="0" string="@{excludes}" trim="true" when="greater"/>
+                     </and>
+                 </condition>
+                 <echo if:set="warn.excludes.internal" level="warning" message="The javac excludes are not supported in the JDK 9 Named Module."/>
+                 <property location="${build.dir}/empty" name="empty.dir"/>
+                 <mkdir dir="${empty.dir}"/>
+                 <mkdir dir="@{apgeneratedsrcdir}"/>
+                 <condition property="processormodulepath.set">
+                     <resourcecount count="0" when="greater">
+                         <path>
+                             <pathelement path="@{processormodulepath}"/>
+                         </path>
+                     </resourcecount>
+                 </condition>
+                 <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                     <src>
+                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                             <include name="*"/>
+                         </dirset>
+                     </src>
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                     <modulepath>
+                         <path path="@{modulepath}"/>
+                     </modulepath>
+                     <upgrademodulepath>
+                         <path path="@{upgrademodulepath}"/>
+                     </upgrademodulepath>
+                     <compilerarg line="${javac.systemmodulepath.cmd.line.arg}"/>
+                     <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                     <compilerarg line="${javac.compilerargs}"/>
+                     <compilerarg if:set="processormodulepath.set" value="--processor-module-path"/>
+                     <compilerarg if:set="processormodulepath.set" path="@{processormodulepath}"/>
+                     <compilerarg unless:set="processormodulepath.set" value="-processorpath"/>
+                     <compilerarg path="@{processorpath}:${empty.dir}" unless:set="processormodulepath.set"/>
+                     <compilerarg line="${ap.processors.internal}"/>
+                     <compilerarg line="${annotation.processing.processor.options}"/>
+                     <compilerarg value="-s"/>
+                     <compilerarg path="@{apgeneratedsrcdir}"/>
+                     <compilerarg line="${ap.proc.none.internal}"/>
+                     <customize/>
+                 </javac>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors" unless="modules.supported.internal">
+         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.jpn-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
+             <attribute default="${build.classes.dir}" name="destdir"/>
+             <attribute default="${javac.classpath}" name="classpath"/>
+             <attribute default="${javac.modulepath}" name="modulepath"/>
+             <attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
+             <attribute default="${javac.processorpath}" name="processorpath"/>
+             <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="${javac.debug}" name="debug"/>
+             <attribute default="${empty.dir}" name="sourcepath"/>
+             <attribute default="${empty.dir}" name="gensrcdir"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <property location="${build.dir}/empty" name="empty.dir"/>
+                 <mkdir dir="${empty.dir}"/>
+                 <mkdir dir="@{apgeneratedsrcdir}"/>
+                 <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                     <src>
+                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                             <include name="*"/>
+                         </dirset>
+                     </src>
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                     <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                     <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                     <compilerarg line="${javac.compilerargs}"/>
+                     <compilerarg value="-processorpath"/>
+                     <compilerarg path="@{processorpath}:${empty.dir}"/>
+                     <compilerarg line="${ap.processors.internal}"/>
+                     <compilerarg line="${annotation.processing.processor.options}"/>
+                     <compilerarg value="-s"/>
+                     <compilerarg path="@{apgeneratedsrcdir}"/>
+                     <compilerarg line="${ap.proc.none.internal}"/>
+                     <customize/>
+                 </javac>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-ap-cmdline-properties,-init-source-module-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.jpn-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
+             <attribute default="${build.classes.dir}" name="destdir"/>
+             <attribute default="${javac.classpath}" name="classpath"/>
+             <attribute default="${javac.modulepath}" name="modulepath"/>
+             <attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
+             <attribute default="${javac.processorpath}" name="processorpath"/>
+             <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="${javac.debug}" name="debug"/>
+             <attribute default="${empty.dir}" name="sourcepath"/>
+             <attribute default="${empty.dir}" name="gensrcdir"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <property location="${build.dir}/empty" name="empty.dir"/>
+                 <mkdir dir="${empty.dir}"/>
+                 <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                     <src>
+                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                             <include name="*"/>
+                         </dirset>
+                     </src>
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                     <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                     <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                     <compilerarg line="${javac.compilerargs}"/>
+                     <customize/>
+                 </javac>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-javac-with-module,-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+         <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.jpn-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}" name="srcdir"/>
+             <attribute default="${build.classes.dir}" name="destdir"/>
+             <attribute default="${javac.classpath}" name="classpath"/>
+             <sequential>
+                 <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                 </depend>
+             </sequential>
+         </macrodef>
+         <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${build.classes.dir}" name="destdir"/>
+             <sequential>
+                 <fail unless="javac.includes">Must set javac.includes</fail>
+                 <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                     <path>
+                         <filelist dir="@{destdir}" files="${javac.includes}"/>
+                     </path>
+                     <globmapper from="*.java" to="*.class"/>
+                 </pathconvert>
+                 <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                 <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                 <delete>
+                     <files includesfile="${javac.includesfile.binary}"/>
+                 </delete>
+                 <delete>
+                     <fileset file="${javac.includesfile.binary}"/>
+                 </delete>
+             </sequential>
+         </macrodef>
+     </target>
+     <target if="${junit.available}" name="-init-macrodef-junit-init">
+         <condition else="false" property="nb.junit.batch" value="true">
+             <and>
+                 <istrue value="${junit.available}"/>
+                 <not>
+                     <isset property="test.method"/>
+                 </not>
+             </and>
+         </condition>
+         <condition else="false" property="nb.junit.single" value="true">
+             <and>
+                 <istrue value="${junit.available}"/>
+                 <isset property="test.method"/>
+             </and>
+         </condition>
+     </target>
+     <target name="-init-test-properties">
+         <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+         <property name="test.binarytestincludes" value=""/>
+         <property name="test.binaryexcludes" value=""/>
+     </target>
+     <target depends="-init-modules-supported" if="modules.supported.internal" name="-init-macrodef-junit-prototype-with-module">
+         <macrodef name="junit-prototype" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <element name="customizePrototype" optional="true"/>
+             <sequential>
+                 <property name="junit.forkmode" value="perTest"/>
+                 <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                     <syspropertyset>
+                         <propertyref prefix="test-sys-prop."/>
+                         <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                     </syspropertyset>
+                     <classpath>
+                         <path path="${run.test.classpath}"/>
+                     </classpath>
+                     <modulepath>
+                         <path path="${run.test.modulepath}"/>
+                     </modulepath>
+                     <formatter type="brief" usefile="false"/>
+                     <formatter type="xml"/>
+                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                     <jvmarg value="-ea"/>
+                     <jvmarg line="${run.test.jvmargs}"/>
+                     <customizePrototype/>
+                 </junit>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-modules-supported" name="-init-macrodef-junit-prototype-without-module" unless="modules.supported.internal">
+         <macrodef name="junit-prototype" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <element name="customizePrototype" optional="true"/>
+             <sequential>
+                 <property name="junit.forkmode" value="perTest"/>
+                 <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                     <syspropertyset>
+                         <propertyref prefix="test-sys-prop."/>
+                         <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                     </syspropertyset>
+                     <classpath>
+                         <path path="${run.test.classpath}"/>
+                     </classpath>
+                     <formatter type="brief" usefile="false"/>
+                     <formatter type="xml"/>
+                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                     <jvmarg value="-ea"/>
+                     <customizePrototype/>
+                 </junit>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-test-properties,-init-macrodef-junit-prototype-with-module,-init-macrodef-junit-prototype-without-module" if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+         <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <j2seproject3:junit-prototype>
+                     <customizePrototype>
+                         <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                         <customize/>
+                     </customizePrototype>
+                 </j2seproject3:junit-prototype>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-test-properties,-init-macrodef-junit-prototype-with-module,-init-macrodef-junit-prototype-without-module" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+         <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <j2seproject3:junit-prototype>
+                     <customizePrototype>
+                         <batchtest todir="${build.test.results.dir}">
+                             <fileset dir="${test.javafx.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.webapp.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.console.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.portrayal.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.earth-obs.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.geotiff.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.netcdf.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.shapefile.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.sql.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.xmlstore.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.storage.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.feature.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.referencing.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.ref-by-id.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.metadata.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.utility.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.fra-profile.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.jpn-profile.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${test.gdal.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                                 <filename name="@{testincludes}"/>
+                             </fileset>
+                             <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                                 <filename name="${test.binarytestincludes}"/>
+                             </fileset>
+                         </batchtest>
+                         <customize/>
+                     </customizePrototype>
+                 </j2seproject3:junit-prototype>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+     <target if="${testng.available}" name="-init-macrodef-testng">
+         <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                     <isset property="test.method"/>
+                 </condition>
+                 <union id="test.set">
+                     <fileset dir="${test.javafx.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.webapp.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.console.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.portrayal.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.earth-obs.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.geotiff.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.netcdf.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.shapefile.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.sql.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.xmlstore.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.storage.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.feature.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.referencing.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.ref-by-id.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.metadata.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.utility.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.fra-profile.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.jpn-profile.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                     <fileset dir="${test.gdal.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                         <filename name="@{testincludes}"/>
+                     </fileset>
+                 </union>
+                 <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
 -                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="Apache_SIS_on_GeoAPI_4.0" testname="TestNG tests" workingDir="${work.dir}">
++                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="Apache_SIS_on_GeoAPI_3.1" testname="TestNG tests" workingDir="${work.dir}">
+                     <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
+                     <propertyset>
+                         <propertyref prefix="test-sys-prop."/>
+                         <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                     </propertyset>
+                     <classpath>
+                         <path path="${run.test.classpath}"/>
+                     </classpath>
+                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                     <customize/>
+                 </testng>
+             </sequential>
+         </macrodef>
+     </target>
+     <target name="-init-macrodef-test-impl">
+         <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <element implicit="true" name="customize" optional="true"/>
+             <sequential>
+                 <echo>No tests executed.</echo>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
+         <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <element implicit="true" name="customize" optional="true"/>
+             <sequential>
+                 <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                     <customize/>
+                 </j2seproject3:junit>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
+         <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <element implicit="true" name="customize" optional="true"/>
+             <sequential>
+                 <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                     <customize/>
+                 </j2seproject3:testng>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
+         <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <sequential>
+                 <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                     <customize>
+                         <jvmarg line="${run.jvmargs}"/>
+                         <jvmarg line="${run.jvmargs.ide}"/>
+                     </customize>
+                 </j2seproject3:test-impl>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
+         <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <element name="customizeDebuggee" optional="true"/>
+             <sequential>
+                 <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                     <customize>
+                         <jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
+                         <customizeDebuggee/>
+                     </customize>
+                 </j2seproject3:junit>
+             </sequential>
+         </macrodef>
+     </target>
+     <target if="${testng.available}" name="-init-macrodef-testng-debug">
+         <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${main.class}" name="testClass"/>
+             <attribute default="" name="testMethod"/>
+             <element name="customize2" optional="true"/>
+             <sequential>
+                 <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
+                     <isset property="test.method"/>
+                 </condition>
 -                <condition else="-suitename Apache_SIS_on_GeoAPI_4.0 -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
++                <condition else="-suitename Apache_SIS_on_GeoAPI_3.1 -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                     <matches pattern=".*\.xml" string="@{testClass}"/>
+                 </condition>
+                 <delete dir="${build.test.results.dir}" quiet="true"/>
+                 <mkdir dir="${build.test.results.dir}"/>
+                 <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
+                     <customizeDebuggee>
+                         <customize2/>
+                         <jvmarg value="-ea"/>
+                         <arg line="${testng.debug.mode}"/>
+                         <arg line="-d ${build.test.results.dir}"/>
+                         <arg line="-listener org.testng.reporters.VerboseReporter"/>
+                         <arg line="${testng.cmd.args}"/>
+                     </customizeDebuggee>
+                 </j2seproject3:debug>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
+         <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${main.class}" name="testClass"/>
+             <attribute default="" name="testMethod"/>
+             <element implicit="true" name="customize2" optional="true"/>
+             <sequential>
+                 <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
+                     <customize2/>
+                 </j2seproject3:testng-debug>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
+         <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <attribute default="${main.class}" name="testClass"/>
+             <attribute default="" name="testMethod"/>
+             <sequential>
+                 <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                     <customizeDebuggee>
+                         <jvmarg line="${run.jvmargs}"/>
+                         <jvmarg line="${run.jvmargs.ide}"/>
+                     </customizeDebuggee>
+                 </j2seproject3:test-debug-impl>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
+         <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${includes}" name="includes"/>
+             <attribute default="${excludes}" name="excludes"/>
+             <attribute default="**" name="testincludes"/>
+             <attribute default="" name="testmethods"/>
+             <attribute default="${main.class}" name="testClass"/>
+             <attribute default="" name="testMethod"/>
+             <sequential>
+                 <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
+                     <customize2>
+                         <syspropertyset>
+                             <propertyref prefix="test-sys-prop."/>
+                             <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                         </syspropertyset>
+                     </customize2>
+                 </j2seproject3:testng-debug-impl>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
+     <!--
+                 pre NB7.2 profiling section; consider it deprecated
+             -->
+     <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
+     <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
+         <macrodef name="resolve">
+             <attribute name="name"/>
+             <attribute name="value"/>
+             <sequential>
+                 <property name="@{name}" value="${env.@{value}}"/>
+             </sequential>
+         </macrodef>
+         <macrodef name="profile">
+             <attribute default="${main.class}" name="classname"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <property environment="env"/>
+                 <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
+                 <java classname="@{classname}" dir="${profiler.info.dir}" failonerror="${java.failonerror}" fork="true" jvm="${profiler.info.jvm}">
+                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                     <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                     <jvmarg line="${profiler.info.jvmargs}"/>
+                     <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                     <arg line="${application.args}"/>
+                     <classpath>
+                         <path path="${run.classpath}"/>
+                     </classpath>
+                     <syspropertyset>
+                         <propertyref prefix="run-sys-prop."/>
+                         <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                     </syspropertyset>
+                     <customize/>
+                 </java>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
+         <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+         <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+     </target>
+     <!--
+                 end of pre NB7.2 profiling section
+             -->
+     <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+         <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
+             <attribute default="${main.class}" name="name"/>
+             <attribute default="${debug.modulepath}" name="modulepath"/>
+             <attribute default="${debug.classpath}" name="classpath"/>
+             <attribute default="" name="stopclassname"/>
+             <sequential>
+                 <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
+                     <modulepath>
+                         <path path="@{modulepath}"/>
+                     </modulepath>
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                 </nbjpdastart>
+             </sequential>
+         </macrodef>
+         <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
+             <attribute default="${build.classes.dir}" name="dir"/>
+             <sequential>
+                 <nbjpdareload>
+                     <fileset dir="@{dir}" includes="${fix.classes}">
+                         <include name="${fix.includes}*.class"/>
+                     </fileset>
+                 </nbjpdareload>
+             </sequential>
+         </macrodef>
+     </target>
+     <target name="-init-debug-args">
+         <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+             <os family="windows"/>
+         </condition>
+         <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+             <isset property="debug.transport"/>
+         </condition>
+     </target>
+     <target depends="-init-debug-args" name="-init-macrodef-debug">
+         <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${module.name}" name="modulename"/>
+             <attribute default="${main.class}" name="classname"/>
+             <attribute default="${debug.modulepath}" name="modulepath"/>
+             <attribute default="${debug.classpath}" name="classpath"/>
+             <element name="customizeDebuggee" optional="true"/>
+             <sequential>
+                 <j2seproject1:java classname="@{classname}" classpath="@{classpath}" modulename="@{modulename}" modulepath="@{modulepath}">
+                     <customize>
+                         <jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
+                         <customizeDebuggee/>
+                     </customize>
+                 </j2seproject1:java>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-source-module-properties" if="named.module.internal" name="-init-macrodef-java-with-module">
+         <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+             <attribute default="${module.name}" name="modulename"/>
+             <attribute default="${main.class}" name="classname"/>
+             <attribute default="${run.modulepath}" name="modulepath"/>
+             <attribute default="${run.upgrademodulepath}" name="upgrademodulepath"/>
+             <attribute default="${run.classpath}" name="classpath"/>
+             <attribute default="jvm" name="jvm"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" module="@{modulename}">
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                     <modulepath>
+                         <pathelement path="@{modulepath}"/>
+                         <pathelement location="${module.build.classes.dir}"/>
+                     </modulepath>
+                     <upgrademodulepath>
+                         <path path="@{upgrademodulepath}"/>
+                     </upgrademodulepath>
+                     <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                     <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                     <jvmarg line="${run.jvmargs}"/>
+                     <jvmarg line="${run.jvmargs.ide}"/>
+                     <syspropertyset>
+                         <propertyref prefix="run-sys-prop."/>
+                         <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                     </syspropertyset>
+                     <customize/>
+                 </java>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-source-module-properties" if="unnamed.module.internal" name="-init-macrodef-java-with-unnamed-module">
+         <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+             <attribute default="" name="modulename"/>
+             <attribute default="${main.class}" name="classname"/>
+             <attribute default="${run.modulepath}" name="modulepath"/>
+             <attribute default="${run.upgrademodulepath}" name="upgrademodulepath"/>
+             <attribute default="${run.classpath}" name="classpath"/>
+             <attribute default="jvm" name="jvm"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                     <modulepath>
+                         <path path="@{modulepath}"/>
+                     </modulepath>
+                     <upgrademodulepath>
+                         <path path="@{upgrademodulepath}"/>
+                     </upgrademodulepath>
+                     <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                     <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                     <jvmarg line="${run.jvmargs}"/>
+                     <jvmarg line="${run.jvmargs.ide}"/>
+                     <syspropertyset>
+                         <propertyref prefix="run-sys-prop."/>
+                         <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                     </syspropertyset>
+                     <customize/>
+                 </java>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-source-module-properties" name="-init-macrodef-java-without-module" unless="modules.supported.internal">
+         <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+             <attribute default="" name="modulename"/>
+             <attribute default="${main.class}" name="classname"/>
+             <attribute default="" name="modulepath"/>
+             <attribute default="${run.classpath}" name="classpath"/>
+             <attribute default="jvm" name="jvm"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
+                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                     <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                     <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                     <jvmarg line="${run.jvmargs}"/>
+                     <jvmarg line="${run.jvmargs.ide}"/>
+                     <classpath>
+                         <path path="@{classpath}"/>
+                     </classpath>
+                     <syspropertyset>
+                         <propertyref prefix="run-sys-prop."/>
+                         <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                     </syspropertyset>
+                     <customize/>
+                 </java>
+             </sequential>
+         </macrodef>
+     </target>
+     <target depends="-init-macrodef-java-with-module, -init-macrodef-java-with-unnamed-module, -init-macrodef-java-without-module" name="-init-macrodef-java"/>
+     <target name="-init-macrodef-copylibs">
+         <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+             <attribute default="${manifest.file}" name="manifest"/>
+             <element name="customize" optional="true"/>
+             <sequential>
+                 <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+                 <pathconvert property="run.classpath.without.build.classes.dir">
+                     <path path="${run.classpath}"/>
+                     <map from="${build.classes.dir.resolved}" to=""/>
+                 </pathconvert>
+                 <pathconvert pathsep=" " property="jar.classpath">
+                     <path path="${run.classpath.without.build.classes.dir}"/>
+                     <chainedmapper>
+                         <flattenmapper/>
+                         <filtermapper>
+                             <replacestring from=" " to="%20"/>
+                         </filtermapper>
+                         <globmapper from="*" to="lib/*"/>
+                     </chainedmapper>
+                 </pathconvert>
+                 <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+                 <copylibs compress="${jar.compress}" excludeFromCopy="${copylibs.excludes}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" manifestencoding="UTF-8" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                     <fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+                     <manifest>
+                         <attribute name="Class-Path" value="${jar.classpath}"/>
+                         <customize/>
+                     </manifest>
+                 </copylibs>
+             </sequential>
+         </macrodef>
+     </target>
+     <target name="-init-presetdef-jar">
+         <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
+             <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifestencoding="UTF-8">
+                 <j2seproject1:fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+             </jar>
+         </presetdef>
+     </target>
+     <target name="-init-ap-cmdline-properties">
+         <property name="annotation.processing.enabled" value="true"/>
+         <property name="annotation.processing.processors.list" value=""/>
+         <property name="annotation.processing.processor.options" value=""/>
+         <property name="annotation.processing.run.all.processors" value="true"/>
+         <property name="javac.processorpath" value="${javac.classpath}"/>
+         <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+         <condition property="ap.supported.internal" value="true">
+             <not>
+                 <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+             </not>
+         </condition>
+     </target>
+     <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+         <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+             <isfalse value="${annotation.processing.run.all.processors}"/>
+         </condition>
+         <condition else="" property="ap.proc.none.internal" value="-proc:none">
+             <isfalse value="${annotation.processing.enabled}"/>
+         </condition>
+     </target>
+     <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+         <property name="ap.cmd.line.internal" value=""/>
+     </target>
+     <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
+     <!--
+                 ===================
+                 COMPILATION SECTION
+                 ===================
+             -->
+     <target name="-deps-jar-init" unless="built-jar.properties">
+         <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
+         <delete file="${built-jar.properties}" quiet="true"/>
+     </target>
+     <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
 -        <echo level="warn" message="Cycle detected: Apache SIS on GeoAPI 4.0 was already built"/>
++        <echo level="warn" message="Cycle detected: Apache SIS on GeoAPI 3.1 was already built"/>
+     </target>
+     <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
+         <mkdir dir="${build.dir}"/>
+         <touch file="${built-jar.properties}" verbose="false"/>
+         <property file="${built-jar.properties}" prefix="already.built.jar."/>
+         <antcall target="-warn-already-built-jar"/>
+         <propertyfile file="${built-jar.properties}">
+             <entry key="${basedir}" value=""/>
+         </propertyfile>
 -        <antcall target="-maybe-call-dep">
 -            <param name="call.built.properties" value="${built-jar.properties}"/>
 -            <param location="${project.GeoAPI}" name="call.subproject"/>
 -            <param location="${project.GeoAPI}/build.xml" name="call.script"/>
 -            <param name="call.target" value="jar"/>
 -            <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
 -            <param name="transfer.not.archive.disabled" value="true"/>
 -            <param name="transfer.do.jlink" value="false"/>
 -        </antcall>
+     </target>
+     <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
+     <target depends="init" name="-check-automatic-build">
+         <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
+     </target>
+     <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
+         <antcall target="clean">
+             <param name="no.dependencies" value="true"/>
+         </antcall>
+     </target>
+     <target depends="init,deps-jar" name="-pre-pre-compile">
+         <mkdir dir="${build.classes.dir}"/>
+     </target>
+     <target name="-pre-compile">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target if="do.depend.true" name="-compile-depend">
+         <pathconvert property="build.generated.subdirs">
+             <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                 <include name="*"/>
+             </dirset>
+         </pathconvert>
+         <j2seproject3:depend srcdir="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${src.jpn-profile.dir}:${src.gdal.dir}:${src.c.gdal.dir}:${build.generated.subdirs}"/>
+     </target>
+     <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
+         <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
+         <copy todir="${build.classes.dir}">
+             <fileset dir="${src.local-src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.javafx.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.webapp.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.portrayal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.geotiff.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.shapefile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.sql.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.xmlstore.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.storage.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.feature.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.referencing.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.ref-by-id.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.metadata.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.utility.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.fra-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.jpn-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${src.c.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+         </copy>
+     </target>
+     <target if="has.persistence.xml" name="-copy-persistence-xml">
+         <mkdir dir="${build.classes.dir}/META-INF"/>
+         <copy todir="${build.classes.dir}/META-INF">
+             <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
+         </copy>
+     </target>
+     <target name="-post-compile">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+     <target name="-pre-compile-single">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+         <j2seproject3:force-recompile/>
+         <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}, module-info.java" sourcepath="${src.local-src.dir}:${src.javafx.dir}:${src.webapp.dir}:${src.console.dir}:${src.portrayal.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.sql.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.ref-by-id.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile [...]
+     </target>
+     <target name="-post-compile-single">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+     <!--
+                 ====================
+                 JAR BUILDING SECTION
+                 ====================
+             -->
+     <target depends="init" name="-pre-pre-jar">
+         <dirname file="${dist.jar}" property="dist.jar.dir"/>
+         <mkdir dir="${dist.jar.dir}"/>
+     </target>
+     <target name="-pre-jar">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,compile" name="-check-module-main-class">
+         <pathconvert property="main.class.file">
+             <string value="${main.class}"/>
+             <unpackagemapper from="*" to="*.class"/>
+         </pathconvert>
+         <condition property="do.module.main.class">
+             <and>
+                 <isset property="main.class.available"/>
+                 <available file="${build.classes.dir}/module-info.class"/>
+                 <available file="${build.classes.dir}/${main.class.file}"/>
+                 <isset property="libs.CopyLibs.classpath"/>
+                 <available classname="org.netbeans.modules.java.j2seproject.moduletask.ModuleMainClass" classpath="${libs.CopyLibs.classpath}"/>
+             </and>
+         </condition>
+     </target>
+     <target depends="-check-module-main-class" if="do.module.main.class" name="-set-module-main-class">
+         <taskdef classname="org.netbeans.modules.java.j2seproject.moduletask.ModuleMainClass" classpath="${libs.CopyLibs.classpath}" name="modulemainclass"/>
+         <modulemainclass failonerror="false" mainclass="${main.class}" moduleinfo="${build.classes.dir}/module-info.class"/>
+     </target>
+     <target depends="init" if="do.archive" name="-do-jar-create-manifest" unless="manifest.available">
+         <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+         <touch file="${tmp.manifest.file}" verbose="false"/>
+     </target>
+     <target depends="init" if="do.archive+manifest.available" name="-do-jar-copy-manifest">
+         <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+         <copy encoding="${manifest.encoding}" file="${manifest.file}" outputencoding="UTF-8" tofile="${tmp.manifest.file}"/>
+     </target>
+     <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
+         <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+             <attribute name="Main-Class" value="${main.class}"/>
+         </manifest>
+     </target>
+     <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+profile.available" name="-do-jar-set-profile">
+         <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+             <attribute name="Profile" value="${javac.profile}"/>
+         </manifest>
+     </target>
+     <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-set-splashscreen">
+         <basename file="${application.splash}" property="splashscreen.basename"/>
+         <mkdir dir="${build.classes.dir}/META-INF"/>
+         <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
+         <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+             <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+         </manifest>
+     </target>
+     <target depends="init,compile" name="-check-do-mkdist">
+         <condition property="do.mkdist">
+             <and>
+                 <isset property="do.archive"/>
+                 <isset property="libs.CopyLibs.classpath"/>
+                 <not>
+                     <istrue value="${mkdist.disabled}"/>
+                 </not>
+                 <not>
+                     <available file="${build.classes.dir}/module-info.class"/>
+                 </not>
+             </and>
+         </condition>
+     </target>
+     <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-check-do-mkdist" if="do.mkdist" name="-do-jar-copylibs">
+         <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+         <echo level="info">To run this application from the command line without Ant, try:</echo>
+         <property location="${dist.jar}" name="dist.jar.resolved"/>
+         <echo level="info">java -jar "${dist.jar.resolved}"</echo>
+     </target>
+     <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-check-do-mkdist" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
+         <j2seproject1:jar manifest="${tmp.manifest.file}"/>
+         <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+         <property location="${dist.jar}" name="dist.jar.resolved"/>
+         <condition else="${dist.jar.resolved}" property="jar.usage.message.class.path.replacement" value="">
+             <isset property="named.module.internal"/>
+         </condition>
+         <pathconvert property="run.classpath.with.dist.jar">
+             <path path="${run.classpath}"/>
+             <map from="${build.classes.dir.resolved}" to="${jar.usage.message.class.path.replacement}"/>
+         </pathconvert>
+         <pathconvert property="run.modulepath.with.dist.jar">
+             <path location="${dist.jar.resolved}"/>
+             <path path="${run.modulepath}"/>
+             <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
+         </pathconvert>
+         <condition else="${run.modulepath}" property="jar.usage.message.run.modulepath.with.dist.jar" value="${run.modulepath.with.dist.jar}">
+             <isset property="named.module.internal"/>
+         </condition>
+         <condition else="" property="jar.usage.message.module.path" value=" -p ${jar.usage.message.run.modulepath.with.dist.jar}">
+             <and>
+                 <isset property="modules.supported.internal"/>
+                 <length length="0" string="${jar.usage.message.run.modulepath.with.dist.jar}" when="greater"/>
+             </and>
+         </condition>
+         <condition else="" property="jar.usage.message.class.path" value=" -cp ${run.classpath.with.dist.jar}">
+             <length length="0" string="${run.classpath.with.dist.jar}" when="greater"/>
+         </condition>
+         <condition else="/${main.class}" property="jar.usage.message.main.class.class.selector" value="">
+             <isset property="do.module.main.class"/>
+         </condition>
+         <condition else=" ${main.class}" property="jar.usage.message.main.class" value=" -m ${module.name}${jar.usage.message.main.class.class.selector}">
+             <isset property="named.module.internal"/>
+         </condition>
+         <condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java}${jar.usage.message.module.path}${jar.usage.message.class.path}${jar.usage.message.main.class}">
+             <isset property="main.class.available"/>
+         </condition>
+         <condition else="debug" property="jar.usage.level" value="info">
+             <isset property="main.class.available"/>
+         </condition>
+         <echo level="${jar.usage.level}" message="${jar.usage.message}"/>
+     </target>
+     <target depends="-do-jar-copylibs" if="do.archive" name="-do-jar-delete-manifest">
+         <delete>
+             <fileset file="${tmp.manifest.file}"/>
+         </delete>
+     </target>
+     <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest" name="-do-jar-without-libraries"/>
+     <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest" name="-do-jar-with-libraries"/>
+     <target name="-post-jar">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,compile,-pre-jar,-set-module-main-class,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
+     <target depends="init,compile,-pre-jar,-do-jar,-post-jar,deploy" description="Build JAR." name="jar"/>
+     <!--
+                 =================
+                 DEPLOY SECTION
+                 =================
+             -->
+     <target name="-pre-deploy">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init" name="-check-jlink">
+         <condition property="do.jlink.internal">
+             <and>
+                 <istrue value="${do.jlink}"/>
+                 <isset property="do.archive"/>
+                 <isset property="named.module.internal"/>
+             </and>
+         </condition>
+     </target>
+     <target depends="init,-do-jar,-post-jar,-pre-deploy,-check-jlink" if="do.jlink.internal" name="-do-deploy">
+         <delete dir="${dist.jlink.dir}" failonerror="false" quiet="true"/>
+         <property name="jlink.launcher.name" value="${application.title}"/>
+         <condition else="${module.name}" property="jlink.add.modules" value="${module.name},${jlink.additionalmodules}">
+             <and>
+                 <isset property="jlink.additionalmodules"/>
+                 <length length="0" string="${jlink.additionalmodules}" when="greater"/>
+             </and>
+         </condition>
+         <condition property="jlink.do.strip.internal">
+             <and>
+                 <isset property="jlink.strip"/>
+                 <istrue value="${jlink.strip}"/>
+             </and>
+         </condition>
+         <condition property="jlink.do.additionalparam.internal">
+             <and>
+                 <isset property="jlink.additionalparam"/>
+                 <length length="0" string="${jlink.additionalparam}" when="greater"/>
+             </and>
+         </condition>
+         <condition property="jlink.do.launcher.internal">
+             <and>
+                 <istrue value="${jlink.launcher}"/>
+                 <isset property="main.class.available"/>
+             </and>
+         </condition>
+         <property name="platform.jlink" value="${jdk.home}/bin/jlink"/>
+         <property name="jlink.systemmodules.internal" value="${jdk.home}/jmods"/>
+         <exec executable="${platform.jlink}">
+             <arg value="--module-path"/>
+             <arg path="${jlink.systemmodules.internal}:${run.modulepath}:${dist.jar}"/>
+             <arg value="--add-modules"/>
+             <arg value="${jlink.add.modules}"/>
+             <arg if:set="jlink.do.strip.internal" value="--strip-debug"/>
+             <arg if:set="jlink.do.launcher.internal" value="--launcher"/>
+             <arg if:set="jlink.do.launcher.internal" value="${jlink.launcher.name}=${module.name}/${main.class}"/>
+             <arg if:set="jlink.do.additionalparam.internal" line="${jlink.additionalparam}"/>
+             <arg value="--output"/>
+             <arg value="${dist.jlink.output}"/>
+         </exec>
+     </target>
+     <target name="-post-deploy">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="-do-jar,-post-jar,-pre-deploy,-do-deploy,-post-deploy" name="deploy"/>
+     <!--
+                 =================
+                 EXECUTION SECTION
+                 =================
+             -->
+     <target depends="init,compile" description="Run a main class." name="run">
+         <j2seproject1:java>
+             <customize>
+                 <arg line="${application.args}"/>
+             </customize>
+         </j2seproject1:java>
+     </target>
+     <target name="-do-not-recompile">
+         <property name="javac.includes.binary" value=""/>
+     </target>
+     <target depends="init,compile-single" name="run-single">
+         <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+         <j2seproject1:java classname="${run.class}"/>
+     </target>
+     <target depends="init,compile-test-single" name="run-test-with-main">
+         <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+         <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+     </target>
+     <!--
+                 =================
+                 DEBUGGING SECTION
+                 =================
+             -->
+     <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+         <j2seproject1:nbjpdastart name="${debug.class}"/>
+     </target>
+     <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+         <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+     </target>
+     <target depends="init,compile" name="-debug-start-debuggee">
+         <j2seproject3:debug>
+             <customizeDebuggee>
+                 <arg line="${application.args}"/>
+             </customizeDebuggee>
+         </j2seproject3:debug>
+     </target>
+     <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
+     <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
+         <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+     </target>
+     <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
+     <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+         <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+         <j2seproject3:debug classname="${debug.class}"/>
+     </target>
+     <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
+     <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+         <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+         <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+     </target>
+     <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+     <target depends="init" name="-pre-debug-fix">
+         <fail unless="fix.includes">Must set fix.includes</fail>
+         <property name="javac.includes" value="${fix.includes}.java"/>
+     </target>
+     <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+         <j2seproject1:nbjpdareload/>
+     </target>
+     <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+     <!--
+                 =================
+                 PROFILING SECTION
+                 =================
+             -->
+     <!--
+                 pre NB7.2 profiler integration
+             -->
+     <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+         <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+         <nbprofiledirect>
+             <classpath>
+                 <path path="${run.classpath}"/>
+             </classpath>
+         </nbprofiledirect>
+         <profile/>
+     </target>
+     <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
+         <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+         <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+         <nbprofiledirect>
+             <classpath>
+                 <path path="${run.classpath}"/>
+             </classpath>
+         </nbprofiledirect>
+         <profile classname="${profile.class}"/>
+     </target>
+     <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
+         <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+         <nbprofiledirect>
+             <classpath>
+                 <path path="${run.classpath}"/>
+             </classpath>
+         </nbprofiledirect>
+         <profile classname="sun.applet.AppletViewer">
+             <customize>
+                 <arg value="${applet.url}"/>
+             </customize>
+         </profile>
+     </target>
+     <target depends="-init-macrodef-junit,profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+         <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+         <nbprofiledirect>
+             <classpath>
+                 <path path="${run.test.classpath}"/>
+             </classpath>
+         </nbprofiledirect>
+         <j2seproject3:junit excludes="${excludes}" includes="${includes}" testincludes="${profile.class}" testmethods="">
+             <customize>
+                 <jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
+                 <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                 <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                 <jvmarg line="${profiler.info.jvmargs}"/>
+                 <classpath>
+                     <path path="${run.test.classpath}"/>
+                 </classpath>
+             </customize>
+         </j2seproject3:junit>
+     </target>
+     <!--
+                 end of pre NB72 profiling section
+             -->
+     <target if="netbeans.home" name="-profile-check">
+         <condition property="profiler.configured">
+             <or>
+                 <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                 <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+             </or>
+         </condition>
+     </target>
+     <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+         <startprofiler/>
+         <antcall target="run"/>
+     </target>
+     <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
+         <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+         <startprofiler/>
+         <antcall target="run-single"/>
+     </target>
+     <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
+     <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
+         <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+         <startprofiler/>
+         <antcall target="test-single"/>
+     </target>
+     <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
+         <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+         <startprofiler/>
+         <antcall target="run-test-with-main"/>
+     </target>
+     <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
+         <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+         <startprofiler/>
+         <antcall target="run-applet"/>
+     </target>
+     <!--
+                 ===============
+                 JAVADOC SECTION
+                 ===============
+             -->
+     <target depends="init" if="have.sources" name="-javadoc-build">
+         <mkdir dir="${dist.javadoc.dir}"/>
+         <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
+             <and>
+                 <isset property="endorsed.classpath.cmd.line.arg"/>
+                 <not>
+                     <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
+                 </not>
+             </and>
+         </condition>
+         <condition else="" property="bug5101868workaround" value="*.java">
+             <matches pattern="1\.[56](\..*)?" string="${java.version}"/>
+         </condition>
+         <condition else="" property="javadoc.html5.cmd.line.arg" value="-html5">
+             <and>
+                 <isset property="javadoc.html5"/>
+                 <available file="${jdk.home}${file.separator}lib${file.separator}jrt-fs.jar"/>
+             </and>
+         </condition>
+         <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version [...]
+             <classpath>
+                 <path path="${javac.classpath}"/>
+             </classpath>
+             <fileset dir="${src.local-src.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.javafx.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.webapp.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.console.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.portrayal.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.earth-obs.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.geotiff.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.netcdf.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.shapefile.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.sql.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.xmlstore.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.storage.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.feature.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.referencing.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.ref-by-id.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.metadata.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.utility.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.fra-profile.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.jpn-profile.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.gdal.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${src.c.gdal.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                 <filename name="**/*.java"/>
+             </fileset>
+             <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                 <include name="**/*.java"/>
+                 <exclude name="*.java"/>
+             </fileset>
+             <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
+             <arg line="${javadoc.html5.cmd.line.arg}"/>
+         </javadoc>
+         <copy todir="${dist.javadoc.dir}">
+             <fileset dir="${src.local-src.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.javafx.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.webapp.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.console.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.portrayal.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.earth-obs.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.geotiff.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.netcdf.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.shapefile.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.sql.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.xmlstore.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.storage.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.feature.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.referencing.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.ref-by-id.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.metadata.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.utility.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.fra-profile.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.jpn-profile.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.gdal.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${src.c.gdal.dir}" excludes="${excludes}" includes="${includes}">
+                 <filename name="**/doc-files/**"/>
+             </fileset>
+             <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                 <include name="**/doc-files/**"/>
+             </fileset>
+         </copy>
+     </target>
+     <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
+         <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+     </target>
+     <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
+     <!--
+                 =========================
+                 TEST COMPILATION SECTION
+                 =========================
+             -->
+     <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+         <mkdir dir="${build.test.classes.dir}"/>
+     </target>
+     <target name="-pre-compile-test">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-javac-module-properties-with-module">
+         <j2seproject3:modulename property="test.module.name" sourcepath="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir}"/>
+         <condition else="${empty.dir}" property="javac.test.sourcepath" value="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir}">
+             <and>
+                 <isset property="test.module.name"/>
+                 <length length="0" string="${test.module.name}" when="greater"/>
+             </and>
+         </condition>
+         <condition else="--patch-module ${module.name}=${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test.gdal.dir} --add-reads ${module.name}=ALL-UNNAMED" prop [...]
+             <and>
+                 <isset property="test.module.name"/>
+                 <length length="0" string="${test.module.name}" when="greater"/>
+             </and>
+         </condition>
+     </target>
+     <target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-run-module-properties">
+         <condition else="${module.name}" property="run.test.addexport.source.module.internal" value="${test.module.name}">
+             <and>
+                 <isset property="test.module.name"/>
+                 <length length="0" string="${test.module.name}" when="greater"/>
+             </and>
+         </condition>
+         <fileset dir="${build.test.classes.dir}" id="run.test.packages.internal" includes="**/*.class"/>
+         <property location="${build.test.classes.dir}" name="build.test.classes.dir.abs.internal"/>
+         <pathconvert pathsep=" " property="run.test.addexports.internal" refid="run.test.packages.internal">
+             <chainedmapper>
+                 <regexpmapper from="^(.*)\Q${file.separator}\E.*\.class$$" to="\1"/>
+                 <filtermapper>
+                     <uniqfilter/>
+                     <replacestring from="${build.test.classes.dir.abs.internal}" to=""/>
+                 </filtermapper>
+                 <cutdirsmapper dirs="1"/>
+                 <packagemapper from="*" to="--add-exports ${run.test.addexport.source.module.internal}/*=ALL-UNNAMED"/>
+             </chainedmapper>
+         </pathconvert>
+         <condition else="--patch-module ${module.name}=${build.test.classes.dir} --add-modules ${module.name} --add-reads ${module.name}=ALL-UNNAMED ${run.test.addexports.internal}" property="run.test.jvmargs" value="--add-modules ${test.module.name} --add-reads ${test.module.name}=ALL-UNNAMED ${run.test.addexports.internal}">
+             <and>
+                 <isset property="test.module.name"/>
+                 <length length="0" string="${test.module.name}" when="greater"/>
+             </and>
+         </condition>
+     </target>
+     <target depends="-init-source-module-properties" name="-init-test-module-properties-without-module" unless="named.module.internal">
+         <property name="javac.test.sourcepath" value="${empty.dir}"/>
+         <property name="javac.test.compilerargs" value=""/>
+         <property name="run.test.jvmargs" value=""/>
+     </target>
+     <target depends="-init-test-javac-module-properties-with-module,-init-test-module-properties-without-module" name="-init-test-module-properties"/>
+     <target if="do.depend.true" name="-compile-test-depend">
+         <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.ref-by-id.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}:${test.jpn-profile.dir}:${test. [...]
+     </target>
+     <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+         <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${javac.test.sourcepath}" srcdir="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}:${test.xmlstore.dir}:${te [...]
+             <customize>
+                 <compilerarg line="${javac.test.compilerargs}"/>
+             </customize>
+         </j2seproject3:javac>
+         <copy todir="${build.test.classes.dir}">
+             <fileset dir="${test.javafx.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.webapp.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.portrayal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.geotiff.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.shapefile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.sql.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.xmlstore.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.storage.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.feature.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.referencing.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.ref-by-id.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.metadata.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.utility.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.fra-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.jpn-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+         </copy>
+     </target>
+     <target name="-post-compile-test">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+     <target name="-pre-compile-test-single">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+         <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+         <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}, module-info.java" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${test.javafx.dir}:${test.webapp.dir}:${test.console.dir}:${test.portrayal.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.sql.dir}: [...]
+             <customize>
+                 <compilerarg line="${javac.test.compilerargs}"/>
+             </customize>
+         </j2seproject3:javac>
+         <copy todir="${build.test.classes.dir}">
+             <fileset dir="${test.javafx.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.webapp.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.portrayal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.geotiff.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.shapefile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.sql.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.xmlstore.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.storage.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.feature.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.referencing.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.ref-by-id.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.metadata.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.utility.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.fra-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.jpn-profile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+             <fileset dir="${test.gdal.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+         </copy>
+     </target>
+     <target name="-post-compile-test-single">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+     <!--
+                 =======================
+                 TEST EXECUTION SECTION
+                 =======================
+             -->
+     <target depends="init" if="have.tests" name="-pre-test-run">
+         <mkdir dir="${build.test.results.dir}"/>
+     </target>
+     <target depends="init,compile-test,-init-test-run-module-properties,-pre-test-run" if="have.tests" name="-do-test-run">
+         <j2seproject3:test includes="${includes}" testincludes="**/*Test.java"/>
+     </target>
+     <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+         <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+     </target>
+     <target depends="init" if="have.tests" name="test-report"/>
+     <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+     <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+     <target depends="init" if="have.tests" name="-pre-test-run-single">
+         <mkdir dir="${build.test.results.dir}"/>
+     </target>
+     <target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+         <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+         <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+     </target>
+     <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+         <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+     </target>
+     <target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+     <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+         <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+         <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+         <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+     </target>
+     <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+         <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+     </target>
+     <target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+     <!--
+                 =======================
+                 TEST DEBUGGING SECTION
+                 =======================
+             -->
+     <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+         <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+         <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+     </target>
+     <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+         <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+         <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+         <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+     </target>
+     <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+         <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+     </target>
+     <target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+     <target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+     <target depends="debug-test-method" name="debug-single-method"/>
+     <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+         <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+     </target>
+     <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+     <!--
+                 =========================
+                 APPLET EXECUTION SECTION
+                 =========================
+             -->
+     <target depends="init,compile-single" name="run-applet">
+         <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+         <j2seproject1:java classname="sun.applet.AppletViewer">
+             <customize>
+                 <arg value="${applet.url}"/>
+             </customize>
+         </j2seproject1:java>
+     </target>
+     <!--
+                 =========================
+                 APPLET DEBUGGING  SECTION
+                 =========================
+             -->
+     <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
+         <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+         <j2seproject3:debug classname="sun.applet.AppletViewer">
+             <customizeDebuggee>
+                 <arg value="${applet.url}"/>
+             </customizeDebuggee>
+         </j2seproject3:debug>
+     </target>
+     <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
+     <!--
+                 ===============
+                 CLEANUP SECTION
+                 ===============
+             -->
+     <target name="-deps-clean-init" unless="built-clean.properties">
+         <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
+         <delete file="${built-clean.properties}" quiet="true"/>
+     </target>
+     <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
 -        <echo level="warn" message="Cycle detected: Apache SIS on GeoAPI 4.0 was already built"/>
++        <echo level="warn" message="Cycle detected: Apache SIS on GeoAPI 3.1 was already built"/>
+     </target>
+     <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
+         <mkdir dir="${build.dir}"/>
+         <touch file="${built-clean.properties}" verbose="false"/>
+         <property file="${built-clean.properties}" prefix="already.built.clean."/>
+         <antcall target="-warn-already-built-clean"/>
+         <propertyfile file="${built-clean.properties}">
+             <entry key="${basedir}" value=""/>
+         </propertyfile>
 -        <antcall target="-maybe-call-dep">
 -            <param name="call.built.properties" value="${built-clean.properties}"/>
 -            <param location="${project.GeoAPI}" name="call.subproject"/>
 -            <param location="${project.GeoAPI}/build.xml" name="call.script"/>
 -            <param name="call.target" value="clean"/>
 -            <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
 -            <param name="transfer.not.archive.disabled" value="true"/>
 -            <param name="transfer.do.jlink" value="false"/>
 -        </antcall>
+     </target>
+     <target depends="init" name="-do-clean">
+         <delete dir="${build.dir}"/>
+         <delete dir="${dist.jlink.output}"/>
+         <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
+     </target>
+     <target name="-post-clean">
+         <!-- Empty placeholder for easier customization. -->
+         <!-- You can override this target in the ../build.xml file. -->
+     </target>
+     <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
+     <target name="-check-call-dep">
+         <property file="${call.built.properties}" prefix="already.built."/>
+         <condition property="should.call.dep">
+             <and>
+                 <not>
+                     <isset property="already.built.${call.subproject}"/>
+                 </not>
+                 <available file="${call.script}"/>
+             </and>
+         </condition>
+     </target>
+     <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
+         <ant antfile="${call.script}" inheritall="false" target="${call.target}">
+             <propertyset>
+                 <propertyref prefix="transfer."/>
+                 <mapper from="transfer.*" to="*" type="glob"/>
+             </propertyset>
+         </ant>
+     </target>
+ </project>
diff --cc ide-project/NetBeans/nbproject/genfiles.properties
index 2039f39,71b14ef..e05d431
--- a/ide-project/NetBeans/nbproject/genfiles.properties
+++ b/ide-project/NetBeans/nbproject/genfiles.properties
@@@ -3,6 -3,6 +3,6 @@@
  build.xml.data.CRC32=58e6b21c
  build.xml.script.CRC32=462eaba0
  build.xml.stylesheet.CRC32=28e38971@1.53.1.46
- nbproject/build-impl.xml.data.CRC32=c66331aa
- nbproject/build-impl.xml.script.CRC32=a8b9b922
- nbproject/build-impl.xml.stylesheet.CRC32=3a2fa800@1.92.0.48
 -nbproject/build-impl.xml.data.CRC32=59eb8bb4
 -nbproject/build-impl.xml.script.CRC32=3caff6e1
 -nbproject/build-impl.xml.stylesheet.CRC32=d549e5cc@1.97.0.48
++nbproject/build-impl.xml.data.CRC32=34ca6989
++nbproject/build-impl.xml.script.CRC32=12b72e40
++nbproject/build-impl.xml.stylesheet.CRC32=d549e5cc@1.99.0.48
diff --cc ide-project/NetBeans/nbproject/project.properties
index 6d18ad7,117e7cb..bc002e6
--- a/ide-project/NetBeans/nbproject/project.properties
+++ b/ide-project/NetBeans/nbproject/project.properties
@@@ -96,34 -105,30 +98,31 @@@ test.jpn-profile.dir = ${project.root}/
  # Those dependencies must exist in the local Maven repository.
  # Those numbers should match the ones declared in the pom.xml files.
  #
 +geoapi.version       = 3.1-SNAPSHOT
  jsr363.version       = 1.0
- jaxb.version         = 2.3.2
- istack.version       = 3.0.8
- activation.version   = 1.1
+ jaxb.version         = 2.3.3
+ istack.version       = 3.0.11
+ activation.version   = 1.2.2
  jama.version         = 1.0.3
- geographlib.version  = 1.50
- guava.version        = 27.0.1-jre
- esri.api.version     = 2.2.3
- jts.version          = 1.16.1
- georss.version       = 0.9.8
- rome.version         = 0.9
- jdom1.version        = 1.0
- jdom2.version        = 2.0.4
+ geographlib.version  = 1.52
+ guava.version        = 30.1-jre
+ re2j.version         = 1.3
+ esri.api.version     = 2.2.4
+ jts.version          = 1.18.2
+ jdom2.version        = 2.0.6
  jee.version          = 8.0.1
  osgi.version         = 6.0.0
- netcdf.version       = 4.6.14
- joda-time.version    = 2.8.1
- httpclient.version   = 4.5.1
- httpcore.version     = 4.4.4
+ netcdf.version       = 5.4.2
+ joda-time.version    = 2.10.3
+ httpclient.version   = 4.5.13
+ httpcore.version     = 4.4.13
  cm-logging.version   = 1.2
- slf4j.version        = 1.7.22
- junit.version        = 4.12
+ slf4j.version        = 1.7.28
+ junit.version        = 4.13.2
  hamcrest.version     = 1.3
  derby.version        = 10.14.2.0
- hsqldb.version       = 2.5.0
- postgresql.version   = 42.2.8
- icons.version        = 3.0.1
+ hsqldb.version       = 2.6.0
+ postgresql.version   = 42.2.23
  
  #
  # Classpaths for compilation, execution and tests.
diff --cc ide-project/NetBeans/nbproject/project.xml
index c7d2ae0,1c0d1e1..7fdc11e
--- a/ide-project/NetBeans/nbproject/project.xml
+++ b/ide-project/NetBeans/nbproject/project.xml
@@@ -21,9 -21,10 +21,10 @@@
      <type>org.netbeans.modules.java.j2seproject</type>
      <configuration>
          <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
 -            <name>Apache SIS on GeoAPI 4.0</name>
 +            <name>Apache SIS on GeoAPI 3.1</name>
              <source-roots>
                  <root id="src.local-src.dir" name="Local sources (unversioned)"/>
+                 <root id="src.javafx.dir" name="JavaFX application"/>
                  <root id="src.webapp.dir" name="Web application"/>
                  <root id="src.console.dir" name="Console"/>
                  <root id="src.portrayal.dir" name="Portrayal"/>
diff --cc pom.xml
index 84281c2,d5f89bb..93c4682
--- a/pom.xml
+++ b/pom.xml
@@@ -560,9 -556,10 +556,10 @@@
      <maven.compiler.source>8</maven.compiler.source>
      <maven.compiler.target>8</maven.compiler.target>
      <sis.plugin.version>${project.version}</sis.plugin.version>
-     <sis.non-free.version>1.0</sis.non-free.version>                 <!-- Used only if "non-free" profile is enabled. -->
+     <sis.non-free.version>1.0</sis.non-free.version>                <!-- Used only if "non-free" profile is activated. -->
+     <javafx.version>17</javafx.version>                             <!-- Used only if "javafx" profile is activated. -->
 -    <geoapi.version>4.0-SNAPSHOT</geoapi.version>
 +    <geoapi.version>3.1-SNAPSHOT</geoapi.version>
-     <jaxb.version>2.3.2</jaxb.version>
+     <jaxb.version>2.3.3</jaxb.version>
    </properties>
  
    <profiles>
diff --cc storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
index d024582,bb76c79..d0e6377
--- 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
@@@ -136,10 -150,10 +150,12 @@@ import org.apache.sis.measure.Units
  import static org.apache.sis.internal.util.StandardDateFormat.MILLISECONDS_PER_DAY;
  
  // Branch-dependent imports
+ import org.opengis.temporal.Duration;
+ import org.opengis.feature.FeatureType;
 +import org.opengis.metadata.citation.ResponsibleParty;
 +import org.opengis.metadata.identification.CharacterSet;
- import org.opengis.feature.FeatureType;
+ import org.opengis.metadata.acquisition.AcquisitionInformation;
 -import org.opengis.metadata.citation.Responsibility;
 +import org.apache.sis.metadata.iso.citation.DefaultResponsibleParty;
  
  
  /**
@@@ -269,9 -284,22 +286,22 @@@ public class MetadataBuilder 
      }
  
      /**
+      * Returns the information about the series, or aggregate dataset, of which the dataset is a part.
+      */
+     private DefaultSeries series() {
+         final DefaultCitation citation = citation();
+         DefaultSeries series = DefaultSeries.castOrCopy(citation.getSeries());
+         if (series == null) {
+             series = new DefaultSeries();
+             citation.setSeries(series);
+         }
+         return series;
+     }
+ 
+     /**
       * Part of the responsible party of the {@linkplain #citation}, or {@code null} if none.
       */
 -    private DefaultResponsibility responsibility;
 +    private DefaultResponsibleParty responsibility;
  
      /**
       * Creates the responsibility object if it does not already exists, then returns it.
@@@ -1210,6 -1248,60 +1251,59 @@@
      }
  
      /**
+      * Adds the name of the series, or aggregate dataset, of which the dataset is a part.
+      * Storage location is:
+      *
+      * <ul>
+      *   <li>{@code metadata/identificationInfo/citation/series/name}</li>
+      * </ul>
+      *
+      * @param  name  name of the series, or {@code null} for no-operation.
+      */
+     public final void addSeries(final CharSequence name) {
+         final InternationalString i18n = trim(name);
+         if (i18n != null) {
+             final DefaultSeries series = series();
+             series.setName(append(series.getName(), i18n));
+         }
+     }
+ 
+     /**
+      * Adds details on which pages of the publication the article was published.
+      * Storage location is:
+      *
+      * <ul>
+      *   <li>{@code metadata/identificationInfo/citation/series/page}</li>
+      * </ul>
+      *
+      * @param  page  the page, or {@code null} for no-operation.
+      */
+     public final void addPage(final CharSequence page) {
 -        final InternationalString i18n = trim(page);
 -        if (i18n != null) {
++        if (page != null) {
+             final DefaultSeries series = series();
 -            series.setPage(append(series.getPage(), i18n));
++            series.setPage(page.toString());
+         }
+     }
+ 
+     /**
+      * Adds details on which pages of the publication the article was published.
+      * Storage location is:
+      *
+      * <ul>
+      *   <li>{@code metadata/identificationInfo/citation/series/page}</li>
+      * </ul>
+      *
+      * @param  page   the page number, or 0 or negative for no-operation.
+      * @param  total  the total number of pages, or 0 or negative if unknown.
+      */
+     public final void addPage(final int page, final int total) {
+         if (page > 0) {
+             addPage(Vocabulary.formatInternational(
+                     (total > 0) ? Vocabulary.Keys.Page_2 : Vocabulary.Keys.Page_1, page, total));
+         }
+     }
+ 
+     /**
       * Adds a brief narrative summary of the resource(s).
       * If a summary already exists, the new one will be appended after a new line.
       * Storage location is:
@@@ -3020,6 -3139,107 +3145,108 @@@ parse:      for (int i = 0; i < length;
      }
  
      /**
+      * Appends information from the metadata of a component.
+      * This is an helper method for building the metadata of an aggregate.
+      * Aggregate metadata should be set before to invoke this method, in particular:
+      *
+      * <ul>
+      *   <li>The aggregated resource {@linkplain #addTitle title}.</li>
+      *   <li>The {@linkplain #addFormatName format} (may not be the same than component format).</li>
+      * </ul>
+      *
+      * This method applies the following heuristic rules (may change in any future version).
+      * Those rules assume that the component metadata was built with {@code MetadataBuilder}
+      * (this assumption determines which metadata elements are inspected).
+      *
+      * <ul>
+      *   <li>Content information is added verbatim. There is usually one instance per component.</li>
+      *   <li>Extents are added as one {@link Extent} per component, but without duplicated values.</li>
+      *   <li>All Coordinate Reference System information are added without duplicated values.</li>
+      *   <li>Some citation information are merged in a single citation.
+      *       The following information are ignored because considered too specific to the component:<ul>
+      *         <li>titles</li>
+      *         <li>identifiers</li>
+      *         <li>series (includes page numbers).</li>
+      *       </ul></li>
+      *   <li>{@linkplain #addCompression Compression} are added (without duplicated value) but not the
+      *       other format information (because the aggregate is assumed to have its own format name).</li>
+      *   <li>Distributor names, but not the other distribution information because the aggregated resource
+      *       may not be distributed in the same way then the components.</li>
+      * </ul>
+      *
+      * @param  component  the component from which to append metadata.
+      */
+     public final void addFromComponent(final Metadata component) {
+         /*
+          * Note: this method contains many loops like below:
+          *
+          *     for (Foo r : info.getFoos()) {
+          *         addIfNotPresent(bla().getFoos(), r);
+          *     }
+          *
+          * We could easily factor out the above pattern in a method, but we don't do that because
+          * it would invoke `bla().getFoos()` before the loop. We want that call to happen only if
+          * the collection contains at least one element. Usually there is only 0 or 1 element.
+          */
+         for (final Identification info : component.getIdentificationInfo()) {
+             final Citation c = info.getCitation();
+             if (c != null) {
+                 // Title, identifiers and series are assumed to not apply (see Javadoc).
+                 final DefaultCitation citation = citation();
 -                for (Responsibility r : c.getCitedResponsibleParties()) {
++                for (ResponsibleParty r : c.getCitedResponsibleParties()) {
+                     addIfNotPresent(citation.getCitedResponsibleParties(), r);
+                 }
+                 for (OnlineResource r : c.getOnlineResources()) {
+                     addIfNotPresent(citation.getOnlineResources(), r);
+                 }
+                 citation.getPresentationForms().addAll(c.getPresentationForms());
+             }
+             final DefaultDataIdentification identification = identification();
+             for (Extent e : info.getExtents()) {
+                 addIfNotPresent(identification.getExtents(), e);
+             }
+             for (Resolution r : info.getSpatialResolutions()) {
+                 addIfNotPresent(identification.getSpatialResolutions(), r);
+             }
+             for (Duration r : info.getTemporalResolutions()) {
+                 addIfNotPresent(identification.getTemporalResolutions(), r);
+             }
+             for (Format r : info.getResourceFormats()) {
+                 addCompression(r.getFileDecompressionTechnique());
+                 // Ignore format name (see Javadoc).
+             }
+             for (Constraints r : info.getResourceConstraints()) {
+                 addIfNotPresent(identification.getResourceConstraints(), r);
+             }
+             identification.getTopicCategories().addAll(info.getTopicCategories());
+             identification.getSpatialRepresentationTypes().addAll(info.getSpatialRepresentationTypes());
+         }
+         final DefaultMetadata metadata = metadata();
+         for (ContentInformation info : component.getContentInfo()) {
+             addIfNotPresent(metadata.getContentInfo(), info);
+         }
+         for (final ReferenceSystem crs : component.getReferenceSystemInfo()) {
+             addReferenceSystem(crs);
+         }
+         for (SpatialRepresentation info : component.getSpatialRepresentationInfo()) {
+             addIfNotPresent(metadata.getSpatialRepresentationInfo(), info);
+         }
+         for (AcquisitionInformation info : component.getAcquisitionInformation()) {
+             addIfNotPresent(metadata.getAcquisitionInformation(), info);
+         }
 -        for (Distribution info : component.getDistributionInfo()) {
++        Distribution di = component.getDistributionInfo();
++        if (di != null) {
+             // See Javadoc about why we copy only the distributors.
 -            for (Distributor r : info.getDistributors()) {
++            for (Distributor r : di.getDistributors()) {
+                 addIfNotPresent(distribution().getDistributors(), r);
+             }
+         }
+         for (Lineage info : component.getResourceLineages()) {
+             addIfNotPresent(metadata.getResourceLineages(), info);
+         }
+     }
+ 
+     /**
       * Returns the metadata (optionally as an unmodifiable object), or {@code null} if none.
       * If {@code freeze} is {@code true}, then the returned metadata instance can not be modified.
       *