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

com.testerum.web_backend.services.variables.VariablesFrontendService.kt Maven / Gradle / Ivy

package com.testerum.web_backend.services.variables

import com.testerum.file_service.file.LocalVariablesFileService
import com.testerum.file_service.file.VariablesFileService
import com.testerum.model.variable.AllProjectVariables
import com.testerum.model.variable.FileLocalVariables
import com.testerum.model.variable.FileProjectLocalVariables
import com.testerum.model.variable.ProjectVariables
import com.testerum.model.variable.ReservedVariableEnvironmentNames
import com.testerum.model.variable.Variable
import com.testerum.model.variable.VariablesEnvironment
import com.testerum.web_backend.services.dirs.FrontendDirs
import com.testerum.web_backend.services.project.WebProjectManager
import java.util.*

class VariablesFrontendService(private val webProjectManager: WebProjectManager,
                               private val frontendDirs: FrontendDirs,
                               private val variablesFileService: VariablesFileService,
                               private val localVariablesFileService: LocalVariablesFileService) {

    private fun getVariablesDir() = webProjectManager.getProjectServices().dirs().getVariablesDir()
    private fun getFileLocalVariablesFile() = frontendDirs.getFileLocalVariablesFile()

    fun getAllProjectVariables(): AllProjectVariables {
        val projectVariables = variablesFileService.getProjectVariables(getVariablesDir())
        val fileLocalVariables = localVariablesFileService.load(
                getFileLocalVariablesFile()
        )

        val projectId = webProjectManager.getProjectServices().project.id

        return mapProjectVariablesToAllProjectVariables(projectId, projectVariables, fileLocalVariables)
    }

    fun saveAllProjectVariables(allProjectVariables: AllProjectVariables): AllProjectVariables {
        val defaultVariables = mapListOfVarsToMap(allProjectVariables.defaultVariables)
        val environments = mapListOfEnvsToMap(allProjectVariables.environments)

        val projectVariables = ProjectVariables(
                defaultVariables = defaultVariables,
                environments = environments
        )

        val projectId = webProjectManager.getProjectServices().project.id

        val savedProjectVariables = variablesFileService.saveProjectVariables(projectVariables, getVariablesDir())

        val fileLocalVariables = localVariablesFileService.load(
                getFileLocalVariablesFile()
        )

        val projectLocalVariables = TreeMap()
        projectLocalVariables.putAll(fileLocalVariables.projectLocalVariables)
        projectLocalVariables[projectId] = FileProjectLocalVariables(
                currentEnvironment = allProjectVariables.currentEnvironment,
                localVariables = mapListOfVarsToMap(allProjectVariables.localVariables)
        )

        val savedFileLocalVariables = localVariablesFileService.save(
                FileLocalVariables(projectLocalVariables),
                getFileLocalVariablesFile()
        )

        return mapProjectVariablesToAllProjectVariables(projectId, savedProjectVariables, savedFileLocalVariables)
    }

    private fun mapProjectVariablesToAllProjectVariables(projectId: String,
                                                         projectVariables: ProjectVariables,
                                                         fileLocalVariables: FileLocalVariables): AllProjectVariables {
        val defaultVariables = projectVariables.defaultVariables.map {
            Variable(it.key, it.value)
        }

        val environments = ArrayList()
        for ((envName, envVars) in projectVariables.environments) {
            environments += VariablesEnvironment(
                    name = envName,
                    variables = envVars.map {
                        Variable(it.key, it.value)
                    }
            )
        }

        val fileProjectLocalVariables = fileLocalVariables.getFileProjectLocalVariables(projectId)

        val currentEnvironment = fileProjectLocalVariables?.currentEnvironment ?: ReservedVariableEnvironmentNames.DEFAULT
        val localVariables = if (fileProjectLocalVariables != null) {
            fileProjectLocalVariables.localVariables.map {
                Variable(it.key, it.value)
            }
        } else {
            emptyList()
        }

        return AllProjectVariables(
                currentEnvironment = currentEnvironment,
                localVariables = localVariables,
                defaultVariables = defaultVariables,
                environments = environments
        )
    }

    private fun mapListOfVarsToMap(variables: List): TreeMap {
        val result = TreeMap()

        // if there are duplicate variable keys, the last one will win
        for (variable in variables) {
            result[variable.key] = variable.value
        }

        return result
    }

    private fun mapListOfEnvsToMap(environments: List): TreeMap> {
        val result = TreeMap>()

        // if there are duplicate variable keys, the last one will win
        for (environment in environments) {
            result[environment.name] = mapListOfVarsToMap(environment.variables)
        }

        return result
    }

    fun saveCurrentEnvironment(currentEnvironment: String): String {
        val projectId = webProjectManager.getProjectServices().project.id

        val fileLocalVariables = localVariablesFileService.load(
                getFileLocalVariablesFile()
        )

        val projectLocalVariables = TreeMap()
        projectLocalVariables.putAll(fileLocalVariables.projectLocalVariables)
        projectLocalVariables[projectId] = FileProjectLocalVariables(
                currentEnvironment = currentEnvironment,
                localVariables = projectLocalVariables[projectId]?.localVariables ?: TreeMap()
        )

        val savedFileLocalVariables = localVariablesFileService.save(
                FileLocalVariables(projectLocalVariables),
                getFileLocalVariablesFile()
        )

        return savedFileLocalVariables.projectLocalVariables[projectId]?.currentEnvironment ?: ReservedVariableEnvironmentNames.DEFAULT
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy