/* * This file is part of jHaushalt. * jHaushalt 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. * jHaushalt 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 jHaushalt; if not, see <http://www.gnu.org/licenses/>. * (C)opyright 2002-2010 Dr. Lars H. Hahn */ package jhaushalt.domain.buchung; import java.util.logging.Logger; import jhaushalt.domain.Geldbetrag; import jhaushalt.domain.kategorie.EinzelKategorie; import jhaushalt.domain.kategorie.Kategorie; import jhaushalt.domain.zeitraum.Zeitraum; import jhaushalt.domain.zeitraum.Datum; /** * Die StandardBuchung ist die "normale" Buchung. Sie besteht aus Datum, Name, * IKategorie und Betrag. * * @author Dr. Lars H. Hahn * @version 2.6/2010.02.03 */ public class StandardBuchung extends Buchung { private static final Logger LOGGER = Logger.getLogger(StandardBuchung.class.getName()); private EinzelKategorie kategorie = EinzelKategorie.SONSTIGES; private Geldbetrag betrag = new Geldbetrag(); public StandardBuchung() { } public StandardBuchung(final Datum datum, final String text, final EinzelKategorie kategorie, final Geldbetrag betrag) { setDatum(datum); setText(text); setKategorie(kategorie); this.betrag = betrag; } @Override public Kategorie getKategorie() { return this.kategorie; } @Override public void setKategorie(final Kategorie neueKategorie) { this.kategorie = (EinzelKategorie) neueKategorie; } @Override public Geldbetrag getWert() { return this.betrag; } @Override public void setWert(final Geldbetrag wert) { this.betrag = wert; } @Override public int ersetzeKategorie(final EinzelKategorie alteKategorie, final EinzelKategorie neueKategorie) { if ((this.kategorie == alteKategorie) || (alteKategorie == null)) { this.kategorie = neueKategorie; return 1; } return 0; } @Override public boolean istInKategorie(final EinzelKategorie kategorie, final boolean unterkategorienVerwenden) { return this.kategorie.istInKategorie(kategorie, unterkategorienVerwenden); } // -- Auswertung // ------------------------------------------------------------- @Override public void bildeKategorieSumme(final Zeitraum zeitraum, final boolean unterkat) { if ((zeitraum == null) || getDatum().istImZeitraum(zeitraum)) { this.kategorie.addiereWert(this.betrag, unterkat); } } @Override public Geldbetrag getKategorieWert(final EinzelKategorie namekat, final boolean unterkat) { if (this.kategorie.istInKategorie(namekat, unterkat)) { return this.betrag; } return Geldbetrag.NULL_EURO; } // -- Methode des Interface 'Cloneable' // -------------------------------------- @Override public final Object clone() { final Datum clonedDatum = (Datum) getDatum().clone(); final String text = new String(getText()); final Geldbetrag clonedBetrag = (Geldbetrag) this.betrag.clone(); StandardBuchung standardBuchung = new StandardBuchung(); try { standardBuchung = (StandardBuchung) super.clone(); } catch (final CloneNotSupportedException e) { LOGGER.warning("Cloning error. This should never happen."); } setDatum(clonedDatum); setText(text); setKategorie(this.kategorie); standardBuchung.betrag = clonedBetrag; return standardBuchung; } }