From: <svn...@op...> - 2010-01-04 20:30:59
|
Author: dgollub Date: Mon Jan 4 21:30:47 2010 New Revision: 5967 URL: http://www.opensync.org/changeset/5967 Log: Fixes demerger of second level xmlfields fixes #1183 Modified: format-plugins/xmlformat/trunk/src/xmlformat_merge.c format-plugins/xmlformat/trunk/tests/check_merger.c Modified: format-plugins/xmlformat/trunk/src/xmlformat_merge.c ============================================================================== --- format-plugins/xmlformat/trunk/src/xmlformat_merge.c Mon Jan 4 21:15:22 2010 (r5966) +++ format-plugins/xmlformat/trunk/src/xmlformat_merge.c Mon Jan 4 21:30:47 2010 (r5967) @@ -223,18 +223,22 @@ int capability_keys = osync_list_length(osync_capability_get_childs(cur_capability)); int xmlfield_keys = osync_xmlfield_get_key_count(cur_xmlfield); - for(i=0; i < xmlfield_keys; i++) - { - int krc = 0; - if(j == capability_keys) { - for(; i < xmlfield_keys; i++) { - osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s->%s", osync_xmlfield_get_name(cur_xmlfield), osync_xmlfield_get_nth_key_name(cur_xmlfield, i)); - osync_xmlfield_set_nth_key_value(cur_xmlfield, i, ""); - } - break; + OSyncXMLField *child_xmlfield = osync_xmlfield_get_child(cur_xmlfield); + + for(; child_xmlfield; child_xmlfield = osync_xmlfield_get_next(child_xmlfield)) { + int krc = 0; + if(j == capability_keys) { + for (; child_xmlfield; child_xmlfield = osync_xmlfield_get_next(child_xmlfield)) { + osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s", osync_xmlfield_get_name(cur_xmlfield)); + osync_xmlfield_delete(child_xmlfield); } + break; + } + - krc = strcmp(osync_xmlfield_get_nth_key_name(cur_xmlfield, i), osync_list_nth_data(osync_capability_get_childs(cur_capability), j)); + OSyncCapability *child_cap = osync_list_nth_data(osync_capability_get_childs(cur_capability), j); + krc = strcmp(osync_xmlfield_get_name(child_xmlfield), osync_capability_get_name(child_cap)); + if(krc == 0) { continue; } @@ -243,8 +247,8 @@ continue; } if(krc < 0) { - osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s->%s", osync_xmlfield_get_name(cur_xmlfield), osync_xmlfield_get_nth_key_name(cur_xmlfield, i)); - osync_xmlfield_set_nth_key_value(cur_xmlfield, i, ""); + osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s", osync_xmlfield_get_name(child_xmlfield)); + osync_xmlfield_delete(child_xmlfield); continue; } g_assert_not_reached(); Modified: format-plugins/xmlformat/trunk/tests/check_merger.c ============================================================================== --- format-plugins/xmlformat/trunk/tests/check_merger.c Mon Jan 4 21:15:22 2010 (r5966) +++ format-plugins/xmlformat/trunk/tests/check_merger.c Mon Jan 4 21:30:47 2010 (r5967) @@ -8,6 +8,7 @@ static OSyncCapabilities *_merger_assemble_caps(void) { OSyncError *error; + OSyncCapability *cap, *child_cap; OSyncCapabilities *capabilities = osync_capabilities_new("xmlformat-caps", &error); fail_unless(capabilities != NULL, NULL); @@ -16,29 +17,34 @@ OSyncCapabilitiesObjType *capsobjtype = osync_capabilities_objtype_new(capabilities, "contact", &error); fail_unless(capsobjtype != NULL, NULL); - OSyncCapability *cap = osync_capability_new(capsobjtype, &error); - osync_capability_set_name(cap, "Name"); - cap = osync_capability_new(capsobjtype, &error); - osync_capability_set_name(cap, "LastName"); + osync_capability_set_name(cap, "Address"); - cap = osync_capability_new(capsobjtype, &error); - osync_capability_set_name(cap, "Telephone"); + child_cap = osync_capability_new_child(cap, &error); + osync_capability_set_name(child_cap, "City"); + + child_cap = osync_capability_new_child(cap, &error); + osync_capability_set_name(child_cap, "Region"); + + child_cap = osync_capability_new_child(cap, &error); + osync_capability_set_name(child_cap, "Street"); cap = osync_capability_new(capsobjtype, &error); osync_capability_set_name(cap, "Categories"); cap = osync_capability_new(capsobjtype, &error); - osync_capability_set_name(cap, "Address"); + osync_capability_set_name(cap, "Name"); - cap = osync_capability_new(capsobjtype, &error); - osync_capability_set_name(cap, "Street"); + child_cap = osync_capability_new_child(cap, &error); + osync_capability_set_name(child_cap, "FirstName"); + + child_cap = osync_capability_new_child(cap, &error); + osync_capability_set_name(child_cap, "LastName"); - cap = osync_capability_new(capsobjtype, &error); - osync_capability_set_name(cap, "City"); cap = osync_capability_new(capsobjtype, &error); - osync_capability_set_name(cap, "Region"); + osync_capability_set_name(cap, "Telephone"); + return capabilities; } @@ -99,6 +105,13 @@ OSyncXMLFormat *xmlformat, *xmlformat_entire; OSyncCapabilities *capabilities = _merger_assemble_caps(); + OSyncCapabilitiesObjType *capsobjtype = osync_capabilities_get_objtype(capabilities, "contact"); + OSyncList *caplist = osync_capabilities_objtype_get_caps(capsobjtype); + for (; caplist; caplist = caplist->next) { + OSyncCapability *cap_cur = (OSyncCapability *) caplist->data; + //printf("Capability: %s\n", osync_capability_get_name(cap_cur)); + } + fail_unless(osync_file_read("contact.xml", &buffer, &size, &error), NULL); xmlformat = osync_xmlformat_parse(buffer, size, &error); fail_unless(xmlformat != NULL, NULL); @@ -115,13 +128,13 @@ osync_xmlformat_sort(xmlformat_entire, &error); fail_unless(error == NULL, NULL); -//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\n%s", buffer); g_free(buffer); -//osync_xmlformat_assemble(xmlformat_entire, &buffer, &size); printf("\n%s", buffer); g_free(buffer); +//osync_xmlformat_assemble(xmlformat, &buffer, &size, NULL); printf("XMLFORMAT:\n%s", buffer); g_free(buffer); +//osync_xmlformat_assemble(xmlformat_entire, &buffer, &size, NULL); printf("XMLFORMAT_ENTIRE\n%s", buffer); g_free(buffer); fail_unless(merge_xmlformat((char **) &xmlformat, &xmlformat_size, (char *) xmlformat_entire, osync_xmlformat_size(), capabilities, NULL, &error), NULL); -//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\nMERGED:\n%s", buffer); g_free(buffer); - fail_unless(demerge_xmlformat((char **) &xmlformat, &xmlformat_size, capabilities, NULL, &error), NULL); -//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\nDEMERGED:\n%s", buffer); g_free(buffer); +//osync_xmlformat_assemble(xmlformat, &buffer, &size, NULL); printf("\nMERGED:\n%s", buffer); g_free(buffer); + fail_unless(demerge_xmlformat((char **) &xmlformat_entire, &xmlformat_size, capabilities, NULL, &error), NULL); +//osync_xmlformat_assemble(xmlformat_entire, &buffer, &size, NULL); printf("\nDEMERGED:\n%s", buffer); g_free(buffer); osync_capabilities_unref(capabilities); osync_xmlformat_unref(xmlformat); |