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 2018/07/28 15:54:20 UTC

[sis] branch geoapi-3.1 updated (e044c13 -> 794af35)

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 e044c13  Merge branch 'geoapi-4.0' into 'geoapi-3.1'.
     add 3fb3b22  Fix an erroneous conversion factor in unit conversions with salinity. https://issues.apache.org/jira/browse/SIS-413
     add a959842  Documentation and addition of ‱ as a legal symbol.
     add 7730aca  Fix formatting of units based on kg with a scale factor: https://issues.apache.org/jira/browse/SIS-382
     add 9b0583f  NetBeans project configuration and documentation about sis-sqlstore module.
     add 72dc2cc  Drop package prefixes (e.g. "CI_" in "CI_Citation") in name of tables created by MetadataWriter. https://issues.apache.org/jira/browse/SIS-425
     add 4551512  Replace hard-coded citations by entries in the SpatialMetadata database. https://issues.apache.org/jira/browse/SIS-338
     add e666c78  Javadoc clarifications.
     add f3934dd  Split the Create.sql script in two parts: Citations.sql and Contents.sql. The former is for constants in Citations class, while the second is for storage modules.
     add a0b0ab9  Rename ModifiableMetadata.apply(State) as ModifiableMetadata.transition(State) and replace call to freeze() by that transition method.
     add c22c705  Remove the links to http://jira.geotoolkit.org since this server is not alive anymore.
     add f87e4f0  Move CitationsTest down in the test dependencies because the constants now depend on SQL storage.
     add 5d6255e  Introduce a new State mode: COMPLETABLE.
     add aa209d9  Implement and test State.COMPLETABLE.
     add c874fbe  Update the link to Proj4 and improve documentation about the NormalizedProjection.transform(…) expected inputs and outputs.
     add e15aa86  Mollweide : add support for Mollweide operation
     add 71d417d  Review Mollweide projection implementation and test.
     add 188f5f5  Implement Mollweide projection derivative (Jacobian matrix).
     new 794af35  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:
 .../sis/internal/jaxb/NonMarshalledAuthority.java  |   9 +
 .../sis/internal/jaxb/SpecializedIdentifier.java   |   2 +-
 .../sis/internal/jaxb/gco/ObjectReference.java     |   1 -
 .../apache/sis/internal/jaxb/lan/PT_FreeText.java  |   7 +-
 .../apache/sis/internal/jaxb/lan/TextGroup.java    |   1 -
 .../metadata/EllipsoidalHeightCombiner.java        |   4 +-
 .../sis/internal/metadata/MetadataUtilities.java   |  14 +-
 .../apache/sis/internal/metadata}/Resources.java   |  78 ++---
 .../sis/internal/metadata}/Resources.properties    |   9 +-
 .../sis/internal/metadata}/Resources_fr.properties |   9 +-
 .../sis/internal/metadata/ServicesForUtility.java  | 159 ----------
 .../internal/metadata/TransformationAccuracy.java  |   2 +-
 .../sis/internal/metadata/sql/ScriptRunner.java    |  43 ++-
 .../sis/internal/simple/CitationConstant.java      |  58 +++-
 .../org/apache/sis/metadata/MetadataStandard.java  |  68 ++--
 .../apache/sis/metadata/ModifiableMetadata.java    | 341 ++++++++++++---------
 .../org/apache/sis/metadata/PropertyAccessor.java  |   4 +-
 .../java/org/apache/sis/metadata/StateChanger.java |   9 +-
 .../org/apache/sis/metadata/TreeTableView.java     |  57 +++-
 .../iso/DefaultApplicationSchemaInformation.java   |  14 +-
 .../iso/DefaultExtendedElementInformation.java     |  20 +-
 .../apache/sis/metadata/iso/DefaultIdentifier.java |  10 +-
 .../apache/sis/metadata/iso/DefaultMetadata.java   |  25 +-
 .../iso/DefaultMetadataExtensionInformation.java   |   4 +-
 .../sis/metadata/iso/DefaultMetadataScope.java     |   4 +-
 .../org/apache/sis/metadata/iso/ISOMetadata.java   |  20 +-
 .../sis/metadata/iso/ImmutableIdentifier.java      |   4 +-
 .../acquisition/DefaultAcquisitionInformation.java |   2 +-
 .../acquisition/DefaultEnvironmentalRecord.java    |   8 +-
 .../sis/metadata/iso/acquisition/DefaultEvent.java |   8 +-
 .../iso/acquisition/DefaultInstrument.java         |   6 +-
 .../metadata/iso/acquisition/DefaultObjective.java |   2 +-
 .../metadata/iso/acquisition/DefaultOperation.java |  12 +-
 .../sis/metadata/iso/acquisition/DefaultPlan.java  |   6 +-
 .../metadata/iso/acquisition/DefaultPlatform.java  |   4 +-
 .../iso/acquisition/DefaultPlatformPass.java       |   2 +-
 .../iso/acquisition/DefaultRequestedDate.java      |   4 +-
 .../iso/acquisition/DefaultRequirement.java        |   8 +-
 .../sis/metadata/iso/citation/AbstractParty.java   |   2 +-
 .../sis/metadata/iso/citation/Citations.java       | 111 +++----
 .../sis/metadata/iso/citation/DefaultAddress.java  |   8 +-
 .../sis/metadata/iso/citation/DefaultCitation.java |  25 +-
 .../metadata/iso/citation/DefaultCitationDate.java |   4 +-
 .../sis/metadata/iso/citation/DefaultContact.java  |   4 +-
 .../metadata/iso/citation/DefaultIndividual.java   |   2 +-
 .../iso/citation/DefaultOnlineResource.java        |  14 +-
 .../iso/citation/DefaultResponsibility.java        |   2 +-
 .../iso/citation/DefaultResponsibleParty.java      |   6 +-
 .../sis/metadata/iso/citation/DefaultSeries.java   |   6 +-
 .../metadata/iso/citation/DefaultTelephone.java    |   4 +-
 .../iso/constraint/DefaultConstraints.java         |   4 +-
 .../iso/constraint/DefaultReleasability.java       |   2 +-
 .../iso/constraint/DefaultSecurityConstraints.java |   8 +-
 .../sis/metadata/iso/content/DefaultBand.java      |  16 +-
 .../iso/content/DefaultCoverageDescription.java    |  10 +-
 .../DefaultFeatureCatalogueDescription.java        |   8 +-
 .../iso/content/DefaultFeatureTypeInfo.java        |   4 +-
 .../iso/content/DefaultImageDescription.java       |  22 +-
 .../iso/content/DefaultRangeDimension.java         |   4 +-
 .../content/DefaultRangeElementDescription.java    |   4 +-
 .../iso/content/DefaultSampleDimension.java        |  26 +-
 .../metadata/iso/distribution/DefaultDataFile.java |   8 +-
 .../DefaultDigitalTransferOptions.java             |   6 +-
 .../iso/distribution/DefaultDistribution.java      |   2 +-
 .../iso/distribution/DefaultDistributor.java       |   2 +-
 .../metadata/iso/distribution/DefaultFormat.java   |  12 +-
 .../metadata/iso/distribution/DefaultMedium.java   |  10 +-
 .../distribution/DefaultStandardOrderProcess.java  |  14 +-
 .../iso/extent/AbstractGeographicExtent.java       |   2 +-
 .../sis/metadata/iso/extent/DefaultExtent.java     |  15 +-
 .../iso/extent/DefaultGeographicBoundingBox.java   |  40 ++-
 .../iso/extent/DefaultGeographicDescription.java   |   2 +-
 .../iso/extent/DefaultSpatialTemporalExtent.java   |   6 +-
 .../metadata/iso/extent/DefaultTemporalExtent.java |   6 +-
 .../metadata/iso/extent/DefaultVerticalExtent.java |  18 +-
 .../apache/sis/metadata/iso/extent/Extents.java    |   4 +-
 .../iso/identification/AbstractIdentification.java |   8 +-
 .../DefaultAggregateInformation.java               |   2 +-
 .../identification/DefaultAssociatedResource.java  |   8 +-
 .../iso/identification/DefaultBrowseGraphic.java   |   6 +-
 .../iso/identification/DefaultCoupledResource.java |   8 +-
 .../identification/DefaultDataIdentification.java  |   4 +-
 .../iso/identification/DefaultKeywordClass.java    |   6 +-
 .../iso/identification/DefaultKeywords.java        |   6 +-
 .../DefaultOperationChainMetadata.java             |   4 +-
 .../identification/DefaultOperationMetadata.java   |   6 +-
 .../DefaultRepresentativeFraction.java             |   8 +-
 .../iso/identification/DefaultResolution.java      |   2 +-
 .../DefaultServiceIdentification.java              |   6 +-
 .../metadata/iso/identification/DefaultUsage.java  |   8 +-
 .../sis/metadata/iso/lineage/DefaultAlgorithm.java |   4 +-
 .../sis/metadata/iso/lineage/DefaultLineage.java   |   4 +-
 .../iso/lineage/DefaultNominalResolution.java      |   4 +-
 .../metadata/iso/lineage/DefaultProcessStep.java   |  10 +-
 .../iso/lineage/DefaultProcessStepReport.java      |   6 +-
 .../metadata/iso/lineage/DefaultProcessing.java    |   4 +-
 .../sis/metadata/iso/lineage/DefaultSource.java    |  18 +-
 .../maintenance/DefaultMaintenanceInformation.java |  12 +-
 .../sis/metadata/iso/maintenance/DefaultScope.java |   2 +-
 .../iso/maintenance/DefaultScopeDescription.java   |   4 +-
 .../sis/metadata/iso/quality/AbstractElement.java  |  15 +-
 .../iso/quality/DefaultConformanceResult.java      |   6 +-
 .../iso/quality/DefaultCoverageResult.java         |  10 +-
 .../metadata/iso/quality/DefaultDataQuality.java   |   4 +-
 .../iso/quality/DefaultQuantitativeResult.java     |   6 +-
 .../sis/metadata/iso/spatial/DefaultDimension.java |  12 +-
 .../sis/metadata/iso/spatial/DefaultGCP.java       |   2 +-
 .../metadata/iso/spatial/DefaultGCPCollection.java |   6 +-
 .../iso/spatial/DefaultGeometricObjects.java       |   4 +-
 .../metadata/iso/spatial/DefaultGeorectified.java  |  10 +-
 .../iso/spatial/DefaultGeoreferenceable.java       |   8 +-
 .../spatial/DefaultGridSpatialRepresentation.java  |  17 +-
 .../DefaultVectorSpatialRepresentation.java        |   2 +-
 .../org/apache/sis/metadata/sql/Dispatcher.java    |  29 +-
 .../org/apache/sis/metadata/sql/Installer.java     |  34 +-
 .../apache/sis/metadata/sql/MetadataFallback.java  | 141 ++++++++-
 .../apache/sis/metadata/sql/MetadataSource.java    |  24 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |   2 +-
 .../apache/sis/metadata/sql/TableHierarchy.java    |  60 ++--
 .../org/apache/sis/metadata/sql/package-info.java  |   2 +-
 .../main/java/org/apache/sis/util/iso/Types.java   |  42 ++-
 .../org/apache/sis/metadata/sql/Citations.sql      | 228 ++++++++++++++
 .../org/apache/sis/metadata/sql/Contents.sql       |  60 ++++
 .../org/apache/sis/metadata/sql/Create.sql         | 133 --------
 .../internal/jaxb/cat/CodeListMarshallingTest.java |   5 +-
 .../internal/jaxb/lan/FreeTextMarshallingTest.java |   6 +-
 .../sis/metadata/ModifiableMetadataTest.java       | 188 ++++++++++++
 .../apache/sis/metadata/PropertyAccessorTest.java  |   2 -
 .../apache/sis/metadata/TreeTableFormatTest.java   |   4 -
 .../sis/metadata/iso/CustomMetadataTest.java       |   2 -
 .../sis/metadata/iso/ImmutableIdentifierTest.java  |   5 +-
 .../sis/metadata/iso/citation/CitationsTest.java   | 171 ++++++-----
 .../iso/citation/DefaultCitationDateTest.java      |   2 -
 .../metadata/iso/citation/DefaultCitationTest.java |   8 +-
 .../metadata/iso/citation/HardCodedCitations.java  |   8 +-
 .../DefaultRepresentativeFractionTest.java         |   4 +-
 .../quality/AbstractPositionalAccuracyTest.java    |   3 -
 .../sis/metadata/sql/MetadataFallbackVerifier.java | 141 +++++++++
 .../sis/metadata/sql/MetadataSourceTest.java       |  53 +++-
 .../apache/sis/test/suite/MetadataTestSuite.java   |   5 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   5 +-
 .../apache/sis/xml/NilReasonMarshallingTest.java   |   5 +-
 .../org/apache/sis/xml/UUIDMarshallingTest.java    |   5 +-
 .../org/apache/sis/xml/XLinkMarshallingTest.java   |   5 +-
 .../referencing/PositionalAccuracyConstant.java    |   3 +-
 .../{PolarStereographicSouth.java => ESRI.java}    |  83 +++--
 ...ertCylindricalEqualArea.java => Mollweide.java} |  65 ++--
 .../provider/PolarStereographicSouth.java          |  35 +--
 .../apache/sis/referencing/IdentifiedObjects.java  |   2 +-
 .../apache/sis/referencing/NamedIdentifier.java    |   4 +-
 .../factory/ConcurrentAuthorityFactory.java        |   2 -
 .../referencing/factory/sql/EPSGDataAccess.java    |   5 +-
 .../operation/CoordinateOperationRegistry.java     |   2 +-
 .../operation/projection/Mollweide.java            | 182 +++++++++++
 .../operation/projection/NormalizedProjection.java |  33 +-
 ...g.opengis.referencing.operation.OperationMethod |   1 +
 .../referencing/provider/ProvidersTest.java        |   1 +
 .../sis/referencing/NamedIdentifierTest.java       |   2 +-
 .../operation/projection/MollweideTest.java        | 167 ++++++++++
 .../org/apache/sis/test/ReferencingAssert.java     |   2 +-
 .../sis/test/suite/ReferencingTestSuite.java       |   1 +
 .../apache/sis/internal/util/CollectionsExt.java   |  51 ++-
 .../sis/internal/util/TreeFormatCustomization.java |  46 +++
 .../java/org/apache/sis/measure/AbstractUnit.java  |   4 +-
 .../main/java/org/apache/sis/measure/Salinity.java |   7 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |  69 ++++-
 .../java/org/apache/sis/measure/UnitRegistry.java  |  22 +-
 .../main/java/org/apache/sis/measure/Units.java    |  15 +-
 .../java/org/apache/sis/measure/package-info.java  |   2 +-
 .../sis/util/collection/TreeTableFormat.java       |  62 ++--
 .../java/org/apache/sis/util/resources/Errors.java |   7 +-
 .../apache/sis/util/resources/Errors.properties    |   1 -
 .../apache/sis/util/resources/Errors_fr.properties |   1 -
 .../org/apache/sis/measure/UnitFormatTest.java     |  35 ++-
 .../java/org/apache/sis/measure/UnitsTest.java     |  16 +-
 ide-project/NetBeans/build.xml                     |   3 +
 ide-project/NetBeans/nbproject/project.xml         |   4 +-
 .../storage/earthobservation/LandsatReader.java    |   6 +-
 .../org/apache/sis/storage/gdal/Proj4Factory.java  |   2 +-
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   2 +-
 .../org/apache/sis/storage/sql/package-info.java   |  22 +-
 .../sis/internal/storage/AbstractFeatureSet.java   |   2 +-
 .../sis/internal/storage/MetadataBuilder.java      |   2 +-
 .../org/apache/sis/storage/StorageConnector.java   |   6 +-
 184 files changed, 2713 insertions(+), 1379 deletions(-)
 copy {application/sis-javafx/src/main/java/org/apache/sis/internal/gui => core/sis-metadata/src/main/java/org/apache/sis/internal/metadata}/Resources.java (61%)
 copy {application/sis-javafx/src/main/java/org/apache/sis/internal/gui => core/sis-metadata/src/main/java/org/apache/sis/internal/metadata}/Resources.properties (76%)
 copy {application/sis-javafx/src/main/java/org/apache/sis/internal/gui => core/sis-metadata/src/main/java/org/apache/sis/internal/metadata}/Resources_fr.properties (75%)
 create mode 100644 core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Citations.sql
 create mode 100644 core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Contents.sql
 delete mode 100644 core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Create.sql
 create mode 100644 core/sis-metadata/src/test/java/org/apache/sis/metadata/ModifiableMetadataTest.java
 create mode 100644 core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java
 copy core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/{PolarStereographicSouth.java => ESRI.java} (50%)
 copy core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/{LambertCylindricalEqualArea.java => Mollweide.java} (54%)
 create mode 100644 core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mollweide.java
 create mode 100644 core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/MollweideTest.java
 create mode 100644 core/sis-utility/src/main/java/org/apache/sis/internal/util/TreeFormatCustomization.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 794af35cdd2a4dc96906afc2124b05de8cd5a551
Merge: e044c13 188f5f5
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Sat Jul 28 16:33:11 2018 +0200

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

 .../sis/internal/jaxb/NonMarshalledAuthority.java  |   9 +
 .../sis/internal/jaxb/SpecializedIdentifier.java   |   2 +-
 .../sis/internal/jaxb/gco/ObjectReference.java     |   1 -
 .../apache/sis/internal/jaxb/lan/PT_FreeText.java  |   7 +-
 .../apache/sis/internal/jaxb/lan/TextGroup.java    |   1 -
 .../metadata/EllipsoidalHeightCombiner.java        |   4 +-
 .../sis/internal/metadata/MetadataUtilities.java   |  14 +-
 .../apache/sis/internal/metadata/Resources.java    | 128 ++++++++
 .../sis/internal/metadata/Resources.properties     |  23 ++
 .../sis/internal/metadata/Resources_fr.properties  |  28 ++
 .../sis/internal/metadata/ServicesForUtility.java  | 159 ----------
 .../internal/metadata/TransformationAccuracy.java  |   2 +-
 .../sis/internal/metadata/sql/ScriptRunner.java    |  43 ++-
 .../sis/internal/simple/CitationConstant.java      |  58 +++-
 .../org/apache/sis/metadata/MetadataStandard.java  |  68 ++--
 .../apache/sis/metadata/ModifiableMetadata.java    | 341 ++++++++++++---------
 .../org/apache/sis/metadata/PropertyAccessor.java  |   4 +-
 .../java/org/apache/sis/metadata/StateChanger.java |   9 +-
 .../org/apache/sis/metadata/TreeTableView.java     |  57 +++-
 .../iso/DefaultApplicationSchemaInformation.java   |  14 +-
 .../iso/DefaultExtendedElementInformation.java     |  20 +-
 .../apache/sis/metadata/iso/DefaultIdentifier.java |  10 +-
 .../apache/sis/metadata/iso/DefaultMetadata.java   |  25 +-
 .../iso/DefaultMetadataExtensionInformation.java   |   4 +-
 .../sis/metadata/iso/DefaultMetadataScope.java     |   4 +-
 .../org/apache/sis/metadata/iso/ISOMetadata.java   |  20 +-
 .../sis/metadata/iso/ImmutableIdentifier.java      |   4 +-
 .../acquisition/DefaultAcquisitionInformation.java |   2 +-
 .../acquisition/DefaultEnvironmentalRecord.java    |   8 +-
 .../sis/metadata/iso/acquisition/DefaultEvent.java |   8 +-
 .../iso/acquisition/DefaultInstrument.java         |   6 +-
 .../metadata/iso/acquisition/DefaultObjective.java |   2 +-
 .../metadata/iso/acquisition/DefaultOperation.java |  12 +-
 .../sis/metadata/iso/acquisition/DefaultPlan.java  |   6 +-
 .../metadata/iso/acquisition/DefaultPlatform.java  |   4 +-
 .../iso/acquisition/DefaultPlatformPass.java       |   2 +-
 .../iso/acquisition/DefaultRequestedDate.java      |   4 +-
 .../iso/acquisition/DefaultRequirement.java        |   8 +-
 .../sis/metadata/iso/citation/AbstractParty.java   |   2 +-
 .../sis/metadata/iso/citation/Citations.java       | 111 +++----
 .../sis/metadata/iso/citation/DefaultAddress.java  |   8 +-
 .../sis/metadata/iso/citation/DefaultCitation.java |  25 +-
 .../metadata/iso/citation/DefaultCitationDate.java |   4 +-
 .../sis/metadata/iso/citation/DefaultContact.java  |   4 +-
 .../metadata/iso/citation/DefaultIndividual.java   |   2 +-
 .../iso/citation/DefaultOnlineResource.java        |  14 +-
 .../iso/citation/DefaultResponsibility.java        |   2 +-
 .../iso/citation/DefaultResponsibleParty.java      |   6 +-
 .../sis/metadata/iso/citation/DefaultSeries.java   |   6 +-
 .../metadata/iso/citation/DefaultTelephone.java    |   4 +-
 .../iso/constraint/DefaultConstraints.java         |   4 +-
 .../iso/constraint/DefaultReleasability.java       |   2 +-
 .../iso/constraint/DefaultSecurityConstraints.java |   8 +-
 .../sis/metadata/iso/content/DefaultBand.java      |  16 +-
 .../iso/content/DefaultCoverageDescription.java    |  10 +-
 .../DefaultFeatureCatalogueDescription.java        |   8 +-
 .../iso/content/DefaultFeatureTypeInfo.java        |   4 +-
 .../iso/content/DefaultImageDescription.java       |  22 +-
 .../iso/content/DefaultRangeDimension.java         |   4 +-
 .../content/DefaultRangeElementDescription.java    |   4 +-
 .../iso/content/DefaultSampleDimension.java        |  26 +-
 .../metadata/iso/distribution/DefaultDataFile.java |   8 +-
 .../DefaultDigitalTransferOptions.java             |   6 +-
 .../iso/distribution/DefaultDistribution.java      |   2 +-
 .../iso/distribution/DefaultDistributor.java       |   2 +-
 .../metadata/iso/distribution/DefaultFormat.java   |  12 +-
 .../metadata/iso/distribution/DefaultMedium.java   |  10 +-
 .../distribution/DefaultStandardOrderProcess.java  |  14 +-
 .../iso/extent/AbstractGeographicExtent.java       |   2 +-
 .../sis/metadata/iso/extent/DefaultExtent.java     |  15 +-
 .../iso/extent/DefaultGeographicBoundingBox.java   |  40 ++-
 .../iso/extent/DefaultGeographicDescription.java   |   2 +-
 .../iso/extent/DefaultSpatialTemporalExtent.java   |   6 +-
 .../metadata/iso/extent/DefaultTemporalExtent.java |   6 +-
 .../metadata/iso/extent/DefaultVerticalExtent.java |  18 +-
 .../apache/sis/metadata/iso/extent/Extents.java    |   4 +-
 .../iso/identification/AbstractIdentification.java |   8 +-
 .../DefaultAggregateInformation.java               |   2 +-
 .../identification/DefaultAssociatedResource.java  |   8 +-
 .../iso/identification/DefaultBrowseGraphic.java   |   6 +-
 .../iso/identification/DefaultCoupledResource.java |   8 +-
 .../identification/DefaultDataIdentification.java  |   4 +-
 .../iso/identification/DefaultKeywordClass.java    |   6 +-
 .../iso/identification/DefaultKeywords.java        |   6 +-
 .../DefaultOperationChainMetadata.java             |   4 +-
 .../identification/DefaultOperationMetadata.java   |   6 +-
 .../DefaultRepresentativeFraction.java             |   8 +-
 .../iso/identification/DefaultResolution.java      |   2 +-
 .../DefaultServiceIdentification.java              |   6 +-
 .../metadata/iso/identification/DefaultUsage.java  |   8 +-
 .../sis/metadata/iso/lineage/DefaultAlgorithm.java |   4 +-
 .../sis/metadata/iso/lineage/DefaultLineage.java   |   4 +-
 .../iso/lineage/DefaultNominalResolution.java      |   4 +-
 .../metadata/iso/lineage/DefaultProcessStep.java   |  10 +-
 .../iso/lineage/DefaultProcessStepReport.java      |   6 +-
 .../metadata/iso/lineage/DefaultProcessing.java    |   4 +-
 .../sis/metadata/iso/lineage/DefaultSource.java    |  18 +-
 .../maintenance/DefaultMaintenanceInformation.java |  12 +-
 .../sis/metadata/iso/maintenance/DefaultScope.java |   2 +-
 .../iso/maintenance/DefaultScopeDescription.java   |   4 +-
 .../sis/metadata/iso/quality/AbstractElement.java  |  15 +-
 .../iso/quality/DefaultConformanceResult.java      |   6 +-
 .../iso/quality/DefaultCoverageResult.java         |  10 +-
 .../metadata/iso/quality/DefaultDataQuality.java   |   4 +-
 .../iso/quality/DefaultQuantitativeResult.java     |   6 +-
 .../sis/metadata/iso/spatial/DefaultDimension.java |  12 +-
 .../sis/metadata/iso/spatial/DefaultGCP.java       |   2 +-
 .../metadata/iso/spatial/DefaultGCPCollection.java |   6 +-
 .../iso/spatial/DefaultGeometricObjects.java       |   4 +-
 .../metadata/iso/spatial/DefaultGeorectified.java  |  10 +-
 .../iso/spatial/DefaultGeoreferenceable.java       |   8 +-
 .../spatial/DefaultGridSpatialRepresentation.java  |  17 +-
 .../DefaultVectorSpatialRepresentation.java        |   2 +-
 .../org/apache/sis/metadata/sql/Dispatcher.java    |  29 +-
 .../org/apache/sis/metadata/sql/Installer.java     |  34 +-
 .../apache/sis/metadata/sql/MetadataFallback.java  | 141 ++++++++-
 .../apache/sis/metadata/sql/MetadataSource.java    |  24 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |   2 +-
 .../apache/sis/metadata/sql/TableHierarchy.java    |  60 ++--
 .../org/apache/sis/metadata/sql/package-info.java  |   2 +-
 .../main/java/org/apache/sis/util/iso/Types.java   |  42 ++-
 .../org/apache/sis/metadata/sql/Citations.sql      | 228 ++++++++++++++
 .../org/apache/sis/metadata/sql/Contents.sql       |  60 ++++
 .../org/apache/sis/metadata/sql/Create.sql         | 133 --------
 .../internal/jaxb/cat/CodeListMarshallingTest.java |   5 +-
 .../internal/jaxb/lan/FreeTextMarshallingTest.java |   6 +-
 .../sis/metadata/ModifiableMetadataTest.java       | 188 ++++++++++++
 .../apache/sis/metadata/PropertyAccessorTest.java  |   2 -
 .../apache/sis/metadata/TreeTableFormatTest.java   |   4 -
 .../sis/metadata/iso/CustomMetadataTest.java       |   2 -
 .../sis/metadata/iso/ImmutableIdentifierTest.java  |   5 +-
 .../sis/metadata/iso/citation/CitationsTest.java   | 171 ++++++-----
 .../iso/citation/DefaultCitationDateTest.java      |   2 -
 .../metadata/iso/citation/DefaultCitationTest.java |   8 +-
 .../metadata/iso/citation/HardCodedCitations.java  |   8 +-
 .../DefaultRepresentativeFractionTest.java         |   4 +-
 .../quality/AbstractPositionalAccuracyTest.java    |   3 -
 .../sis/metadata/sql/MetadataFallbackVerifier.java | 141 +++++++++
 .../sis/metadata/sql/MetadataSourceTest.java       |  53 +++-
 .../apache/sis/test/suite/MetadataTestSuite.java   |   5 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   5 +-
 .../apache/sis/xml/NilReasonMarshallingTest.java   |   5 +-
 .../org/apache/sis/xml/UUIDMarshallingTest.java    |   5 +-
 .../org/apache/sis/xml/XLinkMarshallingTest.java   |   5 +-
 .../referencing/PositionalAccuracyConstant.java    |   3 +-
 .../{PolarStereographicSouth.java => ESRI.java}    |  83 +++--
 .../internal/referencing/provider/Mollweide.java   |  99 ++++++
 .../provider/PolarStereographicSouth.java          |  35 +--
 .../apache/sis/referencing/IdentifiedObjects.java  |   2 +-
 .../apache/sis/referencing/NamedIdentifier.java    |   4 +-
 .../factory/ConcurrentAuthorityFactory.java        |   2 -
 .../referencing/factory/sql/EPSGDataAccess.java    |   5 +-
 .../operation/CoordinateOperationRegistry.java     |   2 +-
 .../operation/projection/Mollweide.java            | 182 +++++++++++
 .../operation/projection/NormalizedProjection.java |  33 +-
 ...g.opengis.referencing.operation.OperationMethod |   1 +
 .../referencing/provider/ProvidersTest.java        |   1 +
 .../sis/referencing/NamedIdentifierTest.java       |   2 +-
 .../operation/projection/MollweideTest.java        | 167 ++++++++++
 .../org/apache/sis/test/ReferencingAssert.java     |   2 +-
 .../sis/test/suite/ReferencingTestSuite.java       |   1 +
 .../apache/sis/internal/util/CollectionsExt.java   |  51 ++-
 .../sis/internal/util/TreeFormatCustomization.java |  46 +++
 .../java/org/apache/sis/measure/AbstractUnit.java  |   4 +-
 .../main/java/org/apache/sis/measure/Salinity.java |   7 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |  69 ++++-
 .../java/org/apache/sis/measure/UnitRegistry.java  |  22 +-
 .../main/java/org/apache/sis/measure/Units.java    |  15 +-
 .../java/org/apache/sis/measure/package-info.java  |   2 +-
 .../sis/util/collection/TreeTableFormat.java       |  62 ++--
 .../java/org/apache/sis/util/resources/Errors.java |   7 +-
 .../apache/sis/util/resources/Errors.properties    |   1 -
 .../apache/sis/util/resources/Errors_fr.properties |   1 -
 .../org/apache/sis/measure/UnitFormatTest.java     |  35 ++-
 .../java/org/apache/sis/measure/UnitsTest.java     |  16 +-
 ide-project/NetBeans/build.xml                     |   3 +
 ide-project/NetBeans/nbproject/project.xml         |   4 +-
 .../storage/earthobservation/LandsatReader.java    |   6 +-
 .../org/apache/sis/storage/gdal/Proj4Factory.java  |   2 +-
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   2 +-
 .../org/apache/sis/storage/sql/package-info.java   |  22 +-
 .../sis/internal/storage/AbstractFeatureSet.java   |   2 +-
 .../sis/internal/storage/MetadataBuilder.java      |   2 +-
 .../org/apache/sis/storage/StorageConnector.java   |   6 +-
 184 files changed, 2943 insertions(+), 1266 deletions(-)

diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultApplicationSchemaInformation.java
index cba8d6b,14bcb47..ac60d20
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultApplicationSchemaInformation.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultApplicationSchemaInformation.java
@@@ -257,14 -254,10 +257,14 @@@ public class DefaultApplicationSchemaIn
      /**
       * Sets the full application schema given as an ASCII file.
       *
 +     * <div class="warning"><b>Upcoming API change</b><br>
 +     * {@code URI} may be replaced by {@link CharSequence} in GeoAPI 4.0.
 +     * </div>
 +     *
       * @param  newValue  the new ASCII file.
       */
 -    public void setSchemaAscii(final CharSequence newValue) {
 +    public void setSchemaAscii(final URI newValue) {
-         checkWritePermission();
+         checkWritePermission(schemaAscii);
          schemaAscii = newValue;
      }
  
@@@ -288,15 -276,10 +288,15 @@@
      /**
       * Sets the full application schema given as a graphics file.
       *
 +     * <div class="warning"><b>Upcoming API change</b><br>
 +     * As of ISO 19115:2014, {@code URI} is replaced by {@link OnlineResource}.
 +     * This change may be applied in GeoAPI 4.0.
 +     * </div>
 +     *
       * @param  newValue  the new graphics file.
       */
 -    public void setGraphicsFile(final OnlineResource newValue) {
 +    public void setGraphicsFile(final URI newValue) {
-         checkWritePermission();
+         checkWritePermission(graphicsFile);
          graphicsFile = newValue;
      }
  
@@@ -320,15 -298,10 +320,15 @@@
      /**
       * Sets the full application schema given as a software development file.
       *
 +     * <div class="warning"><b>Upcoming API change</b><br>
 +     * As of ISO 19115:2014, {@code URI} is replaced by {@link OnlineResource}.
 +     * This change may be applied in GeoAPI 4.0.
 +     * </div>
 +     *
       * @param  newValue  the new software development file.
       */
 -    public void setSoftwareDevelopmentFile(final OnlineResource newValue) {
 +    public void setSoftwareDevelopmentFile(final URI newValue) {
-         checkWritePermission();
+         checkWritePermission(softwareDevelopmentFile);
          softwareDevelopmentFile = newValue;
      }
  
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultMetadata.java
index b16b150,5cee8a2..1aa20c9
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultMetadata.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultMetadata.java
@@@ -877,9 -874,8 +879,8 @@@ public class DefaultMetadata extends IS
       *
       * @param  newValues  the new contacts.
       */
 -    public void setContacts(final Collection<? extends Responsibility> newValues) {
 -        contacts = writeCollection(newValues, contacts, Responsibility.class);
 +    public void setContacts(final Collection<? extends ResponsibleParty> newValues) {
-         checkWritePermission();
 +        contacts = writeCollection(newValues, contacts, ResponsibleParty.class);
      }
  
      /**
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultOnlineResource.java
index 23b0091,6d8f04d..5c5da01
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultOnlineResource.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultOnlineResource.java
@@@ -210,14 -206,10 +210,14 @@@ public class DefaultOnlineResource exte
      /**
       * Sets the name of the online resource.
       *
 +     * <div class="warning"><b>Upcoming API change — internationalization</b><br>
 +     * The argument type may be changed from {@code String} to {@code InternationalString} in GeoAPI 4.0.
 +     * </div>
 +     *
       * @param  newValue  the new name, or {@code null} if none.
       */
 -    public void setName(final InternationalString newValue) {
 +    public void setName(final String newValue) {
-         checkWritePermission();
+         checkWritePermission(name);
          name = newValue;
      }
  
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultSeries.java
index c1c6fe0,26bcde0..ade0a02
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultSeries.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultSeries.java
@@@ -168,15 -163,10 +168,15 @@@ public class DefaultSeries extends ISOM
      /**
       * Sets information identifying the issue of the series.
       *
 +     * <div class="warning"><b>Upcoming API change — generalization</b><br>
 +     * As of ISO 19115:2014, {@code String} is replaced by the {@link InternationalString} interface.
 +     * This change will be tentatively applied in GeoAPI 4.0.
 +     * </div>
 +     *
       * @param  newValue  the new issue identification, or {@code null} if none.
       */
 -    public void setIssueIdentification(final InternationalString newValue) {
 +    public void setIssueIdentification(final String newValue) {
-         checkWritePermission();
+         checkWritePermission(issueIdentification);
          issueIdentification = newValue;
      }
  
@@@ -199,15 -184,10 +199,15 @@@
      /**
       * Sets details on which pages of the publication the article was published.
       *
 +     * <div class="warning"><b>Upcoming API change — generalization</b><br>
 +     * As of ISO 19115:2014, {@code String} is replaced by the {@link InternationalString} interface.
 +     * This change will be tentatively applied in GeoAPI 4.0.
 +     * </div>
 +     *
       * @param  newValue  the new page, or {@code null} if none.
       */
 -    public void setPage(final InternationalString newValue) {
 +    public void setPage(final String newValue) {
-         checkWritePermission();
+         checkWritePermission(page);
          page = newValue;
      }
  }
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistributor.java
index 2e972bf,3d47d7d..a213eec
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistributor.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistributor.java
@@@ -171,15 -166,10 +171,15 @@@ public class DefaultDistributor extend
      /**
       * Sets the party from whom the resource may be obtained.
       *
 +     * <div class="warning"><b>Upcoming API change — generalization</b><br>
 +     * As of ISO 19115:2014, {@code ResponsibleParty} is replaced by the {@code Responsibility} parent interface.
 +     * This change may be applied in GeoAPI 4.0.
 +     * </div>
 +     *
       * @param  newValue  the new distributor contact.
       */
 -    public void setDistributorContact(final Responsibility newValue) {
 +    public void setDistributorContact(final ResponsibleParty newValue) {
-         checkWritePermission();
+         checkWritePermission(distributorContact);
          distributorContact = newValue;
      }
  
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultScopeDescription.java
index c9c0221,2000a20..5e014a7
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultScopeDescription.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultScopeDescription.java
@@@ -509,14 -458,10 +509,14 @@@ public class DefaultScopeDescription ex
       * If and only if the {@code newValue} is non-null, then this method automatically
       * discards all other properties.
       *
 +     * <div class="warning"><b>Upcoming API change:</b>
 +     * The type of this property may be changed to {@link InternationalString} for ISO 19115:2014 conformance.
 +     * See <a href="http://jira.codehaus.org/browse/GEO-221">GEO-221</a> for more information.</div>
 +     *
       * @param newValue Other class of information.
       */
 -    public void setOther(final InternationalString newValue) {
 +    public void setOther(final String newValue) {
-         checkWritePermission();
+         checkWritePermission(value);
          if (newValue != null || property == OTHER) {
              warningOnOverwrite(OTHER);
              property = OTHER;
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/Dispatcher.java
index e1c7611,6cc95e5..956b3a9
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/Dispatcher.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/Dispatcher.java
@@@ -31,6 -32,6 +32,10 @@@ import org.apache.sis.metadata.ValueExi
  import org.apache.sis.internal.system.Semaphores;
  import org.apache.sis.internal.metadata.Dependencies;
  
++// Branch-dependent imports
++import org.opengis.metadata.citation.Responsibility;
++import org.opengis.metadata.citation.ResponsibleParty;
++
  
  /**
   * The handler for metadata proxy that implement (indirectly) metadata interfaces like
@@@ -126,7 -127,7 +131,7 @@@ final class Dispatcher implements Invoc
       * @return the value to be returned from the public method invoked by the method.
       */
      @Override
--    public Object invoke(final Object proxy, final Method method, final Object[] args) {
++    public Object invoke(final Object proxy, Method method, final Object[] args) {
          final int n = (args != null) ? args.length : 0;
          switch (method.getName()) {
              case "toString": {
@@@ -155,6 -156,6 +160,7 @@@
                   */
                  Object value;
                  try {
++                    method = supercede(method);
                      value = fetchValue(source.getLookupInfo(method.getDeclaringClass()), method);
                  } catch (ReflectiveOperationException | SQLException | MetadataStoreException e) {
                      throw new BackingStoreException(error(method), e);
@@@ -312,4 -317,4 +322,17 @@@
      public String toString() {
          return toString(getClass());
      }
++
++    /**
++     * If the given method is superceded by a new method, the new method.
++     * This is a hack for transition from legacy ISO type to newer type:
++     * {@code ResponsibleParty.getRole()} overriding {@code Responsibility.getRole()}
++     * confuses this {@code Dispatcher} class. We need the method in the base interface.
++     */
++    private static Method supercede(Method method) throws NoSuchMethodException {
++        if (method.getDeclaringClass() == ResponsibleParty.class && "getRole".equals(method.getName())) {
++            method = Responsibility.class.getMethod("getRole");
++        }
++        return method;
++    }
  }
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataFallback.java
index 7a8ec06,4a43928..e74023c
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataFallback.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataFallback.java
@@@ -17,12 -17,21 +17,23 @@@
  package org.apache.sis.metadata.sql;
  
  import org.opengis.util.ControlledVocabulary;
+ import org.opengis.metadata.citation.Role;
  import org.opengis.metadata.citation.Citation;
- import org.apache.sis.internal.metadata.ServicesForUtility;
+ import org.opengis.metadata.citation.PresentationForm;
+ import org.apache.sis.metadata.iso.ImmutableIdentifier;
+ import org.apache.sis.metadata.iso.citation.DefaultCitation;
+ import org.apache.sis.metadata.iso.citation.DefaultOrganisation;
 -import org.apache.sis.metadata.iso.citation.DefaultResponsibility;
+ import org.apache.sis.internal.util.Constants;
+ import org.apache.sis.util.iso.Types;
  import org.apache.sis.util.ArgumentChecks;
  import org.apache.sis.util.logging.WarningListener;
  import org.apache.sis.xml.NilReason;
  
+ import static java.util.Collections.singleton;
+ 
++// Branch-dependent import
++import org.apache.sis.metadata.iso.citation.DefaultResponsibleParty;
++
  
  /**
   * A fallback providing hard-coded values of metadata entities.
@@@ -87,6 -95,130 +97,131 @@@ final class MetadataFallback extends Me
      }
  
      /**
+      * Returns the build-in citation for the given primary key, or {@code null}.
+      * The content in this method should be consistent with the content provided
+      * in the {@code "Citations.sql"} script (this is verified by JUnit tests).
+      *
+      * @param  key  the primary key of the desired citation.
+      * @return the requested citation, or {@code null} if unknown.
+      */
+     static Citation createCitation(final String key) {
+         CharSequence     title;
+         CharSequence     alternateTitle        = null;
+         CharSequence     edition               = null;
+         String           code                  = null;
+         String           codeSpace             = null;
+         String           version               = null;
+         CharSequence     citedResponsibleParty = null;
+         PresentationForm presentationForm      = null;
+         String           copyFrom              = null;      // Copy citedResponsibleParty from those citations.
+         switch (key) {
+             case "ISO 19115-1": {
+                 title     = "Geographic Information — Metadata Part 1: Fundamentals";
+                 edition   = "ISO 19115-1:2014(E)";
+                 code      = "19115-1";
+                 codeSpace = "ISO";
+                 version   = "2014(E)";
+                 citedResponsibleParty = "International Organization for Standardization";
+                 presentationForm = PresentationForm.DOCUMENT_DIGITAL;
+                 break;
+             }
+             case "ISO 19115-2": {
+                 title     = "Geographic Information — Metadata Part 2: Extensions for imagery and gridded data";
+                 edition   = "ISO 19115-2:2009(E)";
+                 code      = "19115-2";
+                 codeSpace = "ISO";
+                 version   = "2009(E)";
+                 copyFrom  = "ISO 19115-1";
+                 presentationForm = PresentationForm.DOCUMENT_DIGITAL;
+                 break;
+             }
+             case "WMS": {
+                 title             = "Web Map Server";
+                 alternateTitle    = "WMS";
+                 edition = version = "1.3";
+                 code              = "WMS";      // Note: OGC internal code is 06-042.
+                 codeSpace         = "OGC";
+                 copyFrom          = "OGC";
+                 presentationForm  = PresentationForm.DOCUMENT_DIGITAL;
+                 break;
+             }
+             case "OGC": {
+                 title                 = "OGC Naming Authority";
+                 code                  = Constants.OGC;
+                 citedResponsibleParty = "Open Geospatial Consortium";
+                 presentationForm      = PresentationForm.DOCUMENT_DIGITAL;
+                 break;
+             }
+             case "IOGP": {          // Not in public API (see Citations.IOGP javadoc)
+                 title = "IOGP Surveying and Positioning Guidance Note 7";
+                 code             = Constants.IOGP;
+                 copyFrom         = Constants.EPSG;
+                 presentationForm = PresentationForm.DOCUMENT_DIGITAL;
+                 break;
+             }
+             case Constants.EPSG: {
+                 title                 = "EPSG Geodetic Parameter Dataset";
+                 alternateTitle        = "EPSG Dataset";
+                 code                  = Constants.EPSG;
+                 codeSpace             = Constants.IOGP;
+                 citedResponsibleParty = "International Association of Oil & Gas producers";
+                 presentationForm      = PresentationForm.TABLE_DIGITAL;
+                 break;
+             }
+             case Constants.SIS: {
+                 title     = "Apache Spatial Information System";
+                 code      = key;
+                 codeSpace = "Apache";
+                 break;
+             }
+             case "ISBN": {
+                 title = "International Standard Book Number";
+                 alternateTitle = key;
+                 break;
+             }
+             case "ISSN": {
+                 title = "International Standard Serial Number";
+                 alternateTitle = key;
+                 break;
+             }
+             case Constants.PROJ4: {
+                 title     = "Proj";
+                 code      = "Proj4";
+                 codeSpace = "OSGeo";
+                 break;
+             }
+             case "IHO S-57": {
+                 title = code     = "S-57";
+                 codeSpace        = "IHO";
+                 version          = "3.1";
+                 presentationForm = PresentationForm.DOCUMENT_DIGITAL;
+                 break;
+             }
+             default: return null;
+         }
+         /*
+          * Do not use the 'c.getFoo().add(foo)' pattern below. Use the 'c.setFoo(singleton(foo))' pattern instead.
+          * This is because this method may be invoked during XML serialization, in which case some getter methods
+          * may return null (for preventing JAXB to marshal some empty elements).
+          */
+         final DefaultCitation c = new DefaultCitation(title);
+         if (alternateTitle        != null) c.setAlternateTitles(singleton(Types.toInternationalString(alternateTitle)));
+         if (edition               != null) c.setEdition(Types.toInternationalString(edition));
+         if (code                  != null) c.setIdentifiers(singleton(new ImmutableIdentifier(null, codeSpace, code, version, null)));
+         if (presentationForm      != null) c.setPresentationForms(singleton(presentationForm));
+         if (citedResponsibleParty != null) {
 -            c.setCitedResponsibleParties(singleton(new DefaultResponsibility(Role.PRINCIPAL_INVESTIGATOR, null,
 -                    new DefaultOrganisation(citedResponsibleParty, null, null, null))));
++            final DefaultResponsibleParty r = new DefaultResponsibleParty(Role.PRINCIPAL_INVESTIGATOR);
++            r.setParties(singleton(new DefaultOrganisation(citedResponsibleParty, null, null, null)));
++            c.setCitedResponsibleParties(singleton(r));
+         }
+         if (copyFrom != null) {
+             c.setCitedResponsibleParties(createCitation(copyFrom).getCitedResponsibleParties());
+         }
+         c.transition(DefaultCitation.State.FINAL);
+         return c;
+     }
+ 
+     /**
       * Ignored.
       */
      @Override
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeTableFormatTest.java
index 5c33496,dee83e6..461039a
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeTableFormatTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/TreeTableFormatTest.java
@@@ -86,14 -86,11 +86,10 @@@ public final strictfp class TreeTableFo
          assertMultilinesEquals(
              "Citation……………………………………………………………………………… Undercurrent\n" +
              "  ├─Alternate title………………………………………………… Andākarento\n" +
-             "  ├─Identifier……………………………………………………………… 9782505004509\n" +
-             "  │   ├─Authority……………………………………………………… International Standard Book Number\n" +
-             "  │   │   └─Alternate title…………………………… ISBN\n" +
-             "  │   └─Code space…………………………………………………… ISBN\n"+
              "  ├─Cited responsible party (1 of 2)\n" +
 -            "  │   ├─Role…………………………………………………………………… Author\n" +
 -            "  │   └─Individual…………………………………………………… Testsuya Toyoda\n" +
 +            "  │   ├─Individual…………………………………………………… Testsuya Toyoda\n" +
 +            "  │   └─Role…………………………………………………………………… Author\n" +
              "  ├─Cited responsible party (2 of 2)\n" +
 -            "  │   ├─Role…………………………………………………………………… Editor\n" +
              "  │   ├─Extent……………………………………………………………… World\n" +
              "  │   │   └─Geographic element\n" +
              "  │   │       ├─West bound longitude…… 180°W\n" +
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataSourceTest.java
index e8697b6,ca045d9..de424ce
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataSourceTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataSourceTest.java
@@@ -57,6 -79,11 +79,10 @@@ public final strictfp class MetadataSou
              source.install();
              verifyFormats(source);
              testSearch(source);
 -            testEmptyCollection(source);
+             ensureReadOnly(source);
+ 
+             // Opportunistic verification using the database we have at hand.
+             MetadataFallbackVerifier.compare(source);
          }
      }
  
@@@ -107,4 -134,40 +133,25 @@@
          specification.setTitle(null);
          assertNull(source.search(format));
      }
+ 
+     /**
 -     * Verifies that empty collections are empty, not-null.
 -     *
 -     * @param  source  the instance to test.
 -     * @throws MetadataStoreException if an error occurred while querying the database.
 -     */
 -    @TestStep
 -    public static void testEmptyCollection(final MetadataSource source) throws MetadataStoreException {
 -        final Citation c = source.lookup(Citation.class, "SIS");
 -        final Collection<?> details = c.getOtherCitationDetails();
 -        assertNotNull("Empty collection should not be null.", details);
 -        assertTrue("Expected an empty collection.", details.isEmpty());
 -        assertSame("Collection shall be unmodifiable.", Collections.EMPTY_LIST, details);
 -    }
 -
 -    /**
+      * Verifies that instances created by {@link MetadataSource} are read-only.
+      * In particular, it should not be possible to add elements in the collection.
+      *
+      * @param  source  the instance to test.
+      * @throws MetadataStoreException if an error occurred while querying the database.
+      */
+     @TestStep
+     public static void ensureReadOnly(final MetadataSource source) throws MetadataStoreException {
+         final Citation c = source.lookup(Citation.class, "SIS");
+         @SuppressWarnings("unchecked")                                  // Cheat or the purpose of this test.
+         final Collection<InternationalString> titles = (Collection<InternationalString>) c.getAlternateTitles();
+         final InternationalString more = new SimpleInternationalString("An open source project.");
+         try {
+             titles.add(more);
+             fail("Pre-defined metadata should be unmodifiable.");
+         } catch (UnsupportedOperationException e) {
+             // This is the expected exception.
+         }
+     }
  }