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

Last change on this file since 22557 was 22557, checked in by kjdon, 14 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
File size: 5.3 KB
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 repository browser.