com.greenpepper.samples.application.bank.Money Maven / Gradle / Ivy
/*
* Copyright (c) 2007 Pyxis Technologies inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA,
* or see the FSF site: http://www.fsf.org.
*/
package com.greenpepper.samples.application.bank;
import java.math.BigDecimal;
/**
* Money class.
*
* @author oaouattara
* @version $Id: $Id
*/
public class Money
{
/** Constant ZERO
*/
public static final Money ZERO = new Money(BigDecimal.ZERO);
private final BigDecimal dollars;
/**
* Constructor for Money.
*
* @param dollars a {@link java.math.BigDecimal} object.
*/
public Money(BigDecimal dollars)
{
this.dollars = dollars;
}
/**
* parse.
*
* @param text a {@link java.lang.String} object.
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
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", "");
}
/**
* dollars.
*
* @param amount a float.
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
public static Money dollars(float amount)
{
return new Money( new BigDecimal( amount ) );
}
/**
* $.
*
* @param amount a float.
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
public static Money $(float amount)
{
return dollars(amount);
}
/**
* zero.
*
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
public static Money zero()
{
return dollars(0f);
}
/** {@inheritDoc} */
public boolean equals(Object other)
{
if (other instanceof Money)
{
Money that = (Money) other;
return this.dollars.compareTo( that.dollars ) == 0;
}
else
{
return false;
}
}
/**
* hashCode.
*
* @return a int.
*/
public int hashCode()
{
return dollars.hashCode();
}
/**
* toString.
*
* @return a {@link java.lang.String} object.
*/
public String toString()
{
return "$" + dollars;
}
/**
* times.
*
* @param multiplier a {@link java.math.BigDecimal} object.
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
public Money times(BigDecimal multiplier)
{
return new Money(dollars.multiply(multiplier));
}
/**
* times.
*
* @param multiplier a float.
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
public Money times(float multiplier)
{
return new Money(dollars.multiply(new BigDecimal(multiplier)));
}
/**
* minus.
*
* @param subtrahend a {@link com.greenpepper.samples.application.bank.Money} object.
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
public Money minus(Money subtrahend)
{
return new Money(dollars.subtract(subtrahend.dollars));
}
/**
* plus.
*
* @param addend a {@link com.greenpepper.samples.application.bank.Money} object.
* @return a {@link com.greenpepper.samples.application.bank.Money} object.
*/
public Money plus(Money addend)
{
return new Money(dollars.add(addend.dollars));
}
/**
* greaterThan.
*
* @param money a {@link com.greenpepper.samples.application.bank.Money} object.
* @return a boolean.
*/
public boolean greaterThan(Money money)
{
return this.dollars.compareTo( money.dollars ) >= 0;
}
/**
* strictlyGreaterThan.
*
* @param money a {@link com.greenpepper.samples.application.bank.Money} object.
* @return a boolean.
*/
public boolean strictlyGreaterThan(Money money)
{
return this.dollars.compareTo( money.dollars ) > 0;
}
/**
* lowerThan.
*
* @param money a {@link com.greenpepper.samples.application.bank.Money} object.
* @return a boolean.
*/
public boolean lowerThan(Money money)
{
return dollars.compareTo( money.dollars ) <= 0;
}
/**
* strictlyLowerThan.
*
* @param money a {@link com.greenpepper.samples.application.bank.Money} object.
* @return a boolean.
*/
public boolean strictlyLowerThan(Money money)
{
return dollars.compareTo( money.dollars ) < 0;
}
}