/
ListsResponderV2.scala
92 lines (82 loc) · 3.44 KB
/
ListsResponderV2.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
/*
* 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.responders.v2
import akka.pattern._
import scala.concurrent.Future
import org.knora.webapi.IRI
import org.knora.webapi.messages.admin.responder.listsmessages.ChildNodeInfoGetResponseADM
import org.knora.webapi.messages.admin.responder.listsmessages.ListGetRequestADM
import org.knora.webapi.messages.admin.responder.listsmessages.ListGetResponseADM
import org.knora.webapi.messages.admin.responder.listsmessages.ListNodeInfoGetRequestADM
import org.knora.webapi.messages.admin.responder.usersmessages.UserADM
import org.knora.webapi.messages.util.ResponderData
import org.knora.webapi.messages.v2.responder.listsmessages._
import org.knora.webapi.responders.Responder
/**
* Responds to requests relating to lists and nodes.
*/
class ListsResponderV2(responderData: ResponderData) extends Responder(responderData.actorDeps) {
/**
* Receives a message of type [[ListsResponderRequestV2]], and returns an appropriate response message inside a future.
*/
def receive(msg: ListsResponderRequestV2) = msg match {
case ListGetRequestV2(listIri, requestingUser) =>
getList(listIri, requestingUser)
case NodeGetRequestV2(nodeIri, requestingUser) =>
getNode(nodeIri, requestingUser)
case other => handleUnexpectedMessage(other, log, this.getClass.getName)
}
/**
* Gets a list from the triplestore.
*
* @param listIri the Iri of the list's root node.
* @param requestingUser the user making the request.
* @return a [[ListGetResponseV2]].
*/
private def getList(
listIri: IRI,
requestingUser: UserADM
): Future[ListGetResponseV2] =
for {
listResponseADM: ListGetResponseADM <- appActor
.ask(
ListGetRequestADM(
iri = listIri,
requestingUser = requestingUser
)
)
.mapTo[ListGetResponseADM]
} yield ListGetResponseV2(
list = listResponseADM.list,
requestingUser.lang,
responderData.appConfig.fallbackLanguage
)
/**
* Gets a single list node from the triplestore.
*
* @param nodeIri the Iri of the list node.
*
* @param requestingUser the user making the request.
* @return a [[NodeGetResponseV2]].
*/
private def getNode(
nodeIri: IRI,
requestingUser: UserADM
): Future[NodeGetResponseV2] =
for {
nodeResponse: ChildNodeInfoGetResponseADM <- appActor
.ask(
ListNodeInfoGetRequestADM(
iri = nodeIri,
requestingUser = requestingUser
)
)
.mapTo[ChildNodeInfoGetResponseADM]
} yield NodeGetResponseV2(
node = nodeResponse.nodeinfo,
requestingUser.lang,
responderData.appConfig.fallbackLanguage
)
}