Skip to content

Commit

Permalink
chore: Replace query twirl template 'getProjectAdminData' with Sparql…
Browse files Browse the repository at this point in the history
…QueryBuilder (#3466)
  • Loading branch information
seakayone authored Jan 20, 2025
1 parent e73b358 commit 10ebd2f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import org.apache.jena.riot.system.StreamRDF
import org.apache.jena.riot.system.StreamRDFBase
import org.apache.jena.riot.system.StreamRDFWriter
import org.apache.jena.sparql.core.Quad
import org.eclipse.rdf4j.sparqlbuilder.core.SparqlBuilder.*
import org.eclipse.rdf4j.sparqlbuilder.core.query.Queries
import org.eclipse.rdf4j.sparqlbuilder.rdf.*
import zio.Chunk
import zio.Scope
import zio.Task
Expand All @@ -29,6 +32,8 @@ import org.knora.webapi.slice.admin.AdminConstants.adminDataNamedGraph
import org.knora.webapi.slice.admin.AdminConstants.permissionsDataNamedGraph
import org.knora.webapi.slice.admin.api.model.ProjectExportInfoResponse
import org.knora.webapi.slice.admin.domain.model.KnoraProject
import org.knora.webapi.slice.admin.domain.model.KnoraProject.ProjectIri
import org.knora.webapi.slice.common.repo.rdf.Vocabulary.KnoraAdmin as KA
import org.knora.webapi.slice.resourceinfo.domain.InternalIri
import org.knora.webapi.store.triplestore.api.TriplestoreService
import org.knora.webapi.store.triplestore.api.TriplestoreService.Queries.Construct
Expand Down Expand Up @@ -140,7 +145,7 @@ final case class ProjectExportServiceLive(
for {
tempDir <- Files.createTempDirectoryScoped(Some(project.shortname.value), fileAttributes = Nil)
ontologyAndData <- downloadOntologyAndData(project, tempDir)
adminData <- downloadProjectAdminData(project, tempDir)
adminData <- downloadProjectAdminData(project.id, tempDir)
permissionData <- downloadPermissionData(project, tempDir)
resultFile <- mergeDataToFile(ontologyAndData :+ adminData :+ permissionData, targetFile)
} yield resultFile
Expand All @@ -163,15 +168,32 @@ final case class ProjectExportServiceLive(
* * the project itself
* * the users which are members of the project
* * the groups which belong to the project
* @param project The project to be exported.
* @param projectId The IRI of the project to be exported.
* @param targetDir The folder in which the file is to be saved.
* @return A [[NamedGraphTrigFile]] containing the named graph and location of the file.
*/
private def downloadProjectAdminData(project: KnoraProject, targetDir: Path): Task[NamedGraphTrigFile] = {
val graphIri = adminDataNamedGraph
val file = NamedGraphTrigFile(graphIri, targetDir)
val query = Construct(sparql.admin.txt.getProjectAdminData(project.id.value))
triplestore.queryToFile(query, graphIri, file.dataFile, TriG).as(file)
private def downloadProjectAdminData(projectId: ProjectIri, targetDir: Path): Task[NamedGraphTrigFile] = {
val projectIri = Rdf.iri(projectId.value)
val (projectPred, projectObj) = (`var`("projectPred"), `var`("projectObj"))
val (user, userPred, userObj) = (`var`("user"), `var`("userPred"), `var`("userObj"))
val (group, groupPred, groupObj) = (`var`("group"), `var`("groupPred"), `var`("groupObj"))
val q = Queries
.CONSTRUCT(
projectIri.has(projectPred, projectObj),
user.has(userPred, userObj),
group.has(groupPred, groupObj),
)
.where(
projectIri
.has(projectPred, projectObj)
.union(user.has(userPred, userObj).andHas(KA.isInProject, projectIri))
.union(group.has(groupPred, groupObj).andHas(KA.belongsToProject, projectIri)),
)
.prefix(KA.NS)

triplestore
.queryToFile(Construct(q), adminDataNamedGraph, NamedGraphTrigFile(adminDataNamedGraph, targetDir).dataFile, TriG)
.as(NamedGraphTrigFile(adminDataNamedGraph, targetDir))
}

private def downloadPermissionData(project: KnoraProject, tempDir: Path) = {
Expand Down

This file was deleted.

0 comments on commit 10ebd2f

Please sign in to comment.