diff options
Diffstat (limited to 'opendc-common/src/main/kotlin/org/opendc/common/utils/ConfigParser.kt')
| -rw-r--r-- | opendc-common/src/main/kotlin/org/opendc/common/utils/ConfigParser.kt | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/opendc-common/src/main/kotlin/org/opendc/common/utils/ConfigParser.kt b/opendc-common/src/main/kotlin/org/opendc/common/utils/ConfigParser.kt new file mode 100644 index 00000000..e6f18da5 --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/utils/ConfigParser.kt @@ -0,0 +1,97 @@ +package org.opendc.common.utils + +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.decodeFromStream + +import java.io.File +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream +import java.net.Socket +import java.sql.Connection + +/** + * @author Mateusz + * @property name + * @property backlog the amount of connections to accept + * @property address IPv4 address + * @property port + * @property postgresql Postgresql port + * @property username Postgresql user + * @property password Postgresql password + * @property database Postgresql database + * @property topic Kafka topic + * @property kafka Kafka port + */ +@Serializable +public data class Config( + val name: String = "", + var backlog: Int = 0, + val address: String = "", + val port: Int = 0, + val postgresql: Int = 0, + val username : String = "", + val password : String = "", + val database: String = "", + val topic : String = "", + val kafka: Int = 0, +){ + + public companion object{ + public var input: InputStream? = null + public var output: OutputStream? = null + public var connection : Connection? = null + public var kafka : Kafka? = null + public var database : PostgresqlDB? = null + + public var socket: Socket? = null + + public fun setConfigSocket(socket: Socket?){ + this.socket = socket + try { + input = socket?.getInputStream() + output = socket?.getOutputStream() + } catch (e: IOException){ + print("${e.message}") + } + } + + public fun getConfigReader() : InputStream? { + return input + } + + public fun getConfigWriter() : OutputStream? { + return output + } + + public fun setKafkaInstance(kafka : Kafka) { + this.kafka = kafka + } + + public fun getKafkaInstance() : Kafka? { + return this.kafka + } + + public fun setDB(db : PostgresqlDB){ + this.database = db + } + + public fun getDB() : PostgresqlDB?{ + return this.database + } + } +} +/** + * @author Mateusz + * Reads `config.json` into Config data class. + */ +public class ConfigReader { + private val jsonReader = Json + public fun read(file: File): Config = read(file.inputStream()) + @OptIn(ExperimentalSerializationApi::class) + public fun read(input: InputStream): Config { + return jsonReader.decodeFromStream<Config>(input) + } +} |
