You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by an...@apache.org on 2014/10/01 17:26:42 UTC
svn commit: r1628735 - in /myfaces/trinidad/trunk:
trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/
trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/
trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/
Author: andys
Date: Wed Oct 1 15:26:41 2014
New Revision: 1628735
URL: http://svn.apache.org/r1628735
Log:
TRINIDAD-2511 rounding mode is not honoured on the client while using number converter
Thanks for the fix Ashwin.
Modified:
myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/NumberConverter.java
myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java
myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberConverter.js
myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js
Modified: myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/NumberConverter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/NumberConverter.java?rev=1628735&r1=1628734&r2=1628735&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/NumberConverter.java (original)
+++ myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/convert/NumberConverter.java Wed Oct 1 15:26:41 2014
@@ -1621,6 +1621,16 @@ public class NumberConverter
{
return _facesBean.getProperty(_NEGATIVE_SUFFIX_KEY) != null;
}
+
+ /**
+ * Return true if a non-null rounding mode has been set via {@link #setRoundingMode(RoundingMode)}.
+ * If not set, return false;
+ * @return true, if the rounding mode has been set.
+ */
+ public boolean isRoundingModeSet()
+ {
+ return _facesBean.getProperty(_ROUNDING_MODE_KEY) != null;
+ }
private static final FacesBean.Type _TYPE = new FacesBean.Type();
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java?rev=1628735&r1=1628734&r2=1628735&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java Wed Oct 1 15:26:41 2014
@@ -153,8 +153,8 @@ public class NumberConverter
{
// order of parameters:
// pattern, type, locale, messagesMap, isInt, isGrouped, CurrencyCode, CurrencySymbol,
- // maxFractions, maxInts, minFractions, minInts, negPrefix, negSuffix
- params = new Object[14];
+ // maxFractions, maxInts, minFractions, minInts, negPrefix, negSuffix, roundingMode
+ params = new Object[15];
}
else
{
@@ -183,6 +183,7 @@ public class NumberConverter
params[11] = this.isMinimumIntegerDigitsSet() ? this.getMinIntegerDigits() : null;
params[12] = this.isNegativePrefixSet() ? this.getNegativePrefix() : null;
params[13] = this.isNegativeSuffixSet() ? this.getNegativeSuffix() : null;
+ params[14] = this.isRoundingModeSet() ? this.getRoundingMode().toString() : null;
}
return params;
@@ -203,7 +204,8 @@ public class NumberConverter
this.isMinimumFractionDigitsSet() ||
this.isMinimumIntegerDigitsSet() ||
this.isNegativePrefixSet() ||
- this.isNegativeSuffixSet());
+ this.isNegativeSuffixSet() ||
+ this.isRoundingModeSet());
}
private String _getTrNumberConverter(
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberConverter.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberConverter.js?rev=1628735&r1=1628734&r2=1628735&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberConverter.js (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberConverter.js Wed Oct 1 15:26:41 2014
@@ -34,7 +34,8 @@ function TrNumberConverter(
minFractionDigits,
minIntegerDigits,
negativePrefix,
- negativeSuffix)
+ negativeSuffix,
+ roundingMode)
{
this._pattern = pattern;
this._type = type;
@@ -48,6 +49,7 @@ function TrNumberConverter(
this._minIntegerDigits = minIntegerDigits;
this._negativePrefix = negativePrefix;
this._negativeSuffix = negativeSuffix;
+ this._roundingMode = roundingMode;
//set the integerOnly value
if(integerOnly !== undefined)
@@ -66,7 +68,15 @@ function TrNumberConverter(
// for debugging
this._class = "TrNumberConverter";
-
+
+ TrNumberConverter.ROUND_UP = "UP";
+ TrNumberConverter.ROUND_DOWN = "DOWN";
+ TrNumberConverter.ROUND_CEILING = "CEILING";
+ TrNumberConverter.ROUND_FLOOR = "FLOOR";
+ TrNumberConverter.ROUND_HALF_UP = "HALF_UP";
+ TrNumberConverter.ROUND_HALF_DOWN = "HALF_DOWN";
+ TrNumberConverter.ROUND_HALF_EVEN = "HALF_EVEN";
+ TrNumberConverter.ROUND_UNNECESSARY = "UNNECESSARY";
}
TrNumberConverter.prototype = new TrConverter();
@@ -166,6 +176,20 @@ TrNumberConverter.prototype.isIntegerOnl
return this._integerOnly;
}
+TrNumberConverter.prototype.setRoundingMode = function(roundingMode)
+{
+ this._roundingMode = roundingMode;
+}
+TrNumberConverter.prototype.getRoundingMode = function()
+{
+ return this._roundingMode;
+}
+TrNumberConverter.prototype.isJSDefaultRoundingMode = function()
+{
+ // JavaScript using HALF_UP rounding mode
+ return this._roundingMode == TrNumberConverter.ROUND_HALF_UP;
+}
+
TrNumberConverter.prototype.getFormatHint = function()
{
if(this._messages && this._messages["hintPattern"])
@@ -211,7 +235,10 @@ TrNumberConverter.prototype.getAsString
}
else
{
- return this._numberFormat.format(parseFloat(number.toFixed(this._numberFormat.getMaximumFractionDigits())));
+ // The default rounding mode in JS is HALF-UP.
+ // If a rounding mode other than HALF-UP is specified, do not attempt to format the number
+ var fmtNumber = (false)? number.toFixed(this._numberFormat.getMaximumFractionDigits()) : number;
+ return this._numberFormat.format(parseFloat(fmtNumber));
}
}
}
@@ -336,7 +363,10 @@ TrNumberConverter.prototype.getAsObject
label,
!this.isIntegerOnly());
- parsedValue = parseFloat(parsedValue.toFixed(this._numberFormat.getMaximumFractionDigits()));
+ // The default rounding mode in JS is HALF-UP.
+ // If a rounding mode other than HALF-UP is specified, do not attempt to format the number
+ var fmtNumber = (this.isJSDefaultRoundingMode())? parsedValue.toFixed(this._numberFormat.getMaximumFractionDigits()) : parsedValue;
+ parsedValue = parseFloat(fmtNumber);
if(this._type=="percent")
{
@@ -398,7 +428,8 @@ TrNumberConverter.prototype._initNumberF
"maxFractionDigits": this.getMaxFractionDigits(),
"maxIntegerDigits": this.getMaxIntegerDigits(),
"minFractionDigits": this.getMinFractionDigits(),
- "minIntegerDigits": this.getMinIntegerDigits()
+ "minIntegerDigits": this.getMinIntegerDigits(),
+ "roundingMode": this.getRoundingMode()
};
if(this._type=="percent")
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js?rev=1628735&r1=1628734&r2=1628735&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js Wed Oct 1 15:26:41 2014
@@ -64,30 +64,33 @@ function TrNumberFormat(type, locale, co
TrNumberFormat.MAX_INTEGER_DIGITS = "maxIntegerDigits";
TrNumberFormat.MIN_FRACTION_DIGITS = "minFractionDigits";
TrNumberFormat.MIN_INTEGER_DIGITS = "minIntegerDigits";
+ TrNumberFormat.ROUNDING_MODE = "roundingMode";
//default values, similar to JDK (values from Apache Harmony)
if(this._type=="percent")
{
- this.setMaximumFractionDigits((config[TrNumberFormat.MAX_FRACTION_DIGITS])? config[TrNumberFormat.MAX_FRACTION_DIGITS] : 0);
+ this.setMaximumFractionDigits((config[TrNumberFormat.MAX_FRACTION_DIGITS] != null)? config[TrNumberFormat.MAX_FRACTION_DIGITS] : 0);
}
else
{
- this.setMaximumFractionDigits((config[TrNumberFormat.MAX_FRACTION_DIGITS])? config[TrNumberFormat.MAX_FRACTION_DIGITS] : 3);
+ this.setMaximumFractionDigits((config[TrNumberFormat.MAX_FRACTION_DIGITS] != null)? config[TrNumberFormat.MAX_FRACTION_DIGITS] : 3);
}
- this.setMaximumIntegerDigits((config[TrNumberFormat.MAX_INTEGER_DIGITS])? config[TrNumberFormat.MAX_INTEGER_DIGITS] : 40);
+ this.setMaximumIntegerDigits((config[TrNumberFormat.MAX_INTEGER_DIGITS] != null)? config[TrNumberFormat.MAX_INTEGER_DIGITS] : 40);
if(this._type=="currency")
{
- this.setMinimumFractionDigits((config[TrNumberFormat.MIN_FRACTION_DIGITS])? config[TrNumberFormat.MIN_FRACTION_DIGITS] : 2);
+ this.setMinimumFractionDigits((config[TrNumberFormat.MIN_FRACTION_DIGITS] != null)? config[TrNumberFormat.MIN_FRACTION_DIGITS] : 2);
}
else
{
- this.setMinimumFractionDigits((config[TrNumberFormat.MIN_FRACTION_DIGITS])? config[TrNumberFormat.MIN_FRACTION_DIGITS] : 0);
+ this.setMinimumFractionDigits((config[TrNumberFormat.MIN_FRACTION_DIGITS] != null)? config[TrNumberFormat.MIN_FRACTION_DIGITS] : 0);
}
- this.setMinimumIntegerDigits((config[TrNumberFormat.MIN_INTEGER_DIGITS])? config[TrNumberFormat.MIN_INTEGER_DIGITS] : 1);
+ this.setMinimumIntegerDigits((config[TrNumberFormat.MIN_INTEGER_DIGITS] != null)? config[TrNumberFormat.MIN_INTEGER_DIGITS] : 1);
this.setGroupingUsed((config[TrNumberFormat.IS_GROUPING_USED] != null)? config[TrNumberFormat.IS_GROUPING_USED] : true);
+ this.setRoundingMode(config[TrNumberFormat.ROUNDING_MODE]);
+
this._updateLocaleAndSymbols(locale, config);
}
@@ -208,6 +211,36 @@ TrNumberFormat.prototype.isGroupingUsed
}
/**
+ * Sets the chosen decimal rounding mode.
+ *
+ * @param Rounding mode can be one of:
+ * {null, "UP", "DOWN", "CEILING", "FLOOR", "HALF_UP", "HALF_DOWN", "HALF_EVEN", "UNNECESSARY"}
+ */
+TrNumberFormat.prototype.setRoundingMode = function(roundingMode)
+{
+ this._roundingMode = roundingMode;
+}
+
+/**
+ * Gets the decimal rouding mode.
+ *
+ * @return Rounding mode, can be one of:
+ * {null, "UP", "DOWN", "CEILING", "FLOOR", "HALF_UP", "HALF_DOWN", "HALF_EVEN", "UNNECESSARY"}
+ */
+TrNumberFormat.prototype.getRoundingMode = function()
+{
+ return this._roundingMode;
+}
+
+/**
+ * @return true if a decimal rounding mode is specifed
+ */
+TrNumberFormat.prototype.isRoundingModeSpecified = function()
+{
+ return this.getRoundingMode() != null;
+}
+
+/**
* Used to specify the new maximum count of integer digits that are printed
* when formatting. If the maximum is less than the number of integer
* digits, the most significant digits are truncated.
@@ -217,7 +250,7 @@ TrNumberFormat.prototype.isGroupingUsed
TrNumberFormat.prototype.setMaximumIntegerDigits = function(number)
{
//taken from the Apache Harmony project
- if(number)
+ if(number != null)
{
this._maxIntegerDigits = number < 0 ? 0 : number;
if (this._minIntegerDigits > this._maxIntegerDigits)
@@ -250,7 +283,7 @@ TrNumberFormat.prototype.getMaximumInteg
TrNumberFormat.prototype.setMaximumFractionDigits = function(number)
{
//taken from the Apache Harmony project
- if(number)
+ if(number != null)
{
this._maxFractionDigits = number < 0 ? 0 : number;
if (this._maxFractionDigits < this._minFractionDigits)
@@ -283,7 +316,7 @@ TrNumberFormat.prototype.getMaximumFract
TrNumberFormat.prototype.setMinimumIntegerDigits = function(number)
{
//taken from the Apache Harmony project
- if(number)
+ if(number != null)
{
this._minIntegerDigits = number < 0 ? 0 : number;
if(this._minIntegerDigits > this._maxIntegerDigits)
@@ -314,7 +347,7 @@ TrNumberFormat.prototype.getMinimumInteg
TrNumberFormat.prototype.setMinimumFractionDigits = function(number)
{
//taken from the Apache Harmony project
- if(number)
+ if(number != null)
{
this._minFractionDigits = number < 0 ? 0 : number;
if (this._maxFractionDigits < this._minFractionDigits)
@@ -621,7 +654,8 @@ TrNumberFormat.prototype.percentageToStr
// have at most 2 fractional digits, regardless of the value of maxFractionDigits.
// Hence, if maxFractionDigits is set, don't call this method and let
// numberToString format the string appropriately.
- if (this._isMaxFractionDigitsSet == null)
+ if (this._isMaxFractionDigitsSet == null &&
+ !this.isRoundingModeSpecified())
number = this.getRounded(number);
if (isNaN(number))
@@ -1005,7 +1039,9 @@ TrNumberFormat.prototype._formatFraction
if(fracsLength > maxFra && maxFra >= minFra)
{
- fracs = fracs.substring(0, maxFra);
+ // Do not attempt to truncate fractional digits if rounding is enabled
+ var fracsToRetain = (this.isRoundingModeSpecified())? fracsLength : maxFra;
+ fracs = fracs.substring(0, fracsToRetain);
}
if(fracsLength <minFra)
{