using just Typesafe Config with the extensions fro...
# announcements
a
using just Typesafe Config with the extensions from Klutter looks like:
Copy code
public class ServerConfig(private val log: Logger, val loader: ServerConfigLoader) {
    private val configured = loader.resolvedConfig.getConfig(SOLR_UNDERTOW_CONFIG_PREFIX)!!

    val httpClusterPort = configured.value(OUR_PROP_HTTP_PORT).asInt()
    val httpHost = configured.value(OUR_PROP_HTTP_HOST).asString()
    val httpIoThreads = configured.value(OUR_PROP_HTTP_IO_THREADS).asInt().minimum(0)
    val httpWorkerThreads = configured.value(OUR_PROP_HTTP_WORKER_THREADS).asInt().minimum(0)

    val shutdownConfig = ShutdownConfig(log, configured.nested("shutdown"))

    val activeRequestLimits = configured.value("activeRequestLimits").asStringArray()
    val requestLimiters = HashMap<String, RequestLimitConfig>() initializedBy { requestLimiters ->
        val namedConfigs = configured.nested("requestLimits")
        activeRequestLimits.forEach { name ->
            requestLimiters.put(name, RequestLimitConfig(log, name, namedConfigs.getConfig(name)!!))
        }
    }
    val zkRun = configured.value(OUR_PROP_ZKRUN).asBoolean()
    val zkHost = configured.value(OUR_PROP_ZKHOST).asString()
    val solrHome = configured.value(OUR_PROP_SOLR_HOME).asPathSibling(loader.configFile)
    val solrLogs = configured.value(OUR_PROP_SOLR_LOG).asPathSibling(loader.configFile)
    val tempDir = configured.value(OUR_PROP_TEMP_DIR).asPathSibling(loader.configFile)
    val solrVersion = configured.value(OUR_PROP_SOLR_VERSION).asString()
    val solrWarFile = configured.value(OUR_PROP_SOLR_WAR).asPathSibling(loader.configFile)
    val libExtDir = configured.value(OUR_PROP_LIBEXT_DIR).asPathSibling(loader.configFile)
    val solrContextPath = configured.value(OUR_PROP_HOST_CONTEXT).asString().let { solrContextPath ->
        if (!solrContextPath.startsWith("/")) "/" + solrContextPath else solrContextPath
    }
...