@@ -37,18 +37,25 @@ import org.eclipse.apoapsis.ortserver.dao.repositories.ortrun.OrtRunsTable
3737import org.eclipse.apoapsis.ortserver.dao.repositories.repository.RepositoriesTable
3838import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.PackageCurationDataTable
3939import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.PackageCurationsTable
40+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.RepositoryConfigurationsTable
41+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.RepositoryConfigurationsVulnerabilityResolutionsTable
42+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.VulnerabilityResolutionsTable
4043import org.eclipse.apoapsis.ortserver.dao.repositories.resolvedconfiguration.ResolvedConfigurationsTable
4144import org.eclipse.apoapsis.ortserver.dao.repositories.resolvedconfiguration.ResolvedPackageCurationProvidersTable
4245import org.eclipse.apoapsis.ortserver.dao.repositories.resolvedconfiguration.ResolvedPackageCurationsTable
46+ import org.eclipse.apoapsis.ortserver.dao.tables.VulnerabilityResolutionDefinitionsTable
47+ import org.eclipse.apoapsis.ortserver.dao.tables.VulnerabilityResolutionDefinitionsTable.toVulnerabilityResolutionDefinition
4348import org.eclipse.apoapsis.ortserver.dao.tables.shared.IdentifierDao
4449import org.eclipse.apoapsis.ortserver.dao.tables.shared.IdentifiersTable
4550import org.eclipse.apoapsis.ortserver.dao.utils.applyILike
51+ import org.eclipse.apoapsis.ortserver.model.AppliedVulnerabilityResolution
4652import org.eclipse.apoapsis.ortserver.model.CountByCategory
4753import org.eclipse.apoapsis.ortserver.model.VulnerabilityFilters
4854import org.eclipse.apoapsis.ortserver.model.VulnerabilityForRunsFilters
4955import org.eclipse.apoapsis.ortserver.model.VulnerabilityRating
5056import org.eclipse.apoapsis.ortserver.model.VulnerabilityWithAccumulatedData
5157import org.eclipse.apoapsis.ortserver.model.VulnerabilityWithDetails
58+ import org.eclipse.apoapsis.ortserver.model.runs.repository.VulnerabilityResolution as ModelVulnerabilityResolution
5259import org.eclipse.apoapsis.ortserver.model.util.ComparisonOperator
5360import org.eclipse.apoapsis.ortserver.model.util.ListQueryParameters
5461import org.eclipse.apoapsis.ortserver.model.util.ListQueryResult
@@ -85,7 +92,7 @@ import org.ossreviewtoolkit.model.utils.toPurl
8592 * A service to interact with vulnerabilities.
8693 */
8794class VulnerabilityService (private val db : Database , private val ortRunService : OrtRunService ) {
88- fun listForOrtRunId (
95+ suspend fun listForOrtRunId (
8996 ortRunId : Long ,
9097 parameters : ListQueryParameters = ListQueryParameters .DEFAULT ,
9198 vulnerabilityFilters : VulnerabilityFilters = VulnerabilityFilters ()
@@ -159,11 +166,43 @@ class VulnerabilityService(private val db: Database, private val ortRunService:
159166 .drop(parameters.offset?.toInt() ? : 0 )
160167 .take(parameters.limit ? : ListQueryParameters .DEFAULT_LIMIT )
161168
169+ val vulnerabilityResolutionDefinitions = db.dbQuery {
170+ RepositoryConfigurationsVulnerabilityResolutionsTable
171+ .innerJoin(VulnerabilityResolutionsTable )
172+ .innerJoin(RepositoryConfigurationsTable )
173+ .innerJoin(VulnerabilityResolutionDefinitionsTable )
174+ .select(
175+ VulnerabilityResolutionsTable .columns + VulnerabilityResolutionDefinitionsTable .columns
176+ )
177+ .where { RepositoryConfigurationsTable .ortRunId eq ortRunId }
178+ .map { row ->
179+ row.toVulnerabilityResolutionDefinition() to ModelVulnerabilityResolution (
180+ row[VulnerabilityResolutionsTable .externalId],
181+ row[VulnerabilityResolutionsTable .reason],
182+ row[VulnerabilityResolutionsTable .comment]
183+ )
184+ }
185+ }
186+
162187 val vulnerabilitiesWithResolutions = limitedVulnerabilities.map { vulnerabilityWithDetails ->
163188 val matchingResolutions = resolutions.filter {
164189 it.matches(vulnerabilityWithDetails.vulnerability.mapToOrt())
165190 }
166- vulnerabilityWithDetails.copy(resolutions = matchingResolutions.map { it.mapToModel() })
191+ vulnerabilityWithDetails.copy(
192+ resolutions = matchingResolutions.map {
193+ val resolution = it.mapToModel()
194+
195+ val definition = vulnerabilityResolutionDefinitions
196+ .firstOrNull { (_, value) ->
197+ resolution == value
198+ }?.first
199+
200+ AppliedVulnerabilityResolution (
201+ resolution,
202+ definition
203+ )
204+ }
205+ )
167206 }
168207
169208 return ListQueryResult (
0 commit comments