package jhaushalt.service.factories;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import jhaushalt.domain.Datenbasis;
import jhaushalt.domain.Register;
import jhaushalt.service.factories.io.DataInputFacade;
import jhaushalt.service.factories.io.DataOutputFacade;
public class DatenbasisFactory {
private RegisterFactory registerFactory;
public void setRegisterFactory(RegisterFactory registerFactory) {
this.registerFactory = registerFactory;
}
public Datenbasis getInstance(DataInputFacade input) throws IOException, UnknownBuchungTypeException, ParseException {
Datenbasis datenbasis = new Datenbasis();
datenbasis.setVersionInfo(input.getDataString());
datenbasis.setRegisterList(loadRegisters(input));
// FIXME aggregate category tree
return datenbasis;
}
public void saveData(DataOutputFacade dataOutputFacade, Datenbasis datenbasis) throws IOException {
dataOutputFacade.writeString(datenbasis.getVersionInfo()); // "jHaushalt" + VERSION_DATENBASIS) !!!
List<Register> registerList = datenbasis.getRegisterList();
dataOutputFacade.writeInt(registerList.size());
saveRegistersList(dataOutputFacade, registerList);
}
private void saveRegistersList(DataOutputFacade dataOutputFacade, List<Register> registerList) throws IOException {
for (Register register: registerList) {
registerFactory.saveData(dataOutputFacade, register);
}
}
private List<Register> loadRegisters(DataInputFacade inputFacade) throws IOException, UnknownBuchungTypeException, ParseException {
int numberOfRegisters = inputFacade.getInt();
List<Register> registerList = new ArrayList<Register>();
for (int i = 0; i < numberOfRegisters; i++) {
registerList.add(registerFactory.getInstance(inputFacade, inputFacade.getDataString()));
}
return registerList;
}
}