source: main/trunk/greenstone2/runtime-src/src/colservr/comtypes.h@ 31903

Last change on this file since 31903 was 31903, checked in by ak19, 3 years ago

I hope these are all the changes necessary on the runtime side of GS2 to get the OAI server validation working for GS2: instead of working out the earliest datetime stamp of the OAI repository by comparing the builddate in index/build.cfg of each OAI collection and selecting the earliest, the oai-inf.db is now storing the special earliesttimestamp record. The timestamp of this record represents its collection's earliest timestamp. And the earliest of these among all OAI collections is now the earliest datetime of the OAI repository.

  • Property svn:executable set to *
File size: 12.5 KB
Line 
1/**********************************************************************
2 *
3 * comtypes.h --
4 * Copyright (C) 1999,2004 The New Zealand Digital Library Project
5 *
6 * A component of the Greenstone digital library software
7 * from the New Zealand Digital Library Project at the
8 * University of Waikato, New Zealand.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 *********************************************************************/
25
26
27#ifndef COMTYPES_H
28#define COMTYPES_H
29
30#include "gsdlconf.h"
31#include "text_t.h"
32
33#if defined(GSDL_USE_OBJECTSPACE)
34# include <ospace\std\vector>
35# include <ospace\std\list>
36# include <ospace\std\memory> // for pair
37# include <ospace\std\map>
38#elif defined(GSDL_USE_STL_H)
39# include <vector.h>
40# include <list.h>
41# include <memory.h> // for pair
42# include <map.h>
43#else
44# include <vector>
45# include <list>
46# include <memory> // for pair
47# include <map>
48#endif
49
50
51const text_t OAI_EARLIESTTIMESTAMP_OID = "earliesttimestamp";
52 // https://www.tutorialspoint.com/cplusplus/cpp_constants_literals.htm
53
54enum comerror_t {noError, authenticationFailure, protocolError,
55 configurationError, systemProblem, syntaxError};
56text_t get_comerror_string (comerror_t err);
57
58
59// ShortColInfo ::= SEQUENCE {
60// name GeneralString,
61// host GeneralString,
62// port INTEGER
63// }
64struct ShortColInfo_t {
65 void clear ();
66 ShortColInfo_t () {clear();}
67
68 text_t name;
69 text_t host;
70 int port;
71};
72
73// for collection metadata: metadata name -> lang -> value
74// for collection macros: macro name -> params -> value
75typedef map<text_t, text_tmap, lttext_t> collectionmeta_map;
76
77#define CCSUniformSearchResultsFormatting 1
78
79#define SIcasefold 1
80#define SIstem 2
81#define SIaccentfold 4
82
83struct ColInfoResponse_t {
84 void clear ();
85 ColInfoResponse_t () {clear();}
86 text_t get_collectionmeta(text_t name, text_t lang);
87
88 ShortColInfo_t shortInfo;
89 bool useBook; //whether we want to display the book
90 bool isPublic;
91 bool isBeta;
92 bool isSegmented;
93 bool isCollectGroup; // used to group a set of collections as one item on the home page
94 unsigned long buildDate;
95 text_tarray ccsCols; // empty if collection does not use cross-collection searching
96 int ccsOptions; // uses CCS #defines from above
97 int stemIndexes; // uses SI #defines from above
98 text_tarray languages;
99 unsigned long numDocs; // 0 if not known
100 unsigned long numSections; // 0 if not known
101 unsigned long numWords; // 0 if not known
102 unsigned long numBytes; // 0 if not known
103 collectionmeta_map collectionmeta;
104 text_tmap format;
105 collectionmeta_map collection_macros; // for collectionmacro config directive (> gsdl 2.53)
106 text_tmap building;
107 text_t httpdomain; // GRB: could these two http items need removing
108 text_t httpprefix;
109 text_t receptionist;
110 text_t buildType; // 'mg' or 'mgpp' or 'lucene'
111 text_t infodbType; // 'gdbm', 'sqlite', etc.
112 text_t authenticate; // 'document' or 'collection'
113 text_t auth_group; // 'mygroup' 'yourgroup'
114 text_tmap public_documents; // the acl to allow access to listed documents
115 text_tmap private_documents; // the acl to disallow access to listed documents
116 text_tmap dynamic_classifiers;
117 text_t earliestDatestamp; // For OAIserver validation. Time since linux Epoch, expressed as (long) integer value in string form
118 // This field stored the builddate value from a collection's index/build.cfg file.
119 // This field earliestDatestamp was used when oaiaction.calcEarliestDatestamp() needed to
120 // determine the earliest timestamp of the repository, by selecting the earliestDatestamp among
121 // all oai collections. Now it's no longer used by OAI, as that resorts to consulting oai-inf.db
122 // of each collection, which has a collection's earliest timestamp stored, to work out the
123 // earliest timestamp among all collections. But the build.cfg builddate stored in the
124 // earliestDatestamp field may still be useful in future for some purpose, so leaving it alone.
125
126};
127
128
129// -- filter options which might be supported for the QueryFilter
130// --
131// -- onePerQuery StartResults integer
132// -- onePerQuery EndResults integer
133// -- onePerQuery QueryType enumerated (boolean, ranked)
134// -- onePerTerm Term string ???
135// -- onePerTerm Casefold boolean
136// -- onePerTerm Stem boolean
137// -- onePerTerm Index enumerated
138// -- onePerTerm Subcollection enumerated
139// --
140// -- filter options which might be supported for the BrowseFilter
141// --
142// -- onePerQuery StartResults integer
143// -- onePerQuery EndResults integer
144// -- onePerQuery ParentNode string ("" will return the browsing available)
145// --
146// -- The NullFilter always returns the set it was given, it doesn't have
147// -- any options
148
149// InfoFiltersResponse ::= SEQUENCE {
150// filterNames StringSet
151// }
152struct InfoFiltersResponse_t {
153 void clear ();
154
155 text_tset filterNames;
156};
157
158// InfoFilterOptionsRequest ::= SEQUENCE {
159// filterName GeneralString
160// }
161struct InfoFilterOptionsRequest_t {
162 void clear ();
163
164 text_t filterName;
165};
166
167// FilterOption ::= SEQUENCE {
168// name GeneralString,
169// type ENUMERATED {booleant(0), integert(1), enumeratedt(2), stringt(3)},
170// repeatable ENUMERATED {onePerQuery(0), onePerTerm(1), nPerTerm(2)},
171// defaultValue GeneralString,
172// -- the interpretation of the validValues depends on the type
173// -- for boolean: the first value is the false value, the second is true value
174// -- for integer: the first value is the minimum, the second the maximum
175// -- for enumerated: all values a listed
176// -- for string: this value is ignored
177// validValues StringSequence
178// }
179struct FilterOption_t {
180 void clear ();
181 void check_defaultValue ();
182 FilterOption_t () {clear();}
183
184 text_t name;
185
186 enum type_t {booleant=0, integert=1, enumeratedt=2, stringt=3};
187 type_t type;
188
189 enum repeatable_t {onePerQuery=0, onePerTerm=1, nPerTerm=2};
190 repeatable_t repeatable;
191
192 text_t defaultValue;
193 text_tarray validValues;
194};
195
196bool operator==(const FilterOption_t &x, const FilterOption_t &y);
197bool operator<(const FilterOption_t &x, const FilterOption_t &y);
198
199
200typedef map<text_t, FilterOption_t, lttext_t> FilterOption_tmap;
201
202
203// InfoFilterOptionsResponse ::= SEQUENCE {
204// filterOptions SET OF FilterOption
205// }
206struct InfoFilterOptionsResponse_t {
207 void clear ();
208
209 FilterOption_tmap filterOptions;
210};
211
212
213// OptionValue ::= SEQUENCE {
214// name GeneralString,
215// value GeneralString
216// }
217struct OptionValue_t {
218 void clear ();
219
220 text_t name;
221 text_t value;
222};
223
224typedef vector<OptionValue_t> OptionValue_tarray;
225
226
227// -- Terms are presented in the same order that they are requested,
228// -- any information relating to the terms is in reference to the
229// -- index specified for that term.
230//
231// FilterRequest ::= SEQUENCE {
232// filterName [0] GeneralString,
233// filterOptions [1] IMPLICIT SEQUENCE OF OptionValue,
234// docSet [2] IMPLICIT StringSequence, -- the OID "" represents everything
235// filterResultOptions [3] IMPLICIT BIT STRING {termFreq(0), matchTerms(1), OID(2),
236// subCol(3), ranking(4), docFreq(5),
237// metadata(6)}
238//
239// -- the next set of options are for the metadata request,
240// -- they can be left blank if metadata is not wanted
241// requestParams [4] IMPLICIT GeneralString, -- used to negotiate the metadata content
242// refParams [5] IMPLICIT GeneralString, -- used to decide whether to return a
243// -- reference to the data or the actual data
244// fields [6] IMPLICIT StringSet
245// getParents [7] IMPLICIT BOOLEAN -- gets metadata of all parents too
246// }
247#define FRtermFreq 1
248#define FRmatchTerms 2
249#define FROID 4
250#define FRsubCol 8
251#define FRranking 16
252#define FRdocFreq 32
253#define FRmetadata 64
254// used to indicate a full text browse query for mgpp
255#define FRfullTextBrowse 128
256#define FROAI 256
257
258struct FilterRequest_t {
259 void clear ();
260 FilterRequest_t () {clear();}
261
262 text_t filterName;
263 text_t filterLang; // non empty if we want info to be retrived in language specific
264 OptionValue_tarray filterOptions;
265 text_tarray docSet; // empty if not used
266 int filterResultOptions; // use the FR* defines above
267
268 text_t requestParams; // empty if not used
269 text_t refParams; // empty if not used
270 text_tset fields; // empty if not used
271 bool getParents; // defaults to false
272};
273
274
275// TermInfo ::= SEQUENCE {
276// term [0] GeneralString,
277// freq [1] IMPLICIT INTEGER, -- 0 if not requested
278// matchTerms [2] IMPLICIT StringSequence -- empty if not requested
279// }
280struct TermInfo_t {
281 void clear ();
282 TermInfo_t () {clear();}
283
284 text_t term;
285 int freq; // 0 if not requested
286 text_tarray matchTerms; // empty if not requested
287};
288
289typedef vector<TermInfo_t> TermInfo_tarray;
290
291
292// MetadataInfo ::= SEQUENCE {
293// params [0] IMPLICIT GeneralString,
294// isRef [1] IMPLICIT BOOLEAN,
295// values [3] IMPLICIT SEQUENCE OF GeneralString,
296// name [4] IMPLICIT GeneralString
297// }
298struct MetadataInfo_t {
299 text_t params;
300 bool isRef;
301 text_tarray values;
302 MetadataInfo_t *parent;
303
304 void clear ();
305 MetadataInfo_t ();
306 MetadataInfo_t (const MetadataInfo_t &x); // copy constructor
307 ~MetadataInfo_t ();
308 MetadataInfo_t &operator=(const MetadataInfo_t &x);
309};
310
311typedef map<text_t, MetadataInfo_t, lttext_t> MetadataInfo_tmap;
312
313// ResultDocInfo ::= SEQUENCE {
314// OID [0] IMPLICIT GeneralString,
315// ranking [1] IMPLICIT INTEGER, -- 0 if not requested, range 0-10000
316// docFreq [2] IMPLICIT SEQUENCE OF INTEGER, -- empty if not requested
317// metadata [3] IMPLICIT SEQUENCE OF MetadataInfo, -- no longer a SEQUENCE (SET maybe??)
318// classifier_metadata_type [4] IMPLICIT GeneralString, -- empty if not requested
319// classifier_metadata_offset [5] IMPLICIT INTEGER, -- 0 if not requested
320// }
321struct ResultDocInfo_t {
322 void clear ();
323 ResultDocInfo_t () {clear();}
324
325 text_t OID;
326 int result_num; // place in results list
327 int ranking; // 0 if not requested (real ranking*10000)
328 int num_terms_matched; // not available on all versions of mg
329 int num_phrase_match; // not available on all versions of mg
330 vector<int> docFreq; // empty if not requested
331 MetadataInfo_tmap metadata; // empty if not requested
332 text_t classifier_metadata_type; // empty if not requested
333 int classifier_metadata_offset; // 0 if not requested
334 ResultDocInfo_t &operator=(const ResultDocInfo_t &x);
335};
336
337typedef vector<ResultDocInfo_t> ResultDocInfo_tarray;
338
339
340// FilterResponse ::= SEQUENCE {
341// numDocs [0] IMPLICIT INTEGER,
342// isApprox [1] ENUMERATED {Exact(0), Approximate(1), MoreThan(2)}, -- whether numDocs is approximate
343// termInfo [2] IMPLICIT SEQUENCE OF TermInfo, -- empty if not required
344// docInfo [3] IMPLICIT SEQUENCE OF ResultDocInfo -- empty if not required
345// }
346
347enum isapprox {Exact=0, Approximate=1, MoreThan=2};
348
349struct FilterResponse_t {
350 void clear ();
351 FilterResponse_t () {clear();}
352
353 text_t error_message; // Currently only used by Lucene
354 int numDocs;
355 isapprox isApprox;
356 TermInfo_tarray termInfo; // empty if not requested
357 ResultDocInfo_tarray docInfo; // empty if not requested
358 text_tset stopwords;
359
360 FilterResponse_t &operator=(const FilterResponse_t &x);
361};
362
363
364// DocumentRequest ::= SEQUENCE {
365// OID GeneralString,
366// docType GeneralString,
367// docFormat GeneralString
368// }
369struct DocumentRequest_t {
370 void clear ();
371 DocumentRequest_t () {clear();}
372
373 text_t OID;
374 text_t docType;
375 text_t docFormat;
376};
377
378
379// DocumentResponse ::= SEQUENCE {
380// doc OCTET STRING
381// }
382
383struct DocumentResponse_t {
384 void clear ();
385 DocumentResponse_t () {clear();}
386
387 text_t doc;
388};
389
390
391#endif
392
Note: See TracBrowser for help on using the repository browser.