source: main/trunk/greenstone2/runtime-src/src/colservr/filter.h@ 31387

Last change on this file since 31387 was 31387, checked in by ak19, 7 years ago

Round 1 of commits for getting OAI deletion policy to work with GS2 (server end). The perl code writing out the OAI db and the GS3 server code implementing the deletion policy had already been completed earlier (end 2016).

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 4.6 KB
Line 
1/**********************************************************************
2 *
3 * filter.h --
4 * Copyright (C) 1999 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 FILTER_H
28#define FILTER_H
29
30#include "gsdlconf.h"
31#include "text_t.h"
32#include "comtypes.h"
33
34
35class filterclass {
36protected:
37 text_t gsdlhome;
38 text_t collecthome;
39 text_t dbhome;
40 text_t collection;
41 text_t collectdir;
42
43 FilterOption_tmap filterOptions;
44
45public:
46 filterclass ();
47 virtual ~filterclass ();
48
49 // configure should be called once for each configuration line
50 // default configures the default filter options
51 virtual void configure (const text_t &key, const text_tarray &cfgline);
52
53 // init should be called after all the configuration is done but
54 // before any other methods are called
55 // default checks all the filter option defaults
56 virtual bool init (ostream &logout);
57
58 // returns the name of this filter
59 virtual text_t get_filter_name ();
60
61 // returns the current filter options
62 virtual void get_filteroptions (InfoFilterOptionsResponse_t &response,
63 comerror_t &err, ostream &logout);
64
65 virtual void filter (const FilterRequest_t &request,
66 FilterResponse_t &response,
67 comerror_t &err, ostream &logout);
68
69 protected:
70 text_t resolve_db_filename(const text_t& idx,const text_t& file_ext);
71 text_t resolve_oaidb_filename(const text_t& file_ext);
72 text_t getcollectionpath();
73
74};
75
76
77// The filterptr class does not 'own' the filter. The
78// filter should be deleted by the code which created it.
79class filterptr {
80public:
81 filterclass *f;
82
83 filterptr () {f=NULL;}
84 ~filterptr () {}
85};
86
87bool operator==(const filterptr &x, const filterptr &y);
88bool operator<(const filterptr &x, const filterptr &y);
89
90
91typedef map<text_t, filterptr, lttext_t> filterptrmap;
92
93// contains a list of filters indexed by their name
94class filtermapclass {
95protected:
96 filterptrmap filterptrs;
97
98public:
99 // type support for filterptrmap
100 typedef filterptrmap::iterator iterator;
101 typedef filterptrmap::const_iterator const_iterator;
102 typedef filterptrmap::reference reference;
103 typedef filterptrmap::const_reference const_reference;
104 typedef filterptrmap::size_type size_type;
105
106 typedef filterptrmap::difference_type difference_type;
107 typedef filterptrmap::const_reverse_iterator const_reverse_iterator;
108 typedef filterptrmap::reverse_iterator reverse_iterator;
109
110 // basic container support
111 iterator begin () {return filterptrs.begin();}
112 const_iterator begin () const {return filterptrs.begin();}
113 iterator end () {return filterptrs.end();}
114 const_iterator end () const {return filterptrs.end();}
115
116 void erase(iterator pos) {filterptrs.erase(pos);}
117 void erase(iterator first, iterator last) {filterptrs.erase(first, last);}
118 filtermapclass &operator=(const filtermapclass &x) {filterptrs=x.filterptrs;return *this;}
119
120 bool empty () const {return filterptrs.empty();}
121 size_type size() const {return filterptrs.size();}
122
123
124 // added functionality
125 void clear () {filterptrs.erase(filterptrs.begin(),filterptrs.end());}
126
127 // thefilter remains the property of the calling code but
128 // should not be deleted until it is removed from this list.
129 void addfilter (filterclass *thefilter);
130
131 // getfilter will return NULL if the filter could not be found
132 filterclass *getfilter (const text_t &key);
133};
134
135
136
137// some useful functions for dealing with document sets
138
139// intersect places the result in set1
140void intersect (text_tset &set1, const text_tset &set2);
141void intersect (text_tarray &set1, const text_tset &set2);
142void intersect (text_tarray &set1, const text_tarray &set2);
143
144// tests to see if el is in set
145bool in_set (const text_tset &set1, const text_t &el);
146bool in_set (const text_tarray &set1, const text_t &el);
147
148#endif
Note: See TracBrowser for help on using the repository browser.