You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ar...@apache.org on 2016/07/04 15:19:08 UTC

svn commit: r1751307 - /ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilNumber.java

Author: arunpatidar
Date: Mon Jul  4 15:19:07 2016
New Revision: 1751307

URL: http://svn.apache.org/viewvc?rev=1751307&view=rev
Log:
Applied patch from jira issue - OFBIZ-7593 - Enforce noninstantiability to UtilNumber class. Thanks Rishi Solanki and Rohit Koushal for your contribution.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilNumber.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilNumber.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilNumber.java?rev=1751307&r1=1751306&r2=1751307&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilNumber.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilNumber.java Mon Jul  4 15:19:07 2016
@@ -25,7 +25,7 @@ import java.util.Locale;
 
 import com.ibm.icu.text.RuleBasedNumberFormat;
 
-public class UtilNumber {
+public final class UtilNumber {
 
     public static String module = UtilNumber.class.getName();
 
@@ -36,86 +36,9 @@ public class UtilNumber {
     private static final int DEFAULT_BD_SCALE = 2;
     private static final int DEFAULT_BD_ROUNDING_MODE = BigDecimal.ROUND_HALF_UP;
 
-    /**
-     * Method to get BigDecimal scale factor from a property
-     * @param   file     - Name of the property file
-     * @param   property - Name of the config property from arithmeticPropertiesFile (e.g., "invoice.decimals")
-     * @return  int - Scale factor to pass to BigDecimal's methods. Defaults to DEFAULT_BD_SCALE (2)
-     */
-    public static int getBigDecimalScale(String file, String property) {
-        if (UtilValidate.isEmpty(file)) return DEFAULT_BD_SCALE;
-        if (UtilValidate.isEmpty(property)) return DEFAULT_BD_SCALE;
-
-        int scale = -1;
-        String value = UtilProperties.getPropertyValue(file, property);
-        if (value != null) {
-            try {
-                scale = Integer.parseInt(value);
-            } catch (NumberFormatException e) {
-            }
-        }
-        if (scale == -1) {
-            Debug.logWarning("Could not set decimal precision from " + property + "=" + value + ". Using default scale of " + DEFAULT_BD_SCALE + ".", module);
-            scale = DEFAULT_BD_SCALE;
-        }
-        return scale;
-    }
-
-    /**
-     * As above, but use the default properties file
-     */
-    public static int getBigDecimalScale(String property) {
-        return getBigDecimalScale(arithmeticPropertiesFile, property);
-    }
-
-    /**
-     * Method to get BigDecimal rounding mode from a property
-     * @param   file     - Name of the property file
-     * @param   property - Name of the config property from arithmeticPropertiesFile (e.g., "invoice.rounding")
-     * @return  int - Rounding mode to pass to BigDecimal's methods. Defaults to DEFAULT_BD_ROUNDING_MODE (BigDecimal.ROUND_HALF_UP)
-     */
-    public static int getBigDecimalRoundingMode(String file, String property) {
-        if (UtilValidate.isEmpty(file)) return DEFAULT_BD_SCALE;
-        if (UtilValidate.isEmpty(property)) return DEFAULT_BD_ROUNDING_MODE;
-
-        String value = UtilProperties.getPropertyValue(file, property);
-        int mode = roundingModeFromString(value);
-        if (mode == -1) {
-            Debug.logWarning("Could not set decimal rounding mode from " + property + "=" + value + ". Using default mode of " + DEFAULT_BD_SCALE + ".", module);
-            return DEFAULT_BD_ROUNDING_MODE;
-        }
-        return mode;
-    }
-
-    /**
-     * As above, but use the default properties file
-     */
-    public static int getBigDecimalRoundingMode(String property) {
-        return getBigDecimalRoundingMode(arithmeticPropertiesFile, property);
-    }
-
-    /**
-     * Method to get the BigDecimal rounding mode int value from a string name.
-     * @param   value - The name of the mode (e.g., "ROUND_HALF_UP")
-     * @return  int - The int value of the mode (e.g, BigDecimal.ROUND_HALF_UP) or -1 if the input was bad.
-     */
-    public static int roundingModeFromString(String value) {
-        if (value == null) return -1;
-        value = value.trim();
-        if ("ROUND_HALF_UP".equals(value)) return BigDecimal.ROUND_HALF_UP;
-        else if ("ROUND_HALF_DOWN".equals(value)) return BigDecimal.ROUND_HALF_DOWN;
-        else if ("ROUND_HALF_EVEN".equals(value)) return BigDecimal.ROUND_HALF_EVEN;
-        else if ("ROUND_UP".equals(value)) return BigDecimal.ROUND_UP;
-        else if ("ROUND_DOWN".equals(value)) return BigDecimal.ROUND_DOWN;
-        else if ("ROUND_CEILING".equals(value)) return BigDecimal.ROUND_CEILING;
-        else if ("ROUND_FLOOR".equals(value)) return BigDecimal.ROUND_FLOOR;
-        else if ("ROUND_UNNECCESSARY".equals(value)) return BigDecimal.ROUND_UNNECESSARY;
-        return -1;
-    }
-
     // ICU4J rule sets for the en_US locale. To add more rules, expand this string.
     // For reference, see the RbnfSampleRuleSets.java file distributed with ICU4J
-    public static final String ruleSet_en_US =
+    private static final String ruleSet_en_US =
         /*
          * These rules format a number in one of the two styles often used
          * on checks.  %dollars-and-hundredths formats cents as hundredths of
@@ -154,7 +77,7 @@ public class UtilNumber {
 
     // ICU4J rule sets for the th_TH locale. To add more rules, expand this string.
     // For reference, see the RbnfSampleRuleSets.java file distributed with ICU4J
-    public static final String ruleSet_th_TH =
+    private static final String ruleSet_th_TH =
         /*
          * These rules format a number in one of the two styles often used
          * on checks.  %bahts-and-hundredths formats stangs as hundredths of
@@ -192,13 +115,92 @@ public class UtilNumber {
         + "    100: <00<;\n";
 
     // hash map to store ICU4J rule sets keyed to Locale
-    public static HashMap<Locale, String> rbnfRuleSets;
+    private static HashMap<Locale, String> rbnfRuleSets;
     static {
         rbnfRuleSets = new HashMap<Locale, String>();
         rbnfRuleSets.put(Locale.US, ruleSet_en_US);
         rbnfRuleSets.put(new Locale("th"), ruleSet_th_TH);
     }
 
+    private UtilNumber() {}
+
+    /**
+     * Method to get BigDecimal scale factor from a property
+     * @param   file     - Name of the property file
+     * @param   property - Name of the config property from arithmeticPropertiesFile (e.g., "invoice.decimals")
+     * @return  int - Scale factor to pass to BigDecimal's methods. Defaults to DEFAULT_BD_SCALE (2)
+     */
+    public static int getBigDecimalScale(String file, String property) {
+        if (UtilValidate.isEmpty(file)) return DEFAULT_BD_SCALE;
+        if (UtilValidate.isEmpty(property)) return DEFAULT_BD_SCALE;
+
+        int scale = -1;
+        String value = UtilProperties.getPropertyValue(file, property);
+        if (value != null) {
+            try {
+                scale = Integer.parseInt(value);
+            } catch (NumberFormatException e) {
+            }
+        }
+        if (scale == -1) {
+            Debug.logWarning("Could not set decimal precision from " + property + "=" + value + ". Using default scale of " + DEFAULT_BD_SCALE + ".", module);
+            scale = DEFAULT_BD_SCALE;
+        }
+        return scale;
+    }
+
+    /**
+     * As above, but use the default properties file
+     */
+    public static int getBigDecimalScale(String property) {
+        return getBigDecimalScale(arithmeticPropertiesFile, property);
+    }
+
+    /**
+     * Method to get BigDecimal rounding mode from a property
+     * @param   file     - Name of the property file
+     * @param   property - Name of the config property from arithmeticPropertiesFile (e.g., "invoice.rounding")
+     * @return  int - Rounding mode to pass to BigDecimal's methods. Defaults to DEFAULT_BD_ROUNDING_MODE (BigDecimal.ROUND_HALF_UP)
+     */
+    public static int getBigDecimalRoundingMode(String file, String property) {
+        if (UtilValidate.isEmpty(file)) return DEFAULT_BD_SCALE;
+        if (UtilValidate.isEmpty(property)) return DEFAULT_BD_ROUNDING_MODE;
+
+        String value = UtilProperties.getPropertyValue(file, property);
+        int mode = roundingModeFromString(value);
+        if (mode == -1) {
+            Debug.logWarning("Could not set decimal rounding mode from " + property + "=" + value + ". Using default mode of " + DEFAULT_BD_SCALE + ".", module);
+            return DEFAULT_BD_ROUNDING_MODE;
+        }
+        return mode;
+    }
+
+    /**
+     * As above, but use the default properties file
+     */
+    public static int getBigDecimalRoundingMode(String property) {
+        return getBigDecimalRoundingMode(arithmeticPropertiesFile, property);
+    }
+
+    /**
+     * Method to get the BigDecimal rounding mode int value from a string name.
+     * @param   value - The name of the mode (e.g., "ROUND_HALF_UP")
+     * @return  int - The int value of the mode (e.g, BigDecimal.ROUND_HALF_UP) or -1 if the input was bad.
+     */
+    public static int roundingModeFromString(String value) {
+        if (value == null) return -1;
+        value = value.trim();
+        if ("ROUND_HALF_UP".equals(value)) return BigDecimal.ROUND_HALF_UP;
+        else if ("ROUND_HALF_DOWN".equals(value)) return BigDecimal.ROUND_HALF_DOWN;
+        else if ("ROUND_HALF_EVEN".equals(value)) return BigDecimal.ROUND_HALF_EVEN;
+        else if ("ROUND_UP".equals(value)) return BigDecimal.ROUND_UP;
+        else if ("ROUND_DOWN".equals(value)) return BigDecimal.ROUND_DOWN;
+        else if ("ROUND_CEILING".equals(value)) return BigDecimal.ROUND_CEILING;
+        else if ("ROUND_FLOOR".equals(value)) return BigDecimal.ROUND_FLOOR;
+        else if ("ROUND_UNNECCESSARY".equals(value)) return BigDecimal.ROUND_UNNECESSARY;
+        return -1;
+    }
+
     /**
      * Method to format an amount using a custom rule set.
      * Current rule sets available: