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
|
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.datenelemente.implementierte.tan.TanProcess
|
||||||
import net.dankito.fints.messages.nachrichten.Nachricht
|
import net.dankito.fints.messages.nachrichten.Nachricht
|
||||||
import net.dankito.fints.messages.segmente.ISegmentNumberGenerator
|
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.messages.segmente.implementierte.*
|
||||||
import net.dankito.fints.model.BankData
|
import net.dankito.fints.model.BankData
|
||||||
import net.dankito.fints.model.CustomerData
|
import net.dankito.fints.model.CustomerData
|
||||||
|
import net.dankito.fints.model.DialogData
|
||||||
import net.dankito.fints.model.ProductData
|
import net.dankito.fints.model.ProductData
|
||||||
import net.dankito.fints.util.FinTsUtils
|
import net.dankito.fints.util.FinTsUtils
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
|
||||||
|
|
||||||
val customer = CustomerData.Anonymous
|
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),
|
IdentifikationsSegment(generator.resetSegmentNumber(1), bank, customer),
|
||||||
Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bank, customer, product)
|
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 {
|
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),
|
IdentifikationsSegment(generator.resetSegmentNumber(2), bank, customer),
|
||||||
Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bank, customer, product),
|
Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bank, customer, product),
|
||||||
ZweiSchrittTanEinreichung(generator.getNextSegmentNumber(), TanProcess.TanProcess4, "HKIDN")
|
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,
|
open fun createMessage(signMessage: Boolean, encryptMessage: Boolean, bank: BankData, customer: CustomerData,
|
||||||
payloadSegments: List<Segment>): String {
|
dialogData: DialogData, payloadSegments: List<Segment>): String {
|
||||||
|
|
||||||
var payload = payloadSegments
|
var payload = payloadSegments
|
||||||
val date = utils.formatDateTodayAsInt()
|
val date = utils.formatDateTodayAsInt()
|
||||||
|
@ -77,11 +77,10 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
|
||||||
val formattedPayload = formatPayload(payload)
|
val formattedPayload = formatPayload(payload)
|
||||||
|
|
||||||
val messageSize = formattedPayload.length + MessageHeaderLength + MessageClosingLength + AddedSeparatorsLength
|
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())
|
return listOf(header.format(), formattedPayload, closing.format())
|
||||||
.joinToString(Nachricht.SegmentSeparator, postfix = Nachricht.SegmentSeparator)
|
.joinToString(Nachricht.SegmentSeparator, postfix = Nachricht.SegmentSeparator)
|
||||||
|
|
|
@ -4,4 +4,12 @@ import net.dankito.fints.messages.Existenzstatus
|
||||||
import net.dankito.fints.messages.datenelemente.abgeleiteteformate.Identifikation
|
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)
|
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.datenelemente.implementierte.Nachrichtennummer
|
||||||
import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf
|
import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf
|
||||||
import net.dankito.fints.messages.segmente.Segment
|
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(
|
open class Nachrichtenabschluss(
|
||||||
segmentNumber: Int,
|
segmentNumber: Int,
|
||||||
messageNumber: Int
|
dialogData: DialogData
|
||||||
|
|
||||||
) : Segment(listOf(
|
) : Segment(listOf(
|
||||||
Segmentkopf("HNHBS", 1, segmentNumber),
|
Segmentkopf("HNHBS", 1, segmentNumber),
|
||||||
Nachrichtennummer(messageNumber)
|
Nachrichtennummer(dialogData.messageNumber)
|
||||||
), Existenzstatus.Mandatory)
|
), Existenzstatus.Mandatory)
|
|
@ -4,18 +4,18 @@ import net.dankito.fints.messages.Existenzstatus
|
||||||
import net.dankito.fints.messages.datenelemente.implementierte.*
|
import net.dankito.fints.messages.datenelemente.implementierte.*
|
||||||
import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf
|
import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf
|
||||||
import net.dankito.fints.messages.segmente.Segment
|
import net.dankito.fints.messages.segmente.Segment
|
||||||
|
import net.dankito.fints.model.DialogData
|
||||||
|
|
||||||
|
|
||||||
open class Nachrichtenkopf(
|
open class Nachrichtenkopf(
|
||||||
segmentNumber: Int,
|
segmentNumber: Int,
|
||||||
messageSize: Int,
|
messageSize: Int,
|
||||||
dialogId: String,
|
dialogData: DialogData
|
||||||
messageNumber: Int
|
|
||||||
|
|
||||||
) : Segment(listOf(
|
) : Segment(listOf(
|
||||||
Segmentkopf("HNHBK", 3, segmentNumber),
|
Segmentkopf("HNHBK", 3, segmentNumber),
|
||||||
Nachrichtengroesse(messageSize),
|
Nachrichtengroesse(messageSize),
|
||||||
HbciVersionDatenelement(HbciVersion.FinTs_3_0_0),
|
HbciVersionDatenelement(HbciVersion.FinTs_3_0_0),
|
||||||
DialogId(dialogId),
|
DialogId(dialogData.dialogId),
|
||||||
Nachrichtennummer(messageNumber)
|
Nachrichtennummer(dialogData.messageNumber)
|
||||||
), Existenzstatus.Mandatory)
|
), 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