@@ -29,13 +29,18 @@ import org.eclipse.apoapsis.ortserver.dao.repositories.analyzerrun.PackagesTable
29
29
import org.eclipse.apoapsis.ortserver.dao.repositories.analyzerrun.ProcessedDeclaredLicensesTable
30
30
import org.eclipse.apoapsis.ortserver.dao.repositories.analyzerrun.ShortestDependencyPathDao
31
31
import org.eclipse.apoapsis.ortserver.dao.repositories.analyzerrun.ShortestDependencyPathsTable
32
+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.PackageCurationDataDao
33
+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.PackageCurationDataTable
34
+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.PackageCurationsTable
35
+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.RepositoryConfigurationsPackageCurationsTable
36
+ import org.eclipse.apoapsis.ortserver.dao.repositories.repositoryconfiguration.RepositoryConfigurationsTable
32
37
import org.eclipse.apoapsis.ortserver.dao.tables.shared.IdentifiersTable
33
38
import org.eclipse.apoapsis.ortserver.dao.utils.applyFilterNullable
34
39
import org.eclipse.apoapsis.ortserver.dao.utils.applyILike
35
40
import org.eclipse.apoapsis.ortserver.dao.utils.listCustomQueryCustomOrders
36
41
import org.eclipse.apoapsis.ortserver.model.EcosystemStats
37
42
import org.eclipse.apoapsis.ortserver.model.runs.PackageFilters
38
- import org.eclipse.apoapsis.ortserver.model.runs.PackageWithShortestDependencyPaths
43
+ import org.eclipse.apoapsis.ortserver.model.runs.PackageRunData
39
44
import org.eclipse.apoapsis.ortserver.model.util.ListQueryParameters
40
45
import org.eclipse.apoapsis.ortserver.model.util.ListQueryResult
41
46
@@ -47,8 +52,10 @@ import org.jetbrains.exposed.sql.Op
47
52
import org.jetbrains.exposed.sql.ResultRow
48
53
import org.jetbrains.exposed.sql.SortOrder
49
54
import org.jetbrains.exposed.sql.SqlExpressionBuilder.concat
55
+ import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
50
56
import org.jetbrains.exposed.sql.SqlExpressionBuilder.neq
51
57
import org.jetbrains.exposed.sql.and
58
+ import org.jetbrains.exposed.sql.andWhere
52
59
import org.jetbrains.exposed.sql.stringLiteral
53
60
54
61
/* *
@@ -59,7 +66,7 @@ class PackageService(private val db: Database) {
59
66
ortRunId : Long ,
60
67
parameters : ListQueryParameters = ListQueryParameters .DEFAULT ,
61
68
filters : PackageFilters = PackageFilters ()
62
- ): ListQueryResult <PackageWithShortestDependencyPaths > = db.dbQuery {
69
+ ): ListQueryResult <PackageRunData > = db.dbQuery {
63
70
val orders = mutableListOf<Pair <Expression <* >, SortOrder >> ()
64
71
65
72
parameters.sortFields.forEach {
@@ -110,30 +117,46 @@ class PackageService(private val db: Database) {
110
117
)
111
118
}
112
119
113
- val listQueryResult =
114
- listCustomQueryCustomOrders(parameters, orders, ResultRow ::toPackageWithShortestDependencyPaths ) {
120
+ val packages =
121
+ listCustomQueryCustomOrders(parameters, orders, ResultRow ::toPackageRunData ) {
115
122
PackagesTable .joinAnalyzerTables()
116
123
.innerJoin(IdentifiersTable )
117
124
.innerJoin(ProcessedDeclaredLicensesTable )
118
125
.select(PackagesTable .columns)
119
126
.where { (AnalyzerJobsTable .ortRunId eq ortRunId) and condition }
120
127
}
121
128
122
- val data = listQueryResult.data.map { pkg ->
123
- val shortestPaths = ShortestDependencyPathsTable
124
- .innerJoin(PackagesTable )
125
- .innerJoin(AnalyzerRunsTable )
126
- .innerJoin(AnalyzerJobsTable )
127
- .select(ShortestDependencyPathsTable .columns)
128
- .where { (AnalyzerJobsTable .ortRunId eq ortRunId) and (PackagesTable .id eq pkg.pkgId) }
129
- .map { ShortestDependencyPathDao .wrapRow(it).mapToModel() }
130
-
129
+ val curations = RepositoryConfigurationsTable
130
+ .innerJoin(RepositoryConfigurationsPackageCurationsTable )
131
+ .innerJoin(PackageCurationsTable )
132
+ .innerJoin(PackageCurationDataTable )
133
+ .innerJoin(IdentifiersTable )
134
+ .innerJoin(PackagesTable )
135
+ .select(listOf (PackagesTable .id, PackageCurationsTable .id) + PackageCurationDataTable .columns)
136
+ .where(RepositoryConfigurationsTable .ortRunId eq ortRunId)
137
+ .andWhere { PackagesTable .id inList (packages.data.map { it.pkgId }) }
138
+ .distinct()
139
+ .groupBy { it[PackagesTable .id].value }
140
+ .mapValues { rows -> rows.value.map { PackageCurationDataDao .wrapRow(it).mapToModel() } }
141
+
142
+ val shortestPaths = ShortestDependencyPathsTable
143
+ .innerJoin(PackagesTable )
144
+ .innerJoin(AnalyzerRunsTable )
145
+ .innerJoin(AnalyzerJobsTable )
146
+ .select(ShortestDependencyPathsTable .columns.plus(PackagesTable .id))
147
+ .where(AnalyzerJobsTable .ortRunId eq ortRunId)
148
+ .andWhere { PackagesTable .id inList (packages.data.map { it.pkgId }) }
149
+ .groupBy { it[PackagesTable .id].value }
150
+ .mapValues { rows -> rows.value.map { ShortestDependencyPathDao .wrapRow(it).mapToModel() } }
151
+
152
+ val data = packages.data.map { pkg ->
131
153
pkg.copy(
132
- shortestDependencyPaths = shortestPaths
154
+ shortestDependencyPaths = shortestPaths.getOrDefault(pkg.pkgId, emptyList()),
155
+ curations = curations.getOrDefault(pkg.pkgId, emptyList())
133
156
)
134
157
}
135
158
136
- ListQueryResult (data, parameters, listQueryResult .totalCount)
159
+ ListQueryResult (data, parameters, packages .totalCount)
137
160
}
138
161
139
162
/* * Count packages found in provided ORT runs. */
@@ -175,8 +198,8 @@ class PackageService(private val db: Database) {
175
198
}
176
199
}
177
200
178
- private fun ResultRow.toPackageWithShortestDependencyPaths (): PackageWithShortestDependencyPaths =
179
- PackageWithShortestDependencyPaths (
201
+ private fun ResultRow.toPackageRunData (): PackageRunData =
202
+ PackageRunData (
180
203
pkg = PackageDao .wrapRow(this ).mapToModel(),
181
204
pkgId = get(PackagesTable .id).value,
182
205
// Temporarily set the shortestDependencyPaths into an empty list, as they will be added in a subsequent step.
0 commit comments