Package de.willuhn.jameica.hbci.synchronize

# Class AbstractSynchronizeBackend<T extends SynchronizeJobProvider>

java.lang.Object
de.willuhn.jameica.hbci.synchronize.AbstractSynchronizeBackend<T>

Type Parameters:
  `T` - der konkrete Typ des JobProviders.

All Implemented Interfaces:
  `SynchronizeBackend`

Direct Known Subclasses:
  `HBCISynchronizeBackend`, `ScriptingSynchronizeBackend`

public abstract class AbstractSynchronizeBackend<T extends SynchronizeJobProvider> extends Object implements SynchronizeBackend
Abstrakte Basis-Implementierung fuer ein Synchronize-Backend.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`protected class`
`AbstractSynchronizeBackend.JobGroup`
Abstrakte Basis-Klasse, die die Jobs nach Konten gruppiert und ausfuehrt.
`protected class`
`AbstractSynchronizeBackend.Synchronization`
Container fuer alle auszufuehrenden Jobs gruppiert nach Konto.
`protected class`
`AbstractSynchronizeBackend.Worker`
Implementierung des eigentlichen Worker-Threads.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final de.willuhn.util.I18N`
`i18n`
`protected AbstractSynchronizeBackend<T>.Worker`
`worker`

### Fields inherited from interface de.willuhn.jameica.hbci.synchronize.SynchronizeBackend

`QUEUE_ERROR, QUEUE_NEXT, QUEUE_STATUS`

## Constructor Summary

Constructors
Constructor
Description
`AbstractSynchronizeBackend()`

## Method Summary

Modifier and Type
Method
Description
`<R> R`
`create(Class<? extends SynchronizeJob> type, Konto konto)`
Kann ueberschrieben werden, um weitere Checks durchzufuehren oder weitere Context-Properties im Job zu setzen.
`protected abstract AbstractSynchronizeBackend<T>.JobGroup`
`createJobGroup(Konto k)`
Muss ueberschrieben werden, um dort eine Instanz der JobGroup zurueckzuliefern, in der die sync()-Funktion implementiert ist.
`SynchronizeSession`
`execute(List<SynchronizeJob> jobs)`
Kann ueberschrieben werden, um weitere Checks durchzufuehren.
`final SynchronizeSession`
`getCurrentSession()`
Liefert die aktuelle Session oder NULL wenn gerade keine laeuft.
`protected Class<? extends SynchronizeJob>`
`getImplementor(Class<? extends SynchronizeJob> type, Konto konto)`
Liefert die passende Implementierung fuer den angegebenen Job.
`protected abstract Class<T>`
`getJobProviderInterface()`
Liefert das Marker-Interface der Job-Provider des Backends.
`protected List<T>`
`getJobProviders()`
Liefert unsere Job-Provider.
`List<String>`
`getPropertyNames(Konto k)`
Liefert eine optionale Liste mit Property-Namen, die in Hibiscus in den Sync-Einstellungen als Eingabefelder fuer zusaetzliche Konfigurationsoptionen angezeigt werden sollen.
`final List<SynchronizeJob>`
`getSynchronizeJobs(Konto k)`
Liefert eine Liste der auszufuehrenden Synchronisierungsjobs auf dem angegebenen Konto.
`List<Konto>`
`getSynchronizeKonten(Konto k)`
Liefert eine Liste der Konten, fuer die die Synchronisierung ausgefuehrt werden.
`boolean`
`supports(Class<? extends SynchronizeJob> type, Konto konto)`
Kann ueberschrieben werden, um weitere Checks durchzufuehren.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface de.willuhn.jameica.hbci.synchronize.SynchronizeBackend

`getName`

## Field Details

### i18n

protected static final de.willuhn.util.I18N i18n

### worker

protected AbstractSynchronizeBackend<T extends SynchronizeJobProvider>.Worker worker

## Constructor Details

### AbstractSynchronizeBackend

public AbstractSynchronizeBackend()

## Method Details

### getSynchronizeKonten

public List<Konto> getSynchronizeKonten(Konto k)
Liefert eine Liste der Konten, fuer die die Synchronisierung ausgefuehrt werden. Die Funktion macht nichts anderes, als: - alle zur Synchronisierung aktiven zurueckzuliefern, wenn k=null ist - eine Liste mit nur dem angegebenen Konto zurueckzuliefern, wenn k!=null ist. Die Liste enthaelt jedoch generell nur Konten, die nicht deaktiviert sind. Kann ueberschrieben werden, um die Liste weiter einzuschraenken.

Parameters:
  `k` - das Konto.
Returns:
  die Liste der Konten.

### getJobProviderInterface

protected abstract Class<T> getJobProviderInterface()
Liefert das Marker-Interface der Job-Provider des Backends.

Returns:
  das Marker-Interface der Job-Provider des Backends.

### createJobGroup

protected abstract AbstractSynchronizeBackend<T>.JobGroup createJobGroup(Konto k)
Muss ueberschrieben werden, um dort eine Instanz der JobGroup zurueckzuliefern, in der die sync()-Funktion implementiert ist.

Parameters:
  `k` - das Konto der Gruppe.
Returns:
  die Instanz der Gruppe.

### getJobProviders

protected List<T> getJobProviders()
Liefert unsere Job-Provider.

Returns:
  unsere Job-Provider.

### getImplementor

protected Class<? extends SynchronizeJob> getImplementor(Class<? extends SynchronizeJob> type, Konto konto)
Liefert die passende Implementierung fuer den angegebenen Job.

Parameters:
  `type` - der Typ des Jobs.
  `konto` - das Konto, fuer das der Job gesucht wird.
Returns:
  die passende Implementierung oder null, wenn keine Implementierung gefunden wurde.

### create

public <R> R create(Class<? extends SynchronizeJob> type, Konto konto) throws de.willuhn.util.ApplicationException
Kann ueberschrieben werden, um weitere Checks durchzufuehren oder weitere Context-Properties im Job zu setzen.

Specified by:
  `create` in interface `SynchronizeBackend`
Parameters:
  `type` - der zu erstellende Job-Typ.
  `konto` - das Konto.
Returns:
  die Instanz des Jobs.
Throws:
  `de.willuhn.util.ApplicationException` - bei einem Anwendungsfehler.

### supports

public boolean supports(Class<? extends SynchronizeJob> type, Konto konto)
Kann ueberschrieben werden, um weitere Checks durchzufuehren.

Specified by:
  `supports` in interface `SynchronizeBackend`
Parameters:
  `type` - der zu pruefende Job-Typ.
  `konto` - das Konto.
Returns:
  true, wenn es ihn unterstuetzt, sonst false.

### getSynchronizeJobs

public final List<SynchronizeJob> getSynchronizeJobs(Konto k)
Description copied from interface: `SynchronizeBackend`
Liefert eine Liste der auszufuehrenden Synchronisierungsjobs auf dem angegebenen Konto.

Specified by:
  `getSynchronizeJobs` in interface `SynchronizeBackend`
Parameters:
  `k` - das Konto. Wenn kein Konto angegeben ist, werden die Jobs aller Konten zurueckgeliefert.
Returns:
  Liste der auszufuehrenden Jobs. Die Funktion darf auch NULL liefern.

### getPropertyNames

public List<String> getPropertyNames(Konto k)
Description copied from interface: `SynchronizeBackend`
Liefert eine optionale Liste mit Property-Namen, die in Hibiscus in den Sync-Einstellungen als Eingabefelder fuer zusaetzliche Konfigurationsoptionen angezeigt werden sollen. Wird z.Bsp. vom ScriptingBackend verwendet, um dort die Zugangsdaten zur Webseite hinterlegen zu koennen, ohne dafuer Kontonummer, Benutzerkennung, usw. des Kontos "missbrauchen" zu muessen. Die vom Benutzer eingegebenen Werte werden als Meta-Daten zum Konto gespeichert. Sie koennen mittels `HibiscusDBObject.getMeta(String, String)` wieder abgerufen werden. Besitzt ein Property den Suffix "(true/false)" wird es als Checkbox angezeigt. Besitzt ein Property den Suffix "(pwd)" oder "(password)" wird es als Passwort-Eingabe angezeigt. Der Suffix wird vor dem Speichern des Property in den Meta-Daten des Konto entfernt.

Specified by:
  `getPropertyNames` in interface `SynchronizeBackend`
Parameters:
  `k` - das Konto.
Returns:
  Liste von lesbaren Property-Namen. Die werden dem Benutzer 1:1 als Label von Eingabefeldern angezeigt.

### execute

public SynchronizeSession execute(List<SynchronizeJob> jobs) throws de.willuhn.util.ApplicationException, de.willuhn.jameica.system.OperationCanceledException
Kann ueberschrieben werden, um weitere Checks durchzufuehren.

Specified by:
  `execute` in interface `SynchronizeBackend`
Parameters:
  `jobs` - die auszufuehrenden Jobs.
Returns:
  die neue Session.
Throws:
  `de.willuhn.util.ApplicationException` - bei einem Anwendungsfehler.
  `de.willuhn.jameica.system.OperationCanceledException` - wenn der User die Synchronisierung abgebrochen hat.

### getCurrentSession

public final SynchronizeSession getCurrentSession()
Description copied from interface: `SynchronizeBackend`
Liefert die aktuelle Session oder NULL wenn gerade keine laeuft.

Specified by:
  `getCurrentSession` in interface `SynchronizeBackend`
Returns:
  die aktuelle Session oder NULL wenn gerade keine laeuft.