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

Last change on this file since 24114 was 24114, checked in by ak19, 13 years ago

Now GS2 works out the earliestDatestamp of the repository in the manner GS3 does it (read each OAI-enabled collection's build.cfg to get the collection's earliestDatestamp field and choose the oldest such date among the OAI collections). Previously GS2 used to always set the earliestDatestamp to the unix epoch of 1970, which, while it would validate, wasn't the right thing to do as it wouldn't help with resumptiontokens and other date based things. Checked that the GS server still validates.

  • Property svn:executable set to *
File size: 11.7 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
51enum comerror_t {noError, authenticationFailure, protocolError,
52 configurationError, systemProblem, syntaxError};
53text_t get_comerror_string (comerror_t err);
54
55
56// ShortColInfo ::= SEQUENCE {
57// name GeneralString,
58// host GeneralString,
59// port INTEGER
60// }
61struct ShortColInfo_t {
62 void clear ();
63 ShortColInfo_t () {clear();}
64
65 text_t name;
66 text_t host;
67 int port;
68};
69
70// for collection metadata: metadata name -> lang -> value
71// for collection macros: macro name -> params -> value
72typedef map<text_t, text_tmap, lttext_t> collectionmeta_map;
73
74#define CCSUniformSearchResultsFormatting 1
75
76#define SIcasefold 1
77#define SIstem 2
78#define SIaccentfold 4
79
80struct ColInfoResponse_t {
81 void clear ();
82 ColInfoResponse_t () {clear();}
83 text_t get_collectionmeta(text_t name, text_t lang);
84
85 ShortColInfo_t shortInfo;
86 bool useBook; //whether we want to display the book
87 bool isPublic;
88 bool isBeta;
89 bool isSegmented;
90 bool isCollectGroup; // used to group a set of collections as one item on the home page
91 unsigned long buildDate;
92 text_tarray ccsCols; // empty if collection does not use cross-collection searching
93 int ccsOptions; // uses CCS #defines from above
94 int stemIndexes; // uses SI #defines from above
95 text_tarray languages;
96 unsigned long numDocs; // 0 if not known
97 unsigned long numSections; // 0 if not known
98 unsigned long numWords; // 0 if not known
99 unsigned long numBytes; // 0 if not known
100 collectionmeta_map collectionmeta;
101 text_tmap format;
102 collectionmeta_map collection_macros; // for collectionmacro config directive (> gsdl 2.53)
103 text_tmap building;
104 text_t httpdomain; // GRB: could these two http items need removing
105 text_t httpprefix;
106 text_t receptionist;
107 text_t buildType; // 'mg' or 'mgpp' or 'lucene'
108 text_t infodbType; // 'gdbm', 'sqlite', etc.
109 text_t authenticate; // 'document' or 'collection'
110 text_t auth_group; // 'mygroup' 'yourgroup'
111 text_tmap public_documents; // the acl to allow access to listed documents
112 text_tmap private_documents; // the acl to disallow access to listed documents
113 text_tmap dynamic_classifiers;
114 text_t earliestDatestamp; // For OAIserver validation. Time since linux Epoch, expressed as (long) integer value in string form
115};
116
117
118// -- filter options which might be supported for the QueryFilter
119// --
120// -- onePerQuery StartResults integer
121// -- onePerQuery EndResults integer
122// -- onePerQuery QueryType enumerated (boolean, ranked)
123// -- onePerTerm Term string ???
124// -- onePerTerm Casefold boolean
125// -- onePerTerm Stem boolean
126// -- onePerTerm Index enumerated
127// -- onePerTerm Subcollection enumerated
128// --
129// -- filter options which might be supported for the BrowseFilter
130// --
131// -- onePerQuery StartResults integer
132// -- onePerQuery EndResults integer
133// -- onePerQuery ParentNode string ("" will return the browsing available)
134// --
135// -- The NullFilter always returns the set it was given, it doesn't have
136// -- any options
137
138// InfoFiltersResponse ::= SEQUENCE {
139// filterNames StringSet
140// }
141struct InfoFiltersResponse_t {
142 void clear ();
143
144 text_tset filterNames;
145};
146
147// InfoFilterOptionsRequest ::= SEQUENCE {
148// filterName GeneralString
149// }
150struct InfoFilterOptionsRequest_t {
151 void clear ();
152
153 text_t filterName;
154};
155
156// FilterOption ::= SEQUENCE {
157// name GeneralString,
158// type ENUMERATED {booleant(0), integert(1), enumeratedt(2), stringt(3)},
159// repeatable ENUMERATED {onePerQuery(0), onePerTerm(1), nPerTerm(2)},
160// defaultValue GeneralString,
161// -- the interpretation of the validValues depends on the type
162// -- for boolean: the first value is the false value, the second is true value
163// -- for integer: the first value is the minimum, the second the maximum
164// -- for enumerated: all values a listed
165// -- for string: this value is ignored
166// validValues StringSequence
167// }
168struct FilterOption_t {
169 void clear ();
170 void check_defaultValue ();
171 FilterOption_t () {clear();}
172
173 text_t name;
174
175 enum type_t {booleant=0, integert=1, enumeratedt=2, stringt=3};
176 type_t type;
177
178 enum repeatable_t {onePerQuery=0, onePerTerm=1, nPerTerm=2};
179 repeatable_t repeatable;
180
181 text_t defaultValue;
182 text_tarray validValues;
183};
184
185bool operator==(const FilterOption_t &x, const FilterOption_t &y);
186bool operator<(const FilterOption_t &x, const FilterOption_t &y);
187
188
189typedef map<text_t, FilterOption_t, lttext_t> FilterOption_tmap;
190
191
192// InfoFilterOptionsResponse ::= SEQUENCE {
193// filterOptions SET OF FilterOption
194// }
195struct InfoFilterOptionsResponse_t {
196 void clear ();
197
198 FilterOption_tmap filterOptions;
199};
200
201
202// OptionValue ::= SEQUENCE {
203// name GeneralString,
204// value GeneralString
205// }
206struct OptionValue_t {
207 void clear ();
208
209 text_t name;
210 text_t value;
211};
212
213typedef vector<OptionValue_t> OptionValue_tarray;
214
215
216// -- Terms are presented in the same order that they are requested,
217// -- any information relating to the terms is in reference to the
218// -- index specified for that term.
219//
220// FilterRequest ::= SEQUENCE {
221// filterName [0] GeneralString,
222// filterOptions [1] IMPLICIT SEQUENCE OF OptionValue,
223// docSet [2] IMPLICIT StringSequence, -- the OID "" represents everything
224// filterResultOptions [3] IMPLICIT BIT STRING {termFreq(0), matchTerms(1), OID(2),
225// subCol(3), ranking(4), docFreq(5),
226// metadata(6)}
227//
228// -- the next set of options are for the metadata request,
229// -- they can be left blank if metadata is not wanted
230// requestParams [4] IMPLICIT GeneralString, -- used to negotiate the metadata content
231// refParams [5] IMPLICIT GeneralString, -- used to decide whether to return a
232// -- reference to the data or the actual data
233// fields [6] IMPLICIT StringSet
234// getParents [7] IMPLICIT BOOLEAN -- gets metadata of all parents too
235// }
236#define FRtermFreq 1
237#define FRmatchTerms 2
238#define FROID 4
239#define FRsubCol 8
240#define FRranking 16
241#define FRdocFreq 32
242#define FRmetadata 64
243// used to indicate a full text browse query for mgpp
244#define FRfullTextBrowse 128
245
246struct FilterRequest_t {
247 void clear ();
248 FilterRequest_t () {clear();}
249
250 text_t filterName;
251 text_t filterLang; // non empty if we want info to be retrived in language specific
252 OptionValue_tarray filterOptions;
253 text_tarray docSet; // empty if not used
254 int filterResultOptions; // use the FR* defines above
255
256 text_t requestParams; // empty if not used
257 text_t refParams; // empty if not used
258 text_tset fields; // empty if not used
259 bool getParents; // defaults to false
260};
261
262
263// TermInfo ::= SEQUENCE {
264// term [0] GeneralString,
265// freq [1] IMPLICIT INTEGER, -- 0 if not requested
266// matchTerms [2] IMPLICIT StringSequence -- empty if not requested
267// }
268struct TermInfo_t {
269 void clear ();
270 TermInfo_t () {clear();}
271
272 text_t term;
273 int freq; // 0 if not requested
274 text_tarray matchTerms; // empty if not requested
275};
276
277typedef vector<TermInfo_t> TermInfo_tarray;
278
279
280// MetadataInfo ::= SEQUENCE {
281// params [0] IMPLICIT GeneralString,
282// isRef [1] IMPLICIT BOOLEAN,
283// values [3] IMPLICIT SEQUENCE OF GeneralString,
284// name [4] IMPLICIT GeneralString
285// }
286struct MetadataInfo_t {
287 text_t params;
288 bool isRef;
289 text_tarray values;
290 MetadataInfo_t *parent;
291
292 void clear ();
293 MetadataInfo_t ();
294 MetadataInfo_t (const MetadataInfo_t &x); // copy constructor
295 ~MetadataInfo_t ();
296 MetadataInfo_t &operator=(const MetadataInfo_t &x);
297};
298
299typedef map<text_t, MetadataInfo_t, lttext_t> MetadataInfo_tmap;
300
301// ResultDocInfo ::= SEQUENCE {
302// OID [0] IMPLICIT GeneralString,
303// ranking [1] IMPLICIT INTEGER, -- 0 if not requested, range 0-10000
304// docFreq [2] IMPLICIT SEQUENCE OF INTEGER, -- empty if not requested
305// metadata [3] IMPLICIT SEQUENCE OF MetadataInfo, -- no longer a SEQUENCE (SET maybe??)
306// classifier_metadata_type [4] IMPLICIT GeneralString, -- empty if not requested
307// classifier_metadata_offset [5] IMPLICIT INTEGER, -- 0 if not requested
308// }
309struct ResultDocInfo_t {
310 void clear ();
311 ResultDocInfo_t () {clear();}
312
313 text_t OID;
314 int result_num; // place in results list
315 int ranking; // 0 if not requested (real ranking*10000)
316 int num_terms_matched; // not available on all versions of mg
317 int num_phrase_match; // not available on all versions of mg
318 vector<int> docFreq; // empty if not requested
319 MetadataInfo_tmap metadata; // empty if not requested
320 text_t classifier_metadata_type; // empty if not requested
321 int classifier_metadata_offset; // 0 if not requested
322 ResultDocInfo_t &operator=(const ResultDocInfo_t &x);
323};
324
325typedef vector<ResultDocInfo_t> ResultDocInfo_tarray;
326
327
328// FilterResponse ::= SEQUENCE {
329// numDocs [0] IMPLICIT INTEGER,
330// isApprox [1] ENUMERATED {Exact(0), Approximate(1), MoreThan(2)}, -- whether numDocs is approximate
331// termInfo [2] IMPLICIT SEQUENCE OF TermInfo, -- empty if not required
332// docInfo [3] IMPLICIT SEQUENCE OF ResultDocInfo -- empty if not required
333// }
334
335enum isapprox {Exact=0, Approximate=1, MoreThan=2};
336
337struct FilterResponse_t {
338 void clear ();
339 FilterResponse_t () {clear();}
340
341 text_t error_message; // Currently only used by Lucene
342 int numDocs;
343 isapprox isApprox;
344 TermInfo_tarray termInfo; // empty if not requested
345 ResultDocInfo_tarray docInfo; // empty if not requested
346 text_tset stopwords;
347
348 FilterResponse_t &operator=(const FilterResponse_t &x);
349};
350
351
352// DocumentRequest ::= SEQUENCE {
353// OID GeneralString,
354// docType GeneralString,
355// docFormat GeneralString
356// }
357struct DocumentRequest_t {
358 void clear ();
359 DocumentRequest_t () {clear();}
360
361 text_t OID;
362 text_t docType;
363 text_t docFormat;
364};
365
366
367// DocumentResponse ::= SEQUENCE {
368// doc OCTET STRING
369// }
370
371struct DocumentResponse_t {
372 void clear ();
373 DocumentResponse_t () {clear();}
374
375 text_t doc;
376};
377
378
379#endif
380
Note: See TracBrowser for help on using the repository browser.