sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1773274 [1/9] - in /sis/trunk: ./ application/sis-console/src/main/artifact/ application/sis-openoffice/src/main/unopkg/ core/sis-build-helper/src/main/javadoc/ core/sis-feature/src/main/java/org/apache/sis/feature/ core/sis-feature/src/ma...
Date Thu, 08 Dec 2016 17:42:52 GMT
Author: desruisseaux
Date: Thu Dec  8 17:42:51 2016
New Revision: 1773274

URL: http://svn.apache.org/viewvc?rev=1773274&view=rev
Log:
Merge from the JDK7 branch.

Added:
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLBuilder.java
      - copied unchanged from r1773267, sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLBuilder.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/TypeMapper.java
      - copied unchanged from r1773267, sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/TypeMapper.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/
      - copied from r1773267, sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/
    sis/trunk/core/sis-metadata/src/main/resources/org/
      - copied from r1773267, sis/branches/JDK7/core/sis-metadata/src/main/resources/org/
    sis/trunk/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/sql/ScriptRunnerTest.java
      - copied unchanged from r1773267, sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/sql/ScriptRunnerTest.java
    sis/trunk/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/sql/TypeMapperTest.java
      - copied unchanged from r1773267, sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/sql/TypeMapperTest.java
    sis/trunk/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/
      - copied from r1773267, sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/Codes.java
      - copied unchanged from r1773267, sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/Codes.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/CodesTest.java
      - copied unchanged from r1773267, sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/CodesTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/GIGS2001.java
      - copied, changed from r1773268, sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/GIGS2001.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
      - copied, changed from r1773267, sis/branches/JDK7/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoCodes.java
      - copied unchanged from r1773267, sis/branches/JDK7/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoCodes.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoKeys.java
      - copied unchanged from r1773267, sis/branches/JDK7/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoKeys.java
    sis/trunk/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/CRSBuilderTest.java
      - copied unchanged from r1773267, sis/branches/JDK7/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/CRSBuilderTest.java
    sis/trunk/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/GeoIdentifiers.java
      - copied unchanged from r1773267, sis/branches/JDK7/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/GeoIdentifiers.java
    sis/trunk/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/GeoKeysTest.java
      - copied unchanged from r1773267, sis/branches/JDK7/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/GeoKeysTest.java
Removed:
    sis/trunk/ide-project/NetBeans/nbproject/build-impl.xml~
Modified:
    sis/trunk/   (props changed)
    sis/trunk/application/sis-console/src/main/artifact/LICENSE   (props changed)
    sis/trunk/application/sis-console/src/main/artifact/NOTICE   (props changed)
    sis/trunk/application/sis-openoffice/src/main/unopkg/build-instruction.html   (props changed)
    sis/trunk/core/sis-build-helper/src/main/javadoc/overview.html   (props changed)
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicTypeMap.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/Field.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FieldType.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AssociationRoleBuilder.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AttributeTypeBuilder.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/CharacteristicTypeBuilder.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/OperationWrapper.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
    sis/trunk/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
    sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java
    sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLUtilities.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/ScriptRunner.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Convention.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/Cloner.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultFormat.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultAggregateInformation.java
    sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGridSpatialRepresentation.java
    sis/trunk/core/sis-metadata/src/main/javadoc/overview.html   (props changed)
    sis/trunk/core/sis-metadata/src/main/resources/org/apache/sis/metadata/sql/Create.sql
    sis/trunk/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/sql/TestDatabase.java
    sis/trunk/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataSourceTest.java
    sis/trunk/core/sis-metadata/src/test/java/org/apache/sis/test/suite/MetadataTestSuite.java
    sis/trunk/core/sis-referencing/pom.xml
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/CC_GeneralOperationParameter.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/CoordinateOperations.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/MergedProperties.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingUtilities.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/Equirectangular.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/LambertConformal2SP.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MapProjection.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/Mercator1SP.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/Mercator2SP.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/PolarStereographicA.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/PolarStereographicB.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/Providers.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/RegionalMercator.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/Verifier.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/AuthorityFactories.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/Builder.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/CommonCRS.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/CoordinateSystems.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/IdentifiedObjectFinder.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/MultiAuthoritiesFactory.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/UnavailableFactoryException.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGFactory.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGInstaller.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/InstallationScriptProvider.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/SQLTranslator.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractCoordinateOperation.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/AbstractSingleOperation.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationFinder.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultConversion.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultOperationMethod.java
    sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java
    sis/trunk/core/sis-referencing/src/main/javadoc/overview.html   (props changed)
    sis/trunk/core/sis-referencing/src/main/resources/org/apache/sis/referencing/factory/sql/EPSG_Finish.sql
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParameterFormatTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/EPSGFactoryFallbackTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/GeodeticObjectVerifier.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/DefaultCartesianCSTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/EPSGDataFormatter.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/EPSGFactoryTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/EPSGInstallerTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultTransformationTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/ConformalProjectionTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/EquirectangularTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/LambertConicConformalTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/projection/MercatorTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformTestCase.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
    sis/trunk/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectIdentification.html   (props changed)
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/jdk8/JDK8.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/simple/SimpleMetadata.java   (props changed)
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/system/DefaultFactories.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/system/DelayedExecutor.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/system/DelayedRunnable.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/system/Semaphores.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/system/Threads.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/Constants.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/EmptySortedSet.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/LazySet.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/LazySynchronizedIterator.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/math/Fraction.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/measure/ConventionalUnit.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/measure/SystemUnit.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/Classes.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/Deprecable.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/Utilities.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/collection/BackingStoreException.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/iso/Types.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/logging/Logging.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Messages.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Messages.properties
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Messages_fr.properties
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/MarshallerPool.java
    sis/trunk/core/sis-utility/src/main/javadoc/overview.html   (props changed)
    sis/trunk/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties
    sis/trunk/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties
    sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/RangeFormatTest.java
    sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java
    sis/trunk/core/sis-utility/src/test/java/org/apache/sis/test/Assert.java
    sis/trunk/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
    sis/trunk/ide-project/NetBeans/build.xml
    sis/trunk/ide-project/NetBeans/nbproject/build-impl.xml
    sis/trunk/ide-project/NetBeans/nbproject/genfiles.properties
    sis/trunk/ide-project/NetBeans/nbproject/project.properties
    sis/trunk/pom.xml
    sis/trunk/src/main/javadoc/overview.html   (props changed)
    sis/trunk/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java
    sis/trunk/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html   (props changed)
    sis/trunk/storage/sis-earth-observation/src/test/java/org/apache/sis/storage/earthobservation/LandsatReaderTest.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/DeferredEntry.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTIFF.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Reader.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Tags.java
    sis/trunk/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Type.java
    sis/trunk/storage/sis-geotiff/src/test/java/org/apache/sis/test/suite/GeoTiffTestSuite.java
    sis/trunk/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
    sis/trunk/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
    sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
    sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources.java
    sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources.properties
    sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources_fr.properties
    sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
    sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/MetadataBuilderTest.java

Propchange: sis/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 17:42:51 2016
@@ -1,4 +1,4 @@
 /sis/branches/Android:1430670-1480699
 /sis/branches/JDK6:1394364-1758914
-/sis/branches/JDK7:1394913-1768741
-/sis/branches/JDK8:1584960-1768733
+/sis/branches/JDK7:1394913-1773268
+/sis/branches/JDK8:1584960-1773005

Propchange: sis/trunk/application/sis-console/src/main/artifact/LICENSE
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/trunk/application/sis-console/src/main/artifact/LICENSE
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Propchange: sis/trunk/application/sis-console/src/main/artifact/NOTICE
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/trunk/application/sis-console/src/main/artifact/NOTICE
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Propchange: sis/trunk/application/sis-openoffice/src/main/unopkg/build-instruction.html
------------------------------------------------------------------------------
--- svn:mime-type (original)
+++ svn:mime-type Thu Dec  8 17:42:51 2016
@@ -1 +1 @@
-text/html
+text/html;charset=UTF-8

Propchange: sis/trunk/core/sis-build-helper/src/main/javadoc/overview.html
------------------------------------------------------------------------------
--- svn:mime-type (original)
+++ svn:mime-type Thu Dec  8 17:42:51 2016
@@ -1 +1 @@
-text/html
+text/html;charset=UTF-8

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -41,7 +41,7 @@ import org.apache.sis.internal.feature.R
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.6
+ * @version 0.8
  * @module
  *
  * @see AbstractFeature
@@ -229,7 +229,7 @@ public abstract class AbstractAssociatio
     public String toString() {
         final String pt = DefaultAssociationRole.getTitleProperty(role);
         final Iterator<AbstractFeature> it = getValues().iterator();
-        return FieldType.toString("FeatureAssociation", role.getName(),
+        return FieldType.toString(isDeprecated(role), "FeatureAssociation", role.getName(),
                 DefaultAssociationRole.getValueTypeName(role), new Iterator<Object>()
         {
             @Override public boolean hasNext() {

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -65,7 +65,7 @@ import org.apache.sis.util.ArgumentCheck
  * @author  Johann Sorel (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.6
+ * @version 0.8
  * @module
  *
  * @see AbstractFeature
@@ -461,7 +461,7 @@ public abstract class AbstractAttribute<
     @Debug
     @Override
     public String toString() {
-        final StringBuilder buffer = FieldType.toString("Attribute", type.getName(),
+        final StringBuilder buffer = FieldType.toString(isDeprecated(type), "Attribute", type.getName(),
                 Classes.getShortName(type.getValueClass()), getValues().iterator());
         if (characteristics != null && !characteristics.isEmpty()) {
             buffer.append(System.lineSeparator());

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractIdentifiedType.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -18,19 +18,18 @@ package org.apache.sis.feature;
 
 import java.util.Map;
 import java.util.Locale;
+import java.util.Objects;
 import java.io.Serializable;
 import org.opengis.util.NameFactory;
 import org.opengis.util.GenericName;
 import org.opengis.util.InternationalString;
 import org.apache.sis.internal.system.DefaultFactories;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.Deprecable;
 import org.apache.sis.util.iso.Types;
 
 import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
 
-// Branch-dependent imports
-import java.util.Objects;
-
 
 /**
  * Identification and description information inherited by property types and feature types.
@@ -42,10 +41,10 @@ import java.util.Objects;
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.6
+ * @version 0.8
  * @module
  */
-public class AbstractIdentifiedType implements Serializable {
+public class AbstractIdentifiedType implements Deprecable, Serializable {
     /**
      * For cross-version compatibility.
      */
@@ -84,6 +83,19 @@ public class AbstractIdentifiedType impl
     public static final String DESCRIPTION_KEY = "description";
 
     /**
+     * Key for the <code>{@value}</code> property to be given to the constructor.
+     * This is used for setting the value to be returned by {@link #isDeprecated()}.
+     *
+     * <p>If this property is set to {@code true}, then the value associated to {@link #DESCRIPTION_KEY}
+     * should give the replacement (e.g. <cite>"superceded by …"</cite>).</p>
+     *
+     * @see #isDeprecated()
+     *
+     * @since 0.8
+     */
+    public static final String DEPRECATED_KEY = "deprecated";
+
+    /**
      * The name of this type.
      *
      * @see #getName()
@@ -118,6 +130,14 @@ public class AbstractIdentifiedType impl
     private final InternationalString description;
 
     /**
+     * {@code true} if this type is deprecated.
+     *
+     * @see #isDeprecated()
+     * @see #DEPRECATED_KEY
+     */
+    final boolean deprecated;
+
+    /**
      * Constructs a type from the given properties. Keys are strings from the table below.
      * The map given in argument shall contain an entry at least for the {@value #NAME_KEY}.
      * Other entries listed in the table below are optional.
@@ -148,6 +168,10 @@ public class AbstractIdentifiedType impl
      *     <td>{@value #DESCRIPTION_KEY}</td>
      *     <td>{@link InternationalString} or {@link String}</td>
      *     <td>{@link #getDescription()}</td>
+     *   <tr>
+     *     <td>{@value #DEPRECATED_KEY}</td>
+     *     <td>{@link Boolean}</td>
+     *     <td>{@link #isDeprecated()}</td>
      *   </tr>
      *   <tr>
      *     <td>{@value org.apache.sis.referencing.AbstractIdentifiedObject#LOCALE_KEY}</td>
@@ -181,12 +205,29 @@ public class AbstractIdentifiedType impl
         } else if (value instanceof GenericName) {
             name = (GenericName) value;
         } else {
-            throw new IllegalArgumentException(Errors.getResources(identification).getString(
-                    Errors.Keys.IllegalPropertyValueClass_2, NAME_KEY, value.getClass()));
+            throw illegalPropertyType(identification, NAME_KEY, value);
         }
-        definition  = Types.toInternationalString(identification, DEFINITION_KEY );
+        definition  = Types.toInternationalString(identification, DEFINITION_KEY);
         designation = Types.toInternationalString(identification, DESIGNATION_KEY);
         description = Types.toInternationalString(identification, DESCRIPTION_KEY);
+        value = identification.get(DEPRECATED_KEY);
+        if (value == null) {
+            deprecated = false;
+        } else if (value instanceof Boolean) {
+            deprecated = (Boolean) value;
+        } else {
+            throw illegalPropertyType(identification, DEPRECATED_KEY, value);
+        }
+    }
+
+    /**
+     * Returns the exception to be thrown when a property is of illegal type.
+     */
+    private static IllegalArgumentException illegalPropertyType(final Map<String,?> identification,
+            final String key, final Object value)
+    {
+        return new IllegalArgumentException(Errors.getResources(identification).getString(
+                Errors.Keys.IllegalPropertyValueClass_2, key, value.getClass()));
     }
 
     /**
@@ -242,12 +283,49 @@ public class AbstractIdentifiedType impl
      * Returns optional information beyond that required for concise definition of the element.
      * The description may assist in understanding the element scope and application.
      *
+     * <p>If this type {@linkplain #isDeprecated() is deprecated}, then the description should give
+     * indication about the replacement (e.g. <cite>"superceded by …"</cite>).</p>
+     *
      * @return information beyond that required for concise definition of the element, or {@code null} if none.
      */
     public InternationalString getDescription() {
         return description;
     }
 
+    /**
+     * Returns comments on or information about this type.
+     * The default implementation performs the following choice:
+     *
+     * <ul>
+     *   <li>If this type {@linkplain #isDeprecated() is deprecated}, returns the
+     *       {@linkplain #getDescription() description}. The description of deprecated types
+     *       should give indication about the replacement (e.g. <cite>"superceded by …"</cite>).</li>
+     *   <li>Otherwise returns {@code null} since remarks are not part of the ISO 19109 feature model.</li>
+     * </ul>
+     *
+     * @return the remarks, or {@code null} if none.
+     *
+     * @since 0.8
+     */
+    @Override
+    public InternationalString getRemarks() {
+        return deprecated ? description : null;
+    }
+
+    /**
+     * Returns {@code true} if this type is deprecated.
+     * If this method returns {@code true}, then the {@linkplain #getRemarks() remarks} should give
+     * indication about the replacement (e.g. <cite>"superceded by …"</cite>).
+     *
+     * @return whether this type is deprecated.
+     *
+     * @since 0.8
+     */
+    @Override
+    public boolean isDeprecated() {
+        return deprecated;
+    }
+
     /*
      * ISO 19109 properties omitted for now:
      *
@@ -267,7 +345,7 @@ public class AbstractIdentifiedType impl
      */
     @Override
     public int hashCode() {
-        return Objects.hash(name, definition, designation, description);
+        return Objects.hash(name, definition, designation, description, deprecated);
     }
 
     /**
@@ -283,7 +361,8 @@ public class AbstractIdentifiedType impl
             return Objects.equals(name,        that.name) &&
                    Objects.equals(definition,  that.definition) &&
                    Objects.equals(designation, that.designation) &&
-                   Objects.equals(description, that.description);
+                   Objects.equals(description, that.description) &&
+                   deprecated == that.deprecated;
         }
         return false;
     }

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -74,6 +74,41 @@ public abstract class AbstractOperation
     /**
      * Constructs an operation from the given properties. The identification map is given unchanged to
      * the {@linkplain AbstractIdentifiedType#AbstractIdentifiedType(Map) super-class constructor}.
+     * The following table is a reminder of main (not all) recognized map entries:
+     *
+     * <table class="sis">
+     *   <caption>Recognized map entries (non exhaustive list)</caption>
+     *   <tr>
+     *     <th>Map key</th>
+     *     <th>Value type</th>
+     *     <th>Returned by</th>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#NAME_KEY}</td>
+     *     <td>{@link GenericName} or {@link String}</td>
+     *     <td>{@link #getName()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#DEFINITION_KEY}</td>
+     *     <td>{@link InternationalString} or {@link String}</td>
+     *     <td>{@link #getDefinition()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#DESIGNATION_KEY}</td>
+     *     <td>{@link InternationalString} or {@link String}</td>
+     *     <td>{@link #getDesignation()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#DESCRIPTION_KEY}</td>
+     *     <td>{@link InternationalString} or {@link String}</td>
+     *     <td>{@link #getDescription()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#DEPRECATED_KEY}</td>
+     *     <td>{@link Boolean}</td>
+     *     <td>{@link #isDeprecated()}</td>
+     *   </tr>
+     * </table>
      *
      * @param  identification  the name and other information to be given to this operation.
      */

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicTypeMap.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicTypeMap.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicTypeMap.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/CharacteristicTypeMap.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -18,6 +18,8 @@ package org.apache.sis.feature;
 
 import java.util.Map;
 import java.util.HashMap;
+import org.opengis.util.ScopedName;
+import org.opengis.util.GenericName;
 import org.apache.sis.internal.util.AbstractMap;
 import org.apache.sis.internal.util.CollectionsExt;
 import org.apache.sis.util.collection.Containers;
@@ -26,6 +28,7 @@ import org.apache.sis.util.resources.Err
 
 import static org.apache.sis.util.ArgumentChecks.ensureNonNullElement;
 
+import org.apache.sis.internal.jdk8.JDK8;
 
 /**
  * Implementation of the map returned by {@link DefaultAttributeType#characteristics()}.
@@ -42,7 +45,7 @@ import static org.apache.sis.util.Argume
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.5
+ * @version 0.8
  * @module
  */
 final class CharacteristicTypeMap extends AbstractMap<String,DefaultAttributeType<?>> {
@@ -78,9 +81,9 @@ final class CharacteristicTypeMap extend
      * <p>This method does not clone the {@code characterizedBy} array. If that array
      * is a user-provided argument, then cloning that array is caller responsibility.</p>
      *
-     * @param  source The attribute which is characterized by {@code characterizedBy}.
-     * @param  characterizedBy Characteristics of {@code source}. Should not be empty.
-     * @return A map for this given characteristics.
+     * @param  source  the attribute which is characterized by {@code characterizedBy}.
+     * @param  characterizedBy  characteristics of {@code source}. Should not be empty.
+     * @return a map for this given characteristics.
      * @throws IllegalArgumentException if two characteristics have the same name.
      */
     static CharacteristicTypeMap create(final DefaultAttributeType<?> source, final DefaultAttributeType<?>[] characterizedBy) {
@@ -101,20 +104,47 @@ final class CharacteristicTypeMap extend
      * <p>This constructor does not clone the {@code characterizedBy} array. If that array
      * is a user-provided argument, then cloning that array is caller responsibility.</p>
      *
-     * @param  source The attribute which is characterized by {@code characterizedBy}.
-     * @param  characterizedBy Characteristics of {@code source}. Should not be empty.
+     * @param  source  the attribute which is characterized by {@code characterizedBy}.
+     * @param  characterizedBy  characteristics of {@code source}. Should not be empty.
      * @throws IllegalArgumentException if two characteristics have the same name.
      */
     private CharacteristicTypeMap(final DefaultAttributeType<?> source, final DefaultAttributeType<?>[] characterizedBy) {
         this.characterizedBy = characterizedBy;
         int index = 0;
         final Map<String,Integer> indices = new HashMap<>(Containers.hashMapCapacity(characterizedBy.length));
+        final Map<String,Integer> aliases = new HashMap<>();
         for (int i=0; i<characterizedBy.length; i++) {
             final DefaultAttributeType<?> attribute = characterizedBy[i];
             ensureNonNullElement("characterizedBy", i, attribute);
-            final String name = AbstractIdentifiedType.toString(attribute.getName(), source, "characterizedBy", i);
-            if (indices.put(name, index++) != null) {
-                throw new IllegalArgumentException(Errors.format(Errors.Keys.DuplicatedIdentifier_1, name));
+            GenericName name = attribute.getName();
+            String key = AbstractIdentifiedType.toString(name, source, "characterizedBy", i);
+            final Integer value = index++;
+            if (indices.put(key, value) != null) {
+                throw new IllegalArgumentException(Errors.format(Errors.Keys.DuplicatedIdentifier_1, key));
+            }
+            /*
+             * If some characteristics use long name of the form "head:tip", creates short aliases containing
+             * only the "tip" name for convenience, provided that it does not create ambiguity. If an alias
+             * could map to two or more characteristics, then that alias is not added. Those ambiguous aliases
+             * are identified by the -1 value in the 'aliases' map.
+             */
+            while (name instanceof ScopedName) {
+                if (name == (name = ((ScopedName) name).tail())) break;   // Safety against broken implementations.
+                key = name.toString();
+                if (key == null || (key = key.trim()).isEmpty()) break;   // Safety against broken implementations.
+                if (aliases.put(key, value) != null) {
+                    aliases.put(key, -1);
+                }
+            }
+        }
+        /*
+         * Copy the aliases only after we finished to create the list of all fully-qualified names.
+         * The copy operation shall exclude all ambiguous names.
+         */
+        for (final Map.Entry<String,Integer> entry : aliases.entrySet()) {
+            final Integer value = entry.getValue();
+            if (value >= 0) {
+                JDK8.putIfAbsent(indices, entry.getKey(), value);
             }
         }
         this.indices = CollectionsExt.compact(indices);

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -107,6 +107,11 @@ public class DefaultAssociationRole exte
      *     <td>{@link InternationalString} or {@link String}</td>
      *     <td>{@link #getDescription()}</td>
      *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#DEPRECATED_KEY}</td>
+     *     <td>{@link Boolean}</td>
+     *     <td>{@link #isDeprecated()}</td>
+     *   </tr>
      * </table>
      *
      * @param identification  the name and other information to be given to this association role.
@@ -475,6 +480,6 @@ public class DefaultAssociationRole exte
     @Debug
     @Override
     public String toString() {
-        return toString("FeatureAssociationRole", getName(), valueType.getName()).toString();
+        return toString(deprecated, "FeatureAssociationRole", getName(), valueType.getName()).toString();
     }
 }

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -102,7 +102,7 @@ import java.util.Objects;
  * @author  Johann Sorel (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.5
+ * @version 0.8
  * @module
  *
  * @see DefaultFeatureType
@@ -168,6 +168,11 @@ public class DefaultAttributeType<V> ext
      *     <td>{@link InternationalString} or {@link String}</td>
      *     <td>{@link #getDescription()}</td>
      *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#DEPRECATED_KEY}</td>
+     *     <td>{@link Boolean}</td>
+     *     <td>{@link #isDeprecated()}</td>
+     *   </tr>
      * </table>
      *
      * @param identification   the name and other information to be given to this attribute type.
@@ -360,6 +365,6 @@ public class DefaultAttributeType<V> ext
     @Debug
     @Override
     public String toString() {
-        return toString("AttributeType", getName(), Classes.getShortName(valueClass)).toString();
+        return toString(deprecated, "AttributeType", getName(), Classes.getShortName(valueClass)).toString();
     }
 }

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -26,10 +26,11 @@ import java.util.IdentityHashMap;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Objects;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import org.opengis.util.NameFactory;
-import org.opengis.util.LocalName;
+import org.opengis.util.ScopedName;
 import org.opengis.util.GenericName;
 import org.opengis.util.InternationalString;
 import org.opengis.parameter.ParameterDescriptorGroup;
@@ -41,7 +42,6 @@ import org.apache.sis.internal.feature.R
 
 // Branch-dependent imports
 import org.apache.sis.internal.jdk8.JDK8;
-import java.util.Objects;
 
 
 /**
@@ -234,6 +234,11 @@ public class DefaultFeatureType extends
      *     <td>{@link InternationalString} or {@link String}</td>
      *     <td>{@link #getDescription()}</td>
      *   </tr>
+     *   <tr>
+     *     <td>{@value org.apache.sis.feature.AbstractIdentifiedType#DEPRECATED_KEY}</td>
+     *     <td>{@link Boolean}</td>
+     *     <td>{@link #isDeprecated()}</td>
+     *   </tr>
      * </table>
      *
      * <div class="warning"><b>Warning:</b> In a future SIS version, the type of array elements may be
@@ -385,19 +390,18 @@ public class DefaultFeatureType extends
         /*
          * If some properties use long name of the form "head:tip", creates short aliases containing only the "tip"
          * name for convenience, provided that it does not create ambiguity.  If a short alias could map to two or
-         * more properties, then this alias is not added.
+         * more properties, then that alias is not added.
          *
          * In the 'aliases' map below, null values will be assigned to ambiguous short names.
          */
         final Map<String, AbstractIdentifiedType> aliases = new LinkedHashMap<>();
         for (final AbstractIdentifiedType property : allProperties) {
-            final GenericName name = property.getName();
-            final LocalName tip = name.tip();
-            if (tip != name) {                                          // Slight optimization for a common case.
-                final String key = tip.toString();
-                if (key != null && !key.isEmpty() && !key.equals(name.toString())) {
-                    aliases.put(key, aliases.containsKey(key) ? null : property);
-                }
+            GenericName name = property.getName();
+            while (name instanceof ScopedName) {
+                if (name == (name = ((ScopedName) name).tail())) break;   // Safety against broken implementations.
+                String key = name.toString();
+                if (key == null || (key = key.trim()).isEmpty()) break;   // Safety against broken implementations.
+                aliases.put(key, aliases.containsKey(key) ? null : property);
             }
         }
         for (final Map.Entry<String,AbstractIdentifiedType> entry : aliases.entrySet()) {
@@ -409,7 +413,7 @@ public class DefaultFeatureType extends
                     // The 'indices' value may be null if the property is an operation.
                     final Integer value = indices.get(property.getName().toString());
                     if (value != null && indices.put(tip, value) != null) {
-                        throw new AssertionError(tip);  // Should never happen.
+                        throw new AssertionError(tip);                                  // Should never happen.
                     }
                 }
             }

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -16,6 +16,8 @@
  */
 package org.apache.sis.feature;
 
+import java.util.List;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.TimeZone;
@@ -30,6 +32,7 @@ import org.opengis.util.InternationalStr
 import org.opengis.util.GenericName;
 import org.apache.sis.io.TableAppender;
 import org.apache.sis.io.TabularFormat;
+import org.apache.sis.util.Deprecable;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.resources.Errors;
@@ -39,6 +42,7 @@ import org.apache.sis.referencing.Identi
 
 // Branch-dependent imports
 import org.apache.sis.internal.jdk8.UncheckedIOException;
+import org.apache.sis.util.Characters;
 
 
 /**
@@ -186,12 +190,13 @@ public class FeatureFormat extends Tabul
          * In none we will ommit the "characteristics" column, which is the last column.
          */
         boolean hasCharacteristics = false;
+        boolean hasDeprecatedTypes = false;
         for (final AbstractIdentifiedType propertyType : featureType.getProperties(true)) {
-            if (propertyType instanceof DefaultAttributeType<?>) {
-                if (!((DefaultAttributeType<?>) propertyType).characteristics().isEmpty()) {
-                    hasCharacteristics = true;
-                    break;
-                }
+            if (!hasCharacteristics && propertyType instanceof DefaultAttributeType<?>) {
+                hasCharacteristics = !((DefaultAttributeType<?>) propertyType).characteristics().isEmpty();
+            }
+            if (!hasDeprecatedTypes && propertyType instanceof Deprecable) {
+                hasDeprecatedTypes = ((Deprecable) propertyType).isDeprecated();
             }
         }
         /*
@@ -220,15 +225,10 @@ header: for (int i=0; ; i++) {
                 case 1:  nextColumn(table); key = Vocabulary.Keys.Type; break;
                 case 2:  nextColumn(table); key = Vocabulary.Keys.Cardinality; break;
                 case 3:  nextColumn(table); key = (feature != null) ? Vocabulary.Keys.Value : Vocabulary.Keys.DefaultValue; break;
-                case 4: {
-                    if (hasCharacteristics) {
-                        nextColumn(table);
-                        key = Vocabulary.Keys.Characteristics;
-                        break;
-                    } else {
-                        break header;
-                    }
-                }
+                case 4:  if (!hasCharacteristics) continue;
+                         nextColumn(table); key = Vocabulary.Keys.Characteristics; break;
+                case 5:  if (!hasDeprecatedTypes) continue;
+                         nextColumn(table); key = Vocabulary.Keys.Remarks; break;
                 default: break header;
             }
             table.append(resources.getString(key));
@@ -241,6 +241,7 @@ header: for (int i=0; ; i++) {
          */
         final StringBuffer  buffer  = new StringBuffer();
         final FieldPosition dummyFP = new FieldPosition(-1);
+        final List<String>  remarks = new ArrayList<>();
         for (final AbstractIdentifiedType propertyType : featureType.getProperties(true)) {
             Object value = null;
             if (feature != null) {
@@ -369,10 +370,32 @@ header: for (int i=0; ; i++) {
                     }
                 }
             }
+            /*
+             * Column 5 - Deprecation
+             */
+            if (hasDeprecatedTypes) {
+                nextColumn(table);
+                if (org.apache.sis.feature.Field.isDeprecated(propertyType)) {
+                    table.append(resources.getString(Vocabulary.Keys.Deprecated));
+                    final InternationalString r = ((Deprecable) propertyType).getRemarks();
+                    if (r != null) {
+                        remarks.add(r.toString(displayLocale));
+                        appendSuperscript(remarks.size(), table);
+                    }
+                }
+            }
             table.nextLine();
         }
         table.nextLine('─');
         table.flush();
+        /*
+         * If there is any remarks, write them below the table.
+         */
+        final int n = remarks.size();
+        for (int i=0; i<n; i++) {
+            appendSuperscript(i+1, toAppendTo);
+            toAppendTo.append(' ').append(remarks.get(i)).append(lineSeparator);
+        }
     }
 
     /**
@@ -424,6 +447,17 @@ header: for (int i=0; ; i++) {
         }
     }
 
+    /**
+     * Appends the given number as an superscript if possible, or as an ordinary number otherwise.
+     */
+    private static void appendSuperscript(final int n, final Appendable toAppendTo) throws IOException {
+        if (n >= 0 && n < 10) {
+            toAppendTo.append(Characters.toSuperScript((char) ('0' + n)));
+        } else {
+            toAppendTo.append('(').append(String.valueOf(n)).append(')');
+        }
+    }
+
     /**
      * Formats the given object using a shared instance of {@code ParameterFormat}.
      * This is used for {@link DefaultParameterDescriptorGroup#toString()} implementation.

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/Field.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/Field.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/Field.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/Field.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -20,6 +20,7 @@ import java.util.Collection;
 import java.util.Iterator;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.Deprecable;
 
 
 /**
@@ -28,7 +29,7 @@ import org.apache.sis.util.resources.Err
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.6
+ * @version 0.8
  * @module
  */
 abstract class Field<V> extends Property {
@@ -101,4 +102,11 @@ abstract class Field<V> extends Property
         }
         setValue(value);
     }
+
+    /**
+     * Returns whether the given property is deprecated.
+     */
+    static boolean isDeprecated(final AbstractIdentifiedType type) {
+        return (type instanceof Deprecable) && ((Deprecable) type).isDeprecated();
+    }
 }

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FieldType.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FieldType.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FieldType.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/FieldType.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -127,12 +127,17 @@ abstract class FieldType extends Abstrac
      *     PropertyType[“name” : ValueClass]
      * }
      *
-     * @param className  the interface name of the object on which {@code toString()} is invoked.
-     * @param name       the property type name, sometime {@link #getName()} or sometime the name of another object.
-     * @param valueType  the name of value class (attribute), or the feature type name (association).
+     * @param deprecated  whether the type to format is deprecated.
+     * @param className   the interface name of the object on which {@code toString()} is invoked.
+     * @param name        the property type name, sometime {@link #getName()} or sometime the name of another object.
+     * @param valueType   the name of value class (attribute), or the feature type name (association).
      */
-    static StringBuilder toString(final String className, final GenericName name, final Object valueType) {
-        final StringBuilder buffer = new StringBuilder(40).append(className).append('[');
+    static StringBuilder toString(final boolean deprecated, final String className, final GenericName name, final Object valueType) {
+        final StringBuilder buffer = new StringBuilder(40);
+        if (deprecated) {
+            buffer.append("Deprecated");
+        }
+        buffer.append(className).append('[');
         if (name != null) {
             buffer.append('“');
         }
@@ -151,13 +156,16 @@ abstract class FieldType extends Abstrac
      *     Property[“name” : ValueClass] = {value1, value2, ...}
      * }
      *
-     * @param className  the interface name of the object on which {@code toString()} is invoked.
-     * @param name       the property type name, sometime {@link #getName()} or sometime the name of another object.
-     * @param valueType  the name of value class (attribute), or the feature type name (association).
-     * @param values     the actual values.
+     * @param deprecated  whether the type to format is deprecated.
+     * @param className   the interface name of the object on which {@code toString()} is invoked.
+     * @param name        the property type name, sometime {@link #getName()} or sometime the name of another object.
+     * @param valueType   the name of value class (attribute), or the feature type name (association).
+     * @param values      the actual values.
      */
-    static StringBuilder toString(final String className, final GenericName name, final Object valueType, final Iterator<?> values) {
-        final StringBuilder buffer = toString(className, name, valueType);
+    static StringBuilder toString(final boolean deprecated, final String className, final GenericName name,
+            final Object valueType, final Iterator<?> values)
+    {
+        final StringBuilder buffer = toString(deprecated, className, name, valueType);
         if (values.hasNext()) {
             final Object value = values.next();
             final boolean isMultiValued = values.hasNext();

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -155,7 +155,7 @@ final class PropertyView {
      */
     @Debug
     static String toString(final Class<?> classe, final Class<?> valueClass, final GenericName name, final Collection<?> values) {
-        return FieldType.toString(classe.getSimpleName(), name,
+        return FieldType.toString(false, classe.getSimpleName(), name,
                 Classes.getShortName(valueClass), values.iterator()).toString();
     }
 }

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AssociationRoleBuilder.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AssociationRoleBuilder.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AssociationRoleBuilder.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AssociationRoleBuilder.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -213,6 +213,15 @@ public final class AssociationRoleBuilde
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public AssociationRoleBuilder setDeprecated(final boolean deprecated) {
+        super.setDeprecated(deprecated);
+        return this;
+    }
+
+    /**
      * Builds the association role from the information specified to this builder.
      * If a role has already been built and this builder state has not changed since the role creation,
      * then the previously created {@code FeatureAssociationRole} instance is returned.

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AttributeTypeBuilder.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AttributeTypeBuilder.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AttributeTypeBuilder.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/AttributeTypeBuilder.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -22,6 +22,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Objects;
 import java.lang.reflect.Array;
 import org.opengis.util.GenericName;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -39,7 +40,6 @@ import org.apache.sis.util.ObjectConvert
 import org.apache.sis.util.UnconvertibleObjectException;
 
 // Branch-dependent imports
-import java.util.Objects;
 
 
 /**
@@ -649,6 +649,15 @@ public final class AttributeTypeBuilder<
         return this;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public AttributeTypeBuilder<V> setDeprecated(final boolean deprecated) {
+        super.setDeprecated(deprecated);
+        return this;
+    }
+
     /**
      * Appends a text inside the value returned by {@link #toString()}, before the closing bracket.
      */

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/CharacteristicTypeBuilder.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/CharacteristicTypeBuilder.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/CharacteristicTypeBuilder.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/CharacteristicTypeBuilder.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -281,6 +281,15 @@ public final class CharacteristicTypeBui
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public CharacteristicTypeBuilder<V> setDeprecated(final boolean deprecated) {
+        super.setDeprecated(deprecated);
+        return this;
+    }
+
+    /**
      * Builds the characteristic type from the information specified to this builder.
      * If a type has already been built and this builder state has not changed since the type creation,
      * then the previously created {@code AttributeType} instance is returned.

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -689,6 +689,15 @@ public class FeatureTypeBuilder extends
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public FeatureTypeBuilder setDeprecated(final boolean deprecated) {
+        super.setDeprecated(deprecated);
+        return this;
+    }
+
+    /**
      * Builds the feature type from the information and properties specified to this builder.
      * One of the {@code setName(…)} methods must have been invoked before this {@code build()} method (mandatory).
      * All other methods are optional, but some calls to a {@code add} method are usually needed.

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/OperationWrapper.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/OperationWrapper.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/OperationWrapper.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/OperationWrapper.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -70,6 +70,7 @@ final class OperationWrapper extends Pro
     @Override public TypeBuilder setDefinition (CharSequence definition)  {throw readOnly();}
     @Override public TypeBuilder setDesignation(CharSequence designation) {throw readOnly();}
     @Override public TypeBuilder setDescription(CharSequence description) {throw readOnly();}
+    @Override public TypeBuilder setDeprecated (boolean deprecated)       {throw readOnly();}
 
     /**
      * Returns the exception to be thrown for read-only wrapper.

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -20,6 +20,7 @@ import java.util.Map;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
+import java.util.Objects;
 import org.opengis.util.ScopedName;
 import org.opengis.util.GenericName;
 import org.apache.sis.internal.feature.Resources;
@@ -27,12 +28,12 @@ import org.apache.sis.feature.AbstractId
 import org.apache.sis.util.resources.Vocabulary;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.NullArgumentException;
+import org.apache.sis.util.Deprecable;
 import org.apache.sis.util.Localized;
 import org.apache.sis.util.Classes;
 import org.apache.sis.util.Debug;
 
 // Branch-dependent imports
-import java.util.Objects;
 
 
 /**
@@ -86,6 +87,9 @@ public abstract class TypeBuilder implem
             putIfNonNull(AbstractIdentifiedType.DEFINITION_KEY,  template.getDefinition());
             putIfNonNull(AbstractIdentifiedType.DESIGNATION_KEY, template.getDesignation());
             putIfNonNull(AbstractIdentifiedType.DESCRIPTION_KEY, template.getDescription());
+            if (template instanceof Deprecable && ((Deprecable) template).isDeprecated()) {
+                identification.put(AbstractIdentifiedType.DEPRECATED_KEY, Boolean.TRUE);
+            }
         }
     }
 
@@ -311,6 +315,8 @@ public abstract class TypeBuilder implem
     /**
      * Sets optional information beyond that required for concise definition of the element.
      * The description may assist in understanding the feature scope and application.
+     * If the type {@linkplain #isDeprecated() is deprecated}, then the description should
+     * give indication about the replacement (e.g. <cite>"superceded by …"</cite>).
      *
      * @param  description  information beyond that required for concise definition of the element, or {@code null} if none.
      * @return {@code this} for allowing method calls chaining.
@@ -326,6 +332,42 @@ public abstract class TypeBuilder implem
     }
 
     /**
+     * Returns {@code true} if the type is deprecated.
+     * If this method returns {@code true}, then the {@linkplain #getDescription() description} should give
+     * indication about the replacement (e.g. <cite>"superceded by …"</cite>).
+     *
+     * @return whether this type is deprecated.
+     *
+     * @see AbstractIdentifiedType#isDeprecated()
+     */
+    public boolean isDeprecated() {
+        return Boolean.TRUE.equals(identification.get(AbstractIdentifiedType.DEPRECATED_KEY));
+    }
+
+    /**
+     * Sets whether the type is deprecated.
+     * If the type is deprecated, then the {@linkplain #setDescription(CharSequence) description}
+     * should be set to an indication about the replacement (e.g. <cite>"superceded by …"</cite>).
+     *
+     * @param  deprecated  whether this type is deprecated.
+     * @return {@code this} for allowing method calls chaining.
+     *
+     * @see #isDeprecated()
+     * @see AbstractIdentifiedType#DEPRECATED_KEY
+     */
+    public TypeBuilder setDeprecated(final boolean deprecated) {
+        final Boolean wrapper = deprecated;
+        Object previous = identification.put(AbstractIdentifiedType.DEPRECATED_KEY, wrapper);
+        if (previous == null) {
+            previous = Boolean.FALSE;
+        }
+        if (!Objects.equals(wrapper, previous)) {
+            clearCache();
+        }
+        return this;
+    }
+
+    /**
      * Returns the element of the given name in the given list. The given name does not need to contains
      * all elements of a {@link ScopedName}; it can be only the tip (for example {@code "myName"} instead
      * of {@code "myScope:myName"}) provided that ignoring the name head does not create ambiguity.
@@ -335,6 +377,7 @@ public abstract class TypeBuilder implem
      * @return element of the given name, or {@code null} if none were found.
      * @throws IllegalArgumentException if the given name is ambiguous.
      */
+    @SuppressWarnings("null")
     final <E extends TypeBuilder> E forName(final List<E> types, final String name) {
         E best      = null;                     // Best type found so far.
         E ambiguity = null;                     // If two types are found at the same depth, the other type.

Modified: sis/trunk/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -166,7 +166,7 @@ public final class AttributeConvention e
     static {
         final NameFactory factory = DefaultFactories.forBuildin(NameFactory.class);
         NAMESPACE                     = factory.createGenericName(null, "Apache", Constants.SIS);
-        NameSpace ns                  = factory.createNameSpace(NAMESPACE, null);
+        final NameSpace ns            = factory.createNameSpace(NAMESPACE, null);
         IDENTIFIER_PROPERTY           = factory.createLocalName(ns, "@identifier");
         GEOMETRY_PROPERTY             = factory.createLocalName(ns, "@geometry");
         ENVELOPE_PROPERTY             = factory.createLocalName(ns, "@envelope");

Modified: sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -26,13 +26,14 @@ import static java.util.Collections.sing
 import static org.apache.sis.feature.DefaultAssociationRole.NAME_KEY;
 import static org.apache.sis.test.Assert.*;
 
+import org.apache.sis.util.iso.Names;
 
 /**
  * Tests {@link CharacteristicTypeMap} indirectly, through {@link DefaultAttributeType} construction.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.5
+ * @version 0.8
  * @module
  */
 @DependsOn(DefaultAttributeTypeTest.class)
@@ -106,4 +107,24 @@ public final strictfp class Characterist
         assertNotSame(temperature, unserialized);
         assertSame(temperature.characteristics(), unserialized.characteristics());
     }
+
+    /**
+     * Tests usage of names in namespaces.
+     */
+    @Test
+    public void testQualifiedNames() {
+        final DefaultAttributeType<?> a1, a2, a3, tp;
+        a1 = new DefaultAttributeType<>(singletonMap(NAME_KEY, Names.parseGenericName(null, null, "ns1:accuracy")), Float.class, 1, 1, 0.1f);
+        a2 = new DefaultAttributeType<>(singletonMap(NAME_KEY, Names.parseGenericName(null, null, "ns2:accuracy")), Float.class, 1, 1, 0.1f);
+        a3 = new DefaultAttributeType<>(singletonMap(NAME_KEY, Names.parseGenericName(null, null, "ns2:s3:units")), String.class, 1, 1, "°C");
+        tp = new DefaultAttributeType<>(singletonMap(NAME_KEY, "temperature"), Float.class, 1, 1, null, a1, a2, a3);
+
+        final Map<String, DefaultAttributeType<?>> characteristics = tp.characteristics();
+        assertSame("ns1:accuracy", a1, characteristics.get("ns1:accuracy"));
+        assertSame("ns2:accuracy", a2, characteristics.get("ns2:accuracy"));
+        assertSame("ns2:s3:units", a3, characteristics.get("ns2:s3:units"));
+        assertSame(    "s3:units", a3, characteristics.get(    "s3:units"));
+        assertSame(       "units", a3, characteristics.get(       "units"));
+        assertNull("    accuracy",     characteristics.get("    accuracy"));        // Because ambiguous.
+    }
 }

Modified: sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java [UTF-8] (original)
+++ sis/trunk/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureFormatTest.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -20,6 +20,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Locale;
 import java.util.Map;
+import java.util.HashMap;
 import java.util.Random;
 import org.apache.sis.test.DependsOn;
 import org.apache.sis.test.TestCase;
@@ -98,6 +99,32 @@ public final strictfp class FeatureForma
     }
 
     /**
+     * Tests the formatting of a {@link DefaultFeatureType} that contains deprecated properties.
+     */
+    @Test
+    @SuppressWarnings("serial")
+    public void testFeatureTypeWithDeprecatedProperties() {
+        DefaultFeatureType feature = DefaultFeatureTypeTest.city();
+        final Map<String,Object> properties = new HashMap<String,Object>(name("highway"));
+        properties.put(DefaultAttributeType.DEPRECATED_KEY, Boolean.TRUE);
+        properties.put(DefaultAttributeType.DESCRIPTION_KEY, "Replaced by pedestrian areas.");
+        feature = new DefaultFeatureType(name("City for human"), false, new DefaultFeatureType[] {feature},
+                new DefaultAttributeType<>(properties, String.class, 0, 2, null));
+
+        final FeatureFormat format = new FeatureFormat(Locale.US, null);
+        final String text = format.format(feature);
+        assertMultilinesEquals("City for human ⇾ City\n" +
+                "┌────────────┬─────────┬─────────────┬───────────────┬─────────────┐\n" +
+                "│ Name       │ Type    │ Cardinality │ Default value │ Remarks     │\n" +
+                "├────────────┼─────────┼─────────────┼───────────────┼─────────────┤\n" +
+                "│ city       │ String  │ [1 … 1]     │ Utopia        │             │\n" +
+                "│ population │ Integer │ [1 … 1]     │               │             │\n" +
+                "│ highway    │ String  │ [0 … 2]     │               │ Deprecated¹ │\n" +
+                "└────────────┴─────────┴─────────────┴───────────────┴─────────────┘\n" +
+                "¹ Replaced by pedestrian areas.\n", text);
+    }
+
+    /**
      * Tests the formatting of an {@link AbstractFeature}.
      */
     @Test

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -19,6 +19,10 @@ package org.apache.sis.internal.metadata
 import java.util.Locale;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.concurrent.Callable;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.security.AccessController;
@@ -26,6 +30,7 @@ import java.security.PrivilegedAction;
 import java.lang.reflect.Method;
 import javax.sql.DataSource;
 import java.sql.Connection;
+import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
 import javax.naming.Context;
 import javax.naming.InitialContext;
@@ -43,12 +48,6 @@ import org.apache.sis.internal.system.Lo
 import org.apache.sis.util.resources.Messages;
 import org.apache.sis.util.logging.Logging;
 
-// Branch-dependent imports
-import java.util.concurrent.Callable;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
 
 /**
  * Manages the unique {@link DataSource} instance to the {@code $SIS_DATA/Databases/SpatialMetadata} database.
@@ -99,6 +98,12 @@ public abstract class Initializer {
     private static DataSource source;
 
     /**
+     * {@code true} if {@link #connected(DatabaseMetaData)} has been invoked at least once.
+     * This is reset to {@code false} if the {@link #source} is changed.
+     */
+    private static boolean connected;
+
+    /**
      * For subclasses only.
      */
     protected Initializer() {
@@ -107,7 +112,7 @@ public abstract class Initializer {
     /**
      * Invoked for populating an initially empty database.
      *
-     * @param connection Connection to the empty database.
+     * @param  connection  connection to the empty database.
      * @throws SQLException if an error occurred while populating the database.
      */
     protected abstract void createSchema(Connection connection) throws SQLException;
@@ -163,13 +168,14 @@ public abstract class Initializer {
          * This method clears the {@link Initializer#source}, unregisters this listener
          * and notifies other SIS modules.
          *
-         * @param event Ignored. May be null.
+         * @param  event  ignored. Can be null.
          */
         @Override
         public void objectChanged(NamingEvent event) {
             try {
                 synchronized (Initializer.class) {
                     source = null;
+                    connected = false;
                     Shutdown.unregister(this);
                     context.removeNamingListener(this);
                 }
@@ -213,7 +219,7 @@ public abstract class Initializer {
      *   <li>Otherwise (no JNDI, no environment variable, no Derby property set), {@code null}.</li>
      * </ol>
      *
-     * @return The data source for the {@code $SIS_DATA/Databases/SpatialMetadata} or equivalent database, or {@code null} if none.
+     * @return the data source for the {@code $SIS_DATA/Databases/SpatialMetadata} or equivalent database, or {@code null} if none.
      * @throws javax.naming.NamingException     if an error occurred while fetching the data source from a JNDI context.
      * @throws java.net.MalformedURLException   if an error occurred while converting the {@code derby.jar} file to URL.
      * @throws java.lang.ClassNotFoundException if {@code derby.jar} has not been found on the JDK installation directory.
@@ -324,11 +330,34 @@ public abstract class Initializer {
     }
 
     /**
+     * Prepares a log record saying that a connection to the spatial metadata database has been created.
+     * This method can be invoked after {@link DataSource#getConnection()}. When invoked for the first time,
+     * the record level is set to {@link Level#CONFIG}. On next calls, the level become {@link Level#FINE}.
+     *
+     * @param  metadata  the value of {@code DataSource.getConnection().getMetaData()} or equivalent.
+     * @return the record to log. Caller should set the source class name and source method name.
+     * @throws SQLException if an error occurred while fetching the database URL.
+     *
+     * @since 0.8
+     */
+    public static LogRecord connected(final DatabaseMetaData metadata) throws SQLException {
+        final Level level;
+        synchronized (Initializer.class) {
+            level = connected ? Level.FINE : Level.CONFIG;
+            connected = true;
+        }
+        final LogRecord record = Messages.getResources(null).getLogRecord(level,
+                Messages.Keys.ConnectedToGeospatialDatabase_1, SQLUtilities.getSimplifiedURL(metadata));
+        record.setLoggerName(Loggers.SYSTEM);
+        return record;
+    }
+
+    /**
      * Returns a message for unspecified data source. The message will depend on whether a JNDI context exists or not.
      * This message can be used for constructing an exception when {@link #getDataSource()} returned {@code null}.
      *
-     * @param locale The locale for the message to produce, or {@code null} for the default one.
-     * @return Message for unspecified data source.
+     * @param  locale  the locale for the message to produce, or {@code null} for the default one.
+     * @return message for unspecified data source.
      */
     public static String unspecified(final Locale locale) {
         final short key;
@@ -353,8 +382,8 @@ public abstract class Initializer {
      *
      * <p>It is caller's responsibility to shutdown the Derby database after usage.</p>
      *
-     * @param  path  Relative or absolute path to the database.
-     * @return The data source.
+     * @param  path  relative or absolute path to the database.
+     * @return the data source.
      * @throws Exception if the data source can not be created.
      */
     static DataSource forJavaDB(final String path) throws Exception {
@@ -407,6 +436,7 @@ public abstract class Initializer {
         final DataSource ds = source;
         if (ds != null) {                       // Should never be null, but let be safe.
             source = null;                      // Clear now in case of failure in remaining code.
+            connected = false;
             ds.getClass().getMethod("setShutdownDatabase", String.class).invoke(ds, "shutdown");
             try {
                 ds.getConnection().close();     // Does the actual shutdown.
@@ -425,7 +455,7 @@ public abstract class Initializer {
     /**
      * Returns {@code true} if the given exception is the one that we expect in successful shutdown of a Derby database.
      *
-     * @param e The exception thrown by Derby.
+     * @param  e  the exception thrown by Derby.
      * @return {@code true} if the exception indicates a successful shutdown.
      */
     static boolean isSuccessfulShutdown(final SQLException e) {

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLUtilities.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLUtilities.java?rev=1773274&r1=1773273&r2=1773274&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLUtilities.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLUtilities.java [UTF-8] Thu Dec  8 17:42:51 2016
@@ -17,11 +17,13 @@
 package org.apache.sis.internal.metadata.sql;
 
 import java.sql.SQLException;
+import java.sql.SQLDataException;
 import java.sql.DatabaseMetaData;
 import org.apache.sis.util.Static;
 import org.apache.sis.util.Characters;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.Workaround;
+import org.apache.sis.util.resources.Errors;
 
 
 /**
@@ -33,7 +35,7 @@ import org.apache.sis.util.Workaround;
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.7
- * @version 0.7
+ * @version 0.8
  * @module
  */
 public final class SQLUtilities extends Static {
@@ -47,8 +49,8 @@ public final class SQLUtilities extends
      * Returns a simplified form of the URL (truncated before the first {@code ?} or {@code ;} character),
      * for logging or informative purpose only.
      *
-     * @param  metadata The metadata of the database.
-     * @return A simplified version of database URL.
+     * @param  metadata  the metadata of the database.
+     * @return a simplified version of database URL.
      * @throws SQLException if an error occurred while fetching the URL.
      */
     public static String getSimplifiedURL(final DatabaseMetaData metadata) throws SQLException {
@@ -59,14 +61,46 @@ public final class SQLUtilities extends
     }
 
     /**
+     * Converts the given string to a boolean value, or returns {@code null} if the value is unrecognized.
+     * This method recognizes "true", "false", "yes", "no", "t", "f", 0 and 1 (case insensitive).
+     *
+     * @param  text  the characters to convert to a boolean value, or {@code null}.
+     * @return the given characters as a boolean value, or {@code null} if the given text was null or empty.
+     * @throws SQLDataException if the given text is non-null and non-empty but not recognized.
+     *
+     * @since 0.8
+     */
+    public static Boolean toBoolean(final String text) throws SQLException {
+        if (text == null) {
+            return null;
+        }
+        switch (text.length()) {
+            case 0: return null;
+            case 1: {
+                switch (text.charAt(0)) {
+                    case '0': case 'n': case 'N': case 'f': case 'F': return Boolean.FALSE;
+                    case '1': case 'y': case 'Y': case 't': case 'T': return Boolean.TRUE;
+                }
+                break;
+            }
+            default: {
+                if (text.equalsIgnoreCase("true")  || text.equalsIgnoreCase("yes")) return Boolean.TRUE;
+                if (text.equalsIgnoreCase("false") || text.equalsIgnoreCase("no"))  return Boolean.FALSE;
+                break;
+            }
+        }
+        throw new SQLDataException(Errors.format(Errors.Keys.CanNotConvertValue_2, text, Boolean.class));
+    }
+
+    /**
      * Returns a string like the given string but with all characters that are not letter or digit
      * replaced by the wildcard % character.
      *
      * <p>This method avoid to put a % symbol as the first character, since it prevent some databases
      * to use their index.</p>
      *
-     * @param identifier The identifier to get as a SQL LIKE pattern.
-     * @return The given identifier as a SQL LIKE pattern.
+     * @param  identifier the identifier to get as a SQL LIKE pattern.
+     * @return the given identifier as a SQL LIKE pattern.
      */
     public static String toLikePattern(final String identifier) {
         boolean isLetterOrDigit = false;
@@ -100,8 +134,8 @@ public final class SQLUtilities extends
      *
      * which returns "NTF (Paris) / Lambert zone I" as expected but also zones II and III.
      *
-     * @param  expected The string to search.
-     * @param  actual The string found in the database.
+     * @param  expected  the string to search.
+     * @param  actual    the string found in the database.
      * @return {@code true} if the given string can be accepted.
      */
     @Workaround(library = "Derby", version = "10.11")




Mime
View raw message