OaiRequestRunner.scala 4.87 KB
Newer Older
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
package org.swissbib.memobase.oai.runner

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

abstract class OaiRequestRunner (val config: Configuration,
                                 val repository: OaiRepository,
                                  val request: OaiRequest){
  def run(): OaiResponse
}


sealed case class IdentifyRunner(override val config: Configuration,
                                 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
36
37
    val node = repository.getRecord(request.identifier.get,request.metadataPrefix.get)

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
    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 = {

    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 = {

    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)
  }
}


/*
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)
  }

}