1 /***************************************************************************
2 begin : Sat Apr 18 2018
3 copyright : (C) 2020 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * *
8 * This library is free software; you can redistribute it and/or *
9 * modify it under the terms of the GNU Lesser General Public *
10 * License as published by the Free Software Foundation; either *
11 * version 2.1 of the License, or (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public *
19 * License along with this library; if not, write to the Free Software *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21 * MA 02111-1307 USA *
22 * *
23 ***************************************************************************/
24
25
26 #ifdef HAVE_CONFIG_H
27 # include <config.h>
28 #endif
29
30
31
32 #include "xmlcmd_gxml_p.h"
33
34 #include <gwenhywfar/debug.h>
35
36
37 #include <ctype.h>
38
39
40 GWEN_INHERIT(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML)
41
42
43
44
45 static void GWENHYWFAR_CB _freeData(void *bp, void *p);
46
47
48
49
50
51
GWEN_XmlCommanderGwenXml_new(GWEN_XMLNODE * documentRoot,GWEN_DB_NODE * dbRoot)52 GWEN_XMLCOMMANDER *GWEN_XmlCommanderGwenXml_new(GWEN_XMLNODE *documentRoot, GWEN_DB_NODE *dbRoot)
53 {
54 GWEN_XMLCOMMANDER *cmd;
55 GWEN_XMLCMD_GXML *xcmd;
56
57 cmd=GWEN_XmlCommander_new();
58 GWEN_NEW_OBJECT(GWEN_XMLCMD_GXML, xcmd);
59 GWEN_INHERIT_SETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd, xcmd, _freeData);
60
61 xcmd->docRoot=documentRoot;
62 xcmd->xmlNodeStack=GWEN_XMLNode_List2_new();
63 xcmd->dbRoot=dbRoot;
64 xcmd->tempDbRoot=GWEN_DB_Group_new("dbTempRoot");
65
66 xcmd->currentDbGroup=xcmd->dbRoot;
67 xcmd->currentTempDbGroup=xcmd->tempDbRoot;
68 xcmd->currentDocNode=documentRoot;
69
70 return cmd;
71 }
72
73
74
_freeData(GWEN_UNUSED void * bp,void * p)75 void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p)
76 {
77 GWEN_XMLCMD_GXML *xcmd;
78
79 xcmd=(GWEN_XMLCMD_GXML*) p;
80
81 GWEN_XMLNode_List2_free(xcmd->xmlNodeStack);
82 xcmd->xmlNodeStack=NULL;
83
84 GWEN_DB_Group_free(xcmd->tempDbRoot);
85 GWEN_FREE_OBJECT(xcmd);
86 }
87
88
89
GWEN_XmlCommanderGwenXml_GetDocRoot(const GWEN_XMLCOMMANDER * cmd)90 GWEN_XMLNODE *GWEN_XmlCommanderGwenXml_GetDocRoot(const GWEN_XMLCOMMANDER *cmd)
91 {
92 GWEN_XMLCMD_GXML *xcmd;
93
94 assert(cmd);
95 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
96 assert(xcmd);
97
98 return xcmd->docRoot;
99 }
100
101
102
GWEN_XmlCommanderGwenXml_GetCurrentDocNode(const GWEN_XMLCOMMANDER * cmd)103 GWEN_XMLNODE *GWEN_XmlCommanderGwenXml_GetCurrentDocNode(const GWEN_XMLCOMMANDER *cmd)
104 {
105 GWEN_XMLCMD_GXML *xcmd;
106
107 assert(cmd);
108 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
109 assert(xcmd);
110
111 return xcmd->currentDocNode;
112 }
113
114
115
GWEN_XmlCommanderGwenXml_SetCurrentDocNode(GWEN_XMLCOMMANDER * cmd,GWEN_XMLNODE * n)116 void GWEN_XmlCommanderGwenXml_SetCurrentDocNode(GWEN_XMLCOMMANDER *cmd, GWEN_XMLNODE *n)
117 {
118 GWEN_XMLCMD_GXML *xcmd;
119
120 assert(cmd);
121 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
122 assert(xcmd);
123
124 xcmd->currentDocNode=n;
125 }
126
127
128
GWEN_XmlCommanderGwenXml_GetDbRoot(const GWEN_XMLCOMMANDER * cmd)129 GWEN_DB_NODE *GWEN_XmlCommanderGwenXml_GetDbRoot(const GWEN_XMLCOMMANDER *cmd)
130 {
131 GWEN_XMLCMD_GXML *xcmd;
132
133 assert(cmd);
134 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
135 assert(xcmd);
136
137 return xcmd->dbRoot;
138 }
139
140
141
GWEN_XmlCommanderGwenXml_GetCurrentDbGroup(const GWEN_XMLCOMMANDER * cmd)142 GWEN_DB_NODE *GWEN_XmlCommanderGwenXml_GetCurrentDbGroup(const GWEN_XMLCOMMANDER *cmd)
143 {
144 GWEN_XMLCMD_GXML *xcmd;
145
146 assert(cmd);
147 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
148 assert(xcmd);
149
150 return xcmd->currentDbGroup;
151 }
152
153
154
GWEN_XmlCommanderGwenXml_SetCurrentDbGroup(GWEN_XMLCOMMANDER * cmd,GWEN_DB_NODE * db)155 void GWEN_XmlCommanderGwenXml_SetCurrentDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)
156 {
157 GWEN_XMLCMD_GXML *xcmd;
158
159 assert(cmd);
160 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
161 assert(xcmd);
162
163 xcmd->currentDbGroup=db;
164 }
165
166
167
GWEN_XmlCommanderGwenXml_GetTempDbRoot(const GWEN_XMLCOMMANDER * cmd)168 GWEN_DB_NODE *GWEN_XmlCommanderGwenXml_GetTempDbRoot(const GWEN_XMLCOMMANDER *cmd)
169 {
170 GWEN_XMLCMD_GXML *xcmd;
171
172 assert(cmd);
173 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
174 assert(xcmd);
175
176 return xcmd->tempDbRoot;
177 }
178
179
180
GWEN_XmlCommanderGwenXml_GetCurrentTempDbGroup(const GWEN_XMLCOMMANDER * cmd)181 GWEN_DB_NODE *GWEN_XmlCommanderGwenXml_GetCurrentTempDbGroup(const GWEN_XMLCOMMANDER *cmd)
182 {
183 GWEN_XMLCMD_GXML *xcmd;
184
185 assert(cmd);
186 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
187 assert(xcmd);
188
189 return xcmd->currentTempDbGroup;
190 }
191
192
193
GWEN_XmlCommanderGwenXml_SetCurrentTempDbGroup(GWEN_XMLCOMMANDER * cmd,GWEN_DB_NODE * db)194 void GWEN_XmlCommanderGwenXml_SetCurrentTempDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)
195 {
196 GWEN_XMLCMD_GXML *xcmd;
197
198 assert(cmd);
199 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
200 assert(xcmd);
201
202 xcmd->currentTempDbGroup=db;
203 }
204
205
206
GWEN_XmlCommanderGwenXml_EnterDocNode(GWEN_XMLCOMMANDER * cmd,GWEN_XMLNODE * xmlNode)207 void GWEN_XmlCommanderGwenXml_EnterDocNode(GWEN_XMLCOMMANDER *cmd, GWEN_XMLNODE *xmlNode)
208 {
209 GWEN_XMLCMD_GXML *xcmd;
210
211 assert(cmd);
212 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
213 assert(xcmd);
214
215 assert(xmlNode);
216
217 GWEN_XMLNode_List2_PushBack(xcmd->xmlNodeStack, xcmd->currentDocNode);
218 xcmd->currentDocNode=xmlNode;
219 }
220
221
222
GWEN_XmlCommanderGwenXml_LeaveDocNode(GWEN_XMLCOMMANDER * cmd)223 void GWEN_XmlCommanderGwenXml_LeaveDocNode(GWEN_XMLCOMMANDER *cmd)
224 {
225 GWEN_XMLCMD_GXML *xcmd;
226 GWEN_XMLNODE *xmlNode;
227
228 assert(cmd);
229 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
230 assert(xcmd);
231
232 xmlNode=GWEN_XMLNode_List2_GetBack(xcmd->xmlNodeStack);
233 if (xmlNode==NULL) {
234 DBG_ERROR(GWEN_LOGDOMAIN, "Nothing on stack");
235 assert(xmlNode);
236 }
237 xcmd->currentDocNode=xmlNode;
238 GWEN_XMLNode_List2_PopBack(xcmd->xmlNodeStack);
239 }
240
241
242
243
244
245
246
247
248