OaiRequestRunner.scala 6.1 KB
Newer Older
1
2
3
package org.swissbib.memobase.oai.runner

import modules.OaiRepository
4
import org.swissbib.memobase.oai.request.{OaiRequest, UserRequest}
5
import org.swissbib.memobase.oai.response.{GetRecordResponse, IdentifyResponse, ListIdentifiersResponse, ListMetadaFormatsResponse, ListRecordsResponse, ListSetsResponse, OaiResponse}
6
7
import play.api.Configuration

Günter Hipler's avatar
Günter Hipler committed
8
import scala.xml.{Elem, Node }
9

Günter Hipler's avatar
Günter Hipler committed
10
sealed abstract class OaiRequestRunner (val config: Configuration,
11
                                 val repository: OaiRepository,
12
                                  val request: UserRequest){
Günter Hipler's avatar
Günter Hipler committed
13
14
  var result: Option[(String, Elem)] = None
  var resultList: Option[Seq[(String,Node)]] = None
15
  //var result: Option[NodeSeq] = None
16
17
18
19
  def run(): OaiResponse
}


20
//todo: this is wrong!
Günter Hipler's avatar
Günter Hipler committed
21
case class IdentifyRunner(override val config: Configuration,
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
                                 override val repository: OaiRepository,
                                 override val request: OaiRequest) extends OaiRequestRunner( config,
                                                                                  repository,
                                                                                  request) {

  override def run(): OaiResponse = {

    //Identify doesn't need any action on repository
    IdentifyResponse(this)
  }
}

case class GetRecordRunner(override val config: Configuration,
                           override val repository: OaiRepository,
                           override val request: OaiRequest) extends OaiRequestRunner( config,
                                                                        repository,
                                                                        request) {
  override def run(): OaiResponse = {

    //Identify doesnit need any action on repository
42
43
    result = repository.getRecord(request.identifier.get,request.metadataPrefix.get)

44

45
46
47
48
49
50
51
52
53
54
55
    GetRecordResponse(this)
  }
}

case class ListIdentifiersRunner(override val config: Configuration,
                                 override val repository: OaiRepository,
                                 override val request: OaiRequest) extends OaiRequestRunner( config,
                                                                                          repository,
                                                                                          request) {
  override def run(): OaiResponse = {

Günter Hipler's avatar
Günter Hipler committed
56
57
58
59
60
61
62
    resultList = repository.listIdentiers(from = request.from,
      until = request.until,
      set = request.set,
      resumptionToken = Option.empty,
      metadataPrefix = request.metadataPrefix.get)


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    ListIdentifiersResponse(this)
  }
}

case class ListMetadataFormatsRunner(override val config: Configuration,
                                     override val repository: OaiRepository,
                                     override val request: OaiRequest) extends OaiRequestRunner( config,
                                                                                          repository,
                                                                                          request) {
  override def run(): OaiResponse = {

    ListMetadaFormatsResponse(this)
  }
}
case class ListRecordsRunner(override val config: Configuration,
                             override val repository: OaiRepository,
                             override val request: OaiRequest) extends OaiRequestRunner( config,
                                                                                        repository,
                                                                                        request) {
  override def run(): OaiResponse = {
83
    //ich benötige einen genrischen Typ result
Günter Hipler's avatar
Günter Hipler committed
84
    resultList = repository.listRecords(from = request.from,
85
86
87
88
89
                                    until = request.until,
                                    set = request.set,
                                    resumptionToken = Option.empty,
                                    metadataPrefix = request.metadataPrefix.get)

90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106

    ListRecordsResponse(this)
  }
}

case class ListSetsRunner(override val config: Configuration,
                          override val repository: OaiRepository,
                          override val request: OaiRequest) extends OaiRequestRunner( config,
                                                                                    repository,
                                                                                    request) {
  override def run(): OaiResponse = {

    ListSetsResponse(this)
  }
}


107
108
109
case class GetExceptionRunner(override val config: Configuration,
                           override val repository: OaiRepository,
                           override val request: UserRequest) extends OaiRequestRunner( config,
Günter Hipler's avatar
Günter Hipler committed
110
111
                                                                                        repository,
                                                                                        request) {
112
113
114
115
  override def run(): OaiResponse = ???
}


116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
I think we do not need it any more...
 */
object XmlCreator {

  //todo: check if e.g. scalatags might be the better alternative
  private val pRepName = "#REP_NAME#".r
  private val pBaseUrl = "#BASE_URL#".r
  private val pProtVersion = "#PROT_VERSION#".r
  private val pEarliest = "#EARLIEST_DATESTAMP#".r
  private val pEmail = "#ADMIN_EMAIL#".r
  private val pDeleted = "#DELETED#".r
  private val pGranularity = "#GRANULARITY#".r


  def createIdentifyFragment(rep:OaiRepository): String = {

    pRepName.replaceAllIn(
        pBaseUrl.replaceAllIn(
          pProtVersion.replaceAllIn(
            pEarliest.replaceAllIn(
              pEmail.replaceAllIn(
                pDeleted.replaceAllIn(
                  pGranularity.replaceAllIn(
                    scala.io.Source.fromResource("resources/identify.xml").getLines().mkString,
                    rep.oaiConfig.identify.granularity
                  ),rep.oaiConfig.identify.deletedRecord)
              ,rep.oaiConfig.identify.adminEmail),
              rep.oaiConfig.identify.earliestDatestamp),
          rep.oaiConfig.identify.protocolVersion)
        ,rep.oaiConfig.identify.baseUrl),
      rep.oaiConfig.identify.repositoryName)
  }

}