Skip to content
Snippets Groups Projects
Verified Commit b94239e5 authored by Jan-Niclas Strüwer's avatar Jan-Niclas Strüwer
Browse files

Updated tool dto code to be more consistent

parent fa6fc6f0
No related branches found
No related tags found
No related merge requests found
Pipeline #27387 passed
package de.fraunhofer.iem.dataprovider.tool.controller package de.fraunhofer.iem.dataprovider.tool.controller
import de.fraunhofer.iem.dataprovider.configuration.ApiPaths import de.fraunhofer.iem.dataprovider.configuration.ApiPaths
import de.fraunhofer.iem.dataprovider.tool.dto.ToolEntityResponseDto import de.fraunhofer.iem.dataprovider.tool.dto.ToolDto
import de.fraunhofer.iem.dataprovider.tool.repository.ToolRepository import de.fraunhofer.iem.dataprovider.tool.repository.ToolRepository
import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.RestController
...@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RestController ...@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RestController
class ToolController(val toolRepository: ToolRepository) { class ToolController(val toolRepository: ToolRepository) {
@GetMapping(ApiPaths.GET_ALL_TOOLS) @GetMapping(ApiPaths.GET_ALL_TOOLS)
fun getAllTools(): List<ToolEntityResponseDto> { fun getAllTools(): List<ToolDto> {
return toolRepository.findAll().map { it.toDto() } return toolRepository.findAll().map { it.toDto() }
} }
} }
package de.fraunhofer.iem.dataprovider.tool.dto package de.fraunhofer.iem.dataprovider.tool.dto
data class ToolResponseDto( import de.fraunhofer.iem.dataprovider.tool.enumeration.ToolType
data class ToolDto(
val name: String, val name: String,
val description: String, val description: String,
val relevantKpis: List<String>, val relevantKpis: List<String>,
val findings: List<FindingDto> = emptyList() val findings: MutableList<FindingDto> = mutableListOf(),
val toolType: ToolType
) )
package de.fraunhofer.iem.dataprovider.tool.dto
import java.util.*
data class ToolEntityResponseDto(val id: UUID, val name: String, val toolType: String)
package de.fraunhofer.iem.dataprovider.tool.entity package de.fraunhofer.iem.dataprovider.tool.entity
import de.fraunhofer.iem.dataprovider.tool.dto.ToolEntityResponseDto import de.fraunhofer.iem.dataprovider.tool.dto.ToolDto
import de.fraunhofer.iem.dataprovider.tool.enumeration.ToolType import de.fraunhofer.iem.dataprovider.tool.enumeration.ToolType
import jakarta.persistence.* import jakarta.persistence.*
import org.hibernate.Hibernate import org.hibernate.Hibernate
...@@ -21,8 +21,8 @@ class ToolEntity( ...@@ -21,8 +21,8 @@ class ToolEntity(
var toolType: ToolType, var toolType: ToolType,
) { ) {
fun toDto(): ToolEntityResponseDto { fun toDto(): ToolDto {
return ToolEntityResponseDto(this.id!!, this.name, this.toolType.getName()) return toolType.toViewModel()
} }
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
......
package de.fraunhofer.iem.dataprovider.tool.enumeration package de.fraunhofer.iem.dataprovider.tool.enumeration
import de.fraunhofer.iem.dataprovider.kpi.enumeration.KpiKind import de.fraunhofer.iem.dataprovider.kpi.enumeration.KpiKind
import de.fraunhofer.iem.dataprovider.tool.dto.FindingDto import de.fraunhofer.iem.dataprovider.tool.dto.ToolDto
import de.fraunhofer.iem.dataprovider.tool.dto.ToolResponseDto
enum class ToolType { enum class ToolType {
ORT { ORT {
override fun toViewModel(findings: List<FindingDto>): ToolResponseDto { override fun toViewModel(): ToolDto {
return ToolResponseDto( return ToolDto(
name = this.getName(), name = this.getName(),
findings = findings,
relevantKpis = listOf( relevantKpis = listOf(
KpiKind.MAXIMAL_VULNERABILITY.getName(), KpiKind.MAXIMAL_VULNERABILITY.getName(),
KpiKind.VULNERABILITY_SCORE.getName(), KpiKind.VULNERABILITY_SCORE.getName(),
KpiKind.SECURITY.getName() KpiKind.SECURITY.getName()
), ),
description = "The OSS Review Toolkit (ORT) provides information about dependencies." + description = "The OSS Review Toolkit (ORT) provides information about dependencies." +
"For more information see https://github.com/oss-review-toolkit/ort." "For more information see https://github.com/oss-review-toolkit/ort.",
toolType = ORT
) )
} }
...@@ -25,10 +24,9 @@ enum class ToolType { ...@@ -25,10 +24,9 @@ enum class ToolType {
} }
}, },
OCCMD { OCCMD {
override fun toViewModel(findings: List<FindingDto>): ToolResponseDto { override fun toViewModel(): ToolDto {
return ToolResponseDto( return ToolDto(
name = this.getName(), name = this.getName(),
findings = findings,
relevantKpis = listOf( relevantKpis = listOf(
KpiKind.SECURITY.getName(), KpiKind.SECURITY.getName(),
KpiKind.PROCESS_TRANSPARENCY.getName(), KpiKind.PROCESS_TRANSPARENCY.getName(),
...@@ -40,7 +38,9 @@ enum class ToolType { ...@@ -40,7 +38,9 @@ enum class ToolType {
KpiKind.CHECKED_IN_BINARIES.getName() KpiKind.CHECKED_IN_BINARIES.getName()
), ),
description = "The OCCMD provides various information about the analyzed project." + description = "The OCCMD provides various information about the analyzed project." +
"For more information see https://gitlab.opencode.de/opencode-analyzer/occmd-public." "For more information see https://gitlab.opencode.de/opencode-analyzer/occmd-public.",
toolType = OCCMD
) )
} }
...@@ -49,10 +49,9 @@ enum class ToolType { ...@@ -49,10 +49,9 @@ enum class ToolType {
} }
}, },
Gitlab { Gitlab {
override fun toViewModel(findings: List<FindingDto>): ToolResponseDto { override fun toViewModel(): ToolDto {
return ToolResponseDto( return ToolDto(
name = this.getName(), name = this.getName(),
findings = findings,
relevantKpis = listOf( relevantKpis = listOf(
KpiKind.PROCESS_TRANSPARENCY.getName(), KpiKind.PROCESS_TRANSPARENCY.getName(),
KpiKind.PROCESS_COMPLIANCE.getName(), KpiKind.PROCESS_COMPLIANCE.getName(),
...@@ -61,7 +60,8 @@ enum class ToolType { ...@@ -61,7 +60,8 @@ enum class ToolType {
KpiKind.DOCUMENTATION.getName(), KpiKind.DOCUMENTATION.getName(),
), ),
description = "The Gitlab API is used to derive information about, e.g., the project's compliance" + description = "The Gitlab API is used to derive information about, e.g., the project's compliance" +
"to OpenCoDE's platform rules." "to OpenCoDE's platform rules.",
toolType = Gitlab
) )
} }
...@@ -70,6 +70,6 @@ enum class ToolType { ...@@ -70,6 +70,6 @@ enum class ToolType {
} }
}; };
abstract fun toViewModel(findings: List<FindingDto> = emptyList()): ToolResponseDto abstract fun toViewModel(): ToolDto
abstract fun getName(): String abstract fun getName(): String
} }
package de.fraunhofer.iem.dataprovider.toolRun.dto package de.fraunhofer.iem.dataprovider.toolRun.dto
import de.fraunhofer.iem.dataprovider.tool.dto.ToolResponseDto import de.fraunhofer.iem.dataprovider.tool.dto.ToolDto
import de.fraunhofer.iem.dataprovider.toolRun.entity.ToolRunEntity import de.fraunhofer.iem.dataprovider.toolRun.entity.ToolRunEntity
import java.util.* import java.util.*
...@@ -8,17 +8,17 @@ data class ToolRunDto( ...@@ -8,17 +8,17 @@ data class ToolRunDto(
val id: UUID, val id: UUID,
val createdAt: String, val createdAt: String,
val projectId: Long, val projectId: Long,
val tools: List<ToolResponseDto>, val tools: List<ToolDto>,
val languages: Set<LanguageDto> = emptySet() val languages: Set<LanguageDto> = emptySet()
) { ) {
companion object { companion object {
fun getDtoFromEntityWithToolFindings(toolRunEntity: ToolRunEntity, tools: List<ToolResponseDto>): ToolRunDto { fun getDtoFromEntity(toolRunEntity: ToolRunEntity): ToolRunDto {
if (toolRunEntity.id != null) { if (toolRunEntity.id != null) {
return ToolRunDto( return ToolRunDto(
id = toolRunEntity.id!!, id = toolRunEntity.id!!,
createdAt = toolRunEntity.createdAt.toString(), createdAt = toolRunEntity.createdAt.toString(),
projectId = toolRunEntity.repository.projectId, projectId = toolRunEntity.repository.projectId,
tools = tools, tools = toolRunEntity.toolEntities.map { it.toDto() },
languages = toolRunEntity.languageEntities.map { languages = toolRunEntity.languageEntities.map {
LanguageDto(name = it.name, percentage = it.percentage) LanguageDto(name = it.name, percentage = it.percentage)
}.toSet() }.toSet()
......
...@@ -5,6 +5,7 @@ import de.fraunhofer.iem.dataprovider.repository.dto.RepositoryCreateDto ...@@ -5,6 +5,7 @@ import de.fraunhofer.iem.dataprovider.repository.dto.RepositoryCreateDto
import de.fraunhofer.iem.dataprovider.repository.service.RepositoryService import de.fraunhofer.iem.dataprovider.repository.service.RepositoryService
import de.fraunhofer.iem.dataprovider.tool.dto.CreateToolDto import de.fraunhofer.iem.dataprovider.tool.dto.CreateToolDto
import de.fraunhofer.iem.dataprovider.tool.service.ToolService import de.fraunhofer.iem.dataprovider.tool.service.ToolService
import de.fraunhofer.iem.dataprovider.toolRun.dto.ToolRunDto
import de.fraunhofer.iem.dataprovider.toolRun.entity.LanguageEntity import de.fraunhofer.iem.dataprovider.toolRun.entity.LanguageEntity
import de.fraunhofer.iem.dataprovider.toolRun.entity.ToolRunEntity import de.fraunhofer.iem.dataprovider.toolRun.entity.ToolRunEntity
import de.fraunhofer.iem.dataprovider.toolRun.repository.ToolRunRepository import de.fraunhofer.iem.dataprovider.toolRun.repository.ToolRunRepository
...@@ -18,7 +19,6 @@ class ToolRunDbService( ...@@ -18,7 +19,6 @@ class ToolRunDbService(
private val toolService: ToolService private val toolService: ToolService
) { ) {
@Transactional @Transactional
fun createToolRun( fun createToolRun(
repoDto: RepositoryCreateDto, repoDto: RepositoryCreateDto,
...@@ -56,7 +56,9 @@ class ToolRunDbService( ...@@ -56,7 +56,9 @@ class ToolRunDbService(
//TODO: this should return a create tool run dto //TODO: this should return a create tool run dto
@Transactional(readOnly = true) @Transactional(readOnly = true)
fun getToolRunByProjectId(projectId: Long): ToolRunEntity { fun getToolRunByProjectId(projectId: Long): ToolRunDto {
return toolRunRepository.findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId) return ToolRunDto.getDtoFromEntity(
toolRunRepository.findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId)
)
} }
} }
...@@ -3,7 +3,6 @@ package de.fraunhofer.iem.dataprovider.toolRun.service ...@@ -3,7 +3,6 @@ package de.fraunhofer.iem.dataprovider.toolRun.service
import de.fraunhofer.iem.dataprovider.kpi.service.KPIService import de.fraunhofer.iem.dataprovider.kpi.service.KPIService
import de.fraunhofer.iem.dataprovider.logger.getLogger import de.fraunhofer.iem.dataprovider.logger.getLogger
import de.fraunhofer.iem.dataprovider.repository.service.RepositoryService import de.fraunhofer.iem.dataprovider.repository.service.RepositoryService
import de.fraunhofer.iem.dataprovider.tool.dto.ToolResponseDto
import de.fraunhofer.iem.dataprovider.tool.enumeration.ToolType import de.fraunhofer.iem.dataprovider.tool.enumeration.ToolType
import de.fraunhofer.iem.dataprovider.toolRun.dto.ToolRunDto import de.fraunhofer.iem.dataprovider.toolRun.dto.ToolRunDto
import de.fraunhofer.iem.dataprovider.tools.gitlab.service.RepositoryDetailsService import de.fraunhofer.iem.dataprovider.tools.gitlab.service.RepositoryDetailsService
...@@ -124,51 +123,40 @@ class ToolRunService( ...@@ -124,51 +123,40 @@ class ToolRunService(
dispatcher: CoroutineDispatcher = Dispatchers.IO, dispatcher: CoroutineDispatcher = Dispatchers.IO,
includeFindings: Boolean = false includeFindings: Boolean = false
): ToolRunDto { ): ToolRunDto {
val toolRunEntity = toolRunDbService.getToolRunByProjectId(projectId = projectId) val toolRun = withContext(dispatcher) {
toolRunDbService.getToolRunByProjectId(projectId = projectId)
}
val apiJobs: MutableList<Deferred<ToolResponseDto>> = mutableListOf() val apiJobs: MutableList<Job> = mutableListOf()
if (includeFindings) { if (includeFindings) {
toolRunEntity.toolEntities.forEach { tool -> toolRun.tools.forEach { tool ->
when (tool.toolType) { when (tool.toolType) {
ToolType.ORT -> { ToolType.ORT -> {
apiJobs.add( apiJobs.add(
defaultScope.async { defaultScope.launch {
val rawOrtResult = ortService.getOrtResults(projectId = projectId) val rawOrtResult = ortService.getOrtResults(projectId = projectId)
val findings = ortService.getFindings(rawOrtResult) val findings = ortService.getFindings(rawOrtResult)
tool.toolType.toViewModel(findings = findings) tool.findings.addAll(findings)
} }
) )
} }
else -> { else -> {
apiJobs.add( logger.info("No findings to retrieve for tool ${tool.toolType}")
defaultScope.async {
tool.toolType.toViewModel()
}
)
} }
} }
} }
} else {
toolRunEntity.toolEntities.forEach { tool ->
apiJobs.add(
defaultScope.async {
tool.toolType.toViewModel()
}
)
}
} }
val tools = apiJobs.mapNotNull { apiJobs.forEach {
try { try {
it.await() it.join()
} catch (exception: Exception) { } catch (exception: Exception) {
logger.error("API job failed with error $exception") logger.error("API job failed with error $exception")
null
} }
} }
return ToolRunDto.getDtoFromEntityWithToolFindings(toolRunEntity, tools) return toolRun
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment

Consent

On this website, we use the web analytics service Matomo to analyze and review the use of our website. Through the collected statistics, we can improve our offerings and make them more appealing for you. Here, you can decide whether to allow us to process your data and set corresponding cookies for these purposes, in addition to technically necessary cookies. Further information on data protection—especially regarding "cookies" and "Matomo"—can be found in our privacy policy. You can withdraw your consent at any time.