package jhaushalt.service.factories; import java.io.DataInputStream; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import jhaushalt.domain.Datenbasis; import jhaushalt.domain.buchung.Buchung; import jhaushalt.domain.buchung.StandardBuchung; import jhaushalt.service.factories.io.DataInputFacade; public class DatenbasisWithAutomationFactory { private DatenbasisFactory datenbasisFactory; private BuchungFactory buchungFactory; public void setDatenbasisFactory(DatenbasisFactory datenbasisFactory) { this.datenbasisFactory = datenbasisFactory; } public Datenbasis getInstance(DataInputFacade input) throws IOException, UnknownBuchungTypeException, ParseException { Datenbasis datenbasis = datenbasisFactory.getInstance(input); if (! "jHaushalt1.0".equals(datenbasis.getVersionInfo())) { // automatische Buchungen laden und ausführen (in v1.0 noch unbekannt!) datenbasis.setAutomatedEntries(loadAutomatedEntries(input)); } return datenbasis; } private List<Buchung> loadAutomatedEntries (DataInputFacade in) throws IOException, UnknownBuchungTypeException, ParseException { final int numberOfAutomatedEntries = in.getInt(); List<Buchung> automatedEntries = new ArrayList<Buchung>(); for (int i = 0; i < numberOfAutomatedEntries; i++) { // Buchung laden: //final String typ = in.readUTF(); automatedEntries.add(buchungFactory.getInstance(in)); // if (typ.equals("Umbuchung")) { // //doUmbuchung(in); // } else if (!typ.equals("StandardBuchung") && !typ.equals("StandardBuchung2")) { // throw new IOException("AutoBuchung: Falscher Buchungstyp: " + typ); // } else { // StandardBuchung buchung = doStandardBuchung(in, typ); } return automatedEntries; } private static StandardBuchung doStandardBuchung(DataInputStream in, final String typ) throws IOException { StandardBuchung buchung = null; // if (typ.equals("StandardBuchung")) { // Laden des // // Legacy-Formats // final Datum datum = new Datum(); // datum.laden(in); // final String text = in.readUTF(); // final int anz = in.readInt(); // if (anz == 1) { // final EinzelKategorie kategorie = findeOderErzeugeKategorie(in.readUTF()); // final Geldbetrag betrag = new Geldbetrag(); // betrag.laden(in); // buchung = new StandardBuchung(datum, text, kategorie, betrag); // } else { // throw new IOException("AutoBuchung: Falscher Buchungstyp: SplitBuchung"); // } // } else { // Laden des aktuellen Formats für Standard-Buchungen // buchung = new StandardBuchung(); // (buchung).laden(in, this); // } // // // Register laden: // final Register register = findeOderErzeugeRegister(in.readUTF()); // // Intervall laden: // final Integer zeitraum = getLegacyIntervallIndex(in.readUTF()); // // // Buchung einsortieren // final int anz = this.autoStandardBuchungen.size(); // int pos = -1; // for (int j = 0; j < anz; j++) { // if (buchung.compareTo(this.autoStandardBuchungen.get(j)) >= 0) { // pos = j; // } // } // if (pos == anz - 1) { // ans Ende // this.autoStandardBuchungen.add(buchung); // this.autoStandardBuchungRegister.add(register); // this.autoStandardBuchungIntervalle.add(zeitraum); // } else { // neue Buchung einfuegen // this.autoStandardBuchungen.add(pos + 1, buchung); // this.autoStandardBuchungRegister.add(pos + 1, register); // this.autoStandardBuchungIntervalle.add(pos + 1, zeitraum); // } return buchung; } }