ChainHandler.kt
- package com.hexagontk.handlers
- class ChainHandler<T : Any>(
- val handlers: Array<Handler<T>>,
- override val predicate: (Context<T>) -> Boolean = { true },
- ) : Handler<T> {
- constructor(
- handlers: List<Handler<T>>,
- filter: (Context<T>) -> Boolean = { true },
- ) : this(handlers.toTypedArray(), filter)
- constructor(
- filter: (Context<T>) -> Boolean,
- vararg handlers: Handler<T>,
- ) : this(handlers as Array<Handler<T>>, filter)
- constructor(vararg handlers: Handler<T>) : this(handlers as Array<Handler<T>>, { true })
- override fun process(context: Context<T>): Context<T> {
- val nextHandlers = context.nextHandlers
- val nextHandler = context.nextHandler
- val nestedContext = context.with(nextHandlers = handlers, nextHandler = 0)
- val nestedResult = nestedContext.next()
- val followUpContext = nestedResult.with(
- predicate = predicate,
- nextHandlers = nextHandlers,
- nextHandler = nextHandler
- )
- return followUpContext.next()
- }
- }