{
List<Value> values = p.getData(k,from,to);
for (Value v:values)
{
// Haben wir den Tag schon?
Value existing = dates.get(v.getDate());
if (existing != null) // haben wir schon. Dann dazu addieren
{
existing.setValue(existing.getValue() + v.getValue());
continue;
}
// haben wir noch nicht. Also neu anlegen
dates.put(v.getDate(),v);
}
}
catch (Exception e)
{
Logger.error("unable to calculate data from forecast provider \"" + p.getName() + "\", skipping",e);
}
}
//
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// Schritt 2: Start-Saldo ermitteln
double startSaldo = 0.0d;
if (k != null)
startSaldo = k.getNumUmsaetze() > 0 ? KontoUtil.getAnfangsSaldo(k,from) : k.getSaldo();
//
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// Schritt 3: Salden draus machen - hierzu addieren wir die Werte jeweils auf
List<Value> salden = new LinkedList<Value>();
double prev = startSaldo;
for (Value v:dates.values())
{
Value newValue = new Value(v.getDate(),v.getValue() + prev);
salden.add(newValue);
prev = newValue.getValue();
}
//
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// Schritt 4: Homogenisieren, sodass wir fuer jeden Tag einen Wert haben.
List<Value> result = new LinkedList<Value>();
SaldoFinder finder = new SaldoFinder(salden,startSaldo);
// Iterieren ueber den Zeitraum.
Calendar cal = Calendar.getInstance();
cal.setTime(from);
while (!from.after(to))
{
Value v = new Value(from,finder.get(from));
result.add(v);
// Und weiter zum naechsten Tag
cal.add(Calendar.DATE,1);
from = cal.getTime();