Author: desruisseaux
Date: Tue Feb 19 20:59:12 2013
New Revision: 1447922
URL: http://svn.apache.org/r1447922
Log:
Added tests, fixed RangeFormat bug as a result of test additions, and improved
documentation.
Modified:
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/measure/RangeFormatTest.java
sis/branches/JDK7/src/main/docbook/fr/coverage.xml
Modified:
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java?rev=1447922&r1=1447921&r2=1447922&view=diff
==============================================================================
---
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
(original)
+++
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
Tue Feb 19 20:59:12 2013
@@ -38,7 +38,7 @@ import org.apache.sis.util.resources.Err
/**
- * Parses and formats {@linkplain Range ranges} in the given locale for the
given type.
+ * Parses and formats {@link Range} instances according the given locale.
* This class complies to the format described in the <a
href="http://en.wikipedia.org/wiki/ISO_31-11">ISO 31-11</a>
* standard, except that the minimal and maximal values are separated by the
"{@code â¦}" character
* instead than coma. More specifically, the format is defined as below:
@@ -73,14 +73,14 @@ import org.apache.sis.util.resources.Err
*
* {@section Range type and type of range elements}
* The kind of ranges created by the {@link #parse(String) parse(â¦)} methods
is determined
- * by the class of range elements:
+ * by the type of range elements:
*
* <ul>
* <li>If the elements type is assignable to {@link Date}, then the {@code
parse(â¦)} methods
* will create {@code Range<Date>} objects.</li>
* <li>If the elements type is assignable to {@link Number}, then:
* <ul>
- * <li>If the text to parse contains a {@linkplain Unit unit of
measure}, then
+ * <li>If the text to parse contains a {@linkplain Unit unit of
measurement}, then
* the {@code parse(â¦)} methods will create {@link
MeasurementRange} objects.</li>
* <li>Otherwise the {@code parse(â¦)} methods will create {@link
NumberRange} objects.</li>
* </ul>
@@ -746,6 +746,7 @@ public class RangeFormat extends Format
if (hasBraces && c == closeSet) {
// Empty range represented by {}
minValue = maxValue = valueOfNil();
+ isMinIncluded = isMaxIncluded = false;
} else {
// Singleton value, with or without braces.
pos.setIndex(index);
@@ -756,25 +757,25 @@ public class RangeFormat extends Format
pos.setErrorIndex(index); // In case of failure during the
conversion.
minValue = maxValue = convert(value);
index = pos.getIndex();
+ isMinIncluded = isMaxIncluded = true;
}
if (hasBraces) {
// Skip whitespaces, then skip the closing brace.
// Absence of closing brace is considered an error.
- for (;; index += Character.charCount(c)) {
- if (index < length) {
- c = source.codePointAt(index);
- if (Character.isWhitespace(c)) {
- continue;
- }
- if (c == closeSet) {
- break;
- }
+ do {
+ if (index >= length) {
+ pos.setErrorIndex(length);
+ return null;
}
- pos.setErrorIndex(length);
+ c = source.codePointAt(index);
+ index += Character.charCount(c);
+ } while (Character.isWhitespace(c));
+ if (c != closeSet) {
+ pos.setErrorIndex(index - Character.charCount(c));
return null;
}
+ pos.setIndex(index);
}
- isMinIncluded = isMaxIncluded = true;
} else {
/*
* We found an opening bracket. Skip the whitespaces. If the next
Modified:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/measure/RangeFormatTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/measure/RangeFormatTest.java?rev=1447922&r1=1447921&r2=1447922&view=diff
==============================================================================
---
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/measure/RangeFormatTest.java
(original)
+++
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/measure/RangeFormatTest.java
Tue Feb 19 20:59:12 2013
@@ -208,7 +208,9 @@ public final strictfp class RangeFormatT
assertEquals(NumberRange.create(300, true, 300, true ), parse("
300_"));
assertEquals(NumberRange.create(300, true, 300, true ),
parse("[300]"));
assertEquals(NumberRange.create(300, false, 300, false),
parse("(300)"));
+ assertEquals(NumberRange.create(300, true, 300, true ),
parse("{300}"));
assertEquals(NumberRange.create( 0, true, 0, false), parse("[]"));
+ assertEquals(NumberRange.create( 0, true, 0, false), parse("{}"));
}
/**
Modified: sis/branches/JDK7/src/main/docbook/fr/coverage.xml
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/src/main/docbook/fr/coverage.xml?rev=1447922&r1=1447921&r2=1447922&view=diff
==============================================================================
--- sis/branches/JDK7/src/main/docbook/fr/coverage.xml (original)
+++ sis/branches/JDK7/src/main/docbook/fr/coverage.xml Tue Feb 19 20:59:12 2013
@@ -21,62 +21,63 @@
retourne une valeur dâattribut. Lâensemble des valeurs pouvant
être données en entrée est appelé le domaine
(<foreignphrase>domain</foreignphrase> en anglais), alors que
lâensemble des valeurs pouvant être retournées
est appelé <foreignphrase>range</foreignphrase> en anglais.
+ Le domaine est souvent lâespace spatio-temporel couvert par les
données, mais rien dans <acronym>SIS</acronym>
+ nâempêche les couvertures de sâétendre à dâautres dimensions.
Par exemple les études en thermodynamique
+ utilisent souvent un espace dont les dimensions sont la température
et la pression.
</para>
<informalexample><para>
<emphasis role="bold">Exemple:</emphasis> les valeurs des pixels
dâune image pourraient contenir des mesures
- dâélévation du terrain. Si une fonction <mathphrase>h =Â
f(λ,Ï)</mathphrase> permet dâobtenir (éventuellement
+ dâélévation du terrain. Si une fonction <mathphrase>h =Â
f(Ï,λ)</mathphrase> permet dâobtenir (éventuellement
à lâaide dâinterpolations) lâélévation
<mathphrase>h</mathphrase> en fonction dâune coordonnée géographique
- <mathphrase>(λ,Ï)</mathphrase>, alors lâenveloppe géographique de
lâimage définie le <foreignphrase>domain</foreignphrase>,
+ <mathphrase>(Ï,λ)</mathphrase>, alors lâenveloppe géographique de
lâimage définie le <foreignphrase>domain</foreignphrase>,
la fonction <mathphrase>f</mathphrase> est le
<foreignphrase>coverage</foreignphrase>, et lâensemble des valeurs de
<mathphrase>h</mathphrase> que peut retourner cette fonction est le
<foreignphrase>range</foreignphrase>.
</para></informalexample>
</listitem>
<listitem>
<para>
- Les différents types de couvertures peuvent se caractériser par
leurs géométries.
+ Les différents types de couvertures peuvent se caractériser par la
géométrie de leurs cellules.
En particulier, une couverture nâest pas nécessairement composée
de cellules quadrilatérales.
- Toutefois les cellules quadrilatérales étant de loin les plus
fréquentes, on utilisera souvent
- le terme <foreignphrase>grid coverage</foreignphrase> pour désigner
les couvertures composées de telles cellules.
+ Toutefois les cellules quadrilatérales étant de loin les plus
fréquentes (puisque câest la géométrie classique des pixels des images),
+ on utilisera souvent le terme <foreignphrase>grid
coverage</foreignphrase> pour désigner les couvertures composées de telles
cellules.
Dans <acronym>SIS</acronym>, la géométrie de ces couvertures est
décrite par la classe <classname role="SIS">GridGeometry</classname>.
</para>
</listitem>
</itemizedlist>
-
<para>
- Le domaine est souvent lâespace spatio-temporel couvert par les
données, mais rien dans <acronym>SIS</acronym>
- nâempêche les couvertures de sâétendre sur dâautres dimensions.
Par exemple les études en thermodynamique
- utilisent souvent un espace dont les dimensions sont la température et la
pression.
+ Les caractéristiques du domaine spatial sont définies par le standard
<acronym>ISO</acronym> 19123,
+ alors que les caractéristiques du <foreignphrase>range</foreignphrase> ne
font pas parties du standard.
+ Le standard mentionne simplement que les
<foreignphrase>ranges</foreignphrase> peuvent être finis ou infinis,
+ et ne sont pas nécessairement numériques.
+ Par exemple les valeurs retournées par une couverture peuvent provenir
dâune énumération
+ (« ceci est une forêt », « ceci est un lac »,
<foreignphrase>etc.</foreignphrase>).
+ Toutefois, le standard définit deux grands types de couvertures qui ont
un impact
+ sur les types de <foreignphrase>ranges</foreignphrase> autorisés:
+ les couvertures <firstterm>discrètes</firstterm> et les couvertures
<firstterm>continues</firstterm>.
+ Présentées simplement, les couvertures continues sont des fonctions
pouvant utiliser des méthodes dâinterpolations.
+ Or, les interpolations nâétant possibles quâavec des valeurs
numériques, les <foreignphrase>ranges</foreignphrase> de valeurs
+ non-numériques ne peuvent être utilisés quâavec des couvertures de
type <classname role="OGC">CV_DiscreteCoverage</classname>.
+ En revanche, les <foreignphrase>ranges</foreignphrase> de valeurs
numériques peuvent
+ être utilisés aussi avec des couvertures de type <classname
role="OGC">CV_ContinuousCoverage</classname>.
</para>
<sidebar>
- <title>Le <classname role="SIS">Range</classname> de
<acronym>SIS</acronym> et sa relation avec les standards</title>
- <para>
- Les caractéristiques du domaine spatial sont définies par le standard
<acronym>ISO</acronym> 19123,
- alors que les caractéristiques du <foreignphrase>range</foreignphrase>
ne font pas parties du standard.
- Le standard mentionne simplement que les
<foreignphrase>ranges</foreignphrase> peuvent être finis ou infinis,
- et ne sont pas nécessairement numériques.
- Par exemple les valeurs retournées par une couverture peuvent provenir
dâune énumération
- (« ceci est une forêt », « ceci est un lac »,
<foreignphrase>etc.</foreignphrase>).
- </para>
+ <title>La classe <classname role="SIS">Range</classname> de
<acronym>SIS</acronym> et sa relation avec les standards</title>
<para>
- Les interpolations nâétant possibles quâavec les valeurs
numériques, les <foreignphrase>ranges</foreignphrase> de valeurs
- non-numériques ne peuvent être utilisés quâavec les couvertures de
type <classname role="OGC">CV_DiscreteCoverage</classname>.
- En revanche, les <foreignphrase>ranges</foreignphrase> de valeurs
numériques peuvent aussi
- être utilisés avec des couvertures de type <classname
role="OGC">CV_ContinuousCoverage</classname>.
- Ces deux types de <foreignphrase>ranges</foreignphrase> sont
représentés dans <acronym>SIS</acronym>
+ La distinction entre les plages de tout type de valeurs et les plages de
valeurs numériques est représentée dans <acronym>SIS</acronym>
par les classes <classname role="SIS">Range</classname> et <classname
role="SIS">NumberRange</classname> respectivement.
- La classe <classname role="SIS">NumberRange</classname> est la plus
utilisée et celle qui se rapproche le plus de la
+ La classe <classname role="SIS">NumberRange</classname> est la plus
utilisée, et elle est aussi celle qui se rapproche le plus de la
<link
xlink:href="http://fr.wikipedia.org/wiki/Intervalle_%28math%C3%A9matiques%29">notion
mathématique usuelle dâun intervalle</link>.
- Se représentation textuelle se rapproche des spécifications du
standard <acronym>ISO</acronym> 31-11, excepté que le caractère ââ¦â
- est utilisé à la place de la virgule comme séparateur des valeurs.
+ Se représentation textuelle se rapproche des spécifications du
standard <acronym>ISO</acronym> 31-11,
+ excepté que la virgule est remplacée par le caractère ââ¦â comme
séparateur des valeurs minimales et maximales.
Par exemple â[0 ⦠256)â représente la plage des valeurs 0
inclusivement à 256 exclusivement.
</para>
<para>
- Les objets <classname role="SIS">Range</classname> ne sont associés aux
couvertures que indirectement.
+ Les objets <classname role="SIS">Range</classname> ne sont associés aux
<foreignphrase>coverages</foreignphrase> que indirectement.
Dans <acronym>SIS</acronym>, les valeurs que peuvent retourner les
couvertures sont décrites par des
objets de type <classname role="SIS">SampleDimension</classname>. Ce
sont ces derniers qui contiendront
des instances de <classname role="SIS">Range</classname> ainsi que
dâautres informations telles quâune
- fonction de transfert (décrite plus loin).
+ <firstterm>fonction de transfert</firstterm> (décrite plus loin).
</para>
</sidebar>
</chapter>