You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/02/05 20:03:07 UTC

svn commit: r1067484 - in /myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src: main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/ test/java/org/apache/myfaces/extensions/cdi/message/test/

Author: gpetracek
Date: Sat Feb  5 19:03:06 2011
New Revision: 1067484

URL: http://svn.apache.org/viewvc?rev=1067484&view=rev
Log:
EXTCDI-129 max digits and exponent separator

Added:
    myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestCustomNumberConfig.java
      - copied, changed from r1059626, myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestGermanNumberConfig.java
Removed:
    myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestGermanNumberConfig.java
Modified:
    myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/DefaultNumberFormatter.java
    myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/NumberFormatterConfigKeys.java
    myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/FormattedMessageArgumentTest.java

Modified: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/DefaultNumberFormatter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/DefaultNumberFormatter.java?rev=1067484&r1=1067483&r2=1067484&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/DefaultNumberFormatter.java (original)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/DefaultNumberFormatter.java Sat Feb  5 19:03:06 2011
@@ -36,10 +36,13 @@ class DefaultNumberFormatter implements 
 {
     private static final long serialVersionUID = 1639250543559140704L;
 
-    private Character groupingSeparator;
-    private Character decimalSeparator;
-    private Integer minimumFractionDigits;
-    private Integer minimumIntegerDigits;
+    private Character groupingSeparator = null;
+    private Character decimalSeparator = null;
+    private Integer minimumFractionDigits = null;
+    private Integer minimumIntegerDigits = null;
+    private Integer maximumFractionDigits = null;
+    private Integer maximumIntegerDigits = null;
+    private String exponentSeparator = null;
 
     DefaultNumberFormatter()
     {
@@ -57,19 +60,15 @@ class DefaultNumberFormatter implements 
 
     public String format(MessageContext messageContext, Number valueToFormat)
     {
+        Locale locale = messageContext.getLocale();
+
         GenericConfig formatterConfig = messageContext.config().getFormatterFactory()
-                .findFormatterConfig(Number.class, messageContext.getLocale());
+                .findFormatterConfig(Number.class, locale);
 
         if (formatterConfig != null)
         {
             useCustomConfig(formatterConfig);
         }
-        else
-        {
-            resetConfig();
-        }
-
-        Locale locale = messageContext.config().getLocaleResolver().getLocale();
 
         if (valueToFormat instanceof BigDecimal || valueToFormat instanceof Double || valueToFormat instanceof Float)
         {
@@ -81,14 +80,6 @@ class DefaultNumberFormatter implements 
         }
     }
 
-    private void resetConfig()
-    {
-        this.groupingSeparator = null;
-        this.decimalSeparator = null;
-        this.minimumFractionDigits = null;
-        this.minimumIntegerDigits = null;
-    }
-
     private void useCustomConfig(GenericConfig formatterConfig)
     {
         if (formatterConfig.containsProperty(NumberFormatterConfigKeys.GROUPING_SEPARATOR_KEY))
@@ -114,6 +105,24 @@ class DefaultNumberFormatter implements 
             this.minimumIntegerDigits = formatterConfig
                     .getProperty(NumberFormatterConfigKeys.MINIMUM_INTEGER_DIGITS_KEY, Integer.class);
         }
+
+        if (formatterConfig.containsProperty(NumberFormatterConfigKeys.MAXIMUM_FRACTION_DIGITS))
+        {
+            this.maximumFractionDigits = formatterConfig
+                    .getProperty(NumberFormatterConfigKeys.MAXIMUM_FRACTION_DIGITS, Integer.class);
+        }
+
+        if (formatterConfig.containsProperty(NumberFormatterConfigKeys.MAXIMUM_INTEGER_DIGITS))
+        {
+            this.maximumIntegerDigits = formatterConfig
+                    .getProperty(NumberFormatterConfigKeys.MAXIMUM_INTEGER_DIGITS, Integer.class);
+        }
+
+        if (formatterConfig.containsProperty(NumberFormatterConfigKeys.EXPONENT_SEPARATOR))
+        {
+            this.exponentSeparator = formatterConfig
+                    .getProperty(NumberFormatterConfigKeys.EXPONENT_SEPARATOR, String.class);
+        }
     }
 
     private NumberFormat getNumberFormat(Locale locale)
@@ -128,6 +137,10 @@ class DefaultNumberFormatter implements 
         {
             symbols.setDecimalSeparator(this.decimalSeparator);
         }
+        if (this.exponentSeparator != null)
+        {
+            symbols.setExponentSeparator(this.exponentSeparator);
+        }
         return new DecimalFormat("", symbols);
     }
 
@@ -143,6 +156,10 @@ class DefaultNumberFormatter implements 
         {
             symbols.setDecimalSeparator(this.decimalSeparator);
         }
+        if (this.exponentSeparator != null)
+        {
+            symbols.setExponentSeparator(this.exponentSeparator);
+        }
 
         DecimalFormat format = new DecimalFormat("", symbols);
 
@@ -154,6 +171,16 @@ class DefaultNumberFormatter implements 
         {
             format.setMinimumIntegerDigits(this.minimumIntegerDigits);//for 0.**
         }
+
+        if (this.maximumFractionDigits != null)
+        {
+            format.setMaximumFractionDigits(this.maximumFractionDigits);
+        }
+
+        if (this.maximumIntegerDigits != null)
+        {
+            format.setMaximumIntegerDigits(this.maximumIntegerDigits);
+        }
         return format;
     }
 
@@ -171,23 +198,38 @@ class DefaultNumberFormatter implements 
 
         DefaultNumberFormatter that = (DefaultNumberFormatter) o;
 
-        if (decimalSeparator != null ? !decimalSeparator.equals(that.decimalSeparator) : that.decimalSeparator
-                != null)
+        if (decimalSeparator != null ? !decimalSeparator.equals(that.decimalSeparator) :
+                that.decimalSeparator != null)
+        {
+            return false;
+        }
+        if (exponentSeparator != null ? !exponentSeparator.equals(that.exponentSeparator) :
+                that.exponentSeparator != null)
+        {
+            return false;
+        }
+        if (groupingSeparator != null ? !groupingSeparator.equals(that.groupingSeparator) :
+                that.groupingSeparator != null)
+        {
+            return false;
+        }
+        if (maximumFractionDigits != null ? !maximumFractionDigits.equals(that.maximumFractionDigits) :
+                that.maximumFractionDigits != null)
         {
             return false;
         }
-        if (groupingSeparator != null ? !groupingSeparator.equals(that.groupingSeparator) : that.groupingSeparator
-                != null)
+        if (maximumIntegerDigits != null ? !maximumIntegerDigits.equals(that.maximumIntegerDigits) :
+                that.maximumIntegerDigits != null)
         {
             return false;
         }
-        if (minimumFractionDigits != null ?
-                !minimumFractionDigits.equals(that.minimumFractionDigits) : that.minimumFractionDigits != null)
+        if (minimumFractionDigits != null ? !minimumFractionDigits.equals(that.minimumFractionDigits) :
+                that.minimumFractionDigits != null)
         {
             return false;
         }
-        if (minimumIntegerDigits != null ?
-                !minimumIntegerDigits.equals(that.minimumIntegerDigits) : that.minimumIntegerDigits != null)
+        if (minimumIntegerDigits != null ? !minimumIntegerDigits.equals(that.minimumIntegerDigits) :
+                that.minimumIntegerDigits != null)
         {
             return false;
         }

Modified: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/NumberFormatterConfigKeys.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/NumberFormatterConfigKeys.java?rev=1067484&r1=1067483&r2=1067484&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/NumberFormatterConfigKeys.java (original)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/formatter/NumberFormatterConfigKeys.java Sat Feb  5 19:03:06 2011
@@ -30,4 +30,10 @@ public interface NumberFormatterConfigKe
     static final String MINIMUM_FRACTION_DIGITS_KEY = "minimum_fraction_digits";
 
     static final String MINIMUM_INTEGER_DIGITS_KEY = "minimum_integer_digits";
+
+    static final String MAXIMUM_FRACTION_DIGITS = "maximum_fraction_digits";
+    
+    static final String MAXIMUM_INTEGER_DIGITS = "maximum_integer_digits";
+    
+    static final String EXPONENT_SEPARATOR = "exponent_separator";
 }
\ No newline at end of file

Modified: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/FormattedMessageArgumentTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/FormattedMessageArgumentTest.java?rev=1067484&r1=1067483&r2=1067484&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/FormattedMessageArgumentTest.java (original)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/FormattedMessageArgumentTest.java Sat Feb  5 19:03:06 2011
@@ -35,7 +35,7 @@ public class FormattedMessageArgumentTes
     {
         String messageText = this.messageContext.config().use().messageInterpolator(new NumberedArgumentAwareMessageInterpolator())
                 .localeResolver(new TestGermanLocaleResolver())
-                .addFormatterConfig(Number.class, new TestGermanNumberConfig()).create()
+                .create()
                 .message().text("{formatted_number}").argument(new BigDecimal("7654.3210")).toText();
 
         assertEquals("value: 7.654,321", messageText);
@@ -46,11 +46,21 @@ public class FormattedMessageArgumentTes
     {
         String messageText = this.messageContext.config().use().messageInterpolator(new NumberedArgumentAwareMessageInterpolator())
                 .localeResolver(new TestEnglishLocaleResolver())
-                .addFormatterConfig(Number.class, new TestGermanNumberConfig(), Locale.GERMAN)
-                .addFormatterConfig(Number.class, new TestEnglishNumberConfig(), Locale.ENGLISH)
                 .create()
                 .message().text("{formatted_number}").argument(new BigDecimal("7654.3210")).toText();
 
         assertEquals("value: 7,654.321", messageText);
     }
+
+    @Test
+    public void createCustomFormattedMessageEnglishTest()
+    {
+        String messageText = this.messageContext.config().use().messageInterpolator(new NumberedArgumentAwareMessageInterpolator())
+                .localeResolver(new TestEnglishLocaleResolver())
+                .addFormatterConfig(Number.class, new TestCustomNumberConfig(), Locale.ENGLISH)
+                .create()
+                .message().text("{formatted_number}").argument(new BigDecimal("7654.3210")).toText();
+
+        assertEquals("value: 7'654,321", messageText);
+    }
 }
\ No newline at end of file

Copied: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestCustomNumberConfig.java (from r1059626, myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestGermanNumberConfig.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestCustomNumberConfig.java?p2=myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestCustomNumberConfig.java&p1=myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestGermanNumberConfig.java&r1=1059626&r2=1067484&rev=1067484&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestGermanNumberConfig.java (original)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/message/test/TestCustomNumberConfig.java Sat Feb  5 19:03:06 2011
@@ -28,16 +28,15 @@ import java.util.Map;
 /**
  * @author Gerhard Petracek
  */
-class TestGermanNumberConfig implements GenericConfig
+class TestCustomNumberConfig implements GenericConfig
 {
     private static final long serialVersionUID = 1581606533032801390L;
     private Map<String, Serializable> properties = new HashMap<String, Serializable>();
 
+    TestCustomNumberConfig()
     {
-        this.properties.put(NumberFormatterConfigKeys.GROUPING_SEPARATOR_KEY, ".");
+        this.properties.put(NumberFormatterConfigKeys.GROUPING_SEPARATOR_KEY, "'");
         this.properties.put(NumberFormatterConfigKeys.DECIMAL_SEPARATOR_KEY, ",");
-        this.properties.put(NumberFormatterConfigKeys.MINIMUM_FRACTION_DIGITS_KEY, 2);
-        this.properties.put(NumberFormatterConfigKeys.MINIMUM_INTEGER_DIGITS_KEY, 1);
     }
 
     public GenericConfig addProperty(String key, Serializable value)