diff -r 19cf2e8a0627 -r b6b62004b1e7 core/src/commonMain/kotlin/licensee/LicenseeParser.kt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/src/commonMain/kotlin/licensee/LicenseeParser.kt Thu Apr 03 16:11:04 2025 -0400 @@ -0,0 +1,84 @@ +/* + * AboutOss is an utility library to retrieve and display + * opensource licenses in Android applications. + * + * Copyright (C) 2023 by Frederic-Charles Barthelery. + * + * This file is part of AboutOss. + * + * AboutOss is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AboutOss is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AboutOss. If not, see . + */ +package com.geekorum.aboutoss.core.licensee + +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import okio.Source +import okio.buffer + +class LicenseeParser( + input: Source +): AutoCloseable { + private val buffered = input.buffer() + + fun readLicensee(): Map { + val json = Json { + ignoreUnknownKeys = true + } + val items: List = json.decodeFromString(buffered.readUtf8()) + + return items.associate { + val name = it.name ?: "${it.groupId}:${it.artifactId}" + val license = it.spdxLicenses.firstNotNullOfOrNull { + "${it.name}\n\n${it.url}" + } ?: it.unknownLicenses.firstNotNullOf { + "${it.name}\n\n${it.url}" + } + name to license + } + } + + override fun close() { + buffered.close() + } +} + + +@Serializable +private data class LicenseItem( + val groupId: String, + val artifactId: String, + val version: String, + val spdxLicenses: List = emptyList(), + val unknownLicenses: List = emptyList(), + val name: String? = null, + val scm: Scm? = null, +) + +@Serializable +private data class SpdxLicense( + val identifier: String, + val name: String, + val url: String, +) + +@Serializable +private data class UnknownLicense( + val name: String, + val url: String +) + +@Serializable +private data class Scm( + val url: String, +) \ No newline at end of file