diff --git a/kotlin/build.gradle b/kotlin/build.gradle index 6d691df71..88e758f91 100644 --- a/kotlin/build.gradle +++ b/kotlin/build.gradle @@ -29,7 +29,8 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion" implementation "io.github.cdimascio:dotenv-kotlin:6.2.2" - implementation "org.ini4j:ini4j:0.5.4" + + implementation "commons-configuration:commons-configuration:1.10" implementation "com.google.http-client:google-http-client:$googleHttpVersion" implementation "com.google.http-client:google-http-client-apache-v2:$googleHttpVersion" diff --git a/kotlin/src/main/com/looker/sdk/ApiSettings.kt b/kotlin/src/main/com/looker/sdk/ApiSettings.kt index 36fe8b376..a9ffaba68 100644 --- a/kotlin/src/main/com/looker/sdk/ApiSettings.kt +++ b/kotlin/src/main/com/looker/sdk/ApiSettings.kt @@ -29,9 +29,9 @@ import com.looker.rtl.DEFAULT_HTTP_TRANSPORT import com.looker.rtl.DEFAULT_TIMEOUT import com.looker.rtl.asBoolean import com.looker.rtl.unQuote -import org.ini4j.Ini -import java.io.ByteArrayInputStream +import org.apache.commons.configuration.HierarchicalINIConfiguration import java.io.File +import java.io.StringReader /** Structure read from an .INI file */ typealias ApiSections = Map> @@ -40,14 +40,20 @@ typealias ApiSections = Map> * Parse and cleanup something that looks like an .INI file, stripping outermost quotes for values */ fun apiConfig(contents: String): ApiSections { - val iniParser = Ini(ByteArrayInputStream(contents.toByteArray())) - - val ret = mutableMapOf>() - iniParser.forEach { (section, values) -> - ret[section] = values.map { it.key to unQuote(it.value) }.toMap() + val iniParser = HierarchicalINIConfiguration() + iniParser.load(StringReader(contents)) + + return mutableMapOf>().also { mapToReturn -> + iniParser.sections.forEach { section -> + mapToReturn[section] = mutableMapOf().also { sectionMap -> + iniParser.getKeys(section).forEach { key -> + // `key` is fully scoped (e.g. `Looker.`) but we just want the key so + // remove the section prefix before adding to the map. + sectionMap[key.removePrefix("$section.")] = unQuote(iniParser.getString(key)) + } + } + } } - - return ret } // TODO why no @JvmOverloads here?