All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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