com.netflix.spinnaker.keel.extensions.DefaultExtensionRegistry.kt Maven / Gradle / Ivy
package com.netflix.spinnaker.keel.extensions
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.jsontype.NamedType
import com.netflix.spinnaker.keel.api.support.ExtensionRegistry
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
@Component
class DefaultExtensionRegistry(
private val mappers: List
) : ExtensionRegistry {
private val baseToExtensionTypes = mutableMapOf, MutableMap>>()
override fun register(
baseType: Class ,
extensionType: Class,
discriminator: String
) {
baseToExtensionTypes
.getOrPut(baseType, ::mutableMapOf)
.also { it[discriminator] = extensionType }
log.info("Registering extension \"$discriminator\" for ${baseType.simpleName} using ${extensionType.simpleName}")
mappers.forEach {
it.registerSubtypes(NamedType(extensionType, discriminator))
}
}
@Suppress("UNCHECKED_CAST")
override fun extensionsOf(baseType: Class ): Map> =
baseToExtensionTypes[baseType] as Map>? ?: emptyMap()
override fun baseTypes(): Collection> = baseToExtensionTypes.keys
private val log by lazy { LoggerFactory.getLogger(javaClass) }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy