package de.open4me.depot.abruf.www;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import de.open4me.depot.DepotViewerPlugin;
import de.open4me.depot.abruf.impl.DepotAbrufFabrik;
import de.willuhn.annotation.Lifecycle;
import de.willuhn.annotation.Lifecycle.Type;
import de.willuhn.jameica.hbci.rmi.Konto;
import de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend;
import de.willuhn.jameica.hbci.synchronize.jobs.SynchronizeJob;
import de.willuhn.jameica.system.Application;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
import de.willuhn.util.I18N;
import de.willuhn.util.ProgressMonitor;
/**
* Implementierung eines Sync-Backends.
*/
@Lifecycle(Type.CONTEXT)
public class DVSynchronizeBackend extends AbstractSynchronizeBackend<DVSynchronizeJobProvider>
{
private final static I18N i18n = Application.getPluginLoader().getPlugin(DepotViewerPlugin.class).getResources().getI18N();
/**
* @see de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend#createJobGroup(de.willuhn.jameica.hbci.rmi.Konto)
*/
@Override
protected JobGroup createJobGroup(Konto k)
{
return new MMTgJobGroup(k);
}
/**
* @see de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend#getJobProviderInterface()
*/
@Override
protected Class<DVSynchronizeJobProvider> getJobProviderInterface()
{
return DVSynchronizeJobProvider.class;
}
/**
* @see de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend#getPropertyNames(de.willuhn.jameica.hbci.rmi.Konto)
*/
@Override
public List<String> getPropertyNames(Konto konto)
{
try
{
if (konto == null || konto.hasFlag(Konto.FLAG_DISABLED)) {
return null;
}
return DepotAbrufFabrik.getDepotAbruf(konto).getPROP(konto);
} catch (RemoteException re) {
Logger.error("unable to determine property-names",re);
return null;
} catch (ApplicationException e) {
Logger.error("unable to determine property-names", e);
return null;
}
}
/**
* @see de.willuhn.jameica.hbci.synchronize.SynchronizeBackend#supports(java.lang.Class, de.willuhn.jameica.hbci.rmi.Konto)
*/
@Override
public boolean supports(Class<? extends SynchronizeJob> type, Konto konto)
{
boolean b = super.supports(type,konto);
if (!b)
return false;
try
{
return DepotAbrufFabrik.getDepotAbruf(konto) != null;
}
catch (RemoteException re)
{
Logger.error("unable to check for Depotsupport",re);
} catch (ApplicationException e) {
Logger.error("unable to check for Depotsupport", e);
}
return false;
}
/**
* @see de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend#getSynchronizeKonten(de.willuhn.jameica.hbci.rmi.Konto)
*/
public List<Konto> getSynchronizeKonten(Konto k)
{
List<Konto> list = super.getSynchronizeKonten(k);
List<Konto> result = new ArrayList<Konto>();
for (Konto konto:list)
{
result.add(konto);
}
return result;
}
/**
* @see de.willuhn.jameica.hbci.synchronize.SynchronizeBackend#getName()
*/
@Override
public String getName()
{
return i18n.tr("Depot Viewer");
}
/**
* Hier findet die eigentliche Ausfuehrung des Jobs statt.
*/
protected class MMTgJobGroup extends JobGroup
{
/**
* ct.
* @param k
*/
protected MMTgJobGroup(Konto k)
{
super(k);
}
/**
* @see de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend.JobGroup#sync()
*/
@Override
protected void sync() throws Exception
{
////////////////////////////////////////////////////////////////////
// lokale Variablen
ProgressMonitor monitor = worker.getMonitor();
String kn = this.getKonto().getLongName();
int step = 100 / worker.getSynchronization().size();
////////////////////////////////////////////////////////////////////
try
{
this.checkInterrupted();
monitor.log(" ");
monitor.log(i18n.tr("Synchronisiere Konto: {0}",kn));
Logger.info("processing jobs");
for (SynchronizeJob job:this.jobs)
{
this.checkInterrupted();
DVSynchronizeJob j = (DVSynchronizeJob) job;
j.execute();
monitor.addPercentComplete(step);
}
}
catch (Exception e)
{
throw e;
}
}
}
}