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

com.testerum.file_service.file.LocalVariablesFileService.kt Maven / Gradle / Ivy

package com.testerum.file_service.file

import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializationFeature
import com.fasterxml.jackson.datatype.guava.GuavaModule
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.afterburner.AfterburnerModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import com.testerum.common_kotlin.createDirectories
import com.testerum.common_kotlin.doesNotExist
import com.testerum.model.variable.FileLocalVariables
import com.testerum.model.variable.FileProjectLocalVariables
import com.testerum.model.variable.ReservedVariableEnvironmentNames
import java.util.*
import java.nio.file.Path as JavaPath

class LocalVariablesFileService {

    companion object {
        private val OBJECT_MAPPER: ObjectMapper = jacksonObjectMapper().apply {
            registerModule(AfterburnerModule())
            registerModule(JavaTimeModule())
            registerModule(GuavaModule())

            enable(SerializationFeature.INDENT_OUTPUT)
            setSerializationInclusion(JsonInclude.Include.NON_NULL)
            disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            enable(SerializationFeature.WRITE_DATES_WITH_ZONE_ID)

            disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
            disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
        }

    }

    fun save(fileLocalVariables: FileLocalVariables,
             fileLocalVariablesFile: JavaPath): FileLocalVariables {
        fileLocalVariablesFile.parent?.createDirectories()

        OBJECT_MAPPER.writeValue(
                fileLocalVariablesFile.toFile(),
                fileLocalVariables.projectLocalVariables
        )

        return fileLocalVariables
    }

    fun load(fileLocalVariablesFile: JavaPath): FileLocalVariables {
        if (fileLocalVariablesFile.doesNotExist) {
            return FileLocalVariables.EMPTY
        }

        val projectLocalVariables: TreeMap = OBJECT_MAPPER.readValue(
                fileLocalVariablesFile.toFile()
        )

        return FileLocalVariables(projectLocalVariables)
    }

    fun getCurrentEnvironment(fileLocalVariablesFile: JavaPath,
                              projectId: String): String {
        val localVariables = load(fileLocalVariablesFile)

        val projectLocalVariables = localVariables.projectLocalVariables[projectId]

        return projectLocalVariables?.currentEnvironment
                ?: ReservedVariableEnvironmentNames.DEFAULT
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy