Implemented removing last empty data elements from output
This commit is contained in:
parent
733a262628
commit
267a7db8d8
|
@ -3,13 +3,36 @@ package net.dankito.fints.messages.datenelementgruppen
|
||||||
import net.dankito.fints.messages.Existenzstatus
|
import net.dankito.fints.messages.Existenzstatus
|
||||||
import net.dankito.fints.messages.Separators
|
import net.dankito.fints.messages.Separators
|
||||||
import net.dankito.fints.messages.datenelemente.DatenelementBase
|
import net.dankito.fints.messages.datenelemente.DatenelementBase
|
||||||
|
import java.util.regex.Pattern
|
||||||
|
|
||||||
|
|
||||||
abstract class Datenelementgruppe(val dataElements: List<DatenelementBase>, existenzstatus: Existenzstatus)
|
abstract class Datenelementgruppe(val dataElements: List<DatenelementBase>, existenzstatus: Existenzstatus)
|
||||||
: DatenelementBase(existenzstatus) {
|
: DatenelementBase(existenzstatus) {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val ReplaceEmptyDataElementsSeparatorsAtEndPattern =
|
||||||
|
Pattern.compile("${Separators.DataElementsSeparator}*\$")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun format(): String {
|
override fun format(): String {
|
||||||
return dataElements.joinToString(Separators.DataElementsSeparator) { it.format() }
|
val formattedDataElementGroup = dataElements.joinToString(Separators.DataElementsSeparator) { it.format() }
|
||||||
|
|
||||||
|
return cutEmptyDataElementGroupsAtEndOfSegment(formattedDataElementGroup)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auslassen von Datenelementen durch Abschneiden
|
||||||
|
* Ist für DE, die am Ende eines Segments stehen, kein Inhalt vorhanden, können sie ausgelassen werden.
|
||||||
|
* In diesem Fall wird das Segmentende-Zeichen unmittelbar nach dem letzten mit Inhalt belegten DE angegeben. (...)
|
||||||
|
*
|
||||||
|
* Auslassen von Gruppendatenelementen
|
||||||
|
* Es gelten analog die Ausführungen zur Auslassung von Datenelementen.
|
||||||
|
*/
|
||||||
|
protected open fun cutEmptyDataElementGroupsAtEndOfSegment(formattedDataElementGroup: String): String {
|
||||||
|
val matcher = ReplaceEmptyDataElementsSeparatorsAtEndPattern.matcher(formattedDataElementGroup)
|
||||||
|
|
||||||
|
return matcher.replaceFirst("")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
package net.dankito.fints.messages.datenelementgruppen
|
||||||
|
|
||||||
|
import net.dankito.fints.messages.Separators
|
||||||
|
import net.dankito.fints.messages.datenelementgruppen.implementierte.signatur.BenutzerdefinierteSignatur
|
||||||
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
|
||||||
|
class DatenelementgruppeTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun format_LastDataElementIsSet_GetsWrittenToOutput() {
|
||||||
|
|
||||||
|
// given
|
||||||
|
val pin = "12345"
|
||||||
|
val tan = "654321"
|
||||||
|
val dataElementGroup = BenutzerdefinierteSignatur(pin, tan)
|
||||||
|
|
||||||
|
// when
|
||||||
|
val result = dataElementGroup.format()
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertThat(result).isEqualTo(pin + Separators.DataElementsSeparator + tan) // ":" does not get written to output
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun format_LastDataElementIsEmpty_EmptyLastDataElementDoesNotGetWrittenToOutput() {
|
||||||
|
|
||||||
|
// given
|
||||||
|
val pin = "12345"
|
||||||
|
val tan = null
|
||||||
|
val dataElementGroup = BenutzerdefinierteSignatur(pin, tan)
|
||||||
|
|
||||||
|
// when
|
||||||
|
val result = dataElementGroup.format()
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertThat(result).isEqualTo(pin) // ":" does not get written to output
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun format_AllDataElementsAreEmpty_NothingGetsWrittenToOutput() {
|
||||||
|
|
||||||
|
// given
|
||||||
|
val pin = ""
|
||||||
|
val tan = null
|
||||||
|
val dataElementGroup = BenutzerdefinierteSignatur(pin, tan)
|
||||||
|
|
||||||
|
// when
|
||||||
|
val result = dataElementGroup.format()
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertThat(result).isEmpty() // ":" does not get written to output
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue