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

com.testerum.file_service.mapper.file_to_business.FileToBusinessStepMapper.kt Maven / Gradle / Ivy

package com.testerum.file_service.mapper.file_to_business

import com.testerum.file_service.mapper.file_to_business.common.FileToBusinessPhaseMapper
import com.testerum.file_service.mapper.file_to_business.common.FileToBusinessStepCallMapper
import com.testerum.model.infrastructure.path.Path
import com.testerum.model.step.ComposedStepDef
import com.testerum.model.text.StepPattern
import com.testerum.model.text.parts.ParamStepPatternPart
import com.testerum.model.text.parts.StepPatternPart
import com.testerum.model.text.parts.TextStepPatternPart
import com.testerum.model.text.parts.param_meta.TypeMetaFactory
import com.testerum.model.util.StepHashUtil
import com.testerum.test_file_format.stepdef.FileStepDef
import com.testerum.test_file_format.stepdef.signature.part.FileParamStepDefSignaturePart
import com.testerum.test_file_format.stepdef.signature.part.FileStepDefSignaturePart
import com.testerum.test_file_format.stepdef.signature.part.FileTextStepDefSignaturePart
import java.nio.file.Path as JavaPath

class FileToBusinessStepMapper(private val phaseMapper: FileToBusinessPhaseMapper,
                               private val callsMapper: FileToBusinessStepCallMapper) {

    fun mapStepDef(fileStepDef: FileStepDef, relativeFilePath: JavaPath): ComposedStepDef {
        val path = Path.createInstance(relativeFilePath.toString())
        val phase = phaseMapper.mapStepPhase(fileStepDef.signature.phase)
        val stepPattern = mapSignatureParts(fileStepDef.signature.parts)

        val stepCallIdPrefix = StepHashUtil.calculateStepHash(phase, stepPattern)
        val stepCalls = callsMapper.mapStepCalls(fileStepDef.steps, stepCallIdPrefix)

        return ComposedStepDef(
                path = path,
                phase = phase,
                stepPattern = stepPattern,
                description = fileStepDef.description,
                tags = fileStepDef.tags,
                stepCalls = stepCalls
        )
    }

    private fun mapSignatureParts(fileSignatureParts: List): StepPattern {
        return StepPattern(
                patternParts = fileSignatureParts.map { mapSignaturePart(it) }
        )
    }

    private fun mapSignaturePart(fileSignaturePart: FileStepDefSignaturePart): StepPatternPart {
        return when (fileSignaturePart) {
            is FileTextStepDefSignaturePart  -> TextStepPatternPart(fileSignaturePart.text)
            is FileParamStepDefSignaturePart -> ParamStepPatternPart(fileSignaturePart.name, TypeMetaFactory.getTypeMetaFromString(fileSignaturePart.type) ?: throw RuntimeException("Unknown TypeMeta [${fileSignaturePart.type}]"))
            else                             -> throw Exception("unknown FileStepDefSignaturePart [${fileSignaturePart.javaClass.name}]")
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy