package de.open4me.depot.abruf.hbci;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import de.open4me.depot.abruf.impl.BasisDepotAbruf;
import de.open4me.depot.abruf.impl.DepotAbrufFabrik;
import de.open4me.depot.abruf.utils.PropHelper;
import de.open4me.depot.abruf.utils.Utils;
import de.open4me.depot.hbcijobs.HBCIDepotBestandJob;
import de.open4me.depot.hbcijobs.HBCIDepotUmsatzJob;
import de.willuhn.jameica.hbci.SynchronizeOptions;
import de.willuhn.jameica.hbci.rmi.Konto;
import de.willuhn.jameica.hbci.server.hbci.AbstractHBCIJob;
import de.willuhn.jameica.hbci.synchronize.hbci.HBCISynchronizeJob;
import de.willuhn.jameica.hbci.synchronize.jobs.SynchronizeJobKontoauszug;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
/**
* Ein Synchronize-Job fuer das Abrufen der Umsaetze eines Depot-Kontos.
*/
public class DVHBCISynchronizeJobDepotKontoauszug extends SynchronizeJobKontoauszug implements HBCISynchronizeJob
{
/**
* @see de.willuhn.jameica.hbci.synchronize.hbci.HBCISynchronizeJob#createHBCIJobs()
*/
public AbstractHBCIJob[] createHBCIJobs() throws RemoteException, ApplicationException
{
Konto k = (Konto) this.getContext(CTX_ENTITY);
Boolean forceUmsatz = (Boolean) this.getContext(CTX_FORCE_UMSATZ);
SynchronizeOptions o = new SynchronizeOptions(k);
List<AbstractHBCIJob> jobs = new ArrayList<AbstractHBCIJob>();
if (o.getSyncKontoauszuege() || (forceUmsatz != null && forceUmsatz.booleanValue()))
{
boolean supportDepotList = true;
boolean supportDepotUmsatz = !Boolean.valueOf(k.getMeta(PropHelper.NURBESTAND, "false"));
Logger.info("Support für Bestand/Umsätze: " + supportDepotList + "/" + supportDepotUmsatz);
// Einige Banken unterstützen per HBCI nur die Bestandabfrage
// Hier können wir die Umsatzabfrage via Screen Screen Scraping erledigen
BasisDepotAbruf x = DepotAbrufFabrik.getDepotAbrufHBCI(k);
// ggf. kann der Abruf über Screenscraping deaktiviert sein.
// TODO Möglichkeit einbauen, dass Screenscraping auf vernünftige Weise zu deaktivieren
// if (!supportDepotUmsatz) {
// x = null;
// }
// Bestimmen, ob die Erzeugung der Umsätze aus den Bestandsveränderungen aktiviert werden soll
boolean simulateOrders = (x == null) && !supportDepotUmsatz;
// Bestand abrufen
if (supportDepotList) {
jobs.add(new HBCIDepotBestandJob(k, simulateOrders, x));
}
// Umsatz abrufen
if (supportDepotUmsatz && x == null) {
jobs.add(new HBCIDepotUmsatzJob(k));
}
}
return jobs.toArray(new AbstractHBCIJob[jobs.size()]);
}
public static List<String> getProf(Konto k) throws RemoteException, ApplicationException {
if (!Utils.hasRightKontoType(k)) {
return null;
}
BasisDepotAbruf x = DepotAbrufFabrik.getDepotAbrufHBCI(k);
if (x == null) {
List<String> liste = Arrays.asList(new String[]{PropHelper.NURBESTANDINKLFORMAT});
return liste;
}
return x.getPROP(k);
}
}