From 6961f46ee964e6f9a5800cd50ae2347bc0e91be6 Mon Sep 17 00:00:00 2001 From: dankl Date: Sat, 5 Oct 2019 18:56:28 +0200 Subject: [PATCH] Extracted MessageSegmentId and ISegmentId --- .../implementierte/Segmentkopf.kt | 4 ++-- .../fints/messages/segmente/SegmentId.kt | 14 ++------------ .../fints/messages/segmente/id/ISegmentId.kt | 8 ++++++++ .../messages/segmente/id/MessageSegmentId.kt | 18 ++++++++++++++++++ .../implementierte/Nachrichtenabschluss.kt | 4 ++-- .../implementierte/Nachrichtenkopf.kt | 4 ++-- .../implementierte/Signaturabschluss.kt | 4 ++-- .../segmente/implementierte/Signaturkopf.kt | 4 ++-- .../implementierte/VerschluesselteDaten.kt | 4 ++-- .../implementierte/Verschluesselungskopf.kt | 4 ++-- .../ZweiSchrittTanEinreichung.kt | 19 ++++++++++--------- 11 files changed, 52 insertions(+), 35 deletions(-) create mode 100644 fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/ISegmentId.kt create mode 100644 fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/MessageSegmentId.kt diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/Segmentkopf.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/Segmentkopf.kt index 9336949c..c33d741f 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/Segmentkopf.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/Segmentkopf.kt @@ -5,7 +5,7 @@ import net.dankito.fints.messages.datenelemente.implementierte.Segmentkennung import net.dankito.fints.messages.datenelemente.implementierte.Segmentnummer import net.dankito.fints.messages.datenelemente.implementierte.Segmentversion import net.dankito.fints.messages.datenelementgruppen.Datenelementgruppe -import net.dankito.fints.messages.segmente.SegmentId +import net.dankito.fints.messages.segmente.id.ISegmentId open class Segmentkopf @JvmOverloads constructor( @@ -20,6 +20,6 @@ open class Segmentkopf @JvmOverloads constructor( Segmentversion(segmentVersion) // TODO: how to conditionally add Bezugsegment? ), Existenzstatus.Mandatory) { - constructor(id: SegmentId, segmentVersion: Int, segmentNumber: Int) : this(id.id, segmentVersion, segmentNumber) + constructor(id: ISegmentId, segmentVersion: Int, segmentNumber: Int) : this(id.id, segmentVersion, segmentNumber) } \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/SegmentId.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/SegmentId.kt index 5a9d1838..368d4c25 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/SegmentId.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/SegmentId.kt @@ -1,19 +1,9 @@ package net.dankito.fints.messages.segmente +import net.dankito.fints.messages.segmente.id.ISegmentId -enum class SegmentId(val id: String) { - MessageHeader("HNHBK"), - - MessageEnding("HNHBS"), - - EncryptionHeader("HNVSK"), - - EncryptionData("HNVSD"), - - SignatureHeader("HNSHK"), - - SignatureEnding("HNSHA"), +enum class SegmentId(override val id: String) : ISegmentId { DialogEnd("HKEND"), diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/ISegmentId.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/ISegmentId.kt new file mode 100644 index 00000000..278470e4 --- /dev/null +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/ISegmentId.kt @@ -0,0 +1,8 @@ +package net.dankito.fints.messages.segmente.id + + +interface ISegmentId { + + val id: String + +} \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/MessageSegmentId.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/MessageSegmentId.kt new file mode 100644 index 00000000..a6e69a57 --- /dev/null +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/id/MessageSegmentId.kt @@ -0,0 +1,18 @@ +package net.dankito.fints.messages.segmente.id + + +enum class MessageSegmentId(override val id: String) : ISegmentId { + + MessageHeader("HNHBK"), + + MessageEnding("HNHBS"), + + EncryptionHeader("HNVSK"), + + EncryptionData("HNVSD"), + + SignatureHeader("HNSHK"), + + SignatureEnding("HNSHA") + +} \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt index b448535a..1e6f2650 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt @@ -4,7 +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.messages.segmente.SegmentId +import net.dankito.fints.messages.segmente.id.MessageSegmentId import net.dankito.fints.model.DialogData @@ -16,6 +16,6 @@ open class Nachrichtenabschluss( dialogData: DialogData ) : Segment(listOf( - Segmentkopf(SegmentId.MessageEnding, 1, segmentNumber), + Segmentkopf(MessageSegmentId.MessageEnding, 1, segmentNumber), Nachrichtennummer(dialogData.messageNumber) ), Existenzstatus.Mandatory) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt index 43caf0a6..fb5ec10f 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt @@ -3,8 +3,8 @@ package net.dankito.fints.messages.segmente.implementierte 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.id.MessageSegmentId import net.dankito.fints.messages.segmente.Segment -import net.dankito.fints.messages.segmente.SegmentId import net.dankito.fints.model.DialogData @@ -14,7 +14,7 @@ open class Nachrichtenkopf( dialogData: DialogData ) : Segment(listOf( - Segmentkopf(SegmentId.MessageHeader, 3, segmentNumber), + Segmentkopf(MessageSegmentId.MessageHeader, 3, segmentNumber), Nachrichtengroesse(messageSize), HbciVersionDatenelement(HbciVersion.FinTs_3_0_0), DialogId(dialogData.dialogId), diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt index c4d42966..20ba3b40 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt @@ -6,7 +6,7 @@ import net.dankito.fints.messages.datenelemente.implementierte.signatur.Sicherhe import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf import net.dankito.fints.messages.datenelementgruppen.implementierte.signatur.BenutzerdefinierteSignatur import net.dankito.fints.messages.segmente.Segment -import net.dankito.fints.messages.segmente.SegmentId +import net.dankito.fints.messages.segmente.id.MessageSegmentId /** @@ -19,7 +19,7 @@ open class Signaturabschluss( pinOrTan: String ) : Segment(listOf( - Segmentkopf(SegmentId.SignatureEnding, 2, segmentNumber), + Segmentkopf(MessageSegmentId.SignatureEnding, 2, segmentNumber), Sicherheitskontrollreferenz(securityControlReference), // has to be the same as in Signaturkopf NotAllowedDatenelement(), // only used for HBCI, not allowed for PIN/TAN BenutzerdefinierteSignatur(pinOrTan) diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturkopf.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturkopf.kt index a34f0e16..5c17b8f4 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturkopf.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturkopf.kt @@ -5,7 +5,7 @@ import net.dankito.fints.messages.datenelemente.implementierte.signatur.* import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf import net.dankito.fints.messages.datenelementgruppen.implementierte.signatur.* import net.dankito.fints.messages.segmente.Segment -import net.dankito.fints.messages.segmente.SegmentId +import net.dankito.fints.messages.segmente.id.MessageSegmentId import net.dankito.fints.model.BankData import net.dankito.fints.model.CustomerData @@ -36,7 +36,7 @@ open class Signaturkopf( keyVersion: Int ) : Segment(listOf( - Segmentkopf(SegmentId.SignatureHeader, 4, segmentNumber), // allowed + Segmentkopf(MessageSegmentId.SignatureHeader, 4, segmentNumber), // allowed Sicherheitsprofil(customer.securityMethod!!, customer.version!!), // allowed: method: RAH, PIN; SicherheitsfunktionKodiert(customer.selectedTanProcedure?.securityFunction!!), // allowed: 1, 2 Sicherheitskontrollreferenz(securityControlReference), // allowed: <>0 diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/VerschluesselteDaten.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/VerschluesselteDaten.kt index 19e389c2..5e7bd95f 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/VerschluesselteDaten.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/VerschluesselteDaten.kt @@ -4,7 +4,7 @@ import net.dankito.fints.messages.Existenzstatus import net.dankito.fints.messages.datenelemente.implementierte.encryption.PinTanVerschluesselteDatenDatenelement import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf import net.dankito.fints.messages.segmente.Segment -import net.dankito.fints.messages.segmente.SegmentId +import net.dankito.fints.messages.segmente.id.MessageSegmentId /** @@ -14,6 +14,6 @@ open class VerschluesselteDaten( payload: String ) : Segment(listOf( - Segmentkopf(SegmentId.EncryptionData, 1, 999), + Segmentkopf(MessageSegmentId.EncryptionData, 1, 999), PinTanVerschluesselteDatenDatenelement(payload) ), Existenzstatus.Mandatory) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Verschluesselungskopf.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Verschluesselungskopf.kt index 62f07427..dcd90c59 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Verschluesselungskopf.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Verschluesselungskopf.kt @@ -12,7 +12,7 @@ import net.dankito.fints.messages.datenelementgruppen.implementierte.signatur.Si import net.dankito.fints.messages.datenelementgruppen.implementierte.signatur.SicherheitsidentifikationDetails import net.dankito.fints.messages.datenelementgruppen.implementierte.signatur.Sicherheitsprofil import net.dankito.fints.messages.segmente.Segment -import net.dankito.fints.messages.segmente.SegmentId +import net.dankito.fints.messages.segmente.id.MessageSegmentId import net.dankito.fints.model.BankData import net.dankito.fints.model.CustomerData @@ -45,7 +45,7 @@ open class Verschluesselungskopf( algorithm: Komprimierungsfunktion ) : Segment(listOf( - Segmentkopf(SegmentId.EncryptionHeader, 3, 998), + Segmentkopf(MessageSegmentId.EncryptionHeader, 3, 998), Sicherheitsprofil(customer.securityMethod!!, customer.version!!), SicherheitsfunktionKodiert(Sicherheitsfunktion.Klartext), // allowed: 4 RolleDesSicherheitslieferantenKodiert(), // allowed: 1, 4 diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/ZweiSchrittTanEinreichung.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/ZweiSchrittTanEinreichung.kt index 90ef0bc8..3eb60b64 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/ZweiSchrittTanEinreichung.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/ZweiSchrittTanEinreichung.kt @@ -1,8 +1,9 @@ package net.dankito.fints.messages.segmente.implementierte import net.dankito.fints.messages.Existenzstatus -import net.dankito.fints.messages.datenelemente.implementierte.NotAllowedDatenelement -import net.dankito.fints.messages.datenelemente.implementierte.tan.* +import net.dankito.fints.messages.datenelemente.implementierte.tan.Auftragsreferenz +import net.dankito.fints.messages.datenelemente.implementierte.tan.TANProzessDatenelement +import net.dankito.fints.messages.datenelemente.implementierte.tan.TanProcess import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf import net.dankito.fints.messages.segmente.Segment import net.dankito.fints.messages.segmente.SegmentId @@ -20,11 +21,11 @@ open class ZweiSchrittTanEinreichung( ) : Segment(listOf( Segmentkopf(SegmentId.Tan, 6, segmentNumber), - TANProzessDatenelement(process), -// AuftragsHashwert(), // M: bei AuftragsHashwertverfahren<>0 und TAN-Prozess=1. N: sonst - Auftragsreferenz(jobReference, Existenzstatus.Mandatory), // M: bei TAN-Prozess=2, 3, 4. O: bei TAN-Prozess=1 - ChallengeVersion3(challenge, Existenzstatus.Mandatory), // M: bei TAN-Prozess=1, 3, 4. O: bei TAN-Prozess=2 - ChallengeHHD_UC(challgendHHD_UC, Existenzstatus.Optional), - NotAllowedDatenelement(), // GueltigkeitsdatumUndUhrzeitFuerChallenge // TODO: how to not write an element if it's optional and its paramters (date and time) are not set? - BezeichnungDesTANMediums(tanMediaIdentifier ?: "", Existenzstatus.Optional)// M: bei TAN-Prozess=1, 3, 4 und „Anzahl unterstützter aktiver TAN-Medien“ nicht vorhanden. O: sonst + TANProzessDatenelement(process), + // AuftragsHashwert(), // M: bei AuftragsHashwertverfahren<>0 und TAN-Prozess=1. N: sonst + Auftragsreferenz(jobReference, Existenzstatus.Mandatory) // M: bei TAN-Prozess=2, 3, 4. O: bei TAN-Prozess=1 + // ChallengeVersion3(challenge, Existenzstatus.Mandatory), // M: bei TAN-Prozess=1, 3, 4. O: bei TAN-Prozess=2 + // ChallengeHHD_UC(challgendHHD_UC, Existenzstatus.Optional), + // NotAllowedDatenelement(), // GueltigkeitsdatumUndUhrzeitFuerChallenge // TODO: how to not write an element if it's optional and its paramters (date and time) are not set? + // BezeichnungDesTANMediums(tanMediaIdentifier ?: "", Existenzstatus.Optional)// M: bei TAN-Prozess=1, 3, 4 und „Anzahl unterstützter aktiver TAN-Medien“ nicht vorhanden. O: sonst ), Existenzstatus.Mandatory) \ No newline at end of file