/
TriplestoreServiceManager.scala
94 lines (87 loc) · 4.96 KB
/
TriplestoreServiceManager.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* Copyright © 2021 - 2022 Swiss National Data and Service Center for the Humanities and/or DaSCH Service Platform contributors.
* SPDX-License-Identifier: Apache-2.0
*/
package org.knora.webapi.store.triplestore
import zio._
import zio.macros.accessible
import java.nio.file.Path
import dsp.errors.UnexpectedMessageException
import org.knora.webapi._
import org.knora.webapi.messages.store.triplestoremessages.CheckTriplestoreRequest
import org.knora.webapi.messages.store.triplestoremessages.DownloadRepositoryRequest
import org.knora.webapi.messages.store.triplestoremessages.DropAllTRepositoryContent
import org.knora.webapi.messages.store.triplestoremessages.InsertGraphDataContentRequest
import org.knora.webapi.messages.store.triplestoremessages.InsertRepositoryContent
import org.knora.webapi.messages.store.triplestoremessages.NamedGraphDataRequest
import org.knora.webapi.messages.store.triplestoremessages.NamedGraphFileRequest
import org.knora.webapi.messages.store.triplestoremessages.RdfDataObject
import org.knora.webapi.messages.store.triplestoremessages.ResetRepositoryContent
import org.knora.webapi.messages.store.triplestoremessages.SimulateTimeoutRequest
import org.knora.webapi.messages.store.triplestoremessages.SparqlAskRequest
import org.knora.webapi.messages.store.triplestoremessages.SparqlConstructFileRequest
import org.knora.webapi.messages.store.triplestoremessages.SparqlConstructRequest
import org.knora.webapi.messages.store.triplestoremessages.SparqlExtendedConstructRequest
import org.knora.webapi.messages.store.triplestoremessages.SparqlSelectRequest
import org.knora.webapi.messages.store.triplestoremessages.SparqlUpdateRequest
import org.knora.webapi.messages.store.triplestoremessages.TriplestoreRequest
import org.knora.webapi.messages.store.triplestoremessages.UpdateRepositoryRequest
import org.knora.webapi.messages.store.triplestoremessages.UploadRepositoryRequest
import org.knora.webapi.messages.util.rdf.QuadFormat
import org.knora.webapi.store.triplestore.api.TriplestoreService
import org.knora.webapi.store.triplestore.upgrade.RepositoryUpdater
/**
* This service receives akka messages and translates them to calls to ZIO besed service implementations.
* This will be removed when Akka-Actors are removed.
*/
@accessible
trait TriplestoreServiceManager {
def receive(message: TriplestoreRequest): UIO[Any]
}
object TriplestoreServiceManager {
val layer: ZLayer[TriplestoreService & RepositoryUpdater, Nothing, TriplestoreServiceManager] =
ZLayer {
for {
ts <- ZIO.service[TriplestoreService]
updater <- ZIO.service[RepositoryUpdater]
} yield new TriplestoreServiceManager {
override def receive(message: TriplestoreRequest) = message match {
case UpdateRepositoryRequest() => updater.maybeUpgradeRepository
case SparqlSelectRequest(sparql: String, isGravsearch: Boolean) =>
ts.sparqlHttpSelect(sparql = sparql, isGravsearch = isGravsearch)
case sparqlConstructRequest: SparqlConstructRequest => ts.sparqlHttpConstruct(sparqlConstructRequest)
case sparqlExtendedConstructRequest: SparqlExtendedConstructRequest =>
ts.sparqlHttpExtendedConstruct(sparqlExtendedConstructRequest)
case SparqlConstructFileRequest(
sparql: String,
graphIri: IRI,
outputFile: Path,
outputFormat: QuadFormat
) =>
ts.sparqlHttpConstructFile(sparql, graphIri, outputFile, outputFormat)
case NamedGraphFileRequest(
graphIri: IRI,
outputFile: Path,
outputFormat: QuadFormat
) =>
ts.sparqlHttpGraphFile(graphIri, outputFile, outputFormat)
case NamedGraphDataRequest(graphIri: IRI) => ts.sparqlHttpGraphData(graphIri)
case SparqlUpdateRequest(sparql: String) => ts.sparqlHttpUpdate(sparql)
case SparqlAskRequest(sparql: String) => ts.sparqlHttpAsk(sparql)
case ResetRepositoryContent(rdfDataObjects: Seq[RdfDataObject], prependDefaults: Boolean) =>
ts.resetTripleStoreContent(rdfDataObjects, prependDefaults)
case DropAllTRepositoryContent() => ts.dropAllTriplestoreContent()
case InsertRepositoryContent(rdfDataObjects: Seq[RdfDataObject]) =>
ts.insertDataIntoTriplestore(rdfDataObjects, true)
case CheckTriplestoreRequest() => ts.checkTriplestore()
case DownloadRepositoryRequest(outputFile: Path) => ts.downloadRepository(outputFile)
case UploadRepositoryRequest(inputFile: Path) => ts.uploadRepository(inputFile)
case InsertGraphDataContentRequest(graphContent: String, graphName: String) =>
ts.insertDataGraphRequest(graphContent, graphName)
case SimulateTimeoutRequest() => ts.doSimulateTimeout()
case other =>
ZIO.die(UnexpectedMessageException(s"Unexpected message $other of type ${other.getClass.getCanonicalName}"))
}
}
}
}