Added DialogData to keep track of dialog information like next message number
This commit is contained in:
parent
b4ba9a0bcf
commit
498aa139c6
|
@ -1,6 +1,5 @@
|
|||
package net.dankito.fints.messages
|
||||
|
||||
import net.dankito.fints.messages.datenelemente.implementierte.Nachrichtennummer
|
||||
import net.dankito.fints.messages.datenelemente.implementierte.tan.TanProcess
|
||||
import net.dankito.fints.messages.nachrichten.Nachricht
|
||||
import net.dankito.fints.messages.segmente.ISegmentNumberGenerator
|
||||
|
@ -9,6 +8,7 @@ import net.dankito.fints.messages.segmente.SegmentNumberGenerator
|
|||
import net.dankito.fints.messages.segmente.implementierte.*
|
||||
import net.dankito.fints.model.BankData
|
||||
import net.dankito.fints.model.CustomerData
|
||||
import net.dankito.fints.model.DialogData
|
||||
import net.dankito.fints.model.ProductData
|
||||
import net.dankito.fints.util.FinTsUtils
|
||||
|
||||
|
@ -43,7 +43,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
|
|||
|
||||
val customer = CustomerData.Anonymous
|
||||
|
||||
return createMessage(false, false, bank, customer, listOf(
|
||||
return createMessage(false, false, bank, customer, DialogData.DialogInitDialogData, listOf(
|
||||
IdentifikationsSegment(generator.resetSegmentNumber(1), bank, customer),
|
||||
Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bank, customer, product)
|
||||
))
|
||||
|
@ -51,7 +51,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
|
|||
|
||||
open fun createDialogInitMessage(bank: BankData, customer: CustomerData, product: ProductData): String {
|
||||
|
||||
return createMessage(true, true, bank, customer, listOf(
|
||||
return createMessage(true, true, bank, customer, DialogData.DialogInitDialogData, listOf(
|
||||
IdentifikationsSegment(generator.resetSegmentNumber(2), bank, customer),
|
||||
Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bank, customer, product),
|
||||
ZweiSchrittTanEinreichung(generator.getNextSegmentNumber(), TanProcess.TanProcess4, "HKIDN")
|
||||
|
@ -60,7 +60,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
|
|||
|
||||
|
||||
open fun createMessage(signMessage: Boolean, encryptMessage: Boolean, bank: BankData, customer: CustomerData,
|
||||
payloadSegments: List<Segment>): String {
|
||||
dialogData: DialogData, payloadSegments: List<Segment>): String {
|
||||
|
||||
var payload = payloadSegments
|
||||
val date = utils.formatDateTodayAsInt()
|
||||
|
@ -77,11 +77,10 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
|
|||
val formattedPayload = formatPayload(payload)
|
||||
|
||||
val messageSize = formattedPayload.length + MessageHeaderLength + MessageClosingLength + AddedSeparatorsLength
|
||||
val messageNumber = Nachrichtennummer.FirstMessageNumber
|
||||
|
||||
val header = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, messageSize, "0", messageNumber)
|
||||
val header = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, messageSize, dialogData)
|
||||
|
||||
val closing = Nachrichtenabschluss(generator.getNextSegmentNumber(), messageNumber)
|
||||
val closing = Nachrichtenabschluss(generator.getNextSegmentNumber(), dialogData)
|
||||
|
||||
return listOf(header.format(), formattedPayload, closing.format())
|
||||
.joinToString(Nachricht.SegmentSeparator, postfix = Nachricht.SegmentSeparator)
|
||||
|
|
|
@ -4,4 +4,12 @@ import net.dankito.fints.messages.Existenzstatus
|
|||
import net.dankito.fints.messages.datenelemente.abgeleiteteformate.Identifikation
|
||||
|
||||
|
||||
/**
|
||||
* Die Dialog-ID dient der eindeutigen Zuordnung einer Nachricht zu einem FinTS-Dialog.
|
||||
* Die erste Kundennachricht (Dialoginitialisierung) enthält als Dialog-ID den Wert 0.
|
||||
* In der ersten Antwortnachricht wird vom Kreditinstitut eine Dialog-ID vorgegeben,
|
||||
* die für alle nachfolgenden Nachrichten dieses Dialogs einzustellen ist. Es ist
|
||||
* Aufgabe des Kreditinstituts, dafür zu sorgen, dass diese Dialog-ID
|
||||
* dialogübergreifend und systemweit eindeutig ist.
|
||||
*/
|
||||
open class DialogId(dialogId: String) : Identifikation(dialogId, Existenzstatus.Mandatory)
|
|
@ -4,6 +4,7 @@ import net.dankito.fints.messages.Existenzstatus
|
|||
import net.dankito.fints.messages.datenelemente.implementierte.Nachrichtennummer
|
||||
import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf
|
||||
import net.dankito.fints.messages.segmente.Segment
|
||||
import net.dankito.fints.model.DialogData
|
||||
|
||||
|
||||
/**
|
||||
|
@ -11,8 +12,9 @@ import net.dankito.fints.messages.segmente.Segment
|
|||
*/
|
||||
open class Nachrichtenabschluss(
|
||||
segmentNumber: Int,
|
||||
messageNumber: Int
|
||||
dialogData: DialogData
|
||||
|
||||
) : Segment(listOf(
|
||||
Segmentkopf("HNHBS", 1, segmentNumber),
|
||||
Nachrichtennummer(messageNumber)
|
||||
Nachrichtennummer(dialogData.messageNumber)
|
||||
), Existenzstatus.Mandatory)
|
|
@ -4,18 +4,18 @@ import net.dankito.fints.messages.Existenzstatus
|
|||
import net.dankito.fints.messages.datenelemente.implementierte.*
|
||||
import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf
|
||||
import net.dankito.fints.messages.segmente.Segment
|
||||
import net.dankito.fints.model.DialogData
|
||||
|
||||
|
||||
open class Nachrichtenkopf(
|
||||
segmentNumber: Int,
|
||||
messageSize: Int,
|
||||
dialogId: String,
|
||||
messageNumber: Int
|
||||
dialogData: DialogData
|
||||
|
||||
) : Segment(listOf(
|
||||
Segmentkopf("HNHBK", 3, segmentNumber),
|
||||
Nachrichtengroesse(messageSize),
|
||||
HbciVersionDatenelement(HbciVersion.FinTs_3_0_0),
|
||||
DialogId(dialogId),
|
||||
Nachrichtennummer(messageNumber)
|
||||
DialogId(dialogData.dialogId),
|
||||
Nachrichtennummer(dialogData.messageNumber)
|
||||
), Existenzstatus.Mandatory)
|
|
@ -0,0 +1,13 @@
|
|||
package net.dankito.fints.model
|
||||
|
||||
|
||||
open class DialogData(
|
||||
var dialogId: String = "0",
|
||||
var messageNumber: Int = 1
|
||||
) {
|
||||
|
||||
companion object {
|
||||
val DialogInitDialogData = DialogData("0", 1)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue