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 2016/12/08 17:42:52 UTC
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...
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 \u2026"</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 \u2026"</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 \u2026"</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 \u2026"</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('\u2500');
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[\u201cname\u201d : 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('\u201c');
}
@@ -151,13 +156,16 @@ abstract class FieldType extends Abstrac
* Property[\u201cname\u201d : 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(\u2026)} 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 \u2026"</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 \u2026"</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 \u2026"</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 \u21fe City\n" +
+ "\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n" +
+ "\u2502 Name \u2502 Type \u2502 Cardinality \u2502 Default value \u2502 Remarks \u2502\n" +
+ "\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n" +
+ "\u2502 city \u2502 String \u2502 [1 \u2026 1] \u2502 Utopia \u2502 \u2502\n" +
+ "\u2502 population \u2502 Integer \u2502 [1 \u2026 1] \u2502 \u2502 \u2502\n" +
+ "\u2502 highway \u2502 String \u2502 [0 \u2026 2] \u2502 \u2502 Deprecated� \u2502\n" +
+ "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\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")