sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1447922 - in /sis/branches/JDK7: sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java sis-utility/src/test/java/org/apache/sis/measure/RangeFormatTest.java src/main/docbook/fr/coverage.xml
Date Tue, 19 Feb 2013 20:59:12 GMT
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>



Mime
View raw message