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