package com.greenpepper.confluence.demo.bank;
import java.math.BigDecimal;
public class Money
{
public static final Money ZERO = new Money(BigDecimal.ZERO);
private final BigDecimal dollars;
public Money(BigDecimal dollars)
{
this.dollars = dollars;
}
public static Money parse(String text)
{
return new Money(new BigDecimal(normalize(text)));
}
private static String normalize(String text)
{
return text.replaceAll("\\$", "").replaceAll(",", "").replaceAll("\\s", "");
}
public static Money dollars(float amount)
{
return new Money(new BigDecimal(amount));
}
public static Money $(float amount)
{
return dollars(amount);
}
public static Money zero()
{
return dollars(0f);
}
public boolean equals(Object other)
{
if (other instanceof Money)
{
Money that = (Money)other;
return this.dollars.compareTo(that.dollars) == 0;
}
else
{
return false;
}
}
public int hashCode()
{
return dollars.hashCode();
}
public String toString()
{
return "$" + dollars;
}
public Money times(BigDecimal multiplier)
{
return new Money(dollars.multiply(multiplier));
}
public Money times(float multiplier)
{
return new Money(dollars.multiply(new BigDecimal(multiplier)));
}
public Money minus(Money subtrahend)
{
return new Money(dollars.subtract(subtrahend.dollars));
}
public Money plus(Money addend)
{
return new Money(dollars.add(addend.dollars));
}
public boolean greaterThan(Money money)
{
return this.dollars.compareTo(money.dollars) >= 0;
}
public boolean strictlyGreaterThan(Money money)
{
return this.dollars.compareTo(money.dollars) > 0;
}
public boolean lowerThan(Money money)
{
return dollars.compareTo(money.dollars) <= 0;
}
public boolean strictlyLowerThan(Money money)
{
return dollars.compareTo(money.dollars) < 0;
}
}