source: trunk/greenorg/src/recpt/action.h@ 9483

Last change on this file since 9483 was 5503, checked in by sjboddie, 21 years ago

* empty log message *

  • Property svn:mime-type set to application/octet-stream
File size: 6.2 KB
Line 
1/**********************************************************************
2 *
3 * action.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 ACTION_H
28#define ACTION_H
29
30#include "gsdlconf.h"
31#include "text_t.h"
32#include "cgiargs.h"
33#include "display.h"
34
35#if defined(GSDL_USE_OBJECTSPACE)
36# include <ospace\std\iostream>
37#elif defined(GSDL_USE_IOS_H)
38# include <iostream.h>
39#else
40# include <iostream>
41#endif
42
43
44class action {
45protected:
46 cgiargsinfoclass argsinfo;
47 text_t gsdlhome;
48 text_t gdbmhome;
49
50public:
51 action ();
52 virtual ~action ();
53
54 // configure should be called once for each configuration line
55 virtual void configure (const text_t &key, const text_tarray &cfgline);
56
57 // init should be called after all the configuration is done but
58 // before any other methods are called
59 virtual bool init (ostream &logout);
60
61 // returns the "a" argument value that will specify this action
62 // this name should be short but does not have to be one character
63 // long
64 virtual text_t get_action_name ();
65
66 // check_cgiargs should be called before get_cgihead_info,
67 // define_external_macros, and do_action. If an error is found
68 // a message will be written to logout, if the error is severe
69 // then the function will return false and no page content
70 // should be produced based on the arguments.
71 virtual bool check_cgiargs (cgiargsinfoclass &argsinfo, cgiargsclass &args,
72 ostream &logout);
73
74 // check_external_cgiargs should be called after check_cgiargs
75 // for all actions. It should only be used to override some other
76 // normal behaviour, for example, producing a login page when
77 // the requested page needs authentication.
78 virtual bool check_external_cgiargs (cgiargsinfoclass &argsinfo,
79 cgiargsclass &args,
80 outconvertclass &outconvert,
81 const text_t &saveconf,
82 ostream &logout);
83
84 // get_cgihead_info determines the cgi header information for
85 // a set of cgi arguments. If response contains location then
86 // response_data contains the redirect address. If reponse
87 // contains content then reponse_data contains the content-type.
88 // Note that images can now be produced by the receptionist.
89 virtual void get_cgihead_info (cgiargsclass &args, response_t &response,
90 text_t &response_data, ostream &logout);
91
92 // uses_display should return true if the receptionist should return
93 // true if the display class is needed to output the page content.
94 // The default is to return true.
95 virtual bool uses_display (cgiargsclass &args);
96
97 // define all the macros which are related to pages generated
98 // by this action
99 virtual void define_internal_macros (displayclass &disp, cgiargsclass &args,
100 ostream &logout);
101
102 // define all the macros which might be used by other actions
103 // to produce pages. These macros should be well documented.
104 virtual void define_external_macros (displayclass &disp, cgiargsclass &args,
105 ostream &logout);
106
107 // returns false if there was an error which prevented the action
108 // from outputing anything.
109 virtual bool do_action (cgiargsclass &args, displayclass &disp,
110 outconvertclass &outconvert, ostream &textout,
111 ostream &logout);
112
113 // getargsinfo should be called after all configuration files
114 // have been read
115 cgiargsinfoclass getargsinfo () {return argsinfo;};
116};
117
118
119// The actionptr function does not 'own' the action. The
120// action should be deleted by the code which created it.
121class actionptr {
122public:
123 action *a;
124
125 actionptr () {a=NULL;}
126};
127
128bool operator==(const actionptr &x, const actionptr &y);
129bool operator<(const actionptr &x, const actionptr &y);
130
131typedef map<text_t, actionptr, lttext_t> actionptrmap;
132
133// contains a list of actions indexed by their name
134class actionmapclass {
135protected:
136 actionptrmap actionptrs;
137
138public:
139 // type support for actionptrmap
140 typedef actionptrmap::iterator iterator;
141 typedef actionptrmap::const_iterator const_iterator;
142 typedef actionptrmap::reference reference;
143 typedef actionptrmap::const_reference const_reference;
144 typedef actionptrmap::size_type size_type;
145
146 typedef actionptrmap::difference_type difference_type;
147 typedef actionptrmap::const_reverse_iterator const_reverse_iterator;
148 typedef actionptrmap::reverse_iterator reverse_iterator;
149
150 // basic container support
151 iterator begin () {return actionptrs.begin();}
152 const_iterator begin () const {return actionptrs.begin();}
153 iterator end () {return actionptrs.end();}
154 const_iterator end () const {return actionptrs.end();}
155
156 void erase(iterator pos) {actionptrs.erase(pos);}
157 void erase(iterator first, iterator last) {actionptrs.erase(first, last);}
158 actionmapclass &operator=(const actionmapclass &x) {actionptrs=x.actionptrs;return *this;}
159
160 bool empty () const {return actionptrs.empty();}
161 size_type size() const {return actionptrs.size();}
162
163
164 // added functionality
165 void clear () {actionptrs.erase(actionptrs.begin(),actionptrs.end());}
166
167 // theaction remains the property of the calling code but
168 // should not be deleted until it is removed from this list.
169 void addaction (action *theaction);
170
171 // getaction will return NULL if the action could not be found
172 action *getaction (const text_t &key);
173};
174
175
176#endif
Note: See TracBrowser for help on using the repository browser.