int AB_ImExporterYN_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params){ AB_IMEXPORTER_YELLOWNET *ieh; //GWEN_DB_NODE *dbSubParams; GWEN_XMLNODE *doc; GWEN_XMLNODE *node; int rv; GWEN_XML_CONTEXT *ctxml; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AB_IMEXPORTER_YELLOWNET, ie); assert(ieh); // dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, // "params"); doc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); ctxml=GWEN_XmlCtxStore_new(doc, GWEN_XML_FLAGS_HANDLE_HEADERS); rv=GWEN_XMLContext_ReadFromIo(ctxml, sio); GWEN_XmlCtx_free(ctxml); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not parse XML stream (%d)", rv); GWEN_XMLNode_free(doc); return GWEN_ERROR_BAD_DATA; } node=GWEN_XMLNode_FindFirstTag(doc, "IC", 0, 0); if (node==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Document does not contain element \"IC\""); GWEN_XMLNode_Dump(doc, 2); GWEN_XMLNode_free(doc); return GWEN_ERROR_BAD_DATA; } node=GWEN_XMLNode_FindFirstTag(node, "KONAUS", 0, 0); while(node) { AB_IMEXPORTER_ACCOUNTINFO *ai; ai=AB_ImExporterYN__ReadAccountInfo(ie, ctx, node); assert(ai); rv=AB_ImExporterYN__ReadAccountStatus(ie, ai, node); if (rv==0) rv=AB_ImExporterYN__ReadTransactions(ie, ai, node); if (rv) { AB_ImExporterAccountInfo_free(ai); GWEN_XMLNode_free(doc); return rv; } AB_ImExporterContext_AddAccountInfo(ctx, ai); node=GWEN_XMLNode_FindNextTag(node, "KONAUS", 0, 0); } GWEN_XMLNode_free(doc); return 0; }
void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np) { unsigned int i; if (np->pos==0) { DBG_NOTICE(GWEN_LOGDOMAIN, "Empty path"); } for (i=0; i<np->pos; i++) { DBG_NOTICE(GWEN_LOGDOMAIN, "Path entry %d:", i); GWEN_XMLNode_Dump(np->nodes[i], 1); } }
LC_CLIENT_RESULT LC_EgkCard_ParseInsuranceData(GWEN_XMLNODE *root, LC_HI_INSURANCE_DATA **pData) { LC_CLIENT_RESULT res; GWEN_XMLNODE *n; LC_HI_INSURANCE_DATA *d=NULL; n=GWEN_XMLNode_FindFirstTag(root, "UC_allgemeineVersicherungsdatenXML", NULL, NULL); if (n) { const char *s; d=LC_HIInsuranceData_new(); s=GWEN_XMLNode_GetProperty(n, "CDM_VERSION", NULL); if (s) { DBG_INFO(LC_LOGDOMAIN, "CDM_VERSION is [%s]", s); if (GWEN_Text_ComparePattern(s, "5.*", 0)!=-1) { DBG_INFO(LC_LOGDOMAIN, "Reading as 5.1.0"); res=LC_EgkCard_ReadInsuranceData_5_1_0(n, d); } else if (GWEN_Text_ComparePattern(s, "3.*", 0)!=-1) { DBG_INFO(LC_LOGDOMAIN, "Reading as 3.0.0"); res=LC_EgkCard_ReadInsuranceData_3_0_0(n, d); } else { DBG_WARN(LC_LOGDOMAIN, "Unhandled CDM_VERSION [%s], trying 5.1.0", s); res=LC_EgkCard_ReadInsuranceData_5_1_0(n, d); } } else { DBG_INFO(LC_LOGDOMAIN, "Missing CDM_VERSION, trying old data type"); /*GWEN_XMLNode_Dump(n, stderr, 2);*/ res=LC_EgkCard_ReadInsuranceData_old(n, d); } if (res!=LC_Client_ResultOk) { DBG_INFO(LC_LOGDOMAIN, "here (%d)", res); LC_HIInsuranceData_free(d); return res; } } else { DBG_ERROR(LC_LOGDOMAIN, "UC_allgemeineVersicherungsdatenXML not found, data follows:"); GWEN_XMLNode_Dump(root, 2); return LC_Client_ResultNotFound; } *pData=d; return LC_Client_ResultOk; }
void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, int ind) { GWEN_XMLPROPERTY *p; GWEN_XMLNODE *c; int i; int simpleTag; assert(n); for(i=0; i<ind; i++) fprintf(stderr, " "); simpleTag=0; if (n->type==GWEN_XMLNodeTypeTag) { if (n->data) fprintf(stderr, "<%s", n->data); else fprintf(stderr, "<UNKNOWN"); p=n->properties; while (p) { if (p->value) fprintf(stderr, " %s=\"%s\"", p->name, p->value); else fprintf(stderr, " %s", p->name); p=p->next; } if (n->data) { if (n->data[0]=='?') { simpleTag=1; fprintf(stderr, "?"); } else if (n->data[0]=='!') { simpleTag=1; } } fprintf(stderr, ">\n"); if (!simpleTag) { c=GWEN_XMLNode_GetChild(n); while(c) { GWEN_XMLNode_Dump(c, ind+2); c=GWEN_XMLNode_Next(c); } for(i=0; i<ind; i++) fprintf(stderr, " "); if (n->data) fprintf(stderr, "</%s>\n", n->data); else fprintf(stderr, "</UNKNOWN>\n"); } } else if (n->type==GWEN_XMLNodeTypeData) { if (n->data) { fprintf(stderr, "%s\n", n->data); } } else if (n->type==GWEN_XMLNodeTypeComment) { fprintf(stderr, "<!--"); if (n->data) { fprintf(stderr, "%s", n->data); } fprintf(stderr, "-->\n"); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown tag type (%d)", n->type); } }
GWEN_DIALOG *AB_SetupNewUserDialog_new(AB_BANKING *ab) { GWEN_DIALOG *dlg; AB_SETUP_NEWUSER_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; GWEN_XMLNODE *n; GWEN_XMLNODE *nDialog; GWEN_PLUGIN_DESCRIPTION_LIST2 *providers; GWEN_DIALOG_LIST *subDialogs=NULL; dlg=GWEN_Dialog_new("ab_setup_newuser"); GWEN_NEW_OBJECT(AB_SETUP_NEWUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg, xdlg, AB_SetupNewUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_SetupNewUserDialog_SignalHandler); xdlg->backendDialogs=GWEN_Dialog_List2_new(); xdlg->backendRadioNames=GWEN_StringList_new(); xdlg->backendNames=GWEN_StringList_new(); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_setup_newuser.dlg", fbuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read XML file, extend it */ n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(n, GWEN_Buffer_GetStart(fbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } nDialog=GWEN_XMLNode_FindFirstTag(n, "dialog", NULL, NULL); if (nDialog==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Dialog element not found in XML file [%s]", GWEN_Buffer_GetStart(fbuf)); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } providers=AB_Banking_GetProviderDescrs(ab); if (providers) { GWEN_XMLNODE *nBackendRadioWidget; nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nDialog, "widget", "name", "dialogVLayout"); if (nBackendRadioWidget) nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nBackendRadioWidget, "widget", "name", "wiz_stack"); if (nBackendRadioWidget) nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nBackendRadioWidget, "widget", "name", "backendRadioWidget"); subDialogs=GWEN_Dialog_List_new(); if (nBackendRadioWidget) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *pit; pit=GWEN_PluginDescription_List2_First(providers); if (pit) { GWEN_PLUGIN_DESCRIPTION *pd; pd=GWEN_PluginDescription_List2Iterator_Data(pit); while(pd) { const char *name; name=GWEN_PluginDescription_GetName(pd); if (name && *name) { AB_PROVIDER *pro; pro=AB_Banking_GetProvider(ab, name); if (pro) { GWEN_DIALOG *cdlg; GWEN_BUFFER *tbuf; GWEN_XMLNODE *wn; const char *s; if (AB_Provider_GetFlags(pro) & AB_PROVIDER_FLAGS_HAS_USERTYPE_DIALOG) { cdlg=AB_ProviderGetUserTypeDialog(pro); if (cdlg==NULL) { DBG_WARN(AQBANKING_LOGDOMAIN, "Backend [%s] does not return a userType dialog, using default", name); cdlg=AB_UserTypePageDefaultDialog_new(ab); } } else cdlg=AB_UserTypePageDefaultDialog_new(ab); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "backend_"); GWEN_Buffer_AppendString(tbuf, name); GWEN_Buffer_AppendString(tbuf, "_radio"); wn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "widget"); GWEN_XMLNode_SetProperty(wn, "type", "radioButton"); GWEN_XMLNode_SetProperty(wn, "name", GWEN_Buffer_GetStart(tbuf)); GWEN_StringList_AppendString(xdlg->backendRadioNames, GWEN_Buffer_GetStart(tbuf), 0, 0); GWEN_StringList_AppendString(xdlg->backendNames, name, 0, 0); s=GWEN_PluginDescription_GetShortDescr(pd); if (!(s && *s)) s=name; GWEN_XMLNode_SetProperty(wn, "text", I18N(s)); GWEN_XMLNode_SetProperty(wn, "groupId", "999999"); GWEN_XMLNode_SetProperty(wn, "flags", "fillX justifyLeft"); GWEN_XMLNode_AddChild(nBackendRadioWidget, wn); GWEN_Dialog_List_Add(cdlg, subDialogs); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not activate backend [%s]", name); } } pd=GWEN_PluginDescription_List2Iterator_Next(pit); } GWEN_PluginDescription_List2Iterator_free(pit); } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Dialog description does not contain path [dialogVLayout/wiz_stack/backendRadioWidget]"); GWEN_XMLNode_Dump(nDialog, 2); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXml(dlg, nDialog); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d).", rv); GWEN_Dialog_List_free(subDialogs); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); /* insert pages for each backend */ if (GWEN_Dialog_List_GetCount(subDialogs)) { GWEN_DIALOG *cdlg; while ( (cdlg=GWEN_Dialog_List_First(subDialogs)) ) { GWEN_Dialog_List_Del(cdlg); DBG_NOTICE(AQBANKING_LOGDOMAIN, "Adding dialog %s", GWEN_Dialog_GetId(cdlg)); rv=GWEN_Dialog_AddSubDialog(dlg, "wiz_stack", cdlg); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Dialog_List_free(subDialogs); GWEN_Dialog_free(cdlg); GWEN_Dialog_free(dlg); return NULL; } GWEN_Dialog_List2_PushBack(xdlg->backendDialogs, cdlg); } } GWEN_Dialog_List_free(subDialogs); xdlg->banking=ab; /* done */ return dlg; }