Class Money
- java.lang.Object
-
- de.hybris.order.calculation.money.AbstractAmount
-
- de.hybris.order.calculation.money.Money
-
public class Money extends AbstractAmount
Represents a monetary amount by combining aBigDecimaland aCurrency. Please know that the scale of the amount is always equal to the amount of currency digits.Therefore the following rules apply:
This class provides common operations likeused values result BigDecimal Currency.getDigits() Money.getAmount() as BigDecimal new BigDecimal(1.000) 0 1 new BigDecimal(1.000) 3 1.000 BigDecimal.ZERO 2 0.00 BigDecimal.valueOf(-1.34) 3 -1.340 BigDecimal.valueOf(1.234) 1 1.2 since we simply cut off the extra digits add(Money),subtract(Money)andsplit(List). A Money in the smallest amount (example 0.01 EUR) can not be split in smaller amounts. Splitting this amount in two will return {0.01 EUR, 0.00 EUR}. Last but not least there are a number of tool methods to ease working with this class:zero(Currency),valueOf(Currency, String...),sum(Collection),sortAscending(List)andgetPercentages(Money...)to name a few.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceMoney.MoneyExtractor<T>
-
Constructor Summary
Constructors Constructor Description Money(long amountInSmallestPieces, Currency currency)Creates a new money from a given amount of smallest pieces and a currency.Money(Currency currency)Creates zero money of the given Currency.Money(java.lang.String amount, Currency currency)Creates a new money from String and currency.Money(java.math.BigDecimal amount, Currency currency)Creates a Money object.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Moneyadd(Money money)voidassertCurreniesAreEqual(Currency curr)Checks if the current Currency is equal to given one.voidassertCurreniesAreEqual(Money other)Checks if the current Currency is equal to given one.protected java.math.BigDecimalcheckPercentages(java.util.List<Percentage> percentages)booleanequals(java.lang.Object obj)Returns true if the given parameter is also an instanceof money and the current currency is equal to the currency of the given money and the current amount is comparedTo == 0 to the given money amount.java.math.BigDecimalgetAmount()The monetary amount.CurrencygetCurrency()Returns the currency of this money.static java.util.List<Percentage>getPercentages(int scale, Money... moneys)Calculates a list ofPercentageobjects reflecting the distribution of money within the given money list.static java.util.List<Percentage>getPercentages(Money... moneys)Calculates a list ofPercentageobjects reflecting the distribution of money within the given money list.static java.util.List<Percentage>getPercentages(java.util.List<Money> moneys, int scale)Calculates a list ofPercentageobjects reflecting the distribution of money within the given money list.protected static int[]getSortedPositionTable(java.util.List<Money> moneyList)inthashCode()static voidsortAscending(java.util.List<Money> elements)protected static <T> java.util.List<T>sortByMoney(java.util.Map<T,Money> moneyMap, java.util.Comparator<java.util.Map.Entry<?,Money>> comp)static <T> java.util.List<T>sortByMoneyAscending(java.util.Map<T,Money> moneyMap)static <T> java.util.List<T>sortByMoneyDescending(java.util.Map<T,Money> moneyMap)static voidsortDescending(java.util.List<Money> elements)java.util.List<Money>split(Percentage... percentages)Same assplit(List)but because of the variable parameter list the sum must not be exactly 100%.java.util.List<Money>split(java.util.List<Percentage> percentages)Splits the current Money into a list of new Money objects, based on the given list ofPercentageobjects.Moneysubtract(Money money)static Moneysum(Money... money)static Moneysum(java.util.Collection<Money> elements)static <T> Moneysum(java.util.Collection<T> elements, Money.MoneyExtractor<T> extractor)protected static longsumUnscaled(java.util.Collection<Money> elements)protected static <T> MoneysumUnscaled(java.util.Collection<T> elements, Money.MoneyExtractor<T> extractor)java.lang.StringtoString()Returns the amount of the value formatted with theCurrency.getDigits()and the currency isocode.static java.util.List<Money>valueOf(Currency curr, long... amounts)Creates a list of money objects for a specific currency and any number of long values.static java.util.List<Money>valueOf(Currency curr, java.lang.String... amounts)Creates a list of money objects for a specific currency and any number of String values.static java.util.List<Money>valueOf(Currency curr, java.math.BigDecimal... amounts)Creates a list of money objects for a specific currency and any number of BigDecimal values.static Moneyzero(Currency curr)Shortcut to obtain commonly used zero money instances.
-
-
-
Constructor Detail
-
Money
public Money(java.math.BigDecimal amount, Currency currency)Creates a Money object. A new BigDecimal object is used internally, based onCurrency.getDigits().amountandthis.getAmount()are maybe not equal (because of the different scale of the BigDecimal) BUTnew Money(BigDecimal.ONE, curr)andnew Money(new BigDecimal("1.000"), curr)are equal with each other!- Parameters:
amount- the value or amount of the moneycurrency- the amount of the money in the hybrisCurrencypojo- Throws:
java.lang.ArithmeticException- if the amount must be rounded because theCurrency.getDigits()does not provide enough digits.
-
Money
public Money(Currency currency)
Creates zero money of the given Currency.- Parameters:
currency-
-
Money
public Money(long amountInSmallestPieces, Currency currency)Creates a new money from a given amount of smallest pieces and a currency.
-
Money
public Money(java.lang.String amount, Currency currency)Creates a new money from String and currency.
-
-
Method Detail
-
valueOf
public static java.util.List<Money> valueOf(Currency curr, java.lang.String... amounts)
Creates a list of money objects for a specific currency and any number of String values.
-
valueOf
public static java.util.List<Money> valueOf(Currency curr, long... amounts)
Creates a list of money objects for a specific currency and any number of long values.
-
valueOf
public static java.util.List<Money> valueOf(Currency curr, java.math.BigDecimal... amounts)
Creates a list of money objects for a specific currency and any number of BigDecimal values.
-
zero
public static Money zero(Currency curr)
Shortcut to obtain commonly used zero money instances. Since they are cached this methods should be preferred toMoney(Currency).
-
getCurrency
public Currency getCurrency()
Returns the currency of this money.
-
getAmount
public java.math.BigDecimal getAmount()
The monetary amount. The amount scale is equal to the currency digits!
-
assertCurreniesAreEqual
public void assertCurreniesAreEqual(Currency curr)
Checks if the current Currency is equal to given one.- Throws:
CurrenciesAreNotEqualException- if the currencies are not equal.
-
assertCurreniesAreEqual
public void assertCurreniesAreEqual(Money other)
Checks if the current Currency is equal to given one.- Throws:
CurrenciesAreNotEqualException- if the currencies are not equal.
-
add
public Money add(Money money)
Add to the currentMoneyamount the givenMoneyamount. The result is a new Money object with the sum of both amounts and in the same currency.- Parameters:
money- this will be added to the current money amount- Returns:
- a new object with the sum
- Throws:
CurrenciesAreNotEqualException- ifgetCurrency()is different in the given objects
-
subtract
public Money subtract(Money money)
Subtracts from currentMoneyamount the givenMoneyamount. The result is a new Money object with the difference of both amounts and in the same currency.- Parameters:
money- this will be subtracted to the current money amount- Returns:
- a new object with the difference
- Throws:
CurrenciesAreNotEqualException- ifgetCurrency()is different in the given objects
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object- Returns:
- currency.hashCode + amount.hashCode
-
equals
public boolean equals(java.lang.Object obj)
Returns true if the given parameter is also an instanceof money and the current currency is equal to the currency of the given money and the current amount is comparedTo == 0 to the given money amount. (this is not BigDecimal.equals(BigDecimal), the check is BigDecimal.compareTo(BigDecimal))- Overrides:
equalsin classjava.lang.Object
-
toString
public java.lang.String toString()
Returns the amount of the value formatted with theCurrency.getDigits()and the currency isocode. Example: "1.20 EUR"- Overrides:
toStringin classAbstractAmount- Returns:
- {0.xx} {currency.toString};
xx.lenght == currency.digits
-
split
public java.util.List<Money> split(Percentage... percentages)
Same assplit(List)but because of the variable parameter list the sum must not be exactly 100%. If less the missingPercentagevalue will be added. This means, the size of the resulting list is equal to the given percentage list if the sum of them is exactly 100% or the size of the resulting list is one more if the given percentage list is less than 100%. Anyway aCalculationExceptionis thrown if the sum is greater than 100%.- Parameters:
percentages- the variable list of percentages- Returns:
- a
ListofMoneyobjects which are summed up the same amount of this current Money object.
-
split
public java.util.List<Money> split(java.util.List<Percentage> percentages)
Splits the current Money into a list of new Money objects, based on the given list ofPercentageobjects. The sum of the Percentages must be equal to 100% or aCalculationExceptionis thrown. The size of the returned money list is equal to the size of the given percentage list. The sum of the returned money list is equal to the given amount of money. A money can only be split into the smallest possible amount of this money which depends on the currency. If a small amount of money can not be split anymore this amount is added to the last entry in the returned list. Example: splitting 0.01 EURO into half results in [0.00EUR , 0.01EUR]- Parameters:
percentages- the list ofPercentagein which the current money should be split into.- Returns:
- a
ListofMoneyobjects which are summed up the same amount of this current Money object. - Throws:
AmountException- if the sum of the percentages is not 100%java.lang.IllegalArgumentException- if the percent list is null or empty
-
checkPercentages
protected java.math.BigDecimal checkPercentages(java.util.List<Percentage> percentages)
-
sortByMoneyAscending
public static <T> java.util.List<T> sortByMoneyAscending(java.util.Map<T,Money> moneyMap)
-
sortByMoney
protected static <T> java.util.List<T> sortByMoney(java.util.Map<T,Money> moneyMap, java.util.Comparator<java.util.Map.Entry<?,Money>> comp)
-
sortByMoneyDescending
public static <T> java.util.List<T> sortByMoneyDescending(java.util.Map<T,Money> moneyMap)
-
sortAscending
public static void sortAscending(java.util.List<Money> elements)
-
sortDescending
public static void sortDescending(java.util.List<Money> elements)
-
sum
public static final <T> Money sum(java.util.Collection<T> elements, Money.MoneyExtractor<T> extractor)
-
sumUnscaled
protected static final <T> Money sumUnscaled(java.util.Collection<T> elements, Money.MoneyExtractor<T> extractor)
-
sumUnscaled
protected static final long sumUnscaled(java.util.Collection<Money> elements)
-
getPercentages
public static java.util.List<Percentage> getPercentages(Money... moneys)
Calculates a list ofPercentageobjects reflecting the distribution of money within the given money list. Please note that the scale of these percentages is zero.- See Also:
getPercentages(int, Money...)
-
getPercentages
public static java.util.List<Percentage> getPercentages(int scale, Money... moneys)
Calculates a list ofPercentageobjects reflecting the distribution of money within the given money list. The specified scale is defining the precision of these percentages.- See Also:
getPercentages(Money...)
-
getPercentages
public static java.util.List<Percentage> getPercentages(java.util.List<Money> moneys, int scale)
Calculates a list ofPercentageobjects reflecting the distribution of money within the given money list. The specified scale is defining the precision of these percentages.- See Also:
getPercentages(Money...)
-
getSortedPositionTable
protected static int[] getSortedPositionTable(java.util.List<Money> moneyList)
-
-