sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1548777 [5/6] - in /sis/trunk: ./ core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/geometry/ core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/ core/sis-metadata/src/main/java/org/apache/sis/metadata/ core/sis-me...
Date Sat, 07 Dec 2013 02:00:45 GMT
Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties?rev=1548777&r1=1548776&r2=1548777&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties [ISO-8859-1] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties [ISO-8859-1] Sat Dec  7 02:00:42 2013
@@ -24,132 +24,138 @@
 # programmatic parameters do not have to be last in the formatted text, since each localized message
 # can reorder the parameters as they want.
 #
-CanNotAddToExclusiveSet_2       = No element can be added to this set because properties \u2018{0}\u2019 and \u2018{1}\u2019 are mutually exclusive.
-CanNotConnectTo_1               = Can not connect to \u201c{0}\u201d.
-CanNotConvertFromType_2         = Can not convert from type \u2018{0}\u2019 to type \u2018{1}\u2019.
-CanNotConvertValue_2            = Can not convert value \u201c{0}\u201d to type \u2018{1}\u2019.
-CanNotComputeDerivative         = Can not compute the derivative.
-CanNotInstantiate_1             = Can not instantiate an object of type \u2018{0}\u2019.
-CanNotMapAxisToDirection_2      = Can not map an axis from \u201c{0}\u201d to direction \u201c{1}\u201d.
-CanNotOpen_1                    = Can not open \u201c{0}\u201d.
-CanNotParseFile_2               = Can not parse \u201c{1}\u201d as a file in the {0} format.
-CanNotRead_1                    = Can not read \u201c{0}\u201d.
-CanNotRepresentInFormat_2       = Can not represent \u201c{1}\u201d in the {0} format.
-CanNotSetPropertyValue_1        = Can not set a value for property \u201c{0}\u201d.
-ClassNotFinal_1                 = Class \u2018{0}\u2019 is not final.
-CloneNotSupported_1             = Can not clone an object of type \u2018{0}\u2019.
-ColinearAxisDirections_2        = Axis directions {0} and {1} are colinear.
-DeadThread_1                    = Thread \u201c{0}\u201d is dead.
-DuplicatedElement_1             = Element \u201c{0}\u201d is duplicated.
-DuplicatedIdentifier_1          = Identifier \u201c{0}\u201d is duplicated.
-DuplicatedOption_1              = Option \u201c{0}\u201d is duplicated.
-ElementAlreadyPresent_1         = Element \u201c{0}\u201d is already present.
-EmptyArgument_1                 = Argument \u2018{0}\u2019 shall not be empty.
-EmptyDictionary                 = The dictionary shall contain at least one entry.
-EmptyEnvelope2D                 = Envelope must be at least two-dimensional and non-empty.
-EmptyProperty_1                 = Property named \u201c{0}\u201d shall not be empty.
-ExcessiveArgumentSize_3         = Argument \u2018{0}\u2019 shall not contain more than {1} elements. A number of {2} is excessive.
-ExcessiveListSize_2             = A size of {1} elements is excessive for the \u201c{0}\u201d list.
-ForbiddenAttribute_2            = Attribute \u201c{0}\u201d is not allowed for an object of type \u2018{1}\u2019.
-IllegalArgumentClass_2          = Argument \u2018{0}\u2019 can not be an instance of \u2018{1}\u2019.
-IllegalArgumentClass_3          = Argument \u2018{0}\u2019 can not be an instance of \u2018{2}\u2019. Expected an instance of \u2018{1}\u2019 or derived type.
-IllegalArgumentField_4          = Argument \u2018{0}\u2019 can not take the \u201c{1}\u201d value, because the \u2018{2}\u2019 field can not take the \u201c{3}\u201d value.
-IllegalArgumentValue_2          = Argument \u2018{0}\u2019 can not take the \u201c{1}\u201d value.
-IllegalOptionValue_2            = Option \u2018{0}\u2019 can not take the \u201c{1}\u201d value.
-IllegalBitsPattern_1            = Illegal bits pattern: {0}.
-IllegalClass_2                  = Class \u2018{1}\u2019 is illegal. It must be \u2018{0}\u2019 or a derived class.
-IllegalFormatPatternForClass_2  = The \u201c{1}\u201d pattern can not be applied to formating of objects of type \u2018{0}\u2019.
-IllegalLanguageCode_1           = The \u201c{0}\u201d language is not recognized.
-IllegalMemberType_2             = Member \u201c{0}\u201d can not be associated to type \u201c{1}\u201d.
-IllegalOrdinateRange_3          = The [{0} \u2026 {1}] range of ordinate values is not valid for the \u201c{2}\u201d axis.
-IllegalPropertyClass_2          = Property \u2018{0}\u2019 does not accept instances of \u2018{1}\u2019.
-IllegalRange_2                  = Range [{0} \u2026 {1}] is not valid.
-IllegalUnicodeCodePoint_2       = Value {1} for \u201c{0}\u201d is not a valid Unicode code point.
-IncompatiblePropertyValue_1     = Property \u201c{0}\u201d has an incompatible value.
-IncompatibleUnits_2             = Units \u201c{0}\u201d and \u201c{1}\u201d are incompatible.
-InconsistentAttribute_2         = Value \u201c{1}\u201d of attribute \u2018{0}\u2019 is inconsistent with other attributes.
-InconsistentTableColumns        = Inconsistent table columns.
-IdentifierAlreadyBound_1        = Identifier \u201c{0}\u201d is already associated to another object.
-IndexOutOfBounds_1              = Index {0} is out of bounds.
-IndicesOutOfBounds_2            = Indices ({0}, {1}) are out of bounds.
-InfiniteArgumentValue_1         = Argument \u2018{0}\u2019 can not take an infinite value.
-InfiniteRecursivity             = Infinite recursivity.
-InsufficientArgumentSize_3      = Argument \u2018{0}\u2019 shall contain at least {1} elements. A number of {2} is insufficient.
-KeyCollision_1                  = A different value is already associated to the \u201c{0}\u201d key.
-MandatoryAttribute_2            = Attribute \u201c{0}\u201d is mandatory for an object of type \u2018{1}\u2019.
-MismatchedArrayLengths          = Mismatched array lengths.
-MismatchedCRS                   = The coordinate reference system must be the same for all objects.
-MismatchedDimension_2           = Mismatched object dimensions: {0}D and {1}D.
-MismatchedDimension_3           = Argument \u2018{0}\u2019 has {2} dimension{2,choice,1#|2#s}, while {1} was expected.
-MismatchedMatrixSize_4          = Mismatched matrix sizes: expected {0}\u00d7{1} but got {2}\u00d7{3}.
-MissingRequiredModule_1         = This operation requires the \u201c{0}\u201d module.
-MissingSchemeInURI              = Missing scheme in URI.
-MissingValueForOption_1         = Missing value for option \u201c{0}\u201d.
-MissingValueForProperty_1       = Missing value for property \u201c{0}\u201d.
-MissingValueInColumn_1          = Missing value in the \u201c{0}\u201d column.
-MutuallyExclusiveOptions_2      = Options \u201c{0}\u201d and \u201c{1}\u201d are mutually exclusive.
-NegativeArgument_2              = Argument \u2018{0}\u2019 shall not be negative. The given value was {1}.
-NegativeArrayLength_1           = Can not create a \u201c{0}\u201d array of negative length.
-NoConvergenceForPoints_2        = No convergence for points {0} and {1}.
-NodeChildOfItself_1             = Node \u201c{0}\u201d can not be a child of itself.
-NodeHasAnotherParent_1          = Node \u201c{0}\u201d already has another parent.
-NodeHasNoParent_1               = Node \u201c{0}\u201d has no parent.
-NodeIsLeaf_1                    = Node \u201c{0}\u201d is a leaf.
-NodeNotFound_1                  = No \u201c{0}\u201d node found.
-NonEquilibratedParenthesis_2    = Missing a \u2018{1}\u2019 parenthesis in \u201c{0}\u201d.
-NonInvertibleConversion         = Conversion is not invertible.
-NonInvertibleMatrix_2           = Non invertible {0}\u00d7{1} matrix.
-NonInvertibleTransform          = Transform is not invertible.
-NonAngularUnit_1                = \u201c{0}\u201d is not an angular unit.
-NonLinearUnit_1                 = \u201c{0}\u201d is not a linear unit.
-NonScaleUnit_1                  = \u201c{0}\u201d is not a scale unit.
-NonTemporalUnit_1               = \u201c{0}\u201d is not a time unit.
-NonUniformScale                 = Scale is not uniform.
-NotAnAffineTransform            = Transform is not affine.
-NotANumber_1                    = Argument \u2018{0}\u2019 shall not be NaN (Not-a-Number).
-NotAPrimitiveWrapper_1          = Class \u2018{0}\u2019 is not a primitive type wrapper.
-NotASkewSymmetricMatrix         = Matrix is not skew-symmetric.
-NotAUnicodeIdentifier_1         = Text \u201c{0}\u201d is not a Unicode identifier.
-NotComparableClass_1            = Class \u2018{0}\u2019 is not a comparable.
-NoSuchElement_1                 = Element \u201c{0}\u201d has not been found.
-NoSuchProperty_2                = No property named \u201c{0}\u201d has been found in \u201c{1}\u201d.
-NoUnit                          = No unit of measurement has been specified.
-NullArgument_1                  = Argument \u2018{0}\u2019 shall not be null.
+CanNotAddToExclusiveSet_2         = No element can be added to this set because properties \u2018{0}\u2019 and \u2018{1}\u2019 are mutually exclusive.
+CanNotConnectTo_1                 = Can not connect to \u201c{0}\u201d.
+CanNotConvertFromType_2           = Can not convert from type \u2018{0}\u2019 to type \u2018{1}\u2019.
+CanNotConvertValue_2              = Can not convert value \u201c{0}\u201d to type \u2018{1}\u2019.
+CanNotComputeDerivative           = Can not compute the derivative.
+CanNotInstantiate_1               = Can not instantiate an object of type \u2018{0}\u2019.
+CanNotMapAxisToDirection_2        = Can not map an axis from \u201c{0}\u201d to direction \u201c{1}\u201d.
+CanNotOpen_1                      = Can not open \u201c{0}\u201d.
+CanNotParseFile_2                 = Can not parse \u201c{1}\u201d as a file in the {0} format.
+CanNotRead_1                      = Can not read \u201c{0}\u201d.
+CanNotRepresentInFormat_2         = Can not represent \u201c{1}\u201d in the {0} format.
+CanNotSetPropertyValue_1          = Can not set a value for property \u201c{0}\u201d.
+ClassNotFinal_1                   = Class \u2018{0}\u2019 is not final.
+CloneNotSupported_1               = Can not clone an object of type \u2018{0}\u2019.
+ColinearAxisDirections_2          = Axis directions {0} and {1} are colinear.
+DeadThread_1                      = Thread \u201c{0}\u201d is dead.
+DuplicatedElement_1               = Element \u201c{0}\u201d is duplicated.
+DuplicatedIdentifier_1            = Identifier \u201c{0}\u201d is duplicated.
+DuplicatedOption_1                = Option \u201c{0}\u201d is duplicated.
+ElementAlreadyPresent_1           = Element \u201c{0}\u201d is already present.
+EmptyArgument_1                   = Argument \u2018{0}\u2019 shall not be empty.
+EmptyDictionary                   = The dictionary shall contain at least one entry.
+EmptyEnvelope2D                   = Envelope must be at least two-dimensional and non-empty.
+EmptyProperty_1                   = Property named \u201c{0}\u201d shall not be empty.
+ExcessiveArgumentSize_3           = Argument \u2018{0}\u2019 shall not contain more than {1} elements. A number of {2} is excessive.
+ExcessiveListSize_2               = A size of {1} elements is excessive for the \u201c{0}\u201d list.
+ForbiddenAttribute_2              = Attribute \u201c{0}\u201d is not allowed for an object of type \u2018{1}\u2019.
+IllegalArgumentClass_2            = Argument \u2018{0}\u2019 can not be an instance of \u2018{1}\u2019.
+IllegalArgumentClass_3            = Argument \u2018{0}\u2019 can not be an instance of \u2018{2}\u2019. Expected an instance of \u2018{1}\u2019 or derived type.
+IllegalArgumentField_4            = Argument \u2018{0}\u2019 can not take the \u201c{1}\u201d value, because the \u2018{2}\u2019 field can not take the \u201c{3}\u201d value.
+IllegalArgumentValue_2            = Argument \u2018{0}\u2019 can not take the \u201c{1}\u201d value.
+IllegalAxisDirection_2            = Coordinate system of class \u2018{0}\u2019 can not have axis in the {1} direction.
+IllegalOptionValue_2              = Option \u2018{0}\u2019 can not take the \u201c{1}\u201d value.
+IllegalBitsPattern_1              = Illegal bits pattern: {0}.
+IllegalClass_2                    = Class \u2018{1}\u2019 is illegal. It must be \u2018{0}\u2019 or a derived class.
+IllegalFormatPatternForClass_2    = The \u201c{1}\u201d pattern can not be applied to formating of objects of type \u2018{0}\u2019.
+IllegalLanguageCode_1             = The \u201c{0}\u201d language is not recognized.
+IllegalMemberType_2               = Member \u201c{0}\u201d can not be associated to type \u201c{1}\u201d.
+IllegalOrdinateRange_3            = The [{0} \u2026 {1}] range of ordinate values is not valid for the \u201c{2}\u201d axis.
+IllegalPropertyClass_2            = Property \u2018{0}\u2019 does not accept instances of \u2018{1}\u2019.
+IllegalRange_2                    = Range [{0} \u2026 {1}] is not valid.
+IllegalUnicodeCodePoint_2         = Value {1} for \u201c{0}\u201d is not a valid Unicode code point.
+IllegalUnitFor_2                  = Unit of measurement \u201c{1}\u201d is not valid for \u201c{0}\u201d values.
+IncompatibleCoordinateSystemTypes = Incompatible coordinate system types.
+IncompatiblePropertyValue_1       = Property \u201c{0}\u201d has an incompatible value.
+IncompatibleUnits_2               = Units \u201c{0}\u201d and \u201c{1}\u201d are incompatible.
+InconsistentAttribute_2           = Value \u201c{1}\u201d of attribute \u2018{0}\u2019 is inconsistent with other attributes.
+InconsistentTableColumns          = Inconsistent table columns.
+IdentifierAlreadyBound_1          = Identifier \u201c{0}\u201d is already associated to another object.
+IndexOutOfBounds_1                = Index {0} is out of bounds.
+IndicesOutOfBounds_2              = Indices ({0}, {1}) are out of bounds.
+InfiniteArgumentValue_1           = Argument \u2018{0}\u2019 can not take an infinite value.
+InfiniteRecursivity               = Infinite recursivity.
+InsufficientArgumentSize_3        = Argument \u2018{0}\u2019 shall contain at least {1} elements. A number of {2} is insufficient.
+KeyCollision_1                    = A different value is already associated to the \u201c{0}\u201d key.
+MandatoryAttribute_2              = Attribute \u201c{0}\u201d is mandatory for an object of type \u2018{1}\u2019.
+MismatchedArrayLengths            = Mismatched array lengths.
+MismatchedCRS                     = The coordinate reference system must be the same for all objects.
+MismatchedDimension_2             = Mismatched object dimensions: {0}D and {1}D.
+MismatchedDimension_3             = Argument \u2018{0}\u2019 has {2} dimension{2,choice,1#|2#s}, while {1} was expected.
+MismatchedMatrixSize_4            = Mismatched matrix sizes: expected {0}\u00d7{1} but got {2}\u00d7{3}.
+MissingRequiredModule_1           = This operation requires the \u201c{0}\u201d module.
+MissingSchemeInURI                = Missing scheme in URI.
+MissingValueForOption_1           = Missing value for option \u201c{0}\u201d.
+MissingValueForProperty_1         = Missing value for property \u201c{0}\u201d.
+MissingValueInColumn_1            = Missing value in the \u201c{0}\u201d column.
+MutuallyExclusiveOptions_2        = Options \u201c{0}\u201d and \u201c{1}\u201d are mutually exclusive.
+NegativeArgument_2                = Argument \u2018{0}\u2019 shall not be negative. The given value was {1}.
+NegativeArrayLength_1             = Can not create a \u201c{0}\u201d array of negative length.
+NoConvergenceForPoints_2          = No convergence for points {0} and {1}.
+NodeChildOfItself_1               = Node \u201c{0}\u201d can not be a child of itself.
+NodeHasAnotherParent_1            = Node \u201c{0}\u201d already has another parent.
+NodeHasNoParent_1                 = Node \u201c{0}\u201d has no parent.
+NodeIsLeaf_1                      = Node \u201c{0}\u201d is a leaf.
+NodeNotFound_1                    = No \u201c{0}\u201d node found.
+NonEquilibratedParenthesis_2      = Missing a \u2018{1}\u2019 parenthesis in \u201c{0}\u201d.
+NonInvertibleConversion           = Conversion is not invertible.
+NonInvertibleMatrix_2             = Non invertible {0}\u00d7{1} matrix.
+NonInvertibleTransform            = Transform is not invertible.
+NonAngularUnit_1                  = \u201c{0}\u201d is not an angular unit.
+NonLinearUnit_1                   = \u201c{0}\u201d is not a linear unit.
+NonLinearUnitConversion_2         = Unit conversion from \u201c{0}\u201d to \u201c{1}\u201d is non-linear.
+NonPerpendicularDirections_2      = Axis directions {0} and {1} are not perpendicular.
+NonScaleUnit_1                    = \u201c{0}\u201d is not a scale unit.
+NonTemporalUnit_1                 = \u201c{0}\u201d is not a time unit.
+NonUniformScale                   = Scale is not uniform.
+NotAnAffineTransform              = Transform is not affine.
+NotANumber_1                      = Argument \u2018{0}\u2019 shall not be NaN (Not-a-Number).
+NotAPrimitiveWrapper_1            = Class \u2018{0}\u2019 is not a primitive type wrapper.
+NotASkewSymmetricMatrix           = Matrix is not skew-symmetric.
+NotAUnicodeIdentifier_1           = Text \u201c{0}\u201d is not a Unicode identifier.
+NotComparableClass_1              = Class \u2018{0}\u2019 is not a comparable.
+NoSuchElement_1                   = Element \u201c{0}\u201d has not been found.
+NoSuchProperty_2                  = No property named \u201c{0}\u201d has been found in \u201c{1}\u201d.
+NoUnit                            = No unit of measurement has been specified.
+NullArgument_1                    = Argument \u2018{0}\u2019 shall not be null.
 # Use the OGC/ISO "Dictionary" word instead of "Map" for avoiding confusion with geographic map.
-NullMapKey                      = Null key is not allowed in this dictionary.
-NullMapValue                    = Null values are not allowed in this dictionary.
-OddArrayLength_1                = Array length is {0}, while we expected an even length.
-SingularMatrix                  = Matrix is singular.
-RecursiveCreateCallForKey_1     = Recursive call while creating an object for the \u201c{0}\u201d key.
-RequireDecimalSeparator         = A decimal separator is required.
-StalledThread_1                 = Thread \u201c{0}\u201d seems stalled.
-StreamIsForwardOnly_1           = Can not move backward in the \u201c{0}\u201d stream.
-TooFewArguments_2               = Expected at least {0} argument{0,choice,1#|2#s}, but got {1}.
-TooManyArguments_2              = Expected at most {0} argument{0,choice,1#|2#s}, but got {1}.
-UndefinedOrderingForElements_2  = Ordering between \u201c{0}\u201d and \u201c{1}\u201d elements is undefined.
-UnexpectedArrayLength_2         = Expected an array of length {0}, but got {1}.
-UnexpectedChange_1              = Unexpected change in \u2018{0}\u2019.
-UnexpectedEndOfFile_1           = Unexpected end of file while reading \u201c{0}\u201d.
-UnexpectedEndOfString_1         = More characters were expected at the end of \u201c{0}\u201d.
-UnexpectedFileFormat_2          = File \u201c{1}\u201d seems to be encoded in an other format than {0}.
-UnknownCommand_1                = Command \u201c{0}\u201d is not recognized.
-UnknownEnumValue_1              = Unknown enumeration value: {0}.
-UnknownFormatFor_1              = Format of \u201c{0}\u201d is not recognized.
-UnknownOption_1                 = Option \u201c{0}\u201d is not recognized.
-UnknownType_1                   = Type \u2018{0}\u2019 is unknown in this context.
-UnknownTypeForProperty_1        = Type of the \u201c{0}\u201d property is unknown.
-UnmodifiableAffineTransform     = This affine transform is unmodifiable.
-UnmodifiableCellValue_2         = The cell at column \u201c{1}\u201d of row \u201c{0}\u201d is unmodifiable.
-UnmodifiableGeometry            = This geometry is unmodifiable.
-UnmodifiableMetadata            = This metadata is unmodifiable.
-UnmodifiableObject_1            = Object \u2018{0}\u2019 is unmodifiable.
-UnparsableStringForClass_2      = Text \u201c{1}\u201d can not be parsed as an object of type \u2018{0}\u2019.
-UnparsableStringForClass_3      = Text \u201c{1}\u201d can not be parsed as an object of type \u2018{0}\u2019, because of the \u201c{2}\u201d characters.
-UnspecifiedFormatForClass_1     = No format is specified for objects of class \u2018{0}\u2019.
-UnsupportedImplementation_1     = Can not handle instances of \u2018{0}\u2019 because arbitrary implementations are not yet supported.
-UnsupportedOperation_1          = The \u2018{0}\u2019 operation is unsupported.
-UnsupportedType_1               = The \u2018{0}\u2019 type is unsupported.
-UnsupportedVersion_1            = Version {0} is not supported.
-ValueAlreadyDefined_1           = A value is already defined for \u201c{0}\u201d.
-ValueNotGreaterThanZero_2       = Value \u2018{0}\u2019={1} is invalid. Expected a number greater than 0.
-ValueOutOfRange_4               = Value \u2018{0}\u2019={3} is invalid. Expected a value in the [{1} \u2026 {2}] range.
+NullMapKey                        = Null key is not allowed in this dictionary.
+NullMapValue                      = Null values are not allowed in this dictionary.
+OddArrayLength_1                  = Array length is {0}, while we expected an even length.
+SingularMatrix                    = Matrix is singular.
+RecursiveCreateCallForKey_1       = Recursive call while creating an object for the \u201c{0}\u201d key.
+RequireDecimalSeparator           = A decimal separator is required.
+StalledThread_1                   = Thread \u201c{0}\u201d seems stalled.
+StreamIsForwardOnly_1             = Can not move backward in the \u201c{0}\u201d stream.
+TooFewArguments_2                 = Expected at least {0} argument{0,choice,1#|2#s}, but got {1}.
+TooManyArguments_2                = Expected at most {0} argument{0,choice,1#|2#s}, but got {1}.
+UndefinedOrderingForElements_2    = Ordering between \u201c{0}\u201d and \u201c{1}\u201d elements is undefined.
+UnexpectedArrayLength_2           = Expected an array of length {0}, but got {1}.
+UnexpectedChange_1                = Unexpected change in \u2018{0}\u2019.
+UnexpectedEndOfFile_1             = Unexpected end of file while reading \u201c{0}\u201d.
+UnexpectedEndOfString_1           = More characters were expected at the end of \u201c{0}\u201d.
+UnexpectedFileFormat_2            = File \u201c{1}\u201d seems to be encoded in an other format than {0}.
+UnknownAxisDirection_1            = Axis direction \u201c{0}\u201d is unknown.
+UnknownCommand_1                  = Command \u201c{0}\u201d is not recognized.
+UnknownEnumValue_1                = Unknown enumeration value: {0}.
+UnknownFormatFor_1                = Format of \u201c{0}\u201d is not recognized.
+UnknownOption_1                   = Option \u201c{0}\u201d is not recognized.
+UnknownType_1                     = Type \u2018{0}\u2019 is unknown in this context.
+UnknownTypeForProperty_1          = Type of the \u201c{0}\u201d property is unknown.
+UnmodifiableAffineTransform       = This affine transform is unmodifiable.
+UnmodifiableCellValue_2           = The cell at column \u201c{1}\u201d of row \u201c{0}\u201d is unmodifiable.
+UnmodifiableGeometry              = This geometry is unmodifiable.
+UnmodifiableMetadata              = This metadata is unmodifiable.
+UnmodifiableObject_1              = Object \u2018{0}\u2019 is unmodifiable.
+UnparsableStringForClass_2        = Text \u201c{1}\u201d can not be parsed as an object of type \u2018{0}\u2019.
+UnparsableStringForClass_3        = Text \u201c{1}\u201d can not be parsed as an object of type \u2018{0}\u2019, because of the \u201c{2}\u201d characters.
+UnspecifiedFormatForClass_1       = No format is specified for objects of class \u2018{0}\u2019.
+UnsupportedImplementation_1       = Can not handle instances of \u2018{0}\u2019 because arbitrary implementations are not yet supported.
+UnsupportedOperation_1            = The \u2018{0}\u2019 operation is unsupported.
+UnsupportedType_1                 = The \u2018{0}\u2019 type is unsupported.
+UnsupportedVersion_1              = Version {0} is not supported.
+ValueAlreadyDefined_1             = A value is already defined for \u201c{0}\u201d.
+ValueNotGreaterThanZero_2         = Value \u2018{0}\u2019={1} is invalid. Expected a number greater than 0.
+ValueOutOfRange_4                 = Value \u2018{0}\u2019={3} is invalid. Expected a value in the [{1} \u2026 {2}] range.

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties?rev=1548777&r1=1548776&r2=1548777&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties [ISO-8859-1] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties [ISO-8859-1] Sat Dec  7 02:00:42 2013
@@ -14,131 +14,137 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-CanNotAddToExclusiveSet_2       = Aucun \u00e9l\u00e9ment ne peut \u00eatre ajout\u00e9 \u00e0 cet ensemble car les propri\u00e9t\u00e9s \u2018{0}\u2019 et \u2018{1}\u2019 sont mutuellement exclusives.
-CanNotConnectTo_1               = Ne peut pas se connecter \u00e0 \u201c{0}\u201d.
-CanNotConvertFromType_2         = Ne peut pas convertir du type \u2018{0}\u2019 vers le type \u2018{1}\u2019.
-CanNotConvertValue_2            = La valeur \u201c{0}\u201d ne peut pas \u00eatre convertie vers le type \u2018{1}\u2019.
-CanNotComputeDerivative         = La d\u00e9riv\u00e9 ne peut pas \u00eatre calcul\u00e9e.
-CanNotInstantiate_1             = Ne peut pas cr\u00e9er un objet de type \u2018{0}\u2019.
-CanNotMapAxisToDirection_2      = Aucun axe de \u201c{0}\u201d n\u2019a pu \u00eatre associ\u00e9 \u00e0 la direction \u201c{1}\u201d.
-CanNotOpen_1                    = Ne peut pas ouvrir \u201c{0}\u201d.
-CanNotParseFile_2               = Ne peut pas lire \u201c{1}\u201d comme un fichier au format {0}.
-CanNotRead_1                    = Ne peut pas lire \u201c{0}\u201d.
-CanNotRepresentInFormat_2       = Ne peut pas repr\u00e9senter \u201c{1}\u201d dans le format {0}.
-CanNotSetPropertyValue_1        = Ne peut pas d\u00e9finir une valeur pour la propri\u00e9t\u00e9 \u201c{0}\u201d.
-ClassNotFinal_1                 = La classe \u2018{0}\u2019 n\u2019est pas finale.
-CloneNotSupported_1             = Un objet de type \u2018{0}\u2019 ne peut pas \u00eatre clon\u00e9.
-ColinearAxisDirections_2        = Les directions d\u2019axes {0} et {1} sont colin\u00e9aires.
-DeadThread_1                    = La t\u00e2che \u201c{0}\u201d est morte.
-DuplicatedElement_1             = L\u2019\u00e9lement \u201c{0}\u201d est dupliqu\u00e9.
-DuplicatedIdentifier_1          = L\u2019identifiant \u201c{0}\u201d est dupliqu\u00e9.
-DuplicatedOption_1              = L\u2019option \u201c{0}\u201d est dupliqu\u00e9e.
-ElementAlreadyPresent_1         = L\u2019\u00e9lement \u201c{0}\u201d est d\u00e9j\u00e0 pr\u00e9sent.
-EmptyArgument_1                 = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre vide.
-EmptyDictionary                 = Le dictionnaire doit contenir au moins une entr\u00e9e.
-EmptyEnvelope2D                 = L\u2019enveloppe doit avoir au moins deux dimensions et ne pas \u00eatre vide.
-EmptyProperty_1                 = La propri\u00e9t\u00e9 nomm\u00e9e \u201c{0}\u201d ne doit pas \u00eatre vide.
-ExcessiveArgumentSize_3         = L\u2019argument \u2018{0}\u2019 ne peut pas contenir plus de {1} \u00e9l\u00e9ments. Un nombre de {2} est excessif.
-ExcessiveListSize_2             = Une taille de {1} \u00e9l\u00e9ments est excessive pour la liste \u201c{0}\u201d.
-ForbiddenAttribute_2            = L\u2019attribut \u201c{0}\u201d n\u2019est pas autoris\u00e9 pour un objet de type \u2018{1}\u2019.
-IllegalArgumentClass_2          = L\u2019argument \u2018{0}\u2019 ne peut pas \u00eatre de type \u2018{1}\u2019.
-IllegalArgumentClass_3          = L\u2019argument \u2018{0}\u2019 ne peut pas \u00eatre de type \u2018{2}\u2019. Une instance de \u2018{1}\u2019 ou d\u2019un type d\u00e9riv\u00e9 \u00e9tait attendue.
-IllegalArgumentField_4          = L\u2019argument \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d parce que le champs \u2018{2}\u2019 ne peut pas prendre la valeur \u201c{3}\u201d.
-IllegalArgumentValue_2          = L\u2019argument \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d.
-IllegalOptionValue_2            = L\u2019option \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d.
-IllegalBitsPattern_1            = Pattern de bits invalide: {0}.
-IllegalClass_2                  = La classe \u2018{1}\u2019 est ill\u00e9gale. Il doit s\u2019agir d\u2019une classe \u2018{0}\u2019 ou d\u00e9riv\u00e9e.
-IllegalFormatPatternForClass_2  = Le mod\u00e8le \u201c{1}\u201d ne peut pas \u00eatre appliqu\u00e9 au formatage d\u2019objets de type \u2018{0}\u2019.
-IllegalLanguageCode_1           = Le code de langue \u201c{0}\u201d n\u2019est pas reconnu.
-IllegalMemberType_2             = Le membre \u201c{0}\u201d ne peut pas \u00eatre associ\u00e9 au type \u201c{1}\u201d.
-IllegalOrdinateRange_3          = La plage de valeurs de coordonn\u00e9es [{1} \u2026 {2}] n\u2019est pas valide pour l\u2019axe \u201c{0}\u201d.
-IllegalPropertyClass_2          = La propri\u00e9t\u00e9 \u2018{0}\u2019 n\u2019accepte pas les valeurs de type \u2018{1}\u2019.
-IllegalRange_2                  = La plage [{0} \u2026 {1}] n\u2019est pas valide.
-IllegalUnicodeCodePoint_2       = La valeur {1} de \u201c{0}\u201d n\u2019est pas un code Unicode valide.
-IncompatiblePropertyValue_1     = La valeur de la propri\u00e9t\u00e9 \u201c{0}\u201d n\u2019est pas compatible.
-IncompatibleUnits_2             = Les unit\u00e9s \u201c{0}\u201d et \u201c{1}\u201d ne sont pas compatibles.
-InconsistentAttribute_2         = La valeur \u201c{1}\u201d de l\u2019attribut \u2018{0}\u2019 n\u2019est pas coh\u00e9rente avec celles des autres attributs.
-InconsistentTableColumns        = Les colonnes des tables ne sont pas coh\u00e9rentes.
-IdentifierAlreadyBound_1        = L\u2019identifiant \u201c{0}\u201d est d\u00e9j\u00e0 associ\u00e9 \u00e0 un autre objet.
-IndexOutOfBounds_1              = L\u2019index {0} est en dehors des limites permises.
-IndicesOutOfBounds_2            = Les index ({0}, {1}) sont en dehors des limites permises.
-InfiniteArgumentValue_1         = L\u2019argument \u2018{0}\u2019 ne peut pas prendre une valeur infinie.
-InfiniteRecursivity             = R\u00e9cursivit\u00e9 infinie.
-InsufficientArgumentSize_3      = L\u2019argument \u2018{0}\u2019 doit contenir au moins {1} \u00e9l\u00e9ments. Un nombre de {2} est insuffisant.
-KeyCollision_1                  = Une valeur diff\u00e9rente est d\u00e9j\u00e0 associ\u00e9e \u00e0 la cl\u00e9 \u201c{0}\u201d.
-MandatoryAttribute_2            = L\u2019attribut \u201c{0}\u201d est obligatoire pour un objet de type \u2018{1}\u2019.
-MismatchedArrayLengths          = Les dimensions des tableaux ne correspondent pas.
-MismatchedCRS                   = Le syst\u00e8me de r\u00e9f\u00e9rence des coordonn\u00e9es doit \u00eatre le m\u00eame pour tous les objets.
-MismatchedDimension_2           = Les dimensions des objets ({0}D et {1}D) ne concordent pas.
-MismatchedDimension_3           = L\u2019argument \u2018{0}\u2019 a {2} dimension{2,choice,1#|2#s}, alors qu\u2019on en attendait {1}.
-MismatchedMatrixSize_4          = Une matrice de taille de {0}\u00d7{1} \u00e9tait attendue mais la matrice donn\u00e9es est de taille {2}\u00d7{3}.
-MissingRequiredModule_1         = Cette op\u00e9ration requiert le module \u201c{0}\u201d.
-MissingSchemeInURI              = Il manque le sch\u00e9ma d\u2019URI.
-MissingValueForOption_1         = Aucune valeur n\u2019a \u00e9t\u00e9 d\u00e9finie pour l\u2019option \u201c{0}\u201d.
-MissingValueForProperty_1       = Aucune valeur n\u2019a \u00e9t\u00e9 d\u00e9finie pour la propri\u00e9t\u00e9 \u201c{0}\u201d.
-MissingValueInColumn_1          = Il manque une valeur dans la colonne \u201c{0}\u201d.
-MutuallyExclusiveOptions_2      = Les options \u201c{0}\u201d et \u201c{1}\u201d sont mutuellement exclusives.
-NegativeArgument_2              = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre n\u00e9gatif. La valeur donn\u00e9e \u00e9tait {1}.
-NegativeArrayLength_1           = Ne peut pas cr\u00e9er un tableau \u201c{0}\u201d de longueur n\u00e9gative.
-NoConvergenceForPoints_2        = Le calcul ne converge pas pour les points {0} et {1}.
-NodeChildOfItself_1             = Le n\u0153ud \u201c{0}\u201d ne peut pas \u00eatre un enfant de lui-m\u00eame.
-NodeHasAnotherParent_1          = Le n\u0153ud \u201c{0}\u201d a d\u00e9j\u00e0 un autre parent.
-NodeHasNoParent_1               = Le n\u0153ud \u201c{0}\u201d n\u2019a pas de parent.
-NodeIsLeaf_1                    = Le n\u0153ud \u201c{0}\u201d est une feuille.
-NodeNotFound_1                  = Aucun n\u0153ud \u201c{0}\u201d n\u2019a \u00e9t\u00e9 trouv\u00e9.
-NonEquilibratedParenthesis_2    = Il manque une parenth\u00e8se \u2018{1}\u2019 dans \u201c{0}\u201d.
-NonInvertibleConversion         = La conversion n\u2019est pas inversible.
-NonInvertibleMatrix_2           = Matrice {0}\u00d7{1} non inversible.
-NonInvertibleTransform          = La transformation n\u2019est pas inversible.
-NonAngularUnit_1                = \u201c{0}\u201d n\u2019est pas une unit\u00e9 d\u2019angles.
-NonLinearUnit_1                 = \u201c{0}\u201d n\u2019est pas une unit\u00e9 de longueurs.
-NonScaleUnit_1                  = \u201c{0}\u201d n\u2019est pas une unit\u00e9 d\u2019\u00e9chelles.
-NonTemporalUnit_1               = \u201c{0}\u201d n\u2019est pas une unit\u00e9 de temps.
-NonUniformScale                 = L\u2019\u00e9chelle n\u2019est pas uniforme.
-NotAnAffineTransform            = La transformation n\u2019est pas affine.
-NotANumber_1                    = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre NaN (Not-a-Number).
-NotAPrimitiveWrapper_1          = La classe \u2018{0}\u2019 n\u2019est pas un adaptateur d\u2019un type primitif.
-NotASkewSymmetricMatrix         = La matrice n\u2019est pas antisym\u00e9trique.
-NotAUnicodeIdentifier_1         = Le texte \u201c{0}\u201d n\u2019est pas un identifiant Unicode.
-NotComparableClass_1            = La classe \u2018{0}\u2019 n\u2019est pas comparable.
-NoSuchElement_1                 = L\u2019\u00e9lement \u201c{0}\u201d n\u2019a pas \u00e9t\u00e9 trouv\u00e9.
-NoSuchProperty_2                = Aucune propri\u00e9t\u00e9 nomm\u00e9e \u201c{0}\u201d n\u2019a \u00e9t\u00e9 trouv\u00e9e dans \u201c{1}\u201d.
-NoUnit                          = Aucune unit\u00e9 de mesure n\u2019a \u00e9t\u00e9 sp\u00e9cifi\u00e9e.
-NullArgument_1                  = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre nul.
-NullMapKey                      = La cl\u00e9 nulle n\u2019est pas autoris\u00e9e dans ce dictionnaire.
-NullMapValue                    = Les valeurs nulles ne sont pas autoris\u00e9es dans ce dictionnaire.
-OddArrayLength_1                = La longueur du tableau est {0}, alors qu\u2019on attendait une longueur paire.
-RecursiveCreateCallForKey_1     = Appel r\u00e9cursif lors de la cr\u00e9ation d\u2019un objet pour la cl\u00e9 \u201c{0}\u201d.
-RequireDecimalSeparator         = Un s\u00e9parateur d\u00e9cimal est requis.
-SingularMatrix                  = La matrice est singuli\u00e8re.
-StalledThread_1                 = La t\u00e2che \u201c{0}\u201d semble bloqu\u00e9e.
-StreamIsForwardOnly_1           = Ne peut pas reculer dans le flux de donn\u00e9es \u201c{0}\u201d.
-TooFewArguments_2               = Au moins {0} argument{0,choice,1# \u00e9tait attendu|2#s \u00e9taient attendus}, mais seulement {1} {1,choice,1#a \u00e9t\u00e9 sp\u00e9cifi\u00e9|2#ont \u00e9t\u00e9 sp\u00e9cifi\u00e9s}.
-TooManyArguments_2              = Au plus {0} argument{0,choice,1# \u00e9tait attendu|2#s \u00e9taient attendus}, mais {1} {1,choice,1#a \u00e9t\u00e9 sp\u00e9cifi\u00e9|2#ont \u00e9t\u00e9 sp\u00e9cifi\u00e9s}.
-UndefinedOrderingForElements_2  = L\u2019ordre entre les \u00e9l\u00e9ments \u201c{0}\u201d et \u201c{1}\u201d n\u2019est pas d\u00e9fini.
-UnexpectedArrayLength_2         = Un tableau de longueur {0} \u00e9tait attendu, mais le tableau re\u00e7u est de longueur {1}.
-UnexpectedChange_1              = Changement inattendu dans \u2018{0}\u2019.
-UnexpectedEndOfFile_1           = Fin de fichier inattendue lors de la lecture de \u201c{0}\u201d.
-UnexpectedEndOfString_1         = D\u2019autres caract\u00e8res \u00e9taient attendus \u00e0 la fin du texte \u201c{0}\u201d.
-UnexpectedFileFormat_2          = Le fichier \u201c{1}\u201d semble \u00eatre encod\u00e9 dans un autre format que {0}.
-UnknownCommand_1                = La commande \u201c{0}\u201d n\u2019est pas reconnue.
-UnknownEnumValue_1              = Valeur d\u2019\u00e9num\u00e9ration inconnue: {0}.
-UnknownFormatFor_1              = Le format de \u201c{0}\u201d n\u2019est pas reconnu.
-UnknownOption_1                 = L\u2019option \u201c{0}\u201d n\u2019est pas reconnue.
-UnknownType_1                   = Le type \u2018{0}\u2019 n\u2019est pas reconnu dans ce contexte.
-UnknownTypeForProperty_1        = Le type de la propri\u00e9t\u00e9 \u201c{0}\u201d est inconnu.
-UnmodifiableAffineTransform     = Cette transformation affine n\u2019est pas modifiable.
-UnmodifiableCellValue_2         = La cellule \u00e0 la colonne \u201c{1}\u201d de la ligne \u201c{0}\u201d n\u2019est pas modifiable.
-UnmodifiableGeometry            = Cette g\u00e9om\u00e9trie n\u2019est pas modifiable.
-UnmodifiableMetadata            = Cette m\u00e9ta-donn\u00e9e n\u2019est pas modifiable.
-UnmodifiableObject_1            = L\u2019objet \u2018{0}\u2019 n\u2019est pas modifiable.
-UnspecifiedFormatForClass_1     = Aucun format n\u2019est sp\u00e9cifi\u00e9 pour les objets de classe \u2018{0}\u2019.
-UnparsableStringForClass_2      = Le texte \u201c{1}\u201d n\u2019est pas reconnu comme un objet de type \u2018{0}\u2019.
-UnparsableStringForClass_3      = Le texte \u201c{1}\u201d n\u2019est pas reconnu comme un objet de type \u2018{0}\u2019, \u00e0 cause des caract\u00e8res \u201c{2}\u201d.
-UnsupportedImplementation_1     = Les instances de \u2018{0}\u2019 ne peuvent pas \u00eatre g\u00e9r\u00e9es parce que les impl\u00e9mentations arbitraires ne sont pas encore support\u00e9es.
-UnsupportedOperation_1          = L\u2019op\u00e9ration \u2018{0}\u2019 n\u2019est pas support\u00e9e.
-UnsupportedType_1               = Le type \u2018{0}\u2019 n\u2019est pas support\u00e9.
-UnsupportedVersion_1            = La version {0} n\u2019est pas support\u00e9e.
-ValueAlreadyDefined_1           = Une valeur est d\u00e9j\u00e0 d\u00e9finie pour \u201c{0}\u201d.
-ValueNotGreaterThanZero_2       = La valeur \u2018{0}\u2019={1} n\u2019est pas valide. On attendait un nombre positif non-nul.
-ValueOutOfRange_4               = La valeur \u2018{0}\u2019={3} est invalide. Une valeur dans la plage [{1} \u2026 {2}] \u00e9tait attendue.
+CanNotAddToExclusiveSet_2         = Aucun \u00e9l\u00e9ment ne peut \u00eatre ajout\u00e9 \u00e0 cet ensemble car les propri\u00e9t\u00e9s \u2018{0}\u2019 et \u2018{1}\u2019 sont mutuellement exclusives.
+CanNotConnectTo_1                 = Ne peut pas se connecter \u00e0 \u201c{0}\u201d.
+CanNotConvertFromType_2           = Ne peut pas convertir du type \u2018{0}\u2019 vers le type \u2018{1}\u2019.
+CanNotConvertValue_2              = La valeur \u201c{0}\u201d ne peut pas \u00eatre convertie vers le type \u2018{1}\u2019.
+CanNotComputeDerivative           = La d\u00e9riv\u00e9 ne peut pas \u00eatre calcul\u00e9e.
+CanNotInstantiate_1               = Ne peut pas cr\u00e9er un objet de type \u2018{0}\u2019.
+CanNotMapAxisToDirection_2        = Aucun axe de \u201c{0}\u201d n\u2019a pu \u00eatre associ\u00e9 \u00e0 la direction \u201c{1}\u201d.
+CanNotOpen_1                      = Ne peut pas ouvrir \u201c{0}\u201d.
+CanNotParseFile_2                 = Ne peut pas lire \u201c{1}\u201d comme un fichier au format {0}.
+CanNotRead_1                      = Ne peut pas lire \u201c{0}\u201d.
+CanNotRepresentInFormat_2         = Ne peut pas repr\u00e9senter \u201c{1}\u201d dans le format {0}.
+CanNotSetPropertyValue_1          = Ne peut pas d\u00e9finir une valeur pour la propri\u00e9t\u00e9 \u201c{0}\u201d.
+ClassNotFinal_1                   = La classe \u2018{0}\u2019 n\u2019est pas finale.
+CloneNotSupported_1               = Un objet de type \u2018{0}\u2019 ne peut pas \u00eatre clon\u00e9.
+ColinearAxisDirections_2          = Les directions d\u2019axes {0} et {1} sont colin\u00e9aires.
+DeadThread_1                      = La t\u00e2che \u201c{0}\u201d est morte.
+DuplicatedElement_1               = L\u2019\u00e9lement \u201c{0}\u201d est dupliqu\u00e9.
+DuplicatedIdentifier_1            = L\u2019identifiant \u201c{0}\u201d est dupliqu\u00e9.
+DuplicatedOption_1                = L\u2019option \u201c{0}\u201d est dupliqu\u00e9e.
+ElementAlreadyPresent_1           = L\u2019\u00e9lement \u201c{0}\u201d est d\u00e9j\u00e0 pr\u00e9sent.
+EmptyArgument_1                   = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre vide.
+EmptyDictionary                   = Le dictionnaire doit contenir au moins une entr\u00e9e.
+EmptyEnvelope2D                   = L\u2019enveloppe doit avoir au moins deux dimensions et ne pas \u00eatre vide.
+EmptyProperty_1                   = La propri\u00e9t\u00e9 nomm\u00e9e \u201c{0}\u201d ne doit pas \u00eatre vide.
+ExcessiveArgumentSize_3           = L\u2019argument \u2018{0}\u2019 ne peut pas contenir plus de {1} \u00e9l\u00e9ments. Un nombre de {2} est excessif.
+ExcessiveListSize_2               = Une taille de {1} \u00e9l\u00e9ments est excessive pour la liste \u201c{0}\u201d.
+ForbiddenAttribute_2              = L\u2019attribut \u201c{0}\u201d n\u2019est pas autoris\u00e9 pour un objet de type \u2018{1}\u2019.
+IllegalArgumentClass_2            = L\u2019argument \u2018{0}\u2019 ne peut pas \u00eatre de type \u2018{1}\u2019.
+IllegalArgumentClass_3            = L\u2019argument \u2018{0}\u2019 ne peut pas \u00eatre de type \u2018{2}\u2019. Une instance de \u2018{1}\u2019 ou d\u2019un type d\u00e9riv\u00e9 \u00e9tait attendue.
+IllegalArgumentField_4            = L\u2019argument \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d parce que le champs \u2018{2}\u2019 ne peut pas prendre la valeur \u201c{3}\u201d.
+IllegalArgumentValue_2            = L\u2019argument \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d.
+IllegalAxisDirection_2            = Les syst\u00e8mes de coordonn\u00e9es de classe \u2018{0}\u2019 ne peuvent pas avoir d\u2019axe dans la direction \u201c{1}\u201d.
+IllegalOptionValue_2              = L\u2019option \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d.
+IllegalBitsPattern_1              = Pattern de bits invalide: {0}.
+IllegalClass_2                    = La classe \u2018{1}\u2019 est ill\u00e9gale. Il doit s\u2019agir d\u2019une classe \u2018{0}\u2019 ou d\u00e9riv\u00e9e.
+IllegalFormatPatternForClass_2    = Le mod\u00e8le \u201c{1}\u201d ne peut pas \u00eatre appliqu\u00e9 au formatage d\u2019objets de type \u2018{0}\u2019.
+IllegalLanguageCode_1             = Le code de langue \u201c{0}\u201d n\u2019est pas reconnu.
+IllegalMemberType_2               = Le membre \u201c{0}\u201d ne peut pas \u00eatre associ\u00e9 au type \u201c{1}\u201d.
+IllegalOrdinateRange_3            = La plage de valeurs de coordonn\u00e9es [{1} \u2026 {2}] n\u2019est pas valide pour l\u2019axe \u201c{0}\u201d.
+IllegalPropertyClass_2            = La propri\u00e9t\u00e9 \u2018{0}\u2019 n\u2019accepte pas les valeurs de type \u2018{1}\u2019.
+IllegalRange_2                    = La plage [{0} \u2026 {1}] n\u2019est pas valide.
+IllegalUnicodeCodePoint_2         = La valeur {1} de \u201c{0}\u201d n\u2019est pas un code Unicode valide.
+IllegalUnitFor_2                  = L\u2019unit\u00e9 de mesure \u201c{1}\u201d n\u2019est pas valide pour les valeurs de \u201c{0}\u201d.
+IncompatibleCoordinateSystemTypes = Types de syst\u00e8mes de coordonn\u00e9es incompatibles.
+IncompatiblePropertyValue_1       = La valeur de la propri\u00e9t\u00e9 \u201c{0}\u201d n\u2019est pas compatible.
+IncompatibleUnits_2               = Les unit\u00e9s \u201c{0}\u201d et \u201c{1}\u201d ne sont pas compatibles.
+InconsistentAttribute_2           = La valeur \u201c{1}\u201d de l\u2019attribut \u2018{0}\u2019 n\u2019est pas coh\u00e9rente avec celles des autres attributs.
+InconsistentTableColumns          = Les colonnes des tables ne sont pas coh\u00e9rentes.
+IdentifierAlreadyBound_1          = L\u2019identifiant \u201c{0}\u201d est d\u00e9j\u00e0 associ\u00e9 \u00e0 un autre objet.
+IndexOutOfBounds_1                = L\u2019index {0} est en dehors des limites permises.
+IndicesOutOfBounds_2              = Les index ({0}, {1}) sont en dehors des limites permises.
+InfiniteArgumentValue_1           = L\u2019argument \u2018{0}\u2019 ne peut pas prendre une valeur infinie.
+InfiniteRecursivity               = R\u00e9cursivit\u00e9 infinie.
+InsufficientArgumentSize_3        = L\u2019argument \u2018{0}\u2019 doit contenir au moins {1} \u00e9l\u00e9ments. Un nombre de {2} est insuffisant.
+KeyCollision_1                    = Une valeur diff\u00e9rente est d\u00e9j\u00e0 associ\u00e9e \u00e0 la cl\u00e9 \u201c{0}\u201d.
+MandatoryAttribute_2              = L\u2019attribut \u201c{0}\u201d est obligatoire pour un objet de type \u2018{1}\u2019.
+MismatchedArrayLengths            = Les dimensions des tableaux ne correspondent pas.
+MismatchedCRS                     = Le syst\u00e8me de r\u00e9f\u00e9rence des coordonn\u00e9es doit \u00eatre le m\u00eame pour tous les objets.
+MismatchedDimension_2             = Les dimensions des objets ({0}D et {1}D) ne concordent pas.
+MismatchedDimension_3             = L\u2019argument \u2018{0}\u2019 a {2} dimension{2,choice,1#|2#s}, alors qu\u2019on en attendait {1}.
+MismatchedMatrixSize_4            = Une matrice de taille de {0}\u00d7{1} \u00e9tait attendue mais la matrice donn\u00e9es est de taille {2}\u00d7{3}.
+MissingRequiredModule_1           = Cette op\u00e9ration requiert le module \u201c{0}\u201d.
+MissingSchemeInURI                = Il manque le sch\u00e9ma d\u2019URI.
+MissingValueForOption_1           = Aucune valeur n\u2019a \u00e9t\u00e9 d\u00e9finie pour l\u2019option \u201c{0}\u201d.
+MissingValueForProperty_1         = Aucune valeur n\u2019a \u00e9t\u00e9 d\u00e9finie pour la propri\u00e9t\u00e9 \u201c{0}\u201d.
+MissingValueInColumn_1            = Il manque une valeur dans la colonne \u201c{0}\u201d.
+MutuallyExclusiveOptions_2        = Les options \u201c{0}\u201d et \u201c{1}\u201d sont mutuellement exclusives.
+NegativeArgument_2                = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre n\u00e9gatif. La valeur donn\u00e9e \u00e9tait {1}.
+NegativeArrayLength_1             = Ne peut pas cr\u00e9er un tableau \u201c{0}\u201d de longueur n\u00e9gative.
+NoConvergenceForPoints_2          = Le calcul ne converge pas pour les points {0} et {1}.
+NodeChildOfItself_1               = Le n\u0153ud \u201c{0}\u201d ne peut pas \u00eatre un enfant de lui-m\u00eame.
+NodeHasAnotherParent_1            = Le n\u0153ud \u201c{0}\u201d a d\u00e9j\u00e0 un autre parent.
+NodeHasNoParent_1                 = Le n\u0153ud \u201c{0}\u201d n\u2019a pas de parent.
+NodeIsLeaf_1                      = Le n\u0153ud \u201c{0}\u201d est une feuille.
+NodeNotFound_1                    = Aucun n\u0153ud \u201c{0}\u201d n\u2019a \u00e9t\u00e9 trouv\u00e9.
+NonEquilibratedParenthesis_2      = Il manque une parenth\u00e8se \u2018{1}\u2019 dans \u201c{0}\u201d.
+NonInvertibleConversion           = La conversion n\u2019est pas inversible.
+NonInvertibleMatrix_2             = Matrice {0}\u00d7{1} non inversible.
+NonInvertibleTransform            = La transformation n\u2019est pas inversible.
+NonAngularUnit_1                  = \u201c{0}\u201d n\u2019est pas une unit\u00e9 d\u2019angles.
+NonLinearUnit_1                   = \u201c{0}\u201d n\u2019est pas une unit\u00e9 de longueurs.
+NonLinearUnitConversion_2         = La conversion des unit\u00e9s \u201c{0}\u201d vers \u201c{1}\u201d n\u2019est pas lin\u00e9aire.
+NonPerpendicularDirections_2      = Les directions {0} et {1} ne sont pas perpendiculaires.
+NonScaleUnit_1                    = \u201c{0}\u201d n\u2019est pas une unit\u00e9 d\u2019\u00e9chelles.
+NonTemporalUnit_1                 = \u201c{0}\u201d n\u2019est pas une unit\u00e9 de temps.
+NonUniformScale                   = L\u2019\u00e9chelle n\u2019est pas uniforme.
+NotAnAffineTransform              = La transformation n\u2019est pas affine.
+NotANumber_1                      = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre NaN (Not-a-Number).
+NotAPrimitiveWrapper_1            = La classe \u2018{0}\u2019 n\u2019est pas un adaptateur d\u2019un type primitif.
+NotASkewSymmetricMatrix           = La matrice n\u2019est pas antisym\u00e9trique.
+NotAUnicodeIdentifier_1           = Le texte \u201c{0}\u201d n\u2019est pas un identifiant Unicode.
+NotComparableClass_1              = La classe \u2018{0}\u2019 n\u2019est pas comparable.
+NoSuchElement_1                   = L\u2019\u00e9lement \u201c{0}\u201d n\u2019a pas \u00e9t\u00e9 trouv\u00e9.
+NoSuchProperty_2                  = Aucune propri\u00e9t\u00e9 nomm\u00e9e \u201c{0}\u201d n\u2019a \u00e9t\u00e9 trouv\u00e9e dans \u201c{1}\u201d.
+NoUnit                            = Aucune unit\u00e9 de mesure n\u2019a \u00e9t\u00e9 sp\u00e9cifi\u00e9e.
+NullArgument_1                    = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre nul.
+NullMapKey                        = La cl\u00e9 nulle n\u2019est pas autoris\u00e9e dans ce dictionnaire.
+NullMapValue                      = Les valeurs nulles ne sont pas autoris\u00e9es dans ce dictionnaire.
+OddArrayLength_1                  = La longueur du tableau est {0}, alors qu\u2019on attendait une longueur paire.
+RecursiveCreateCallForKey_1       = Appel r\u00e9cursif lors de la cr\u00e9ation d\u2019un objet pour la cl\u00e9 \u201c{0}\u201d.
+RequireDecimalSeparator           = Un s\u00e9parateur d\u00e9cimal est requis.
+SingularMatrix                    = La matrice est singuli\u00e8re.
+StalledThread_1                   = La t\u00e2che \u201c{0}\u201d semble bloqu\u00e9e.
+StreamIsForwardOnly_1             = Ne peut pas reculer dans le flux de donn\u00e9es \u201c{0}\u201d.
+TooFewArguments_2                 = Au moins {0} argument{0,choice,1# \u00e9tait attendu|2#s \u00e9taient attendus}, mais seulement {1} {1,choice,1#a \u00e9t\u00e9 sp\u00e9cifi\u00e9|2#ont \u00e9t\u00e9 sp\u00e9cifi\u00e9s}.
+TooManyArguments_2                = Au plus {0} argument{0,choice,1# \u00e9tait attendu|2#s \u00e9taient attendus}, mais {1} {1,choice,1#a \u00e9t\u00e9 sp\u00e9cifi\u00e9|2#ont \u00e9t\u00e9 sp\u00e9cifi\u00e9s}.
+UndefinedOrderingForElements_2    = L\u2019ordre entre les \u00e9l\u00e9ments \u201c{0}\u201d et \u201c{1}\u201d n\u2019est pas d\u00e9fini.
+UnexpectedArrayLength_2           = Un tableau de longueur {0} \u00e9tait attendu, mais le tableau re\u00e7u est de longueur {1}.
+UnexpectedChange_1                = Changement inattendu dans \u2018{0}\u2019.
+UnexpectedEndOfFile_1             = Fin de fichier inattendue lors de la lecture de \u201c{0}\u201d.
+UnexpectedEndOfString_1           = D\u2019autres caract\u00e8res \u00e9taient attendus \u00e0 la fin du texte \u201c{0}\u201d.
+UnexpectedFileFormat_2            = Le fichier \u201c{1}\u201d semble \u00eatre encod\u00e9 dans un autre format que {0}.
+UnknownAxisDirection_1            = La direction d\u2019axe \u201c{0}\u201d n\u2019est pas reconnue.
+UnknownCommand_1                  = La commande \u201c{0}\u201d n\u2019est pas reconnue.
+UnknownEnumValue_1                = Valeur d\u2019\u00e9num\u00e9ration inconnue: {0}.
+UnknownFormatFor_1                = Le format de \u201c{0}\u201d n\u2019est pas reconnu.
+UnknownOption_1                   = L\u2019option \u201c{0}\u201d n\u2019est pas reconnue.
+UnknownType_1                     = Le type \u2018{0}\u2019 n\u2019est pas reconnu dans ce contexte.
+UnknownTypeForProperty_1          = Le type de la propri\u00e9t\u00e9 \u201c{0}\u201d est inconnu.
+UnmodifiableAffineTransform       = Cette transformation affine n\u2019est pas modifiable.
+UnmodifiableCellValue_2           = La cellule \u00e0 la colonne \u201c{1}\u201d de la ligne \u201c{0}\u201d n\u2019est pas modifiable.
+UnmodifiableGeometry              = Cette g\u00e9om\u00e9trie n\u2019est pas modifiable.
+UnmodifiableMetadata              = Cette m\u00e9ta-donn\u00e9e n\u2019est pas modifiable.
+UnmodifiableObject_1              = L\u2019objet \u2018{0}\u2019 n\u2019est pas modifiable.
+UnspecifiedFormatForClass_1       = Aucun format n\u2019est sp\u00e9cifi\u00e9 pour les objets de classe \u2018{0}\u2019.
+UnparsableStringForClass_2        = Le texte \u201c{1}\u201d n\u2019est pas reconnu comme un objet de type \u2018{0}\u2019.
+UnparsableStringForClass_3        = Le texte \u201c{1}\u201d n\u2019est pas reconnu comme un objet de type \u2018{0}\u2019, \u00e0 cause des caract\u00e8res \u201c{2}\u201d.
+UnsupportedImplementation_1       = Les instances de \u2018{0}\u2019 ne peuvent pas \u00eatre g\u00e9r\u00e9es parce que les impl\u00e9mentations arbitraires ne sont pas encore support\u00e9es.
+UnsupportedOperation_1            = L\u2019op\u00e9ration \u2018{0}\u2019 n\u2019est pas support\u00e9e.
+UnsupportedType_1                 = Le type \u2018{0}\u2019 n\u2019est pas support\u00e9.
+UnsupportedVersion_1              = La version {0} n\u2019est pas support\u00e9e.
+ValueAlreadyDefined_1             = Une valeur est d\u00e9j\u00e0 d\u00e9finie pour \u201c{0}\u201d.
+ValueNotGreaterThanZero_2         = La valeur \u2018{0}\u2019={1} n\u2019est pas valide. On attendait un nombre positif non-nul.
+ValueOutOfRange_4                 = La valeur \u2018{0}\u2019={3} est invalide. Une valeur dans la plage [{1} \u2026 {2}] \u00e9tait attendue.

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java?rev=1548777&r1=1548776&r2=1548777&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Namespaces.java [UTF-8] Sat Dec  7 02:00:42 2013
@@ -109,14 +109,16 @@ public final class Namespaces extends St
     /**
      * The <code>{@value}</code> URL.
      * The usual prefix for this namespace is {@code "gml"}.
+     * The current version is 3.2 (ISO 19136), but this may change in any future SIS release.
      *
      * @category OGC
      */
-    public static final String GML = "http://www.opengis.net/gml";
+    public static final String GML = "http://www.opengis.net/gml/3.2";
 
     /**
      * The <code>{@value}</code> URL.
      * The usual prefix for this namespace is {@code "csw"}.
+     * The current version is 2.0.2, but this may change in any future SIS release.
      *
      * @category OGC
      */

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Pooled.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Pooled.java?rev=1548777&r1=1548776&r2=1548777&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Pooled.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/Pooled.java [UTF-8] Sat Dec  7 02:00:42 2013
@@ -36,6 +36,7 @@ import org.apache.sis.util.resources.Err
 import org.apache.sis.util.logging.WarningListener;
 import org.apache.sis.internal.util.CollectionsExt;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
 
 
 /**
@@ -118,8 +119,26 @@ abstract class Pooled {
     private Map<String,String> schemas;
 
     /**
+     * Whether {@link FilteredNamespaces} shall be used of not. Values can be:
+     *
+     * <ul>
+     *   <li>0 for the default behavior, which is apply namespace replacements only if the {@link XML#GML_VERSION}
+     *       property is set to an older value than the one supported natively by SIS.</li>
+     *   <li>1 for forcing namespace replacements at unmarshalling time. This is useful for reading a XML document
+     *       of unknown GML version.</li>
+     *   <li>2 for disabling namespace replacements. XML (un)marshalling will use the namespaces URI supported
+     *       natively by SIS as declared in JAXB annotations. This is sometime useful for debugging purpose.</li>
+     * </ul>
+     *
+     * @see LegacyNamespaces#APPLY_NAMESPACE_REPLACEMENTS
+     */
+    private byte applyNamespaceReplacements;
+
+    /**
      * The GML version to be marshalled or unmarshalled, or {@code null} if unspecified.
      * If null, then the latest version is assumed.
+     *
+     * @see #getGMLVersion()
      */
     private Version gmlVersion;
 
@@ -186,14 +205,6 @@ abstract class Pooled {
     }
 
     /**
-     * Returns the initial value of {@link Context#bitMasks}. Shall be 0 if this object is
-     * an unmarshaller, or {@link Context#MARSHALLING} if it is an {@link Unmarshaller}.
-     */
-    private int initialBitMasks() {
-        return (this instanceof Marshaller) ? Context.MARSHALLING : 0;
-    }
-
-    /**
      * Releases resources and resets the (un)marshaller to its initial state.
      * This method is invoked by {@link MarshallerPool} just before to push a
      * (un)marshaller in the pool after its usage.
@@ -206,7 +217,7 @@ abstract class Pooled {
             reset(entry.getKey(), entry.getValue());
         }
         initialProperties.clear();
-        bitMasks        = initialBitMasks();
+        bitMasks        = template.bitMasks;
         locale          = template.locale;
         timezone        = template.timezone;
         schemas         = template.schemas;
@@ -215,6 +226,9 @@ abstract class Pooled {
         converter       = template.converter;
         warningListener = template.warningListener;
         resetTime       = System.nanoTime();
+        if (this instanceof Marshaller) {
+            bitMasks |= Context.MARSHALLING;
+        }
     }
 
     /**
@@ -231,6 +245,38 @@ abstract class Pooled {
     protected abstract void reset(final Object key, final Object value) throws JAXBException;
 
     /**
+     * Returns the {@code FilterVersion} enumeration value to use for the current GML version, or
+     * {@code null} if the SIS native version is suitable. If this method returns a non-null value,
+     * then the output generated by JAXB will need to go through a {@link FilteredStreamWriter}
+     * in order to replace the namespace of the GML version implemented by SIS by the namespace of
+     * the GML version asked by the user.
+     *
+     * @see FilteredNamespaces
+     */
+    final FilterVersion getFilterVersion() {
+        switch (applyNamespaceReplacements) {
+            case 0: {
+                // Apply namespace replacements only for older versions than the one supported natively by SIS.
+                if (gmlVersion != null) {
+                    if (gmlVersion.compareTo(LegacyNamespaces.VERSION_3_2, 2) < 0) {
+                        return FilterVersion.GML31;
+                    }
+                }
+                break;
+            }
+            case 1: {
+                // Force namespace replacements at unmarshalling time (illegal for marshalling).
+                if ((bitMasks & Context.MARSHALLING) == 0) {
+                    return FilterVersion.ALL;
+                }
+                break;
+            }
+            // case 2: disable namespace replacements.
+        }
+        return null;
+    }
+
+    /**
      * Returns {@code true} if the initial property is already saved for the given key.
      * Note that a property set to {@code null} is still considered as defined.
      */
@@ -282,11 +328,11 @@ abstract class Pooled {
                     locale = (value instanceof CharSequence) ? Locales.parse(value.toString()) : (Locale) value;
                     return;
                 }
-                else if (name.equals(XML.TIMEZONE)) {
+                if (name.equals(XML.TIMEZONE)) {
                     timezone = (value instanceof CharSequence) ? TimeZone.getTimeZone(value.toString()) : (TimeZone) value;
                     return;
                 }
-                else if (name.equals(XML.SCHEMAS)) {
+                if (name.equals(XML.SCHEMAS)) {
                     final Map<?,?> map = (Map<?,?>) value;
                     Map<String,String> copy = null;
                     if (map != null) {
@@ -306,40 +352,49 @@ abstract class Pooled {
                     schemas = copy;
                     return;
                 }
-                else if (name.equals(XML.GML_VERSION)) {
+                if (name.equals(XML.GML_VERSION)) {
                     gmlVersion = (value instanceof CharSequence) ? new Version(value.toString()) : (Version) value;
                     return;
                 }
-                else if (name.equals(XML.RESOLVER)) {
+                if (name.equals(XML.RESOLVER)) {
                     resolver = (ReferenceResolver) value;
                     return;
                 }
-                else if (name.equals(XML.CONVERTER)) {
+                if (name.equals(XML.CONVERTER)) {
                     converter = (ValueConverter) value;
                     return;
                 }
-                else if (name.equals(XML.STRING_SUBSTITUTES)) {
-                    int mask = initialBitMasks();
+                if (name.equals(XML.STRING_SUBSTITUTES)) {
+                    bitMasks &= ~(Context.SUBSTITUTE_LANGUAGE |
+                                  Context.SUBSTITUTE_COUNTRY  |
+                                  Context.SUBSTITUTE_FILENAME |
+                                  Context.SUBSTITUTE_MIMETYPE);
                     if (value != null) {
                         for (final CharSequence substitute : (CharSequence[]) value) {
                             if (CharSequences.equalsIgnoreCase(substitute, "language")) {
-                                mask |= Context.SUBSTITUTE_LANGUAGE;
+                                bitMasks |= Context.SUBSTITUTE_LANGUAGE;
                             } else if (CharSequences.equalsIgnoreCase(substitute, "country")) {
-                                mask |= Context.SUBSTITUTE_COUNTRY;
+                                bitMasks |= Context.SUBSTITUTE_COUNTRY;
                             } else if (CharSequences.equalsIgnoreCase(substitute, "filename")) {
-                                mask |= Context.SUBSTITUTE_FILENAME;
+                                bitMasks |= Context.SUBSTITUTE_FILENAME;
                             } else if (CharSequences.equalsIgnoreCase(substitute, "mimetype")) {
-                                mask |= Context.SUBSTITUTE_MIMETYPE;
+                                bitMasks |= Context.SUBSTITUTE_MIMETYPE;
                             }
                         }
                     }
-                    bitMasks = mask;
                     return;
                 }
-                else if (name.equals(XML.WARNING_LISTENER)) {
+                if (name.equals(XML.WARNING_LISTENER)) {
                     warningListener = (WarningListener<?>) value;
                     return;
                 }
+                if (name.equals(LegacyNamespaces.APPLY_NAMESPACE_REPLACEMENTS)) {
+                    applyNamespaceReplacements = 0;
+                    if (value != null) {
+                        applyNamespaceReplacements = ((Boolean) value) ? (byte) 1 : (byte) 2;
+                    }
+                    return;
+                }
             }
         } catch (RuntimeException e) { // (ClassCastException | IllegalArgumentException) on the JDK7 branch.
             throw new PropertyException(Errors.format(
@@ -380,9 +435,14 @@ abstract class Pooled {
                 if ((bitMasks & Context.SUBSTITUTE_MIMETYPE) != 0) substitutes[n++] = "mimetype";
                 return (n != 0) ? ArraysExt.resize(substitutes, n) : null;
             }
-            else {
-                return getStandardProperty(convertPropertyKey(name));
+            if (name.equals(LegacyNamespaces.APPLY_NAMESPACE_REPLACEMENTS)) {
+                switch (applyNamespaceReplacements) {
+                    case 1:  return Boolean.TRUE;
+                    case 2:  return Boolean.FALSE;
+                    default: return null;
+                }
             }
+            return getStandardProperty(convertPropertyKey(name));
         }
     }
 

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/PooledMarshaller.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/PooledMarshaller.java?rev=1548777&r1=1548776&r2=1548777&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/PooledMarshaller.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/xml/PooledMarshaller.java [UTF-8] Sat Dec  7 02:00:42 2013
@@ -19,6 +19,9 @@ package org.apache.sis.xml;
 import java.io.File;
 import java.io.Writer;
 import java.io.OutputStream;
+import java.io.FileOutputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.PropertyException;
@@ -27,28 +30,32 @@ import javax.xml.bind.annotation.adapter
 import javax.xml.bind.attachment.AttachmentMarshaller;
 import javax.xml.stream.XMLEventWriter;
 import javax.xml.stream.XMLStreamWriter;
+import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.Result;
 import javax.xml.validation.Schema;
 import org.xml.sax.ContentHandler;
 import org.w3c.dom.Node;
 import org.apache.sis.util.Decorator;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.system.XMLOutputFactory;
 
 
 /**
  * Wraps a {@link Marshaller} in order to have some control on the modifications applied on it.
- * This wrapper serves two purpose:
+ * This wrapper serves three purposes:
  *
  * <ul>
  *   <li>Save properties before modification, in order to restore them to their original values
  *       when the marshaller is recycled.</li>
  *   <li>Constructs a SIS {@link Context} object on marshalling, in order to give
  *       additional information to the SIS object being marshalled.</li>
+ *   <li>Wraps the output stream in a {@link FilteredStreamWriter} if the desired GML version
+ *       in not the SIS native GML version.</li>
  * </ul>
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.3 (derived from geotk-3.00)
- * @version 0.3
+ * @version 0.4
  * @module
  */
 @Decorator(Marshaller.class)
@@ -86,7 +93,7 @@ final class PooledMarshaller extends Poo
         if (key instanceof String) {
             final String k = (String) key;
             if (value == null && (k.endsWith(".xmlHeaders") || k.equals(JAXB_SCHEMA_LOCATION))) {
-                value = ""; // Null value doesn't seem to be accepted.
+                value = ""; // Null value doesn't seem to be accepted for those properties.
             }
             marshaller.setProperty(k, value);
         } else if (key == AttachmentMarshaller.class) {
@@ -103,16 +110,54 @@ final class PooledMarshaller extends Poo
     }
 
     /**
-     * Delegates the marshalling to the wrapped marshaller.
+     * Returns the encoding of the XML document to write.
      */
-    @Override
-    public void marshal(final Object object, final Result output) throws JAXBException {
+    private String getEncoding() throws PropertyException {
+        return (String) marshaller.getProperty(JAXB_ENCODING);
+    }
+
+    /**
+     * Marshals to the given output with on-the-fly substitution of namespaces.
+     * This method is invoked only when the user asked to marshal to a different GML version
+     * than the one supported natively by SIS, i.e. when {@link #getFilterVersion()} returns
+     * a non-null value.
+     *
+     * @param object  The object to marshall.
+     * @param output  The writer created by SIS (<b>not</b> the writer given by the user).
+     * @param version Identify the namespace substitutions to perform.
+     */
+    private void marshal(final Object object, XMLStreamWriter output, final FilterVersion version)
+            throws XMLStreamException, JAXBException
+    {
+        output = new FilteredStreamWriter(output, version);
         final Context context = begin();
         try {
             marshaller.marshal(object, output);
         } finally {
             context.finish();
         }
+        output.close(); // Despite its name, this method does not close the underlying output stream.
+    }
+
+    /**
+     * Delegates the marshalling to the wrapped marshaller.
+     */
+    @Override
+    public void marshal(final Object object, final Result output) throws JAXBException {
+        final FilterVersion version = getFilterVersion();
+        if (version != null) try {
+            marshal(object, XMLOutputFactory.createXMLStreamWriter(output), version);
+        } catch (XMLStreamException e) {
+            throw new JAXBException(e);
+        } else {
+            // Marshalling to the default GML version.
+            final Context context = begin();
+            try {
+                marshaller.marshal(object, output);
+            } finally {
+                context.finish();
+            }
+        }
     }
 
     /**
@@ -120,11 +165,19 @@ final class PooledMarshaller extends Poo
      */
     @Override
     public void marshal(final Object object, final OutputStream output) throws JAXBException {
-        final Context context = begin();
-        try {
-            marshaller.marshal(object, output);
-        } finally {
-            context.finish();
+        final FilterVersion version = getFilterVersion();
+        if (version != null) try {
+            marshal(object, XMLOutputFactory.createXMLStreamWriter(output, getEncoding()), version);
+        } catch (XMLStreamException e) {
+            throw new JAXBException(e);
+        } else {
+            // Marshalling to the default GML version.
+            final Context context = begin();
+            try {
+                marshaller.marshal(object, output);
+            } finally {
+                context.finish();
+            }
         }
     }
 
@@ -133,11 +186,24 @@ final class PooledMarshaller extends Poo
      */
     @Override
     public void marshal(final Object object, final File output) throws JAXBException {
-        final Context context = begin();
-        try {
-            marshaller.marshal(object, output);
-        } finally {
-            context.finish();
+        final FilterVersion version = getFilterVersion();
+        if (version != null) try {
+            final OutputStream s = new BufferedOutputStream(new FileOutputStream(output));
+            try {
+                marshal(object, XMLOutputFactory.createXMLStreamWriter(s, getEncoding()), version);
+            } finally {
+                s.close();
+            }
+        } catch (Exception e) { // (IOException | XMLStreamException) on the JDK7 branch.
+            throw new JAXBException(e);
+        } else {
+            // Marshalling to the default GML version.
+            final Context context = begin();
+            try {
+                marshaller.marshal(object, output);
+            } finally {
+                context.finish();
+            }
         }
     }
 
@@ -146,11 +212,19 @@ final class PooledMarshaller extends Poo
      */
     @Override
     public void marshal(final Object object, final Writer output) throws JAXBException {
-        final Context context = begin();
-        try {
-            marshaller.marshal(object, output);
-        } finally {
-            context.finish();
+        final FilterVersion version = getFilterVersion();
+        if (version != null) try {
+            marshal(object, XMLOutputFactory.createXMLStreamWriter(output), version);
+        } catch (XMLStreamException e) {
+            throw new JAXBException(e);
+        } else {
+            // Marshalling to the default GML version.
+            final Context context = begin();
+            try {
+                marshaller.marshal(object, output);
+            } finally {
+                context.finish();
+            }
         }
     }
 
@@ -159,11 +233,19 @@ final class PooledMarshaller extends Poo
      */
     @Override
     public void marshal(final Object object, final ContentHandler output) throws JAXBException {
-        final Context context = begin();
-        try {
-            marshaller.marshal(object, output);
-        } finally {
-            context.finish();
+        final FilterVersion version = getFilterVersion();
+        if (version != null) try {
+            marshal(object, XMLOutputFactory.createXMLStreamWriter(output), version);
+        } catch (XMLStreamException e) {
+            throw new JAXBException(e);
+        } else {
+            // Marshalling to the default GML version.
+            final Context context = begin();
+            try {
+                marshaller.marshal(object, output);
+            } finally {
+                context.finish();
+            }
         }
     }
 
@@ -172,11 +254,19 @@ final class PooledMarshaller extends Poo
      */
     @Override
     public void marshal(final Object object, final Node output) throws JAXBException {
-        final Context context = begin();
-        try {
-            marshaller.marshal(object, output);
-        } finally {
-            context.finish();
+        final FilterVersion version = getFilterVersion();
+        if (version != null) try {
+            marshal(object, XMLOutputFactory.createXMLStreamWriter(output), version);
+        } catch (XMLStreamException e) {
+            throw new JAXBException(e);
+        } else {
+            // Marshalling to the default GML version.
+            final Context context = begin();
+            try {
+                marshaller.marshal(object, output);
+            } finally {
+                context.finish();
+            }
         }
     }
 
@@ -184,7 +274,11 @@ final class PooledMarshaller extends Poo
      * Delegates the marshalling to the wrapped marshaller.
      */
     @Override
-    public void marshal(final Object object, final XMLStreamWriter output) throws JAXBException {
+    public void marshal(final Object object, XMLStreamWriter output) throws JAXBException {
+        final FilterVersion version = getFilterVersion();
+        if (version != null) {
+            output = new FilteredStreamWriter(output, version);
+        }
         final Context context = begin();
         try {
             marshaller.marshal(object, output);
@@ -198,11 +292,19 @@ final class PooledMarshaller extends Poo
      */
     @Override
     public void marshal(final Object object, final XMLEventWriter output) throws JAXBException {
-        final Context context = begin();
-        try {
-            marshaller.marshal(object, output);
-        } finally {
-            context.finish();
+        final FilterVersion version = getFilterVersion();
+        if (version != null) try {
+            marshal(object, XMLOutputFactory.createXMLStreamWriter(output), version);
+        } catch (XMLStreamException e) {
+            throw new JAXBException(e);
+        } else {
+            // Marshalling to the default GML version.
+            final Context context = begin();
+            try {
+                marshaller.marshal(object, output);
+            } finally {
+                context.finish();
+            }
         }
     }
 
@@ -211,11 +313,17 @@ final class PooledMarshaller extends Poo
      */
     @Override
     public Node getNode(final Object object) throws JAXBException {
-        final Context context = begin();
-        try {
-            return marshaller.getNode(object);
-        } finally {
-            context.finish();
+        final FilterVersion version = getFilterVersion();
+        if (version != null) {
+            // This exception is thrown by javax.xml.bind.helpers.AbstractMarshallerImpl anyway.
+            throw new UnsupportedOperationException();
+        } else {
+            final Context context = begin();
+            try {
+                return marshaller.getNode(object);
+            } finally {
+                context.finish();
+            }
         }
     }
 



Mime
View raw message