source: trunk/gsdl/src/recpt/action.h@ 12507

Last change on this file since 12507 was 12507, checked in by kjdon, 18 years ago

Added Stefan's fileupload code to replace use of cgicc by depositor. getargsinfo declaration changed

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