gwenhywfar  5.10.1
xmlcmd_gxml.c
Go to the documentation of this file.
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 
53 {
54  GWEN_XMLCOMMANDER *cmd;
55  GWEN_XMLCMD_GXML *xcmd;
56 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
void GWEN_XmlCommanderGwenXml_EnterDocNode(GWEN_XMLCOMMANDER *cmd, GWEN_XMLNODE *xmlNode)
Definition: xmlcmd_gxml.c:207
GWEN_XMLNODE * GWEN_XmlCommanderGwenXml_GetDocRoot(const GWEN_XMLCOMMANDER *cmd)
Definition: xmlcmd_gxml.c:90
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetDbRoot(const GWEN_XMLCOMMANDER *cmd)
Definition: xmlcmd_gxml.c:129
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:421
GWEN_XMLNODE_LIST2 * GWEN_XMLNode_List2_new()
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define NULL
Definition: binreloc.c:300
void GWEN_XMLNode_List2_free(GWEN_XMLNODE_LIST2 *l)
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_XMLCOMMANDER * GWEN_XmlCommanderGwenXml_new(GWEN_XMLNODE *documentRoot, GWEN_DB_NODE *dbRoot)
Definition: xmlcmd_gxml.c:52
void GWEN_XmlCommanderGwenXml_LeaveDocNode(GWEN_XMLCOMMANDER *cmd)
Definition: xmlcmd_gxml.c:223
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
void GWEN_XmlCommanderGwenXml_SetCurrentDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)
Definition: xmlcmd_gxml.c:155
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
void GWEN_XMLNode_List2_PopBack(GWEN_XMLNODE_LIST2 *l)
static void GWENHYWFAR_CB _freeData(void *bp, void *p)
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetCurrentDbGroup(const GWEN_XMLCOMMANDER *cmd)
Definition: xmlcmd_gxml.c:142
GWEN_XMLCOMMANDER * GWEN_XmlCommander_new(void)
Definition: xmlcmd.c:46
GWEN_XMLNODE * GWEN_XmlCommanderGwenXml_GetCurrentDocNode(const GWEN_XMLCOMMANDER *cmd)
Definition: xmlcmd_gxml.c:103
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetCurrentTempDbGroup(const GWEN_XMLCOMMANDER *cmd)
Definition: xmlcmd_gxml.c:181
void GWEN_XmlCommanderGwenXml_SetCurrentDocNode(GWEN_XMLCOMMANDER *cmd, GWEN_XMLNODE *n)
Definition: xmlcmd_gxml.c:116
GWEN_XMLNODE * GWEN_XMLNode_List2_GetBack(GWEN_XMLNODE_LIST2 *l)
void GWEN_XMLNode_List2_PushBack(GWEN_XMLNODE_LIST2 *l, GWEN_XMLNODE *p)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:173
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetTempDbRoot(const GWEN_XMLCOMMANDER *cmd)
Definition: xmlcmd_gxml.c:168
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:156
void GWEN_XmlCommanderGwenXml_SetCurrentTempDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)
Definition: xmlcmd_gxml.c:194
#define GWEN_UNUSED
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition: inherit.h:271
struct GWEN_XMLCOMMANDER GWEN_XMLCOMMANDER
Definition: xmlcmd.h:39