root/main/trunk/greenstone2/runtime-src/src/oaiservr/identifyaction.cpp @ 22557

Revision 22557, 5.3 KB (checked in by kjdon, 9 years ago)

in oai.cfg can define oaiinfo elements, which are addition items describing the repository. previously they were just output as elements, which invalidates the schema. Added them into the description element, using the new gsdl_oaiinfo schema

  • Property svn:keywords set to Author Date Id Revision
Line 
1#include "identifyaction.h"
2
3bool identifyaction::validateAction(recptproto *protocol, oaiargs &params)
4{
5  // ----------------------------------------------------------------------------
6  //  1. Check for invalid arguments
7  // ----------------------------------------------------------------------------
8  bool invalid_argument_supplied = false;
9  text_tmap::const_iterator param_iterator = params.begin();
10  while (param_iterator != params.end())
11  {
12    // Check for arguments that aren't valid for this action
13    if (param_iterator->first != "verb")
14    {
15      // We've found an invalid argument
16      invalid_argument_supplied = true;
17
18      // Delete the invalid argument from the list so it doesn't end up in the <request> tag that is returned
19      params.erase(param_iterator->first);
20    }
21
22    param_iterator++;
23  }
24
25  // If we found an invalid argument it's an error, so don't go any further
26  if (invalid_argument_supplied)
27  {
28    this->errorType = "badArgument";
29    return false;
30  }
31
32  // ----------------------------------------------------------------------------
33  //  2. Handle any exclusive arguments
34  // ----------------------------------------------------------------------------
35
36  // None!
37
38  // ----------------------------------------------------------------------------
39  //  3. Handle any required arguments
40  // ----------------------------------------------------------------------------
41
42  // None!
43
44  // ----------------------------------------------------------------------------
45  // 4. Check any remaining arguments
46  // ----------------------------------------------------------------------------
47
48  // None!
49
50  // If we've reached here everything must be fine
51  this->errorType = "";
52  return true;
53}
54
55bool identifyaction::output_content(ostream &output, recptproto *protocol, oaiargs &params)
56{
57  utf8outconvertclass utf8convert;
58
59  // Get the repository name (some human-readable name for the site, or superset of collections)
60  text_t repositoryName = this->configuration->getRepositoryName();
61  text_t repositoryId = this->configuration->getRepositoryId();
62  // Get admin's email address (i.e. the site maintainer)
63  text_t maintainer = this->configuration->getMaintainer();
64  text_t version = (this->configuration->getOAIVersion() <= 110) ? (text_t)"1.1":(text_t)"2.0";
65  text_t id_version = this->configuration->getRepositoryIdVersion();
66 
67  text_t baseURL = this->configuration->getBaseURL();
68 
69  output << utf8convert << "  <repositoryName>"  << repositoryName << "</repositoryName>\n";
70  output << utf8convert << "  <baseURL>"         << baseURL        << "</baseURL>\n";
71  output << utf8convert << "  <protocolVersion>" << version        << "</protocolVersion>\n";
72  output << utf8convert << "  <adminEmail>"      << maintainer     << "</adminEmail>\n";
73
74  if(version == "2.0"){
75    // earliestDatestamp *should* be the YYYY-MM-DD format of the oldest lastmodified record in the
76    // repository, but we're just setting it to be the default oldest possible date - ugly, but judged
77    // not to be worth the effort of trolling through all the lastmodified dates (by others with more
78    // say than me)
79    output << utf8convert << "  <earliestDatestamp>1970-01-01</earliestDatestamp>\n";
80    output << utf8convert << "  <deletedRecord>no</deletedRecord>\n";
81    output << utf8convert << "  <granularity>YYYY-MM-DD</granularity>\n";
82  }
83  // list the oai identifier
84  output << "  <description>\n";
85  if (id_version == "1.1") {
86
87    output << "    <oai-identifier xmlns=\"http://www.openarchives.org/OAI/1.1/oai-identifier\"\n";
88    output << "        xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
89    output << "        xsi:schemaLocation=\"http://www.openarchives.org/OAI/1.1/oai-identifier\n";
90    output << "           http://www.openarchives.org/OAI/1.1/oai-identifier.xsd\">\n";
91  } else {
92
93    output << "    <oai-identifier xmlns=\"http://www.openarchives.org/OAI/2.0/oai-identifier\"\n";
94    output << "      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
95    output << "      xsi:schemaLocation=\"http://www.openarchives.org/OAI/2.0/oai-identifier\n";
96    output << "        http://www.openarchives.org/OAI/2.0/oai-identifier.xsd\">\n";
97
98   
99  }
100
101  output << "      <scheme>oai</scheme>\n";
102  output << "      <repositoryIdentifier>"<< repositoryId <<"</repositoryIdentifier>\n";
103  output << "      <delimiter>:</delimiter>\n";
104  output << "      <sampleIdentifier>oai:"<<repositoryId<<":demo:HASH983080b052e9230b7ccf94</sampleIdentifier>\n";
105  output << "    </oai-identifier>\n";
106
107  // list all configuration information
108  text_tmap::iterator here = this->configuration->getInformation()->begin();
109  text_tmap::iterator end  = this->configuration->getInformation()->end();
110  if (here != end) {
111    output << "    <gsdl xmlns=\"http://www.greenstone.org/namespace/gsdl_oaiinfo/1.0/gsdl_oaiinfo\"\n";
112    output << "       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
113    output << "       xsi:schemaLocation=\"http://www.greenstone.org/namespace/gsdl_oaiinfo/1.0/gsdl_oaiinfo\n";
114    output << "         http://www.greenstone.org/namespace/gsdl_oaiinfo/1.0/gsdl_oaiinfo.xsd\">\n";
115 
116
117    while (here != end) {
118      output << utf8convert << "      <Metadata name=\"" << here->first << "\">" << here->second << "</Metadata>\n";
119      ++here;
120    }
121    output << "    </gsdl>\n";
122  }
123 
124  output << utf8convert << "  </description>\n";
125 
126  return true;
127}
128
Note: See TracBrowser for help on using the browser.