]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig2/parser.h
Small refactoring in RESETABLE.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig2 / parser.h
1  /*
2  $Revision: 1.18 $
3  $Date: 2009/07/30 18:57:37 $
4  $Author: nobunaga $
5  */
6
7 #ifndef PARSER_H
8 #define PARSER_H
9
10 #include <list>
11 #include <string>
12
13 using namespace std;
14
15 #include "resetable.h"
16 #include "const.h"
17 #include "store.h"
18 #include "admins.h"
19 #include "users.h"
20 #include "message.h"
21
22 //-----------------------------------------------------------------------------
23 class BASE_PARSER {
24 public:
25     BASE_PARSER()
26         : admins(NULL),
27           users(NULL),
28           tariffs(NULL),
29           store(NULL),
30           settings(NULL),
31           currAdmin(NULL),
32           depth(0)
33     { }
34     virtual ~BASE_PARSER() {}
35     virtual int ParseStart(void *data, const char *el, const char **attr) = 0;
36     virtual int ParseEnd(void *data, const char *el) = 0;
37     virtual void CreateAnswer() = 0;
38     virtual void SetAnswerList(list<string> * ansList) { answerList = ansList; }
39
40     virtual void SetUsers(USERS * u) { users = u; }
41     virtual void SetAdmins(ADMINS * a) { admins = a; }
42     virtual void SetTariffs(TARIFFS * t) { tariffs = t; }
43     virtual void SetStore(STORE * s) { store = s; }
44     virtual void SetStgSettings(const SETTINGS * s) { settings = s; }
45
46     virtual void SetCurrAdmin(const ADMIN * cua) { currAdmin = cua; }
47     virtual string & GetStrError() { return strError; }
48     virtual void Reset(){ answerList->clear(); depth = 0; }
49 protected:
50     string              strError;
51     ADMINS *            admins;
52     USERS *             users;
53     TARIFFS *           tariffs;
54     STORE *             store;
55     const SETTINGS *    settings;
56     const ADMIN *       currAdmin;
57     int                 depth;
58     list<string> *      answerList;
59 };
60 //-----------------------------------------------------------------------------
61 class PARSER_GET_ADMINS: public BASE_PARSER {
62 public:
63     int ParseStart(void *data, const char *el, const char **attr);
64     int ParseEnd(void *data, const char *el);
65     void CreateAnswer();
66 };
67 //-----------------------------------------------------------------------------
68 class PARSER_ADD_ADMIN: public BASE_PARSER {
69 public:
70     int ParseStart(void *data, const char *el, const char **attr);
71     int ParseEnd(void *data, const char *el);
72     void CreateAnswer();
73 private:
74     string adminToAdd;
75 };
76 //-----------------------------------------------------------------------------
77 class PARSER_DEL_ADMIN: public BASE_PARSER {
78 public:
79     int ParseStart(void *data, const char *el, const char **attr);
80     int ParseEnd(void *data, const char *el);
81     void CreateAnswer();
82 private:
83     int CheckAttr(const char **attr);
84     string adminToDel;
85 };
86 //-----------------------------------------------------------------------------
87 class PARSER_CHG_ADMIN: public BASE_PARSER {
88 public:
89     int ParseStart(void *data, const char *el, const char **attr);
90     int ParseEnd(void *data, const char *el);
91     void CreateAnswer();
92 private:
93     RESETABLE<string>   login;
94     RESETABLE<string>   password;
95     RESETABLE<string>   privAsString;
96 };
97 //-----------------------------------------------------------------------------
98 class PARSER_GET_SERVER_INFO: public BASE_PARSER {
99 public:
100     int ParseStart(void *data, const char *el, const char **attr);
101     int ParseEnd(void *data, const char *el);
102     void CreateAnswer();
103 };
104
105 //-----------------------------------------------------------------------------
106 class PARSER_GET_USER: public BASE_PARSER {
107 public:
108             PARSER_GET_USER();
109             ~PARSER_GET_USER() {}
110     int     ParseStart(void *data, const char *el, const char **attr);
111     int     ParseEnd(void *data, const char *el);
112     void    CreateAnswer();
113 private:
114     string  login;
115 };
116 //-----------------------------------------------------------------------------
117 class PARSER_GET_USERS: public BASE_PARSER {
118 public:
119             PARSER_GET_USERS();
120     int     ParseStart(void *data, const char *el, const char **attr);
121     int     ParseEnd(void *data, const char *el);
122     void    CreateAnswer();
123 private:
124     time_t  lastUserUpdateTime;
125     bool    lastUpdateFound;
126 };
127 //-----------------------------------------------------------------------------
128 class PARSER_GET_TARIFFS: public BASE_PARSER {
129 public:
130     int     ParseStart(void *data, const char *el, const char **attr);
131     int     ParseEnd(void *data, const char *el);
132     void    CreateAnswer();
133 };
134 //-----------------------------------------------------------------------------
135 class PARSER_ADD_TARIFF: public BASE_PARSER {
136 public:
137     int     ParseStart(void *data, const char *el, const char **attr);
138     int     ParseEnd(void *data, const char *el);
139     void    CreateAnswer();
140 private:
141     string  tariffToAdd;
142 };
143 //-----------------------------------------------------------------------------
144 class PARSER_DEL_TARIFF: public BASE_PARSER {
145 public:
146     int     ParseStart(void *data, const char *el, const char **attr);
147     int     ParseEnd(void *data, const char *el);
148     void    CreateAnswer();
149 private:
150     string  tariffToDel;
151 };
152 //-----------------------------------------------------------------------------
153 class PARSER_CHG_TARIFF: public BASE_PARSER {
154 public:
155     int     ParseStart(void *data, const char *el, const char **attr);
156     int     ParseEnd(void *data, const char *el);
157     void    CreateAnswer();
158 private:
159     int     ParseSlashedIntParams(int paramsNum, const string & s, int * params);
160     int     ParseSlashedDoubleParams(int paramsNum, const string & s, double * params);
161     int     CheckTariffData();
162     int     AplayChanges();
163
164     TARIFF_DATA_RES td;
165 };
166 //-----------------------------------------------------------------------------/
167 class PARSER_ADD_USER: public BASE_PARSER {
168 public:
169             PARSER_ADD_USER();
170     virtual ~PARSER_ADD_USER() {}
171     int     ParseStart(void *data, const char *el, const char **attr);
172     int     ParseEnd(void *data, const char *el);
173     void    CreateAnswer();
174     void    Reset();
175 private:
176     int     CheckUserData();
177     string  login;
178 };
179 //-----------------------------------------------------------------------------
180 class PARSER_CHG_USER: public BASE_PARSER {
181 public:
182                     PARSER_CHG_USER();
183                     ~PARSER_CHG_USER();
184     int             ParseStart(void *data, const char *el, const char **attr);
185     int             ParseEnd(void *data, const char *el);
186     void            CreateAnswer();
187     void            Reset();
188 private:
189     string          EncChar2String(const char *);
190
191     USER_STAT_RES * usr;
192     USER_CONF_RES * ucr;
193     RESETABLE<uint64_t> * upr;
194     RESETABLE<uint64_t> * downr;
195     string          cashMsg;
196     string          login;
197
198     int             CheckUserData();
199     int             AplayChanges();
200     bool            cashMustBeAdded;
201     int             res;
202 };
203 //-----------------------------------------------------------------------------
204 class PARSER_DEL_USER: public BASE_PARSER {
205 public:
206     int     ParseStart(void *data, const char *el, const char **attr);
207     int     ParseEnd(void *data, const char *el);
208     void    CreateAnswer();
209
210 private:
211     int         res;
212     user_iter   u;
213 };
214 //-----------------------------------------------------------------------------
215 class PARSER_CHECK_USER: public BASE_PARSER {
216 public:
217     int     ParseStart(void *data, const char *el, const char **attr);
218     int     ParseEnd(void *data, const char *el);
219     void    CreateAnswer();
220 private:
221     bool    result;
222 };
223 //-----------------------------------------------------------------------------
224 class PARSER_SEND_MESSAGE: public BASE_PARSER {
225 public:
226     int     ParseStart(void *data, const char *el, const char **attr);
227     int     ParseEnd(void *data, const char *el);
228     void    CreateAnswer();
229 private:
230     enum {res_ok, res_params_error, res_unknown};
231     vector<string> logins;
232     int     ParseLogins(const char * logins);
233     int     result;
234     STG_MSG msg;
235     user_iter u;
236 };
237 //-----------------------------------------------------------------------------
238 #endif