]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig/parser_services.h
Check if we can use C++17 with XMLRPC-C.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser_services.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 : Maxim Mamontov <faust@stargazer.dp.ua>
19  */
20
21 #pragma once
22
23 #include "parser.h"
24
25 #include "stg/service_conf.h"
26
27 #include "stg/common.h"
28
29 #include <string>
30
31 namespace STG
32 {
33
34 struct Services;
35
36 namespace PARSER
37 {
38
39 class GET_SERVICES: public BASE_PARSER
40 {
41     public:
42         class FACTORY : public BASE_PARSER::FACTORY
43         {
44             public:
45                 explicit FACTORY(const Services & services) : m_services(services) {}
46                 BASE_PARSER * create(const Admin & admin) override { return new GET_SERVICES(admin, m_services); }
47                 static void Register(REGISTRY & registry, const Services & services)
48                 { registry[ToLower(tag)] = new FACTORY(services); }
49             private:
50                 const Services & m_services;
51         };
52
53         static const char * tag;
54
55         GET_SERVICES(const Admin & admin, const Services & services)
56             : BASE_PARSER(admin, tag), m_services(services) {}
57
58     private:
59         const Services & m_services;
60
61         void CreateAnswer() override;
62 };
63
64 class GET_SERVICE: public BASE_PARSER
65 {
66     public:
67         class FACTORY : public BASE_PARSER::FACTORY
68         {
69             public:
70                 explicit FACTORY(const Services & services) : m_services(services) {}
71                 BASE_PARSER * create(const Admin & admin) override { return new GET_SERVICE(admin, m_services); }
72                 static void Register(REGISTRY & registry, Services & services)
73                 { registry[ToLower(tag)] = new FACTORY(services); }
74             private:
75                 const Services & m_services;
76         };
77
78         static const char * tag;
79
80         GET_SERVICE(const Admin & admin, const Services & services)
81             : BASE_PARSER(admin, tag), m_services(services) {}
82         int Start(void * data, const char * el, const char ** attr) override;
83
84     private:
85         std::string m_name;
86         const Services & m_services;
87
88         void CreateAnswer() override;
89 };
90
91 class ADD_SERVICE: public BASE_PARSER
92 {
93     public:
94         class FACTORY : public BASE_PARSER::FACTORY
95         {
96             public:
97                 explicit FACTORY(Services & services) : m_services(services) {}
98                 BASE_PARSER * create(const Admin & admin) override { return new ADD_SERVICE(admin, m_services); }
99                 static void Register(REGISTRY & registry, Services & services)
100                 { registry[ToLower(tag)] = new FACTORY(services); }
101             private:
102                 Services & m_services;
103         };
104
105         static const char * tag;
106
107         ADD_SERVICE(const Admin & admin, Services & services)
108             : BASE_PARSER(admin, tag), m_services(services) {}
109         int Start(void * data, const char * el, const char ** attr) override;
110
111     private:
112         std::string m_name;
113         Services & m_services;
114
115         void CreateAnswer() override;
116 };
117
118 class DEL_SERVICE: public BASE_PARSER
119 {
120     public:
121         class FACTORY : public BASE_PARSER::FACTORY
122         {
123             public:
124                 explicit FACTORY(Services & services) : m_services(services) {}
125                 BASE_PARSER * create(const Admin & admin) override { return new DEL_SERVICE(admin, m_services); }
126                 static void Register(REGISTRY & registry, Services & services)
127                 { registry[ToLower(tag)] = new FACTORY(services); }
128             private:
129                 Services & m_services;
130         };
131
132         static const char * tag;
133
134         DEL_SERVICE(const Admin & admin, Services & services)
135             : BASE_PARSER(admin, tag), m_services(services) {}
136         int Start(void * data, const char * el, const char ** attr) override;
137
138     private:
139         std::string m_name;
140         Services & m_services;
141
142         void CreateAnswer() override;
143 };
144
145 class CHG_SERVICE: public BASE_PARSER
146 {
147     public:
148         class FACTORY : public BASE_PARSER::FACTORY
149         {
150             public:
151                 explicit FACTORY(Services & services) : m_services(services) {}
152                 BASE_PARSER * create(const Admin & admin) override { return new CHG_SERVICE(admin, m_services); }
153                 static void Register(REGISTRY & registry, Services & services)
154                 { registry[ToLower(tag)] = new FACTORY(services); }
155             private:
156                 Services & m_services;
157         };
158
159         static const char * tag;
160
161         CHG_SERVICE(const Admin & admin, Services & services)
162             : BASE_PARSER(admin, tag), m_services(services) {}
163         int Start(void * data, const char * el, const char ** attr) override;
164
165     private:
166         ServiceConfOpt m_service;
167         Services & m_services;
168
169         void CreateAnswer() override;
170 };
171
172 } // namespace PARSER
173 } // namespace STG