/* $Id: Value.java,v 1.1 2011/05/04 22:37:49 willuhn Exp $ This file is part of HBCI4Java Copyright (C) 2001-2008 Stefan Palme HBCI4Java 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. HBCI4Java 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.kapott.hbci.structures; import java.io.Serializable; import java.math.BigDecimal; import org.kapott.hbci.manager.HBCIUtils; /** Darstellung eines Geldbetrages. */ public final class Value implements Serializable { private static final BigDecimal ONE_HUNDRED = new BigDecimal("100.00"); /** Numerischer Wert des Betrages mal 100*/ private long value; /** W�hrung. F�r EURO ist hier <code>EUR</code> zu benutzen. */ private String curr; /** Anlegen eines neuen Objektes zur Aufnahme eines Geldbetrages. Vorbelegung * ist der Wert "0 EUR" */ public Value() { this(0,"EUR"); } /** Anlegen eines Geldbetrag-Objektes. Die W�hrung wird mit <code>EUR</code> vorbelegt. @param value der Geldbetrag (1.23) @deprecated */ @Deprecated public Value(double value) { this(Math.round(100.0*value),"EUR"); } /** Anlegen eines Geldbetrag-Objektes. Die W�hrung wird mit <code>EUR</code> vorbelegt. @param value der Geldbetrag mal 100 (123) */ public Value(long value) { this(value,"EUR"); } /** Anlegen eines Geldbetrag-Objektes. Die W�hrung wird mit <code>EUR</code> vorbelegt. @param value der Geldbetrag als String ("1.23") */ public Value(String value) { this(value,"EUR"); } /** Anlegen eines Geldbetrag-Objektes. Die W�hrung wird mit <code>EUR</code> vorbelegt. @param value der Geldbetrag als String ("1.23") */ public Value(BigDecimal value) { this(value,"EUR"); } /** Anlegen eines Geldbetrag-Objektes. @param value der Geldbetrag als String ("1.23") @param curr die W�hrung des Geldbetrages */ public Value(String value,String curr) { this(new BigDecimal(value.replace(" ","")),curr); } /** Anlegen eines Geldbetrag-Objektes. @param value der Geldbetrag (1.23) @param curr die W�hrung des Geldbetrages @deprecated */ @Deprecated public Value(double value,String curr) { this(Math.round(100.0*value),curr); } /** Anlegen eines Geldbetrag-Objektes. @param value der Geldbetrag mal 100 (123) @param curr die W�hrung des Geldbetrages */ public Value(long value,String curr) { this.value=value; this.curr=curr; } /** Anlegen eines Geldbetrag-Objektes. @param value der Geldbetrag (1.23). @param curr die W�hrung des Geldbetrages */ public Value(BigDecimal value,String curr) { this.value=value.multiply(ONE_HUNDRED).longValueExact(); this.curr=curr; } /** Erstellt eine neue Instanz eines Geldbetrag-Objektes als Kopie eines bestehenden Objektes. @param v ein Objekt, welches geklont werden soll */ public Value(Value v) { this(v.value,v.curr); } /** Umwandeln in einen String. Die R�ckgabe erfolgt im Format <pre><value> " " <curr></pre> @return Stringdarstellung des Geldbetrages */ @Override public String toString() { return HBCIUtils.bigDecimal2String(new BigDecimal(value).divide(ONE_HUNDRED))+" "+curr; } /** Gibt den Betrag mal 100 als Ganzzahl zur�ck */ public long getLongValue() { return value; } /** Gibt den Betrag als Flie�kommazahl zur�ck */ @Deprecated public double getDoubleValue() { return value/100.0; } public BigDecimal getBigDecimalValue() { BigDecimal result = new BigDecimal(value).divide(ONE_HUNDRED); result.setScale(2, BigDecimal.ROUND_HALF_EVEN); return result; } /** Gibt die W�hrung zur�ck */ public String getCurr() { return curr; } /** Setzt den Betrag neu. * @param value Betrag (1.23) * @deprecated */ public void setValue(double value) { setValue(Math.round(100.0*value)); } /** Setzt den Betrag neu. Der hier angegebene Wert entspricht dem * eigentlichen Betrag mal 100. * @param value Der Betrag mal 100 */ public void setValue(long value) { this.value=value; } /** * Setzt den Betrag neu. Der hier angegebene Wert entspricht dem Betrag mal 100. Wenn der * Wert Centbruchteile enth�lt, welche wegfallen w�rden, wird eine Exception geworfen. * * @param value Der Betrag mal 100 */ public void setValue(BigDecimal value) { this.value = value.multiply(ONE_HUNDRED).longValueExact(); } /** Setzt die W�hrung neu. * @param curr die W�hrung */ public void setCurr(String curr) { this.curr=curr; } }