]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig/parser_admins.h
Implemented parser registry.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser_admins.h
1 /*
2  *    This program is free software; you can redistribute it and/or modify
3  *    it under the terms of the GNU General Public License as published by
4  *    the Free Software Foundation; either version 2 of the License, or
5  *    (at your option) any later version.
6  *
7  *    This program is distributed in the hope that it will be useful,
8  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *    GNU General Public License for more details.
11  *
12  *    You should have received a copy of the GNU General Public License
13  *    along with this program; if not, write to the Free Software
14  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15  */
16
17 /*
18  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
19  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
20  */
21
22 #ifndef __STG_SGCONFIG_PARSER_ADMINS_H__
23 #define __STG_SGCONFIG_PARSER_ADMINS_H__
24
25 #include "parser.h"
26
27 #include "stg/resetable.h"
28
29 #include <string>
30
31 class ADMINS;
32 class ADMIN;
33
34 namespace STG
35 {
36 namespace PARSER
37 {
38
39 class GET_ADMINS: public BASE_PARSER
40 {
41     public:
42         class FACTORY : public BASE_PARSER::FACTORY
43         {
44             public:
45                 FACTORY(const ADMINS & admins) : m_admins(admins) {}
46                 virtual BASE_PARSER * create(const ADMIN & admin) { return new GET_ADMINS(admin, m_admins); }
47                 static void Register(REGISTRY & registry, const ADMINS & admins)
48                 { registry[tag] = new FACTORY(admins); }
49             private:
50                 const ADMINS & m_admins;
51         };
52
53         static const char * tag;
54
55         GET_ADMINS(const ADMIN & admin, const ADMINS & admins)
56             : BASE_PARSER(admin, tag), m_admins(admins) {}
57
58     private:
59         const ADMINS & m_admins;
60
61         void CreateAnswer();
62 };
63
64 class ADD_ADMIN: public BASE_PARSER
65 {
66     public:
67         class FACTORY : public BASE_PARSER::FACTORY
68         {
69             public:
70                 FACTORY(ADMINS & admins) : m_admins(admins) {}
71                 virtual BASE_PARSER * create(const ADMIN & admin) { return new ADD_ADMIN(admin, m_admins); }
72                 static void Register(REGISTRY & registry, ADMINS & admins)
73                 { registry[tag] = new FACTORY(admins); }
74             private:
75                 ADMINS & m_admins;
76         };
77
78         static const char * tag;
79
80         ADD_ADMIN(const ADMIN & admin, ADMINS & admins)
81             : BASE_PARSER(admin, tag), m_admins(admins) {}
82         int Start(void * data, const char * el, const char ** attr);
83
84     private:
85         std::string m_admin;
86         ADMINS & m_admins;
87
88         void CreateAnswer();
89 };
90
91 class DEL_ADMIN: public BASE_PARSER
92 {
93     public:
94         class FACTORY : public BASE_PARSER::FACTORY
95         {
96             public:
97                 FACTORY(ADMINS & admins) : m_admins(admins) {}
98                 virtual BASE_PARSER * create(const ADMIN & admin) { return new DEL_ADMIN(admin, m_admins); }
99                 static void Register(REGISTRY & registry, ADMINS & admins)
100                 { registry[tag] = new FACTORY(admins); }
101             private:
102                 ADMINS & m_admins;
103         };
104
105         static const char * tag;
106
107         DEL_ADMIN(const ADMIN & admin, ADMINS & admins)
108             : BASE_PARSER(admin, tag), m_admins(admins) {}
109         int Start(void * data, const char * el, const char ** attr);
110
111     private:
112         std::string m_admin;
113         ADMINS & m_admins;
114
115         void CreateAnswer();
116 };
117
118 class CHG_ADMIN: public BASE_PARSER
119 {
120     public:
121         class FACTORY : public BASE_PARSER::FACTORY
122         {
123             public:
124                 FACTORY(ADMINS & admins) : m_admins(admins) {}
125                 virtual BASE_PARSER * create(const ADMIN & admin) { return new CHG_ADMIN(admin, m_admins); }
126                 static void Register(REGISTRY & registry, ADMINS & admins)
127                 { registry[tag] = new FACTORY(admins); }
128             private:
129                 ADMINS & m_admins;
130         };
131
132         static const char * tag;
133
134         CHG_ADMIN(const ADMIN & admin, ADMINS & admins)
135             : BASE_PARSER(admin, tag), m_admins(admins) {}
136         int Start(void * data, const char * el, const char ** attr);
137
138     private:
139         std::string login;
140         RESETABLE<std::string> password;
141         RESETABLE<std::string> privAsString;
142         ADMINS & m_admins;
143
144         void CreateAnswer();
145 };
146
147 } // namespace PARSER
148 } // namespace STG
149
150 #endif