1 /**********************************************************
2  * This file has been automatically created by "typemaker2"
3  * from the file "imexporter_context.xml".
4  * Please do not edit this file, all changes will be lost.
5  * Better edit the mentioned source file instead.
6  **********************************************************/
7 
8 #ifdef HAVE_CONFIG_H
9 # include <config.h>
10 #endif
11 
12 #include "./imexporter_context_p.h"
13 
14 #include <gwenhywfar/misc.h>
15 #include <gwenhywfar/debug.h>
16 
17 /* code headers */
18 
19 /* macro functions */
GWEN_LIST_FUNCTIONS(AB_IMEXPORTER_CONTEXT,AB_ImExporterContext)20 GWEN_LIST_FUNCTIONS(AB_IMEXPORTER_CONTEXT, AB_ImExporterContext)
21 GWEN_LIST2_FUNCTIONS(AB_IMEXPORTER_CONTEXT, AB_ImExporterContext)
22 
23 
24 AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_new(void)
25 {
26   AB_IMEXPORTER_CONTEXT *p_struct;
27 
28   GWEN_NEW_OBJECT(AB_IMEXPORTER_CONTEXT, p_struct)
29   p_struct->_refCount=1;
30   GWEN_LIST_INIT(AB_IMEXPORTER_CONTEXT, p_struct)
31   /* members */
32   p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new();
33   p_struct->securityList=AB_Security_List_new();
34   p_struct->messageList=AB_Message_List_new();
35   /* virtual functions */
36 
37   return p_struct;
38 }
39 
AB_ImExporterContext_free(AB_IMEXPORTER_CONTEXT * p_struct)40 void AB_ImExporterContext_free(AB_IMEXPORTER_CONTEXT *p_struct)
41 {
42   if (p_struct) {
43     assert(p_struct->_refCount);
44     if (p_struct->_refCount==1) {
45       GWEN_LIST_FINI(AB_IMEXPORTER_CONTEXT, p_struct)
46       /* members */
47       AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList);
48       p_struct->accountInfoList=NULL;
49       AB_Security_List_free(p_struct->securityList);
50       p_struct->securityList=NULL;
51       AB_Message_List_free(p_struct->messageList);
52       p_struct->messageList=NULL;
53       p_struct->_refCount=0;
54       GWEN_FREE_OBJECT(p_struct);
55     }
56     else
57       p_struct->_refCount--;
58   }
59 }
60 
AB_ImExporterContext_Attach(AB_IMEXPORTER_CONTEXT * p_struct)61 void AB_ImExporterContext_Attach(AB_IMEXPORTER_CONTEXT *p_struct)
62 {
63   assert(p_struct);
64   assert(p_struct->_refCount);
65   p_struct->_refCount++;
66 }
67 
AB_ImExporterContext_dup(const AB_IMEXPORTER_CONTEXT * p_src)68 AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_dup(const AB_IMEXPORTER_CONTEXT *p_src)
69 {
70   AB_IMEXPORTER_CONTEXT *p_struct;
71 
72   assert(p_src);
73   p_struct=AB_ImExporterContext_new();
74   /* member "accountInfoList" */
75   if (p_struct->accountInfoList) {
76     AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList);
77     p_struct->accountInfoList=NULL;
78     p_struct->accountInfoList=NULL;
79   }
80   if (p_src->accountInfoList) {
81     p_struct->accountInfoList=AB_ImExporterAccountInfo_List_dup(p_src->accountInfoList);
82   }
83 
84   /* member "securityList" */
85   if (p_struct->securityList) {
86     AB_Security_List_free(p_struct->securityList);
87     p_struct->securityList=NULL;
88     p_struct->securityList=NULL;
89   }
90   if (p_src->securityList) {
91     p_struct->securityList=AB_Security_List_dup(p_src->securityList);
92   }
93 
94   /* member "messageList" */
95   if (p_struct->messageList) {
96     AB_Message_List_free(p_struct->messageList);
97     p_struct->messageList=NULL;
98     p_struct->messageList=NULL;
99   }
100   if (p_src->messageList) {
101     p_struct->messageList=AB_Message_List_dup(p_src->messageList);
102   }
103 
104   return p_struct;
105 }
106 
AB_ImExporterContext_copy(AB_IMEXPORTER_CONTEXT * p_struct,const AB_IMEXPORTER_CONTEXT * p_src)107 AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_copy(AB_IMEXPORTER_CONTEXT *p_struct, const AB_IMEXPORTER_CONTEXT *p_src)
108 {
109   assert(p_struct);
110   assert(p_src);
111   /* member "accountInfoList" */
112   if (p_struct->accountInfoList) {
113     AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList);
114     p_struct->accountInfoList=NULL;
115     p_struct->accountInfoList=NULL;
116   }
117   if (p_src->accountInfoList) {
118     p_struct->accountInfoList=AB_ImExporterAccountInfo_List_dup(p_src->accountInfoList);
119   }
120 
121   /* member "securityList" */
122   if (p_struct->securityList) {
123     AB_Security_List_free(p_struct->securityList);
124     p_struct->securityList=NULL;
125     p_struct->securityList=NULL;
126   }
127   if (p_src->securityList) {
128     p_struct->securityList=AB_Security_List_dup(p_src->securityList);
129   }
130 
131   /* member "messageList" */
132   if (p_struct->messageList) {
133     AB_Message_List_free(p_struct->messageList);
134     p_struct->messageList=NULL;
135     p_struct->messageList=NULL;
136   }
137   if (p_src->messageList) {
138     p_struct->messageList=AB_Message_List_dup(p_src->messageList);
139   }
140 
141   return p_struct;
142 }
143 
AB_ImExporterContext_GetAccountInfoList(const AB_IMEXPORTER_CONTEXT * p_struct)144 AB_IMEXPORTER_ACCOUNTINFO_LIST *AB_ImExporterContext_GetAccountInfoList(const AB_IMEXPORTER_CONTEXT *p_struct)
145 {
146   assert(p_struct);
147   return p_struct->accountInfoList;
148 }
149 
AB_ImExporterContext_GetSecurityList(const AB_IMEXPORTER_CONTEXT * p_struct)150 AB_SECURITY_LIST *AB_ImExporterContext_GetSecurityList(const AB_IMEXPORTER_CONTEXT *p_struct)
151 {
152   assert(p_struct);
153   return p_struct->securityList;
154 }
155 
AB_ImExporterContext_GetMessageList(const AB_IMEXPORTER_CONTEXT * p_struct)156 AB_MESSAGE_LIST *AB_ImExporterContext_GetMessageList(const AB_IMEXPORTER_CONTEXT *p_struct)
157 {
158   assert(p_struct);
159   return p_struct->messageList;
160 }
161 
AB_ImExporterContext_SetAccountInfoList(AB_IMEXPORTER_CONTEXT * p_struct,AB_IMEXPORTER_ACCOUNTINFO_LIST * p_src)162 void AB_ImExporterContext_SetAccountInfoList(AB_IMEXPORTER_CONTEXT *p_struct, AB_IMEXPORTER_ACCOUNTINFO_LIST *p_src)
163 {
164   assert(p_struct);
165   if (p_struct->accountInfoList) {
166     AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList);
167     p_struct->accountInfoList=NULL;
168   }
169   p_struct->accountInfoList=p_src;
170 }
171 
AB_ImExporterContext_SetSecurityList(AB_IMEXPORTER_CONTEXT * p_struct,AB_SECURITY_LIST * p_src)172 void AB_ImExporterContext_SetSecurityList(AB_IMEXPORTER_CONTEXT *p_struct, AB_SECURITY_LIST *p_src)
173 {
174   assert(p_struct);
175   if (p_struct->securityList) {
176     AB_Security_List_free(p_struct->securityList);
177     p_struct->securityList=NULL;
178   }
179   p_struct->securityList=p_src;
180 }
181 
AB_ImExporterContext_SetMessageList(AB_IMEXPORTER_CONTEXT * p_struct,AB_MESSAGE_LIST * p_src)182 void AB_ImExporterContext_SetMessageList(AB_IMEXPORTER_CONTEXT *p_struct, AB_MESSAGE_LIST *p_src)
183 {
184   assert(p_struct);
185   if (p_struct->messageList) {
186     AB_Message_List_free(p_struct->messageList);
187     p_struct->messageList=NULL;
188   }
189   p_struct->messageList=p_src;
190 }
191 
192 /* list1 functions */
AB_ImExporterContext_List_dup(const AB_IMEXPORTER_CONTEXT_LIST * p_src)193 AB_IMEXPORTER_CONTEXT_LIST *AB_ImExporterContext_List_dup(const AB_IMEXPORTER_CONTEXT_LIST *p_src)
194 {
195   AB_IMEXPORTER_CONTEXT_LIST *p_dest;
196   AB_IMEXPORTER_CONTEXT *p_elem;
197 
198   assert(p_src);
199   p_dest=AB_ImExporterContext_List_new();
200   p_elem=AB_ImExporterContext_List_First(p_src);
201   while (p_elem) {
202     AB_IMEXPORTER_CONTEXT *p_cpy;
203 
204     p_cpy=AB_ImExporterContext_dup(p_elem);
205     AB_ImExporterContext_List_Add(p_cpy, p_dest);
206     p_elem=AB_ImExporterContext_List_Next(p_elem);
207   }
208 
209   return p_dest;
210 }
211 
AB_ImExporterContext_ReadDb(AB_IMEXPORTER_CONTEXT * p_struct,GWEN_DB_NODE * p_db)212 void AB_ImExporterContext_ReadDb(AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db)
213 {
214   assert(p_struct);
215   /* member "accountInfoList" */
216   if (p_struct->accountInfoList) {
217     AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList);
218     p_struct->accountInfoList=NULL;
219   }
220   {
221     GWEN_DB_NODE *dbSource;
222     dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "accountInfoList");
223     if (dbSource) {
224       AB_IMEXPORTER_ACCOUNTINFO_LIST *t;
225       GWEN_DB_NODE *dbT;
226       t=AB_ImExporterAccountInfo_List_new();
227       dbT=GWEN_DB_FindFirstGroup(dbSource, "accountInfo");
228       while (dbT) {
229         AB_IMEXPORTER_ACCOUNTINFO *elem;
230         elem=AB_ImExporterAccountInfo_fromDb(dbT);
231         if (elem)
232           AB_ImExporterAccountInfo_List_Add(elem, t);
233         dbT=GWEN_DB_FindNextGroup(dbT, "accountInfo");
234       }
235       p_struct->accountInfoList=t;
236     }
237     else
238       p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new();
239   }
240   if (p_struct->accountInfoList==NULL) {
241     p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new();
242   }
243 
244   /* member "securityList" */
245   if (p_struct->securityList) {
246     AB_Security_List_free(p_struct->securityList);
247     p_struct->securityList=NULL;
248   }
249   {
250     GWEN_DB_NODE *dbSource;
251     dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "securityList");
252     if (dbSource) {
253       AB_SECURITY_LIST *t;
254       GWEN_DB_NODE *dbT;
255       t=AB_Security_List_new();
256       dbT=GWEN_DB_FindFirstGroup(dbSource, "security");
257       while (dbT) {
258         AB_SECURITY *elem;
259         elem=AB_Security_fromDb(dbT);
260         if (elem)
261           AB_Security_List_Add(elem, t);
262         dbT=GWEN_DB_FindNextGroup(dbT, "security");
263       }
264       p_struct->securityList=t;
265     }
266     else
267       p_struct->securityList=AB_Security_List_new();
268   }
269   if (p_struct->securityList==NULL) {
270     p_struct->securityList=AB_Security_List_new();
271   }
272 
273   /* member "messageList" */
274   if (p_struct->messageList) {
275     AB_Message_List_free(p_struct->messageList);
276     p_struct->messageList=NULL;
277   }
278   {
279     GWEN_DB_NODE *dbSource;
280     dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "messageList");
281     if (dbSource) {
282       AB_MESSAGE_LIST *t;
283       GWEN_DB_NODE *dbT;
284       t=AB_Message_List_new();
285       dbT=GWEN_DB_FindFirstGroup(dbSource, "message");
286       while (dbT) {
287         AB_MESSAGE *elem;
288         elem=AB_Message_fromDb(dbT);
289         if (elem)
290           AB_Message_List_Add(elem, t);
291         dbT=GWEN_DB_FindNextGroup(dbT, "message");
292       }
293       p_struct->messageList=t;
294     }
295     else
296       p_struct->messageList=AB_Message_List_new();
297   }
298   if (p_struct->messageList==NULL) {
299     p_struct->messageList=AB_Message_List_new();
300   }
301 
302 }
303 
AB_ImExporterContext_WriteDb(const AB_IMEXPORTER_CONTEXT * p_struct,GWEN_DB_NODE * p_db)304 int AB_ImExporterContext_WriteDb(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db)
305 {
306   int p_rv;
307 
308   assert(p_struct);
309   /* member "accountInfoList" */
310   {
311     if (p_struct->accountInfoList) {
312       GWEN_DB_NODE *dbDest;
313       AB_IMEXPORTER_ACCOUNTINFO *elem;
314       dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "accountInfoList");
315       assert(dbDest);
316       p_rv=0;
317       elem=AB_ImExporterAccountInfo_List_First(p_struct->accountInfoList);
318       while (elem) {
319         GWEN_DB_NODE *dbElem;
320         dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "accountInfo");
321         assert(dbElem);
322         p_rv=AB_ImExporterAccountInfo_toDb(elem, dbElem);
323         if (p_rv<0) {
324           DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv);
325           break;
326         }
327         elem=AB_ImExporterAccountInfo_List_Next(elem);
328       }
329     }
330     else
331       p_rv=0;
332   }
333   if (p_rv<0) {
334     DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv);
335     return p_rv;
336   }
337 
338   /* member "securityList" */
339   {
340     if (p_struct->securityList) {
341       GWEN_DB_NODE *dbDest;
342       AB_SECURITY *elem;
343       dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "securityList");
344       assert(dbDest);
345       p_rv=0;
346       elem=AB_Security_List_First(p_struct->securityList);
347       while (elem) {
348         GWEN_DB_NODE *dbElem;
349         dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "security");
350         assert(dbElem);
351         p_rv=AB_Security_toDb(elem, dbElem);
352         if (p_rv<0) {
353           DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv);
354           break;
355         }
356         elem=AB_Security_List_Next(elem);
357       }
358     }
359     else
360       p_rv=0;
361   }
362   if (p_rv<0) {
363     DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv);
364     return p_rv;
365   }
366 
367   /* member "messageList" */
368   {
369     if (p_struct->messageList) {
370       GWEN_DB_NODE *dbDest;
371       AB_MESSAGE *elem;
372       dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "messageList");
373       assert(dbDest);
374       p_rv=0;
375       elem=AB_Message_List_First(p_struct->messageList);
376       while (elem) {
377         GWEN_DB_NODE *dbElem;
378         dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "message");
379         assert(dbElem);
380         p_rv=AB_Message_toDb(elem, dbElem);
381         if (p_rv<0) {
382           DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv);
383           break;
384         }
385         elem=AB_Message_List_Next(elem);
386       }
387     }
388     else
389       p_rv=0;
390   }
391   if (p_rv<0) {
392     DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv);
393     return p_rv;
394   }
395 
396   return 0;
397 }
398 
AB_ImExporterContext_fromDb(GWEN_DB_NODE * p_db)399 AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_fromDb(GWEN_DB_NODE *p_db)
400 {
401   AB_IMEXPORTER_CONTEXT *p_struct;
402   p_struct=AB_ImExporterContext_new();
403   AB_ImExporterContext_ReadDb(p_struct, p_db);
404   return p_struct;
405 }
406 
AB_ImExporterContext_toDb(const AB_IMEXPORTER_CONTEXT * p_struct,GWEN_DB_NODE * p_db)407 int AB_ImExporterContext_toDb(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db)
408 {
409   return AB_ImExporterContext_WriteDb(p_struct, p_db);
410 }
411 
AB_ImExporterContext_ReadXml(AB_IMEXPORTER_CONTEXT * p_struct,GWEN_XMLNODE * p_db)412 void AB_ImExporterContext_ReadXml(AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db)
413 {
414   assert(p_struct);
415   /* member "accountInfoList" */
416   if (p_struct->accountInfoList) {
417     AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList);
418     p_struct->accountInfoList=NULL;
419   }
420   {
421     GWEN_XMLNODE *dbSource;
422     dbSource=GWEN_XMLNode_FindFirstTag(p_db, "accountInfoList", NULL, NULL);
423     if (dbSource) {
424       AB_IMEXPORTER_ACCOUNTINFO_LIST *t;
425       GWEN_XMLNODE *dbT;
426       t=AB_ImExporterAccountInfo_List_new();
427       dbT=GWEN_XMLNode_FindFirstTag(dbSource, "accountInfo", NULL, NULL);
428       while (dbT) {
429         AB_IMEXPORTER_ACCOUNTINFO *elem;
430         elem=AB_ImExporterAccountInfo_fromXml(dbT);
431         if (elem)
432           AB_ImExporterAccountInfo_List_Add(elem, t);
433         dbT=GWEN_XMLNode_FindNextTag(dbT, "accountInfo", NULL, NULL);
434       }
435       p_struct->accountInfoList=t;
436     }
437     else
438       p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new();
439   }
440   if (p_struct->accountInfoList==NULL) {  /* preset member "accountInfoList" if empty */
441     p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new();
442   }
443 
444   /* member "securityList" */
445   if (p_struct->securityList) {
446     AB_Security_List_free(p_struct->securityList);
447     p_struct->securityList=NULL;
448   }
449   {
450     GWEN_XMLNODE *dbSource;
451     dbSource=GWEN_XMLNode_FindFirstTag(p_db, "securityList", NULL, NULL);
452     if (dbSource) {
453       AB_SECURITY_LIST *t;
454       GWEN_XMLNODE *dbT;
455       t=AB_Security_List_new();
456       dbT=GWEN_XMLNode_FindFirstTag(dbSource, "security", NULL, NULL);
457       while (dbT) {
458         AB_SECURITY *elem;
459         elem=AB_Security_fromXml(dbT);
460         if (elem)
461           AB_Security_List_Add(elem, t);
462         dbT=GWEN_XMLNode_FindNextTag(dbT, "security", NULL, NULL);
463       }
464       p_struct->securityList=t;
465     }
466     else
467       p_struct->securityList=AB_Security_List_new();
468   }
469   if (p_struct->securityList==NULL) {  /* preset member "securityList" if empty */
470     p_struct->securityList=AB_Security_List_new();
471   }
472 
473   /* member "messageList" */
474   if (p_struct->messageList) {
475     AB_Message_List_free(p_struct->messageList);
476     p_struct->messageList=NULL;
477   }
478   {
479     GWEN_XMLNODE *dbSource;
480     dbSource=GWEN_XMLNode_FindFirstTag(p_db, "messageList", NULL, NULL);
481     if (dbSource) {
482       AB_MESSAGE_LIST *t;
483       GWEN_XMLNODE *dbT;
484       t=AB_Message_List_new();
485       dbT=GWEN_XMLNode_FindFirstTag(dbSource, "message", NULL, NULL);
486       while (dbT) {
487         AB_MESSAGE *elem;
488         elem=AB_Message_fromXml(dbT);
489         if (elem)
490           AB_Message_List_Add(elem, t);
491         dbT=GWEN_XMLNode_FindNextTag(dbT, "message", NULL, NULL);
492       }
493       p_struct->messageList=t;
494     }
495     else
496       p_struct->messageList=AB_Message_List_new();
497   }
498   if (p_struct->messageList==NULL) {  /* preset member "messageList" if empty */
499     p_struct->messageList=AB_Message_List_new();
500   }
501 
502 }
503 
AB_ImExporterContext_WriteXml(const AB_IMEXPORTER_CONTEXT * p_struct,GWEN_XMLNODE * p_db)504 void AB_ImExporterContext_WriteXml(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db)
505 {
506   assert(p_struct);
507   /* member "accountInfoList" */
508   {
509     if (p_struct->accountInfoList) {
510       GWEN_XMLNODE *dbDest;
511       AB_IMEXPORTER_ACCOUNTINFO *elem;
512       dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "accountInfoList");
513       elem=AB_ImExporterAccountInfo_List_First(p_struct->accountInfoList);
514       while (elem) {
515         GWEN_XMLNODE *dbElem;
516         dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "accountInfo");
517         assert(dbElem);
518         AB_ImExporterAccountInfo_toXml(elem, dbElem);
519         GWEN_XMLNode_AddChild(dbDest, dbElem);
520         elem=AB_ImExporterAccountInfo_List_Next(elem);
521       }
522       GWEN_XMLNode_AddChild(p_db, dbDest);
523     }
524   }
525 
526   /* member "securityList" */
527   {
528     if (p_struct->securityList) {
529       GWEN_XMLNODE *dbDest;
530       AB_SECURITY *elem;
531       dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "securityList");
532       elem=AB_Security_List_First(p_struct->securityList);
533       while (elem) {
534         GWEN_XMLNODE *dbElem;
535         dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "security");
536         assert(dbElem);
537         AB_Security_toXml(elem, dbElem);
538         GWEN_XMLNode_AddChild(dbDest, dbElem);
539         elem=AB_Security_List_Next(elem);
540       }
541       GWEN_XMLNode_AddChild(p_db, dbDest);
542     }
543   }
544 
545   /* member "messageList" */
546   {
547     if (p_struct->messageList) {
548       GWEN_XMLNODE *dbDest;
549       AB_MESSAGE *elem;
550       dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "messageList");
551       elem=AB_Message_List_First(p_struct->messageList);
552       while (elem) {
553         GWEN_XMLNODE *dbElem;
554         dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "message");
555         assert(dbElem);
556         AB_Message_toXml(elem, dbElem);
557         GWEN_XMLNode_AddChild(dbDest, dbElem);
558         elem=AB_Message_List_Next(elem);
559       }
560       GWEN_XMLNode_AddChild(p_db, dbDest);
561     }
562   }
563 
564 }
565 
AB_ImExporterContext_toXml(const AB_IMEXPORTER_CONTEXT * p_struct,GWEN_XMLNODE * p_db)566 void AB_ImExporterContext_toXml(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db)
567 {
568   AB_ImExporterContext_WriteXml(p_struct, p_db);
569 }
570 
AB_ImExporterContext_fromXml(GWEN_XMLNODE * p_db)571 AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_fromXml(GWEN_XMLNODE *p_db)
572 {
573   AB_IMEXPORTER_CONTEXT *p_struct;
574   p_struct=AB_ImExporterContext_new();
575   AB_ImExporterContext_ReadXml(p_struct, p_db);
576   return p_struct;
577 }
578 
AB_ImExporterContext_List2__freeAll_cb(AB_IMEXPORTER_CONTEXT * t,void * user_data)579 static AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_List2__freeAll_cb(AB_IMEXPORTER_CONTEXT *t, void *user_data)
580 {
581   AB_ImExporterContext_free(t);
582   return NULL;
583 }
AB_ImExporterContext_List2_freeAll(AB_IMEXPORTER_CONTEXT_LIST2 * tl)584 int AB_ImExporterContext_List2_freeAll(AB_IMEXPORTER_CONTEXT_LIST2 *tl)
585 {
586   if (tl) {
587     AB_ImExporterContext_List2_ForEach(tl, AB_ImExporterContext_List2__freeAll_cb, NULL);
588     AB_ImExporterContext_List2_free(tl);
589   }
590   else {
591     DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing");
592     return GWEN_ERROR_INVALID;
593   }
594   return 0;
595 }
AB_ImExporterContext_Clear(AB_IMEXPORTER_CONTEXT * st)596 void AB_ImExporterContext_Clear(AB_IMEXPORTER_CONTEXT *st)
597 {
598   assert(st);
599   if (st->accountInfoList)
600     AB_ImExporterAccountInfo_List_Clear(st->accountInfoList);
601   if (st->securityList)
602     AB_Security_List_Clear(st->securityList);
603   if (st->messageList)
604     AB_Message_List_Clear(st->messageList);
605 }
AB_ImExporterContext_AddContext(AB_IMEXPORTER_CONTEXT * st,AB_IMEXPORTER_CONTEXT * stSrc)606 void AB_ImExporterContext_AddContext(AB_IMEXPORTER_CONTEXT *st, AB_IMEXPORTER_CONTEXT *stSrc)
607 {
608   assert(st);
609   if (stSrc->accountInfoList) {
610     AB_IMEXPORTER_ACCOUNTINFO *iea;
611     iea=AB_ImExporterAccountInfo_List_First(stSrc->accountInfoList);
612     while (iea) {
613       AB_IMEXPORTER_ACCOUNTINFO *ieaNext;
614       ieaNext=AB_ImExporterAccountInfo_List_Next(iea);
615       AB_ImExporterAccountInfo_List_Del(iea);
616       AB_ImExporterAccountInfo_List_Add(iea, st->accountInfoList);
617       iea=ieaNext;
618     }
619   }
620   if (stSrc->securityList) {
621     AB_SECURITY *sec;
622     sec=AB_Security_List_First(stSrc->securityList);
623     while (sec) {
624       AB_SECURITY *secNext;
625       secNext=AB_Security_List_Next(sec);
626       AB_Security_List_Del(sec);
627       AB_Security_List_Add(sec, st->securityList);
628       sec=secNext;
629     }
630   }
631   if (stSrc->messageList) {
632     AB_MESSAGE *msg;
633     msg=AB_Message_List_First(stSrc->messageList);
634     while (msg) {
635       AB_MESSAGE *msgNext;
636       msgNext=AB_Message_List_Next(msg);
637       AB_Message_List_Del(msg);
638       AB_Message_List_Add(msg, st->messageList);
639       msg=msgNext;
640     }
641   }
642   AB_ImExporterContext_free(stSrc);
643 }
AB_ImExporterContext_GetFirstAccountInfo(const AB_IMEXPORTER_CONTEXT * st)644 AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterContext_GetFirstAccountInfo(const AB_IMEXPORTER_CONTEXT *st)
645 {
646   assert(st);
647   if (st->accountInfoList)
648     return AB_ImExporterAccountInfo_List_First(st->accountInfoList);
649   return NULL;
650 }
AB_ImExporterContext_AddAccountInfo(AB_IMEXPORTER_CONTEXT * st,AB_IMEXPORTER_ACCOUNTINFO * ai)651 void AB_ImExporterContext_AddAccountInfo(AB_IMEXPORTER_CONTEXT *st, AB_IMEXPORTER_ACCOUNTINFO *ai)
652 {
653   assert(st);
654   if (ai) {
655     if (NULL==st->accountInfoList)
656       st->accountInfoList=AB_ImExporterAccountInfo_List_new();
657     AB_ImExporterAccountInfo_List_Add(ai, st->accountInfoList);
658   }
659 }
AB_ImExporterContext_GetAccountInfoCount(const AB_IMEXPORTER_CONTEXT * st)660 int AB_ImExporterContext_GetAccountInfoCount(const AB_IMEXPORTER_CONTEXT *st)
661 {
662   assert(st);
663   if (st->accountInfoList)
664     return AB_ImExporterAccountInfo_List_GetCount(st->accountInfoList);
665   return 0;
666 }
AB_ImExporterContext_GetOrAddAccountInfo(AB_IMEXPORTER_CONTEXT * st,uint32_t uniqueId,const char * iban,const char * bankCode,const char * accountNumber,int accountType)667 AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterContext_GetOrAddAccountInfo(AB_IMEXPORTER_CONTEXT *st, uint32_t uniqueId,
668                                                                     const char *iban, const char *bankCode, const char *accountNumber, int accountType)
669 {
670   assert(st);
671   if (NULL==st->accountInfoList)
672     st->accountInfoList=AB_ImExporterAccountInfo_List_new();
673   return AB_ImExporterAccountInfo_List_GetOrAdd(st->accountInfoList, uniqueId, iban, bankCode, accountNumber,
674                                                 accountType);
675 }
AB_ImExporterContext_GetFirstSecurity(const AB_IMEXPORTER_CONTEXT * st)676 AB_SECURITY *AB_ImExporterContext_GetFirstSecurity(const AB_IMEXPORTER_CONTEXT *st)
677 {
678   assert(st);
679   if (st->securityList)
680     return AB_Security_List_First(st->securityList);
681   return NULL;
682 }
AB_ImExporterContext_FindSecurity(const AB_IMEXPORTER_CONTEXT * st,const char * nameSpace,const char * id)683 AB_SECURITY *AB_ImExporterContext_FindSecurity(const AB_IMEXPORTER_CONTEXT *st, const char *nameSpace, const char *id)
684 {
685   assert(st);
686   if (st->securityList) {
687     AB_SECURITY *sec;
688     assert(st);
689     if (nameSpace==NULL)
690       nameSpace="";
691     if (id==NULL)
692       id="";
693     sec=AB_Security_List_First(st->securityList);
694     while (sec) {
695       const char *s1, *s2;
696       s1=AB_Security_GetUniqueId(sec);
697       if (s1==NULL)
698         s1="";
699       s2=AB_Security_GetNameSpace(sec);
700       if (s2==NULL)
701         s2="";
702       if (strcasecmp(s2, nameSpace)==0 && strcasecmp(s1, id)==0)
703         return sec;
704       sec=AB_Security_List_Next(sec);
705     }
706   }
707   return NULL;
708 }
AB_ImExporterContext_AddSecurity(AB_IMEXPORTER_CONTEXT * st,AB_SECURITY * sec)709 void AB_ImExporterContext_AddSecurity(AB_IMEXPORTER_CONTEXT *st, AB_SECURITY *sec)
710 {
711   assert(st);
712   if (sec) {
713     if (NULL==st->securityList)
714       st->securityList=AB_Security_List_new();
715     AB_Security_List_Add(sec, st->securityList);
716   }
717 }
AB_ImExporterContext_GetFirstMessage(const AB_IMEXPORTER_CONTEXT * st)718 AB_MESSAGE *AB_ImExporterContext_GetFirstMessage(const AB_IMEXPORTER_CONTEXT *st)
719 {
720   assert(st);
721   if (st->messageList)
722     return AB_Message_List_First(st->messageList);
723   return NULL;
724 }
AB_ImExporterContext_AddMessage(AB_IMEXPORTER_CONTEXT * st,AB_MESSAGE * msg)725 void AB_ImExporterContext_AddMessage(AB_IMEXPORTER_CONTEXT *st, AB_MESSAGE *msg)
726 {
727   assert(st);
728   if (msg) {
729     if (NULL==st->messageList)
730       st->messageList=AB_Message_List_new();
731     AB_Message_List_Add(msg, st->messageList);
732   }
733 }
AB_ImExporterContext_AddTransaction(AB_IMEXPORTER_CONTEXT * st,AB_TRANSACTION * t)734 void AB_ImExporterContext_AddTransaction(AB_IMEXPORTER_CONTEXT *st, AB_TRANSACTION *t)
735 {
736   assert(st);
737   if (t) {
738     AB_IMEXPORTER_ACCOUNTINFO *ai=NULL;
739     if (NULL==st->accountInfoList) {
740       /* no account info list, nothing to search, just create the list */ st->accountInfoList=
741         AB_ImExporterAccountInfo_List_new();
742     }
743     else {
744       /* first try to get by unique account id */ if (AB_Transaction_GetUniqueAccountId(t))
745         ai=AB_ImExporterAccountInfo_List_GetByAccountId(st->accountInfoList,
746                                                         AB_Transaction_GetUniqueAccountId(t)); /* next try by IBAN */ if (ai==NULL) {
747         const char *s;
748         s=AB_Transaction_GetLocalIban(t);
749         if (s && *s)
750           ai=AB_ImExporterAccountInfo_List_GetByIban(st->accountInfoList, s);
751       } /* then try by account number and bank code */ if (ai==NULL)
752         ai=AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(st->accountInfoList, AB_Transaction_GetLocalBankCode(t),
753                                                                        AB_Transaction_GetLocalAccountNumber(t), AB_AccountType_Unknown);
754     } /* create account info if not found */ if (ai==NULL) {
755       /* create account info */ ai=AB_ImExporterAccountInfo_new();
756       AB_ImExporterAccountInfo_FillFromTransaction(ai, t);
757       AB_ImExporterAccountInfo_List_Add(ai, st->accountInfoList);
758     } /* set transaction type if none set */ if (AB_Transaction_GetType(t)<=AB_Transaction_TypeNone)
759       AB_Transaction_SetType(t, AB_Transaction_TypeStatement); /* finally add transaction */
760     AB_ImExporterAccountInfo_AddTransaction(ai, t);
761   }
762 }
763 
764 /* code headers */
765 
766