Package org.kapott.hbci.GV

## Class HBCIJobImpl

- java.lang.Object
- - org.kapott.hbci.GV.HBCIJobImpl

All Implemented Interfaces:
  `HBCIJob`

Direct Known Subclasses:
  `AbstractMultiGV`, `AbstractSEPAGV`, `GVAccInfo`, `GVCardList`, `GVChangePIN`, `GVCustomMsg`, `GVDauerDel`, `GVDauerEdit`, `GVDauerList`, `GVDauerNew`, `GVFestCondList`, `GVFestList`, `GVInfoList`, `GVInfoOrder`, `GVKontoauszug`, `GVKontoauszugPdf`, `GVKUmsAll`, `GVLast`, `GVReceipt`, `GVSaldoReq`, `GVSEPAInfo`, `GVStatus`, `GVStornoLast`, `GVTAN2Step`, `GVTANList`, `GVTANMediaList`, `GVTemplate`, `GVTermUeb`, `GVTermUebDel`, `GVTermUebEdit`, `GVTermUebList`, `GVUeb`, `GVUebForeign`, `GVWPDepotList`, `GVWPDepotUms`

    public abstract class HBCIJobImpl
    extends java.lang.Object
    implements HBCIJob

### Field Summary

Fields
`protected HBCIJobResultImpl` `jobResult`

### Constructor Summary

Constructors
`protected` `HBCIJobImpl​(HBCIHandler parentHandler, java.lang.String jobnameLL, HBCIJobResultImpl jobResult)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected boolean` `acceptsParam​(java.lang.String hlParamName)`
`protected void` `addConstraint​(java.lang.String frontendName, java.lang.String destinationName, java.lang.String defValue, int logFilterLevel)`
`protected void` `addConstraint​(java.lang.String frontendName, java.lang.String destinationName, java.lang.String defValue, int logFilterLevel, boolean indexed)`
`void` `addSignaturePassport​(HBCIPassport passport, java.lang.String role)` Hinzufügen eines Passports, welches für eine zusätzliche Signatur für diesen Auftrag benutzt wird.
`void` `addToQueue()` Hinzufügen dieses Jobs zu einem HBCI-Dialog.
`void` `addToQueue​(java.lang.String customerId)` Hinzufügen dieses Jobs zu einem HBCI-Dialog.
`void` `applyOffset()` Setzt den Offset-Parameter mit dem aktuellen Loop-Count.
`protected boolean` `canNationalAcc​(HBCIHandler handler)` Durchsucht das BPD-Segment "HISPAS" nach dem Property "cannationalacc" um herauszufinden, ob beim Versand eines SEPA-Auftrages die nationale Bankverbindung angegeben sein darf.
`protected void` `checkAccountCRC​(java.lang.String frontendname)`
`SEG` `createJobSegment()`
`SEG` `createJobSegment​(int segnum)`
`protected void` `extractResults​(HBCIMsgStatus msgstatus, java.lang.String header, int idx)`
`void` `fillJobResult​(HBCIMsgStatus status, int offset)`
`void` `fillJobResultFromTanJob​(HBCIMsgStatus status, java.lang.String header, int seg)`
`java.lang.String` `getChallengeParam​(java.lang.String path)`
`java.lang.String` `getExternalId()` Liefert eine optionalen Identifier, der von der Banking-Anwendung genutzt werden kann, um einen Bezug zum urspruenglichen Auftrag herstellen zu koennen.
`java.lang.String` `getHBCICode()`
`java.lang.String` `getJobName()`
`java.util.List<java.lang.String>` `getJobParameterNames()` Gibt alle möglichen Job-Parameter für einen Lowlevel-Job zurück.
`java.util.Properties` `getJobRestrictions()` Gibt für einen Job alle bekannten Einschränkungen zurück, die bei der Ausführung des jeweiligen Jobs zu beachten sind.
`HBCIJobResult` `getJobResult()` Gibt ein Objekt mit den Rückgabedaten für diesen Job zurück.
`java.util.List<java.lang.String>` `getJobResultNames()` Gibt alle möglichen Property-Namen für die Lowlevel-Rückgabedaten dieses Jobs zurück.
`java.lang.String` `getLowlevelParam​(java.lang.String key)`
`java.util.Properties` `getLowlevelParams()` Gibt alle für diesen Job gesetzten Parameter zurück.
`HBCIPassportInternal` `getMainPassport()`
`int` `getMaxNumberPerMsg()`
`int` `getMinSigs()` Gibt zurück, wieviele Signaturen für diesen Job mindestens benötigt werden.
`java.lang.String` `getName()` Gibt den internen Namen für diesen Job zurück.
`Konto` `getOrderAccount()` Liefert das Auftraggeber-Konto, wie es ab HKTAN5 erforderlich ist.
`HBCIHandler` `getParentHandler()`
`int` `getSecurityClass()` Gibt zurück, welche Sicherheitsklasse für diesen Job mindestens benötigt wird.
`java.lang.String` `getSegVersion()` Gibt die für diesen Job verwendete Segment-Versionsnummer zurück
`HBCIPassportList` `getSignaturePassports()`
`boolean` `haveTan()` Liefert true, wenn fuer den Auftrag ein HKTAN erzeugt wurde.
`HBCIJobImpl` `redo()` Liefert den ggf erneut auszufuehrenden Job.
`protected boolean` `redoAllowed()` Wir erlauben per Default erstmal kein Redo bei einem 3040-Code.
`protected void` `saveReturnValues​(HBCIMsgStatus status, int sref)`
`void` `setExternalId​(java.lang.String id)` Kann von der Banking-Anwendung genutzt werden, um einen eigenen Identifier im Job zu speichern, um im spaeteren Verlauf des HBCI-Dialoges (z.Bsp.
`void` `setIdx​(int idx)`
`protected void` `setLowlevelParam​(java.lang.String key, java.lang.String value)`
`void` `setParam​(java.lang.String paramName, int i)` Setzen eines Job-Parameters, bei dem ein Integer-Wert Da als Wert erwartet wird.
`void` `setParam​(java.lang.String paramName, java.lang.Integer index, java.lang.String value)` Setzen eines Job-Parameters.
`void` `setParam​(java.lang.String paramName, java.lang.Integer index, java.util.Date date)`
`void` `setParam​(java.lang.String paramname, java.lang.Integer index, Konto acc)`
`void` `setParam​(java.lang.String paramname, java.lang.Integer index, Value v)`
`void` `setParam​(java.lang.String paramName, java.lang.String value)` Setzen eines Job-Parameters.
`void` `setParam​(java.lang.String paramName, java.util.Date date)` Setzen eines Job-Parameters, bei dem ein Datums als Wert erwartet wird.
`void` `setParam​(java.lang.String paramname, Konto acc)` Setzen eines komplexen Job-Parameters (Kontodaten).
`void` `setParam​(java.lang.String paramname, Value v)` Setzen eines komplexen Job-Parameters (Geldbetrag).
`void` `setSegVersion​(java.lang.String version)` Legt die Versionsnummer des Segments manuell fest.
`void` `skip()` Markiert den Auftrag als zu ueberspringend.
`boolean` `skipped()` Prueft, ob der Auftrag uebersprungen werden soll.
`void` `tanApplied()` Vermerkt den Auftrag als "HKTAN erzeugt".
`protected boolean` `twoDigitValueInList​(java.lang.String value, java.lang.String list)`
`void` `verifyConstraints()`

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

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

### Field Detail

#### jobResult

    protected HBCIJobResultImpl jobResult

### Constructor Detail

#### HBCIJobImpl

    protected HBCIJobImpl​(HBCIHandler parentHandler,
                          java.lang.String jobnameLL,
                          HBCIJobResultImpl jobResult)

### Method Detail

#### getJobName

    public java.lang.String getJobName()

#### getHBCICode

    public java.lang.String getHBCICode()

#### setSegVersion

    public void setSegVersion​(java.lang.String version)

Legt die Versionsnummer des Segments manuell fest. Ist u.a. noetig, um HKTAN-Segmente in genau der Version zu senden, in der auch die HITANS empfangen wurden. Andernfalls koennte es passieren, dass wir ein HKTAN mit einem TAN-Verfahren senden, welches in dieser HKTAN-Version gar nicht von der Bank unterstuetzt wird. Das ist ein Dirty-Hack, ich weiss ;) Falls das noch IRGENDWO anders verwendet wird, muss man hoellisch aufpassen, dass alle Stellen, wo "this.name" bzw. "this.segVersion" direkt oder indirekt verwendet wurde, ebenfalls beruecksichtigt werden.

Parameters:
  `version` - die neue Versionsnummer.

#### getMaxNumberPerMsg

    public int getMaxNumberPerMsg()

#### getMinSigs

    public int getMinSigs()

Description copied from interface: `HBCIJob`

Gibt zurück, wieviele Signaturen für diesen Job mindestens benötigt werden. Diese Information wird den BPD entnommen. In einigen Fällen gibt es in den UPD aktuellere Informationen zu einem bestimmten Geschäftsvorfall, zur Zeit werden die UPD von dieser Methode aber nicht ausgewertet.

Wird für einen Job mehr als eine Signatur benötigt, so können mit der Methode `HBCIJob.addSignaturePassport(HBCIPassport, String)` Passports bestimmt werden, die für die Erzeugung der zusätzlichen Signaturen verwendet werden sollen.

Es wird außerdem empfohlen, dass Aufträge, die mehrere Signaturen benötigen, jeweils in einer separaten HBCI-Nachricht versandt werden. Um das zu erzwingen, kann entweder ein HBCI-Dialog geführt werden, der definitiv nur diesen einen Auftrag enthält (also nur ein `HBCIJob.addToQueue()` für diesen Dialog), oder es wird beim Zusammenstellen der Jobs für einen Dialog sichergestellt, dass ein bestimmter Job in einer separaten Nachricht gesandt wird (`HBCIHandler.newMsg()`).

Specified by:
  `getMinSigs` in interface `HBCIJob`
Returns:
  Mindest-Anzahl der benötigten Signaturen für diesen Job

#### getSecurityClass

    public int getSecurityClass()

Description copied from interface: `HBCIJob`

Gibt zurück, welche Sicherheitsklasse für diesen Job mindestens benötigt wird. Diese Information wird den BPD entnommen. Sicherheitsklassen sind erst ab FinTS-3.0 definiert. Falls keine Sicherheitsklassen unterstützt werden (weil eine geringere HBCI-Version als FinTS-3.0 verwendet wird), wird `1` zurückgegeben. Die Sicherheitsklasse ist nur die Sicherheitsmechanismen DDV und RDH relevant - bei Verwendung von PIN/TAN hat die Sicherheitsklasse keine Bedeutung.

Folgende Sicherheitsklassen sind definiert:

- `0`: kein Sicherheitsdienst erforderlich
- `1`: Authentication - es wird eine Signatur mit dem Signaturschlüssel benötigt.
- `2`: Authentication mit fortgeschrittener elektronischer Signatur unter Verwendung des Signaturschlüssels.
- `3`: Non-Repudiation mit fortgeschrittener elektronischer Signatur und optionaler Zertifikatsprüfung unter Verwendung des DigiSig-Schlüssels
- `4`: Non-Repudiation mit fortgeschrittener bzw. qualifizierter elektronischer Signatur und zwingender Zertifikatsüberprüfung mit dem DigiSig-Schlüssel

Specified by:
  `getSecurityClass` in interface `HBCIJob`
Returns:
  Sicherheitsklasse, die für diese Job benötigt wird

#### addConstraint

    protected void addConstraint​(java.lang.String frontendName,
                                 java.lang.String destinationName,
                                 java.lang.String defValue,
                                 int logFilterLevel)

#### addConstraint

    protected void addConstraint​(java.lang.String frontendName,
                                 java.lang.String destinationName,
                                 java.lang.String defValue,
                                 int logFilterLevel,
                                 boolean indexed)

#### verifyConstraints

    public void verifyConstraints()

#### createJobSegment

    public SEG createJobSegment()

#### createJobSegment

    public SEG createJobSegment​(int segnum)

#### getJobParameterNames

    public java.util.List<java.lang.String> getJobParameterNames()

Description copied from interface: `HBCIJob`
Gibt alle möglichen Job-Parameter für einen Lowlevel-Job zurück. Die Anwendung dieser Methode ist nur sinnvoll, wenn es sich bei dem aktuellen Job um einen Lowlevel-Job handelt (erzeugt mit `HBCIHandler.newLowlevelJob(String)`). Die zurückgegebenen Parameternamen können als erstes Argument der Methode `HBCIJob.setParam(String, String)` verwendet werden.

Specified by:
  `getJobParameterNames` in interface `HBCIJob`
Returns:
  Liste aller gültigen Parameternamen (nur für Lowlevel-Jobs)

#### getJobResultNames

    public java.util.List<java.lang.String> getJobResultNames()

Description copied from interface: `HBCIJob`
Gibt alle möglichen Property-Namen für die Lowlevel-Rückgabedaten dieses Jobs zurück. Die Lowlevel-Rückgabedaten können mit `HBCIJob.getJobResult()` und `HBCIJobResult.getResultData()` ermittelt werden. Diese Methode verwendet intern `HBCIHandler.getLowlevelJobResultNames(String)`.

Specified by:
  `getJobResultNames` in interface `HBCIJob`
Returns:
  Liste aller prinzipiell möglichen Property-Keys für die Lowlevel-Rückgabedaten dieses Jobs

#### getJobRestrictions

    public java.util.Properties getJobRestrictions()

Description copied from interface: `HBCIJob`

Gibt für einen Job alle bekannten Einschränkungen zurück, die bei der Ausführung des jeweiligen Jobs zu beachten sind. Diese Daten werden aus den Bankparameterdaten des aktuellen Passports extrahiert. Sie können von einer HBCI-Anwendung benutzt werden, um gleich entsprechende Restriktionen bei der Eingabe von Geschäftsvorfalldaten zu erzwingen (z.B. die maximale Anzahl von Verwendungszweckzeilen, ob das Ändern von terminierten Überweisungen erlaubt ist usw.).

Die einzelnen Einträge des zurückgegebenen Properties-Objektes enthalten als Key die Bezeichnung einer Restriktion (z.B. "`maxusage`"), als Value wird der entsprechende Wert eingestellt. Die Bedeutung der einzelnen Restriktionen ist zur Zeit nur der HBCI-Spezifikation zu entnehmen. In späteren Programmversionen werden entsprechende Dokumentationen zur internen HBCI-Beschreibung hinzugefügt, so dass dafür eine Abfrageschnittstelle implementiert werden kann.

Diese Methode verwendet intern `HBCIHandler.getLowlevelJobRestrictions(String)`

.

Specified by:
  `getJobRestrictions` in interface `HBCIJob`
Returns:
  Properties-Objekt mit den einzelnen Restriktionen

#### setParam

    public void setParam​(java.lang.String paramname,
                         Konto acc)

Setzen eines komplexen Job-Parameters (Kontodaten). Einige Jobs benötigten Kontodaten als Parameter. Diese müssten auf "normalem" Wege durch drei Aufrufe von `setParam(String,String)` erzeugt werden (je einer für die Länderkennung, die Bankleitzahl und die Kontonummer). Durch Verwendung dieser Methode wird dieser Weg abgekürzt. Es wird ein Kontoobjekt übergeben, für welches die entsprechenden drei `setParam(String,String)`-Aufrufe automatisch erzeugt werden.

Specified by:
  `setParam` in interface `HBCIJob`
Parameters:
  `paramname` - die Basis der Parameter für die Kontodaten (für "`my.country`", "`my.blz`", "`my.number`" wäre das also "`my`")
  `acc` - ein Konto-Objekt, aus welchem die zu setzenden Parameterdaten entnommen werden

#### setParam

    public void setParam​(java.lang.String paramname,
                         java.lang.Integer index,
                         Konto acc)

Specified by:
  `setParam` in interface `HBCIJob`
See Also:
  `HBCIJob.setParam(java.lang.String, java.lang.Integer, org.kapott.hbci.structures.Konto)`

#### setParam

    public void setParam​(java.lang.String paramname,
                         Value v)

Setzen eines komplexen Job-Parameters (Geldbetrag). Einige Jobs benötigten Geldbeträge als Parameter. Diese müssten auf "normalem" Wege durch zwei Aufrufe von `setParam(String,String)` erzeugt werden (je einer für den Wert und die Währung). Durch Verwendung dieser Methode wird dieser Weg abgekürzt. Es wird ein Value-Objekt übergeben, für welches die entsprechenden zwei `setParam(String,String)`-Aufrufe automatisch erzeugt werden.

Specified by:
  `setParam` in interface `HBCIJob`
Parameters:
  `paramname` - die Basis der Parameter für die Geldbetragsdaten (für "`btg.value`" und "`btg.curr`" wäre das also "`btg`")
  `v` - ein Value-Objekt, aus welchem die zu setzenden Parameterdaten entnommen werden

#### setParam

    public void setParam​(java.lang.String paramname,
                         java.lang.Integer index,
                         Value v)

Specified by:
  `setParam` in interface `HBCIJob`

#### setParam

    public void setParam​(java.lang.String paramName,
                         java.util.Date date)

Setzen eines Job-Parameters, bei dem ein Datums als Wert erwartet wird. Diese Methode dient als Wrapper für `setParam(String,String)`, um das Datum in einen korrekt formatierten String umzuwandeln. Das "richtige" Datumsformat ist dabei abhängig vom aktuellen Locale.

Specified by:
  `setParam` in interface `HBCIJob`
Parameters:
  `paramName` - Name des zu setzenden Job-Parameters
  `date` - Datum, welches als Wert für den Job-Parameter benutzt werden soll

#### setParam

    public void setParam​(java.lang.String paramName,
                         java.lang.Integer index,
                         java.util.Date date)

Specified by:
  `setParam` in interface `HBCIJob`

#### setParam

    public void setParam​(java.lang.String paramName,
                         int i)

Setzen eines Job-Parameters, bei dem ein Integer-Wert Da als Wert erwartet wird. Diese Methode dient nur als Wrapper für `setParam(String,String)`.

Specified by:
  `setParam` in interface `HBCIJob`
Parameters:
  `paramName` - Name des zu setzenden Job-Parameters
  `i` - Integer-Wert, der als Wert gesetzt werden soll

#### acceptsParam

    protected boolean acceptsParam​(java.lang.String hlParamName)

#### setParam

    public void setParam​(java.lang.String paramName,
                         java.lang.String value)

Setzen eines Job-Parameters. Für alle Highlevel-Jobs ist in der Package-Beschreibung zum Package `org.kapott.hbci.GV` eine Auflistung aller Jobs und deren Parameter zu finden. Für alle Lowlevel-Jobs kann eine Liste aller Parameter entweder mit dem Tool `ShowLowlevelGVs` oder zur Laufzeit durch Aufruf der Methode `HBCIHandler.getLowlevelJobParameterNames(String)` ermittelt werden.

Bei Verwendung dieser oder einer der anderen `setParam()`-Methoden werden zusätzlich einige der Job-Restriktionen (siehe `getJobRestrictions()`) analysiert. Beim Verletzen einer der überprüften Einschränkungen wird eine Exception mit einer entsprechenden Meldung erzeugt. Diese Überprüfung findet allerdings nur bei Highlevel-Jobs statt.

Specified by:
  `setParam` in interface `HBCIJob`
Parameters:
  `paramName` - der Name des zu setzenden Parameters.
  `value` - Wert, auf den der Parameter gesetzt werden soll

#### setParam

    public void setParam​(java.lang.String paramName,
                         java.lang.Integer index,
                         java.lang.String value)

Setzen eines Job-Parameters. Für alle Highlevel-Jobs ist in der Package-Beschreibung zum Package `org.kapott.hbci.GV` eine Auflistung aller Jobs und deren Parameter zu finden. Für alle Lowlevel-Jobs kann eine Liste aller Parameter entweder mit dem Tool `ShowLowlevelGVs` oder zur Laufzeit durch Aufruf der Methode `HBCIHandler.getLowlevelJobParameterNames(String)` ermittelt werden.

Bei Verwendung dieser oder einer der anderen `setParam()`-Methoden werden zusätzlich einige der Job-Restriktionen (siehe `getJobRestrictions()`) analysiert. Beim Verletzen einer der überprüften Einschränkungen wird eine Exception mit einer entsprechenden Meldung erzeugt. Diese Überprüfung findet allerdings nur bei Highlevel-Jobs statt.

Specified by:
  `setParam` in interface `HBCIJob`
Parameters:
  `paramName` - der Name des zu setzenden Parameters.
  `index` - Der index oder `null`, wenn kein Index gewünscht ist
  `value` - Wert, auf den der Parameter gesetzt werden soll

#### applyOffset

    public void applyOffset()

Setzt den Offset-Parameter mit dem aktuellen Loop-Count. Der Counter wird jedesmal in fillJobResult erhoeht - also mit jedem neuen Ergebnis.

#### haveTan

    public boolean haveTan()

Liefert true, wenn fuer den Auftrag ein HKTAN erzeugt wurde.

Returns:
  true, wenn fuer den Auftrag ein HKTAN erzeugt wurde.

#### tanApplied

    public void tanApplied()

Vermerkt den Auftrag als "HKTAN erzeugt".

#### skip

    public void skip()

Markiert den Auftrag als zu ueberspringend.

#### skipped

    public boolean skipped()

Prueft, ob der Auftrag uebersprungen werden soll.

Returns:
  true, wenn der Auftrag uebersprungen werden soll.

#### setLowlevelParam

    protected void setLowlevelParam​(java.lang.String key,
                                    java.lang.String value)

#### getLowlevelParams

    public java.util.Properties getLowlevelParams()

Description copied from interface: `HBCIJob`
Gibt alle für diesen Job gesetzten Parameter zurück. In dem zurückgegebenen `Properties`-Objekt sind werden die Parameter als Lowlevel-Parameter abgelegt. Außerdem hat jeder Lowlevel-Parametername zusätzlich ein Prefix, welches den Lowlevel-Job angibt, für den der Parameter gilt (also z.B. `Ueb3.BTG.value`

Specified by:
  `getLowlevelParams` in interface `HBCIJob`
Returns:
  aktuelle gesetzte Lowlevel-Parameter für diesen Job

#### getLowlevelParam

    public java.lang.String getLowlevelParam​(java.lang.String key)

#### setIdx

    public void setIdx​(int idx)

#### getName

    public java.lang.String getName()

Description copied from interface: `HBCIJob`
Gibt den internen Namen für diesen Job zurück.

Specified by:
  `getName` in interface `HBCIJob`
Returns:
  Job-Name, wie er intern von HBCI4Java verwendet wird.

#### getSegVersion

    public java.lang.String getSegVersion()

Description copied from interface: `HBCIJob`
Gibt die für diesen Job verwendete Segment-Versionsnummer zurück

Specified by:
  `getSegVersion` in interface `HBCIJob`

#### redo

    public HBCIJobImpl redo()

Liefert den ggf erneut auszufuehrenden Job. Die Default-Implementierung liefert "this", wenn die Bank ein 3040 zurueckgemeldet hat. Das kann aber auch ein anderer sein, als "this". Naemlich bei HKTAN in Prozess-Variante #2. Dort liefert es stattdessen den eigentlichen GV.

Returns:
  den ggf erneut auszufuehrenden Job.

#### redoAllowed

    protected boolean redoAllowed()

Wir erlauben per Default erstmal kein Redo bei einem 3040-Code. Es sei denn, im Job ist explizit uebeschrieben. Siehe https://homebanking-hilfe.de/forum/topic.php?p=150614#real150614

Returns:
  true, wenn redo erlaubt ist.

#### fillJobResultFromTanJob

    public void fillJobResultFromTanJob​(HBCIMsgStatus status,
                                        java.lang.String header,
                                        int seg)

#### fillJobResult

    public void fillJobResult​(HBCIMsgStatus status,
                              int offset)

#### saveReturnValues

    protected void saveReturnValues​(HBCIMsgStatus status,
                                    int sref)

#### extractResults

    protected void extractResults​(HBCIMsgStatus msgstatus,
                                  java.lang.String header,
                                  int idx)

#### getJobResult

    public HBCIJobResult getJobResult()

Description copied from interface: `HBCIJob`
Gibt ein Objekt mit den Rückgabedaten für diesen Job zurück. Das zurückgegebene Objekt enthält erst nach der Ausführung des Jobs gültige Daten.

Specified by:
  `getJobResult` in interface `HBCIJob`
Returns:
  ein Objekt mit den Rückgabedaten und Statusinformationen zu diesem Job

#### getMainPassport

    public HBCIPassportInternal getMainPassport()

#### checkAccountCRC

    protected void checkAccountCRC​(java.lang.String frontendname)

#### addSignaturePassport

    public void addSignaturePassport​(HBCIPassport passport,
                                     java.lang.String role)

Description copied from interface: `HBCIJob`
Hinzufügen eines Passports, welches für eine zusätzliche Signatur für diesen Auftrag benutzt wird. `role` gibt dabei die Rolle an, die der Eigentümer des zusätzlichen Passports in Bezug auf diesen Job (bzw. die aktuelle Nachricht) einnimmt. Gültige Werte sind in `HBCIPassport` beschrieben. Mit der Methode `HBCIJob.getMinSigs()` kann ermittelt werden, wieviele Signaturen für einen Job mindestens benötigt werden.

Specified by:
  `addSignaturePassport` in interface `HBCIJob`
Parameters:
  `passport` - das hinzuzufügende Passport-Objekt, welches für eine zusätzliche Signatur benutzt werden soll
  `role` - die Rolle, in der sich der Eigentümer des zusätzlichen Passport-Objektes bezüglich dieses Jobs befindet

#### getSignaturePassports

    public HBCIPassportList getSignaturePassports()

#### getChallengeParam

    public java.lang.String getChallengeParam​(java.lang.String path)

#### getOrderAccount

    public Konto getOrderAccount()

Liefert das Auftraggeber-Konto, wie es ab HKTAN5 erforderlich ist.

Returns:
  das Auftraggeber-Konto oder NULL, wenn keines angegeben ist.

#### getParentHandler

    public HBCIHandler getParentHandler()

#### addToQueue

    public void addToQueue​(java.lang.String customerId)

Description copied from interface: `HBCIJob`

Hinzufügen dieses Jobs zu einem HBCI-Dialog. Nachdem alle Jobparameter mit `HBCIJob.setParam(String,String)` gesetzt wurden, kann der komplett spezifizierte Job mit dieser Methode zur Auftragsliste eines Dialoges hinzugefügt werden.

Die `customerId` gibt an, unter welcher Kunden-ID dieser Job ausgeführt werden soll. Existiert für eine HBCI-Nutzerkennung (ein Passport) nur genau eine Kunden-ID (wie das i.d.R. der Fall ist), so kann der `customerId`-Parameter weggelassen werden - HBCI4Java verwendet dann automatisch die richtige Kunden-ID (als Kunden-ID wird in diesem Fall der Wert von `HBCIPassport.getCustomerId()` verwendet). Gibt es aber mehrere gültige Kunden-IDs für einen HBCI-Zugang, so muss die Kunden-ID, die für diesen Job verwendet werden soll, mit angegeben werden.

Jeder Auftrag (=Job) ist i.d.R. an ein bestimmtes Konto des Auftraggebers gebunden (Überweisung: das Belastungskonto; Saldenabfrage: das abzufragende Konto usw.). Als Kunden-ID für einen Auftrag muss die Kunden-ID angegeben werden, die für dieses Konto verfügungsberechtigt ist.

I.d.R. liefert eine Bank Informationen über alle Konten, auf die via HBCI zugegriffen werden kann. Ist das der Fall, so kann die Menge dieser Konten mit `HBCIPassport.getAccounts()` ermittelt werden. In jedem zurückgemeldeten `Konto`-Objekt ist im Feld `customerid` vermerkt, welche Kunden-ID für dieses Konto verfügungsberechtigt ist. Diese Kunden-ID müsste dann also beim Hinzufügen eines Auftrages angegeben werden, welcher das jeweilige Konto betrifft.

Liefert eine Bank diese Informationen nicht, so hat die Anwendung selbst eine Kontenverwaltung zu implementieren, bei der jedem Nutzerkonto eine zu verwendende Kunden-ID zugeordnet ist.

Ein HBCI-Dialog kann aus beliebig vielen HBCI-Nachrichten bestehen. HBCI4Java versucht zunächst, alle Jobs in einer einzigen Nachricht unterzubringen. Kann ein Job nicht mehr zur aktuellen Nachricht hinzugefügt werden (weil sonst bestimmte vorgegebene Bedingungen nicht eingehalten werden), so legt HBCI4Java automatisch eine neue Nachricht an, zu der der Job schließlich hinzugefügt wird. Beim Ausführen des HBCI-Dialoges (siehe `HBCIHandler.execute()`) werden dann natürlich alle erzeugten Nachrichten zum HBCI-Server gesandt.

Der HBCI-Kernel bestimmt also automatisch, ob ein Auftrag noch mit in die aktuelle Nachricht aufgenommen werden kann, oder ob eine separate Nachricht erzeugt werden muss. Der manuelle Aufruf von `HBCIHandler.newMsg()` ist deshalb im Prinzip niemals notwendig, es sei denn, es soll aus anderen Gründen eine neue Nachricht begonnen werden.

Specified by:
  `addToQueue` in interface `HBCIJob`
Parameters:
  `customerId` - die Kunden-ID, zu deren Dialog der Auftrag hinzugefügt werden soll

#### addToQueue

    public void addToQueue()

Description copied from interface: `HBCIJob`

Hinzufügen dieses Jobs zu einem HBCI-Dialog. Diese Methode arbeitet analog zu `HBCIJob.addToQueue(String)`, nur dass hier die `customerid` mit der Kunden-ID vorbelegt ist, wie sie im aktuellen Passport gespeichert ist.

Specified by:
  `addToQueue` in interface `HBCIJob`

#### getExternalId

    public java.lang.String getExternalId()

Description copied from interface: `HBCIJob`
Liefert eine optionalen Identifier, der von der Banking-Anwendung genutzt werden kann, um einen Bezug zum urspruenglichen Auftrag herstellen zu koennen.

Specified by:
  `getExternalId` in interface `HBCIJob`
Returns:
  der Identifier.
See Also:
  `HBCIJob.getExternalId()`

#### setExternalId

    public void setExternalId​(java.lang.String id)

Description copied from interface: `HBCIJob`
Kann von der Banking-Anwendung genutzt werden, um einen eigenen Identifier im Job zu speichern, um im spaeteren Verlauf des HBCI-Dialoges (z.Bsp. bei der TAN-Eingabe) einen Bezug zum urspruenglichen Auftrag wiederherstellen zu koennen.

Specified by:
  `setExternalId` in interface `HBCIJob`
Parameters:
  `id` - optionale ID.
See Also:
  `HBCIJob.setExternalId(java.lang.String)`

#### twoDigitValueInList

    protected boolean twoDigitValueInList​(java.lang.String value,
                                          java.lang.String list)

#### canNationalAcc

    protected boolean canNationalAcc​(HBCIHandler handler)

Durchsucht das BPD-Segment "HISPAS" nach dem Property "cannationalacc" um herauszufinden, ob beim Versand eines SEPA-Auftrages die nationale Bankverbindung angegeben sein darf. Siehe FinTS_3.0_Messages_Geschaeftsvorfaelle_2013-05-28_final_version.pdf - Kapitel B.3.2

Parameters:
  `handler` -
Returns:
  true, wenn der BPD-Parameter von der Bank mit "J" befuellt ist und die nationale Bankverbindung angegeben sein darf.