Moved ProductData to JobContext and implemented that startNewDialog() create DialogContext
This commit is contained in:
parent
0a9b31b393
commit
f3552248dc
|
@ -18,7 +18,8 @@ import kotlin.jvm.JvmOverloads
|
|||
*/
|
||||
open class FinTsClient @JvmOverloads constructor(
|
||||
open var callback: FinTsClientCallback,
|
||||
protected open val jobExecutor: FinTsJobExecutor = FinTsJobExecutor()
|
||||
protected open val jobExecutor: FinTsJobExecutor = FinTsJobExecutor(),
|
||||
protected open val product: ProductData = ProductData("15E53C26816138699C7B6A3E8", "1.0.0") // TODO: get version dynamically
|
||||
) {
|
||||
|
||||
companion object {
|
||||
|
@ -50,7 +51,7 @@ open class FinTsClient @JvmOverloads constructor(
|
|||
* On success [bank] parameter is updated afterwards.
|
||||
*/
|
||||
open fun getAnonymousBankInfo(bank: BankData, callback: (FinTsClientResponse) -> Unit) {
|
||||
jobExecutor.getAnonymousBankInfo(JobContext(JobContextType.AnonymousBankInfo, this.callback, bank)) { response ->
|
||||
jobExecutor.getAnonymousBankInfo(JobContext(JobContextType.AnonymousBankInfo, this.callback, product, bank)) { response ->
|
||||
callback(FinTsClientResponse(response))
|
||||
}
|
||||
}
|
||||
|
@ -58,7 +59,7 @@ open class FinTsClient @JvmOverloads constructor(
|
|||
|
||||
open fun addAccountAsync(parameter: AddAccountParameter, callback: (AddAccountResponse) -> Unit) {
|
||||
val bank = parameter.bank
|
||||
val context = JobContext(JobContextType.AddAccount, this.callback, bank)
|
||||
val context = JobContext(JobContextType.AddAccount, this.callback, product, bank)
|
||||
|
||||
/* First dialog: Get user's basic data like BPD, customer system ID and her TAN methods */
|
||||
|
||||
|
@ -155,7 +156,7 @@ open class FinTsClient @JvmOverloads constructor(
|
|||
|
||||
open fun getTransactionsAsync(parameter: GetTransactionsParameter, bank: BankData, callback: (GetTransactionsResponse) -> Unit) {
|
||||
|
||||
val context = JobContext(JobContextType.GetTransactions, this.callback, bank, parameter.account)
|
||||
val context = JobContext(JobContextType.GetTransactions, this.callback, product, bank, parameter.account)
|
||||
|
||||
jobExecutor.getTransactionsAsync(context, parameter, callback)
|
||||
}
|
||||
|
@ -164,14 +165,14 @@ open class FinTsClient @JvmOverloads constructor(
|
|||
open fun getTanMediaList(bank: BankData, tanMediaKind: TanMedienArtVersion = TanMedienArtVersion.Alle,
|
||||
tanMediumClass: TanMediumKlasse = TanMediumKlasse.AlleMedien, callback: (GetTanMediaListResponse) -> Unit) {
|
||||
|
||||
val context = JobContext(JobContextType.GetTanMedia, this.callback, bank)
|
||||
val context = JobContext(JobContextType.GetTanMedia, this.callback, product, bank)
|
||||
|
||||
jobExecutor.getTanMediaList(context, tanMediaKind, tanMediumClass, callback)
|
||||
}
|
||||
|
||||
|
||||
open fun changeTanMedium(newActiveTanMedium: TanGeneratorTanMedium, bank: BankData, callback: (FinTsClientResponse) -> Unit) {
|
||||
val context = JobContext(JobContextType.ChangeTanMedium, this.callback, bank)
|
||||
val context = JobContext(JobContextType.ChangeTanMedium, this.callback, product, bank)
|
||||
|
||||
jobExecutor.changeTanMedium(context, newActiveTanMedium) { response ->
|
||||
callback(FinTsClientResponse(response))
|
||||
|
@ -180,7 +181,7 @@ open class FinTsClient @JvmOverloads constructor(
|
|||
|
||||
|
||||
open fun doBankTransferAsync(bankTransferData: BankTransferData, bank: BankData, account: AccountData, callback: (FinTsClientResponse) -> Unit) {
|
||||
val context = JobContext(JobContextType.TransferMoney, this.callback, bank, account)
|
||||
val context = JobContext(JobContextType.TransferMoney, this.callback, product, bank, account)
|
||||
|
||||
jobExecutor.doBankTransferAsync(context, bankTransferData, callback)
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ open class FinTsClientForCustomer(
|
|||
: this(bank, callback, RequestExecutor(MessageBuilder(), webClient, base64Service))
|
||||
|
||||
|
||||
protected val client = FinTsClient(callback, FinTsJobExecutor(requestExecutor, messageBuilder, mt940Parser, modelMapper, tanMethodSelector, product))
|
||||
protected val client = FinTsClient(callback, FinTsJobExecutor(requestExecutor, messageBuilder, mt940Parser, modelMapper, tanMethodSelector), product)
|
||||
|
||||
|
||||
open val messageLogWithoutSensitiveData: List<MessageLogEntry>
|
||||
|
|
|
@ -36,8 +36,7 @@ open class FinTsJobExecutor(
|
|||
protected open val messageBuilder: MessageBuilder = MessageBuilder(),
|
||||
protected open val mt940Parser: IAccountTransactionsParser = Mt940AccountTransactionsParser(),
|
||||
protected open val modelMapper: ModelMapper = ModelMapper(messageBuilder),
|
||||
protected open val tanMethodSelector: TanMethodSelector = TanMethodSelector(),
|
||||
protected open val product: ProductData = ProductData("15E53C26816138699C7B6A3E8", "1.0.0") // TODO: get version dynamically
|
||||
protected open val tanMethodSelector: TanMethodSelector = TanMethodSelector()
|
||||
) {
|
||||
|
||||
companion object {
|
||||
|
@ -55,8 +54,7 @@ open class FinTsJobExecutor(
|
|||
|
||||
|
||||
open fun getAnonymousBankInfo(context: JobContext, callback: (BankResponse) -> Unit) {
|
||||
val dialogContext = DialogContext(context.bank, product)
|
||||
context.startNewDialog(dialogContext)
|
||||
context.startNewDialog()
|
||||
|
||||
val message = messageBuilder.createAnonymousDialogInitMessage(context)
|
||||
|
||||
|
@ -106,8 +104,7 @@ open class FinTsJobExecutor(
|
|||
bank.resetSelectedTanMethod()
|
||||
|
||||
// this is the only case where Einschritt-TAN-Verfahren is accepted: to get user's TAN methods
|
||||
val dialogContext = DialogContext(bank, product, closeDialog, versionOfSecurityMethod = VersionDesSicherheitsverfahrens.Version_1)
|
||||
context.startNewDialog(dialogContext)
|
||||
context.startNewDialog(closeDialog, versionOfSecurityMethod = VersionDesSicherheitsverfahrens.Version_1)
|
||||
|
||||
val message = messageBuilder.createInitDialogMessage(context)
|
||||
|
||||
|
@ -166,8 +163,7 @@ open class FinTsJobExecutor(
|
|||
|
||||
getUsersTanMethod(context) { didSelectTanMethod ->
|
||||
if (didSelectTanMethod) {
|
||||
val dialogContext = DialogContext(bank, product)
|
||||
context.startNewDialog(dialogContext)
|
||||
context.startNewDialog()
|
||||
|
||||
initDialogWithStrongCustomerAuthenticationAfterSuccessfulPreconditionChecks(context) { initDialogResponse ->
|
||||
closeDialog(context)
|
||||
|
@ -185,8 +181,7 @@ open class FinTsJobExecutor(
|
|||
|
||||
open fun getAccounts(context: JobContext, callback: (BankResponse) -> Unit) {
|
||||
|
||||
val dialogContext = DialogContext(context.bank, product, false)
|
||||
context.startNewDialog(dialogContext)
|
||||
context.startNewDialog(false)
|
||||
|
||||
initDialogWithStrongCustomerAuthenticationAfterSuccessfulPreconditionChecks(context) { response ->
|
||||
closeDialog(context)
|
||||
|
@ -198,8 +193,7 @@ open class FinTsJobExecutor(
|
|||
|
||||
open fun getTransactionsAsync(context: JobContext, parameter: GetTransactionsParameter, callback: (GetTransactionsResponse) -> Unit) {
|
||||
|
||||
val dialogContext = DialogContext(context.bank, product)
|
||||
context.startNewDialog(dialogContext)
|
||||
val dialogContext = context.startNewDialog()
|
||||
|
||||
initDialogWithStrongCustomerAuthentication(context) { initDialogResponse ->
|
||||
|
||||
|
@ -300,8 +294,7 @@ open class FinTsJobExecutor(
|
|||
*/
|
||||
protected open fun synchronizeCustomerSystemId(context: JobContext, callback: (FinTsClientResponse) -> Unit) {
|
||||
|
||||
val dialogContext = DialogContext(context.bank, product)
|
||||
context.startNewDialog(dialogContext)
|
||||
context.startNewDialog()
|
||||
|
||||
val message = messageBuilder.createSynchronizeCustomerSystemIdMessage(context)
|
||||
|
||||
|
@ -522,9 +515,7 @@ open class FinTsJobExecutor(
|
|||
protected open fun resendMessageInNewDialog(context: JobContext, lastCreatedMessage: MessageBuilderResult?, callback: (BankResponse) -> Unit) {
|
||||
|
||||
if (lastCreatedMessage != null) { // do not use previousDialogContext.currentMessage as this may is previous dialog's dialog close message
|
||||
val previousDialog = context.dialog
|
||||
val newDialogContext = DialogContext(context.bank, previousDialog.product, chunkedResponseHandler = previousDialog.chunkedResponseHandler)
|
||||
context.startNewDialog(newDialogContext)
|
||||
context.startNewDialog(chunkedResponseHandler = context.dialog.chunkedResponseHandler)
|
||||
|
||||
initDialogWithStrongCustomerAuthentication(context) { initDialogResponse ->
|
||||
if (initDialogResponse.successful == false) {
|
||||
|
@ -551,8 +542,7 @@ open class FinTsJobExecutor(
|
|||
protected open fun sendMessageAndHandleResponse(context: JobContext, segmentForNonStrongCustomerAuthenticationTwoStepTanProcess: CustomerSegmentId? = null,
|
||||
closeDialog: Boolean = true, createMessage: () -> MessageBuilderResult, callback: (BankResponse) -> Unit) {
|
||||
|
||||
val dialogContext = DialogContext(context.bank, product, closeDialog)
|
||||
context.startNewDialog(dialogContext)
|
||||
context.startNewDialog(closeDialog)
|
||||
|
||||
if (segmentForNonStrongCustomerAuthenticationTwoStepTanProcess == null) {
|
||||
initDialogWithStrongCustomerAuthentication(context) { initDialogResponse ->
|
||||
|
|
|
@ -1,24 +1,43 @@
|
|||
package net.dankito.banking.fints.model
|
||||
|
||||
import net.dankito.banking.fints.callback.FinTsClientCallback
|
||||
import net.dankito.banking.fints.messages.datenelemente.implementierte.signatur.VersionDesSicherheitsverfahrens
|
||||
import net.dankito.banking.fints.response.BankResponse
|
||||
|
||||
|
||||
class JobContext(
|
||||
val type: JobContextType,
|
||||
val callback: FinTsClientCallback,
|
||||
val bank: BankData,
|
||||
open class JobContext(
|
||||
open val type: JobContextType,
|
||||
open val callback: FinTsClientCallback,
|
||||
open val product: ProductData,
|
||||
open val bank: BankData,
|
||||
/**
|
||||
* Only set if the current context is for a specific account (like get account's transactions).
|
||||
*/
|
||||
val account: AccountData? = null
|
||||
open val account: AccountData? = null
|
||||
) {
|
||||
|
||||
|
||||
lateinit var dialog: DialogContext
|
||||
protected open val _dialogs = mutableListOf<DialogContext>()
|
||||
|
||||
|
||||
fun startNewDialog(dialog: DialogContext) {
|
||||
this.dialog = dialog
|
||||
open var dialog: DialogContext = DialogContext(bank, product) // create null value so that variable is not null
|
||||
protected set
|
||||
|
||||
open val dialogs: List<DialogContext>
|
||||
get() = ArrayList(_dialogs) // create a copy
|
||||
|
||||
|
||||
fun startNewDialog(closeDialog: Boolean = true, dialogId: String = DialogContext.InitialDialogId,
|
||||
versionOfSecurityMethod: VersionDesSicherheitsverfahrens = VersionDesSicherheitsverfahrens.Version_2,
|
||||
chunkedResponseHandler: ((BankResponse) -> Unit)? = null) : DialogContext {
|
||||
val newDialogContext = DialogContext(bank, product, closeDialog, dialogId = dialogId,
|
||||
versionOfSecurityMethod = versionOfSecurityMethod, chunkedResponseHandler = chunkedResponseHandler)
|
||||
|
||||
this.dialog = newDialogContext
|
||||
|
||||
this._dialogs.add(newDialogContext)
|
||||
|
||||
return newDialogContext
|
||||
}
|
||||
|
||||
}
|
|
@ -63,10 +63,8 @@ abstract class FinTsTestBase {
|
|||
|
||||
|
||||
protected open fun createContext(dialogId: String = DialogContext.InitialDialogId): JobContext {
|
||||
val dialogContext = DialogContext(Bank, Product, dialogId = dialogId)
|
||||
|
||||
val context = JobContext(JobContextType.AnonymousBankInfo, SimpleFinTsClientCallback(), Bank)
|
||||
context.startNewDialog(dialogContext)
|
||||
val context = JobContext(JobContextType.AnonymousBankInfo, SimpleFinTsClientCallback(), Product, Bank)
|
||||
context.startNewDialog(dialogId = dialogId)
|
||||
|
||||
return context
|
||||
}
|
||||
|
|
|
@ -127,9 +127,8 @@ class BanksFinTsDetailsRetriever {
|
|||
|
||||
|
||||
private fun getAnonymousBankInfo(bank: BankData): BankResponse {
|
||||
val dialogContext = DialogContext(bank, product)
|
||||
val context = JobContext(JobContextType.AnonymousBankInfo, SimpleFinTsClientCallback(), bank)
|
||||
context.startNewDialog(dialogContext)
|
||||
val context = JobContext(JobContextType.AnonymousBankInfo, SimpleFinTsClientCallback(), product, bank)
|
||||
context.startNewDialog()
|
||||
|
||||
val requestBody = messageBuilder.createAnonymousDialogInitMessage(context)
|
||||
|
||||
|
|
Loading…
Reference in New Issue