package jhaushalt.service; import java.util.ArrayList; import java.util.List; import jhaushalt.domain.Geldbetrag; import jhaushalt.domain.Register; import jhaushalt.domain.buchung.Buchung; import jhaushalt.domain.gui.BookEntry; import jhaushalt.domain.kategorie.EinzelKategorie; import jhaushalt.domain.zeitraum.Datum; import jhaushalt.domain.zeitraum.Zeitraum; public class DataServiceImpl implements DataService { private DatenbasisService datenbasisService; public void setDatenbasisService(DatenbasisService datenbasisService) { this.datenbasisService = datenbasisService; } public ArrayList<BookEntry> getBuchungen( final Zeitraum zeitraum, final String registerName, final EinzelKategorie[] kategorien, final boolean unterkategorienVerwenden) { ArrayList<BookEntry> buchungList = null; if (registerName == null) { buchungList = getBookingsForAllRegisters(zeitraum, kategorien, unterkategorienVerwenden); } else { buchungList = getBookingsForGivenRegister(registerName, zeitraum, kategorien, unterkategorienVerwenden); } // sort buchungen return buchungList; } /** * Liefert das passende Register zum angegebenen Namen. * * @param regname * Name des gesuchen Registers * @return gesuchtes Register */ public Register findeRegister(final String regname) { List<Register> registerList = datenbasisService.getDatenbasis().getRegisterList(); for (Register register: registerList) { if (register.getName().equals(regname)) { return register; } } return null; } private ArrayList<BookEntry> getBookingsForAllRegisters(final Zeitraum zeitraum, final EinzelKategorie[] kategorien, final boolean unterkategorienVerwenden) { ArrayList<BookEntry> bookingList = new ArrayList<BookEntry>(); List<Register> registerList = datenbasisService.getDatenbasis().getRegisterList(); for (Register register : registerList) { addSuitableBuchungToList(zeitraum, kategorien, unterkategorienVerwenden, register, bookingList); } return bookingList; } private ArrayList<BookEntry> getBookingsForGivenRegister(String registerName, final Zeitraum zeitraum, final EinzelKategorie[] kategorien, final boolean unterkategorienVerwenden) { ArrayList<BookEntry> bookingList = new ArrayList<BookEntry>(); Register register = findeRegister(registerName); addSuitableBuchungToList(zeitraum, kategorien, unterkategorienVerwenden, register, bookingList); return bookingList; } private void addSuitableBuchungToList(final Zeitraum zeitraum, final EinzelKategorie[] kategorien, final boolean unterkategorienVerwenden, Register register, ArrayList<BookEntry> bookingList) { for (Buchung buchung : register.getBookings()) { BookEntry bookEntry = returnAdaptedBookEntryWhenBuchungSuitsIntoTimeRange(buchung, zeitraum, kategorien, unterkategorienVerwenden); if (bookEntry != null) { bookingList.add(bookEntry); } } } private BookEntry returnAdaptedBookEntryWhenBuchungSuitsIntoTimeRange( Buchung buchung, final Zeitraum zeitraum, final EinzelKategorie[] kategorien, final boolean unterkategorienVerwenden) { final Datum datum = buchung.getDatum(); if (datum.istImZeitraum(zeitraum)) { for (int kategorienIndex = 0; kategorienIndex < kategorien.length; kategorienIndex++) { final EinzelKategorie kategorie = kategorien[kategorienIndex]; final Geldbetrag wert = buchung.getKategorieWert(kategorie, unterkategorienVerwenden); if (! wert.equals(Geldbetrag.NULL_EURO)) { return new BookEntry(datum, buchung.getText(), kategorie, wert); } } } return null; } private static String createUniqueRegisterName(List<Register> registerList, final String regname) { String generierterName = regname; boolean nameVorhanden; int count = 0; do { nameVorhanden = false; for (int i = 0; i < registerList.size(); i++) { if (generierterName.equalsIgnoreCase("" + registerList.get(i))) { nameVorhanden = true; } } if (nameVorhanden) { generierterName = regname + " (" + ++count + ")"; } } while (nameVorhanden); return generierterName; } }