Added SegmentNumberGenerator so that segment numbers don't have to be hard coded
This commit is contained in:
parent
b164737a47
commit
a6a7930c29
|
@ -2,7 +2,9 @@ package net.dankito.fints.messages
|
||||||
|
|
||||||
import net.dankito.fints.messages.datenelemente.implementierte.*
|
import net.dankito.fints.messages.datenelemente.implementierte.*
|
||||||
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.Segment
|
import net.dankito.fints.messages.segmente.Segment
|
||||||
|
import net.dankito.fints.messages.segmente.SegmentNumberGenerator
|
||||||
import net.dankito.fints.messages.segmente.implementierte.IdentifikationsSegment
|
import net.dankito.fints.messages.segmente.implementierte.IdentifikationsSegment
|
||||||
import net.dankito.fints.messages.segmente.implementierte.Nachrichtenabschluss
|
import net.dankito.fints.messages.segmente.implementierte.Nachrichtenabschluss
|
||||||
import net.dankito.fints.messages.segmente.implementierte.Nachrichtenkopf
|
import net.dankito.fints.messages.segmente.implementierte.Nachrichtenkopf
|
||||||
|
@ -13,7 +15,7 @@ import net.dankito.fints.messages.segmente.implementierte.Verarbeitungsvorbereit
|
||||||
* Takes the Segments of they payload, may signs and encrypts them, calculates message size,
|
* Takes the Segments of they payload, may signs and encrypts them, calculates message size,
|
||||||
* adds the message header and closing, and formats the whole message to string.
|
* adds the message header and closing, and formats the whole message to string.
|
||||||
*/
|
*/
|
||||||
open class MessageBuilder {
|
open class MessageBuilder(protected val generator: ISegmentNumberGenerator = SegmentNumberGenerator()) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val MessageHeaderLength = 30
|
const val MessageHeaderLength = 30
|
||||||
|
@ -36,6 +38,7 @@ open class MessageBuilder {
|
||||||
productName: String,
|
productName: String,
|
||||||
productVersion: String
|
productVersion: String
|
||||||
): String {
|
): String {
|
||||||
|
|
||||||
return createDialogInitMessage(bankCountryCode, bankCode, KundenID.Anonymous, KundensystemID.Anonymous,
|
return createDialogInitMessage(bankCountryCode, bankCode, KundenID.Anonymous, KundensystemID.Anonymous,
|
||||||
BPDVersion.VersionNotReceivedYet, UPDVersion.VersionNotReceivedYet, Dialogsprache.Default, productName, productVersion)
|
BPDVersion.VersionNotReceivedYet, UPDVersion.VersionNotReceivedYet, Dialogsprache.Default, productName, productVersion)
|
||||||
}
|
}
|
||||||
|
@ -51,9 +54,10 @@ open class MessageBuilder {
|
||||||
productName: String,
|
productName: String,
|
||||||
productVersion: String
|
productVersion: String
|
||||||
): String {
|
): String {
|
||||||
|
|
||||||
return createMessage(listOf(
|
return createMessage(listOf(
|
||||||
IdentifikationsSegment(2, bankCountryCode, bankCode, customerId, customerSystemId),
|
IdentifikationsSegment(generator.resetSegmentNumber(1), bankCountryCode, bankCode, customerId, customerSystemId),
|
||||||
Verarbeitungsvorbereitung(3, bpdVersion, updVersion, language, productName, productVersion)
|
Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bpdVersion, updVersion, language, productName, productVersion)
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,9 +69,9 @@ open class MessageBuilder {
|
||||||
val messageSize = payload.length + MessageHeaderLength + MessageClosingLength + AddedSeparatorsLength
|
val messageSize = payload.length + MessageHeaderLength + MessageClosingLength + AddedSeparatorsLength
|
||||||
val messageNumber = Nachrichtennummer.FirstMessageNumber
|
val messageNumber = Nachrichtennummer.FirstMessageNumber
|
||||||
|
|
||||||
val header = Nachrichtenkopf(1, messageSize, "0", messageNumber)
|
val header = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, messageSize, "0", messageNumber)
|
||||||
|
|
||||||
val closing = Nachrichtenabschluss(4, messageNumber)
|
val closing = Nachrichtenabschluss(generator.getNextSegmentNumber(), messageNumber)
|
||||||
|
|
||||||
return listOf(header.format(), payload, closing.format())
|
return listOf(header.format(), payload, closing.format())
|
||||||
.joinToString(Nachricht.SegmentSeparator, postfix = Nachricht.SegmentSeparator)
|
.joinToString(Nachricht.SegmentSeparator, postfix = Nachricht.SegmentSeparator)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package net.dankito.fints.messages.segmente
|
||||||
|
|
||||||
|
|
||||||
|
interface ISegmentNumberGenerator {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val FirstSegmentNumber = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun resetSegmentNumber(countNumberToSkipForHeader: Int): Int
|
||||||
|
|
||||||
|
fun getNextSegmentNumber(): Int
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package net.dankito.fints.messages.segmente
|
||||||
|
|
||||||
|
import net.dankito.fints.messages.segmente.ISegmentNumberGenerator.Companion.FirstSegmentNumber
|
||||||
|
|
||||||
|
|
||||||
|
open class SegmentNumberGenerator : ISegmentNumberGenerator {
|
||||||
|
|
||||||
|
protected var currentSegmentNumber = 0
|
||||||
|
|
||||||
|
|
||||||
|
override fun resetSegmentNumber(countNumbersToSkipForHeaders: Int): Int {
|
||||||
|
currentSegmentNumber = FirstSegmentNumber + countNumbersToSkipForHeaders
|
||||||
|
|
||||||
|
return currentSegmentNumber
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getNextSegmentNumber(): Int {
|
||||||
|
return ++currentSegmentNumber
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Current segment number = $currentSegmentNumber"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue