31 #include "gnc-xml-helper.h"
34 #include "sixtp-utils.h"
35 #include "sixtp-parsers.h"
36 #include "sixtp-utils.h"
37 #include "sixtp-dom-parsers.h"
38 #include "sixtp-dom-generators.h"
41 #include "io-gncxml-gen.h"
44 #include "gnc-owner-xml-v2.h"
45 #include "gncCustomerP.h"
47 #include "gncVendorP.h"
48 #include "gncEmployeeP.h"
52 const gchar *owner_version_string =
"2.0.0";
55 #define owner_type_string "owner:type"
56 #define owner_id_string "owner:id"
59 gnc_owner_to_dom_tree (
const char *tag,
const GncOwner *owner)
66 case GNC_OWNER_CUSTOMER:
67 type_str = GNC_ID_CUSTOMER;
70 type_str = GNC_ID_JOB;
72 case GNC_OWNER_VENDOR:
73 type_str = GNC_ID_VENDOR;
75 case GNC_OWNER_EMPLOYEE:
76 type_str = GNC_ID_EMPLOYEE;
83 ret = xmlNewNode(NULL, BAD_CAST tag);
84 xmlSetProp(ret, BAD_CAST
"version", BAD_CAST owner_version_string);
86 xmlAddChild (ret, text_to_dom_tree (owner_type_string, type_str));
87 xmlAddChild (ret, guid_to_dom_tree (owner_id_string,
102 owner_type_handler (xmlNodePtr node, gpointer
owner_pdata)
104 struct owner_pdata *pdata = owner_pdata;
105 char* txt = dom_tree_to_text(node);
106 g_return_val_if_fail(txt, FALSE);
108 if (!g_strcmp0 (txt, GNC_ID_CUSTOMER))
109 gncOwnerInitCustomer (pdata->owner, NULL);
110 else if (!g_strcmp0 (txt, GNC_ID_JOB))
111 gncOwnerInitJob (pdata->owner, NULL);
112 else if (!g_strcmp0 (txt, GNC_ID_VENDOR))
113 gncOwnerInitVendor (pdata->owner, NULL);
114 else if (!g_strcmp0 (txt, GNC_ID_EMPLOYEE))
115 gncOwnerInitEmployee (pdata->owner, NULL);
118 PWARN (
"Unknown owner type: %s", txt);
128 owner_id_handler (xmlNodePtr node, gpointer owner_pdata)
130 struct owner_pdata *pdata = owner_pdata;
133 guid = dom_tree_to_guid(node);
134 g_return_val_if_fail (guid, FALSE);
138 case GNC_OWNER_CUSTOMER:
140 GncCustomer *cust = gncCustomerLookup (pdata->book, guid);
143 cust = gncCustomerCreate (pdata->book);
144 gncCustomerSetGUID (cust, guid);
146 gncOwnerInitCustomer (pdata->owner, cust);
151 GncJob *job = gncJobLookup (pdata->book, guid);
154 job = gncJobCreate (pdata->book);
155 gncJobSetGUID (job, guid);
157 gncOwnerInitJob (pdata->owner, job);
160 case GNC_OWNER_VENDOR:
162 GncVendor *vendor = gncVendorLookup (pdata->book, guid);
165 vendor = gncVendorCreate (pdata->book);
166 gncVendorSetGUID (vendor, guid);
168 gncOwnerInitVendor (pdata->owner, vendor);
171 case GNC_OWNER_EMPLOYEE:
173 GncEmployee *employee = gncEmployeeLookup (pdata->book, guid);
176 employee = gncEmployeeCreate (pdata->book);
177 gncEmployeeSetGUID (employee, guid);
179 gncOwnerInitEmployee (pdata->owner, employee);
194 { owner_type_string, owner_type_handler, 1, 0 },
195 { owner_id_string, owner_id_handler, 1, 0 },
200 gnc_dom_tree_to_owner (xmlNodePtr node,
GncOwner *owner,
QofBook *book)
202 struct owner_pdata owner_pdata;
205 owner_pdata.owner = owner;
206 owner_pdata.book = book;
208 successful = dom_tree_generic_parse (node, owner_handlers_v2,
213 PERR (
"failed to parse owner tree");
222 g_return_val_if_fail(out, FALSE);
227 gnc_owner_xml_initialize (
void)
231 GNC_FILE_BACKEND_VERS,
gboolean qof_object_register_backend(QofIdTypeConst type_name, const char *backend_name, gpointer be_data)
const GncGUID * gncOwnerGetGUID(const GncOwner *owner)
#define PERR(format, args...)
#define PWARN(format, args...)
api for GnuCash version 2 XML-based file format
GncOwnerType gncOwnerGetType(const GncOwner *owner)
gboolean gnc_xml2_write_namespace_decl(FILE *out, const char *name_space)
const gchar * QofLogModule