From: <svn...@op...> - 2009-06-04 20:46:26
|
Author: dgollub Date: Thu Jun 4 22:46:11 2009 New Revision: 5666 URL: http://www.opensync.org/changeset/5666 Log: Initial parsing of a capbility node. refs #1084 Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c branches/opensync-ticket1084/opensync/capabilities/opensync_capability.h branches/opensync-ticket1084/opensync/capabilities/opensync_capability_internals.h branches/opensync-ticket1084/opensync/opensync-capabilities.h Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c Thu Jun 4 11:28:24 2009 (r5665) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c Thu Jun 4 22:46:11 2009 (r5666) @@ -52,6 +52,32 @@ return capabilities; } +OSyncCapabilities *osync_capabilities_ref(OSyncCapabilities *capabilities) +{ + osync_assert(capabilities); + + g_atomic_int_inc(&(capabilities->ref_count)); + + return capabilities; +} + +void osync_capabilities_unref(OSyncCapabilities *capabilities) +{ + osync_assert(capabilities); + + if (g_atomic_int_dec_and_test(&(capabilities->ref_count))) { + OSyncList *l; + for (l = capabilities->objtypes; l; l = l->next) { + OSyncCapabilitiesObjType *objtype; + objtype = (OSyncCapabilitiesObjType *) l->data; + osync_capabilities_objtype_unref(objtype); + /* TODO unlink from list */ + } + osync_xml_free_doc(capabilities->doc); + osync_free(capabilities); + } +} + OSyncCapabilities *osync_capabilities_parse(const char *buffer, unsigned int size, OSyncError **error) { OSyncCapability *capability = NULL; @@ -85,14 +111,8 @@ goto error; } - /* TODO: port - if (!(capability = osync_capability_new_node(capabilitiesobjtype, cur, error))) + if (!(capability = osync_capability_parse(capabilitiesobjtype, cur, error))) goto error; - - if (!osync_capability_parse(capability, cur->children, &capabilitiesobjtype->first_child, &capabilitiesobjtype->last_child, &capabilitiesobjtype->child_count, error)) - goto error_and_free; - */ - } osync_trace(TRACE_EXIT, "%s: %p", __func__, capabilities); @@ -106,32 +126,6 @@ return NULL; } -OSyncCapabilities *osync_capabilities_ref(OSyncCapabilities *capabilities) -{ - osync_assert(capabilities); - - g_atomic_int_inc(&(capabilities->ref_count)); - - return capabilities; -} - -void osync_capabilities_unref(OSyncCapabilities *capabilities) -{ - osync_assert(capabilities); - - if (g_atomic_int_dec_and_test(&(capabilities->ref_count))) { - OSyncList *l; - for (l = capabilities->objtypes; l; l = l->next) { - OSyncCapabilitiesObjType *objtype; - objtype = (OSyncCapabilitiesObjType *) l->data; - osync_capabilities_objtype_unref(objtype); - /* TODO unlink from list */ - } - osync_xml_free_doc(capabilities->doc); - osync_free(capabilities); - } -} - osync_bool osync_capabilities_assemble(OSyncCapabilities *capabilities, char **buffer, int *size) { osync_assert(capabilities); Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c Thu Jun 4 11:28:24 2009 (r5665) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c Thu Jun 4 22:46:11 2009 (r5666) @@ -26,7 +26,7 @@ #include "opensync-capabilities.h" #include "opensync-capabilities_internals.h" -#include "opensync_capabilities_objtype.h" +#include "opensync_capabilities_objtype_internals.h" #include "opensync_capabilities_objtype_private.h" OSyncCapabilitiesObjType *osync_capabilities_objtype_new(OSyncCapabilities *capabilities, const char *objtype, OSyncError **error) Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c Thu Jun 4 11:28:24 2009 (r5665) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c Thu Jun 4 22:46:11 2009 (r5666) @@ -35,12 +35,61 @@ return strcmp(osync_capability_get_name(*(OSyncCapability **)capability1), osync_capability_get_name(*(OSyncCapability **)capability2)); } -OSyncCapability *osync_capability_new(OSyncCapabilitiesObjType *capobjtype, const char *name, OSyncError **error) +OSyncCapability *osync_capability_parse(OSyncCapabilitiesObjType *capabilitiesobjtype, xmlNodePtr node, OSyncError **error) +{ + xmlNode *cur; + OSyncCapability *cap = NULL; + osync_assert(capabilitiesobjtype); + osync_assert(node); + + cur = node; + + cap = osync_capability_new(capabilitiesobjtype, error); + if (!cap) + goto error; + + for (; cur != NULL; cur = cur->next) { + char *str = NULL; + + if (cur->type != XML_ELEMENT_NODE) + continue; + + str = (char*)xmlNodeGetContent(cur); + if (!str) + continue; + + if (!xmlStrcmp(cur->name, BAD_CAST "Name")) + osync_capability_set_name(cap, str); + else if (!xmlStrcmp(cur->name, BAD_CAST "DisplayName")) + osync_capability_set_displayname(cap, str); + else if (!xmlStrcmp(cur->name, BAD_CAST "MaxOccurs")) + osync_capability_set_maxoccurs(cap, atoi(str)); + else if (!xmlStrcmp(cur->name, BAD_CAST "Max")) + osync_capability_set_max(cap, atoi(str)); + else if (!xmlStrcmp(cur->name, BAD_CAST "Min")) + osync_capability_set_min(cap, atoi(str)); + else if (!xmlStrcmp(cur->name, BAD_CAST "Parameter")) + ; //TODO + else if (!xmlStrcmp(cur->name, BAD_CAST "Type")) + ; //TODO + else if (!xmlStrcmp(cur->name, BAD_CAST "ValEnum")) + osync_list_prepend(cap->valenum, osync_strdup(str)); + + osync_xml_free(str); + } + + return cap; + +error: + osync_trace(TRACE_EXIT_ERROR, "%s: %s" , __func__, osync_error_print(error)); + return NULL; +} + +OSyncCapability *osync_capability_new(OSyncCapabilitiesObjType *capobjtype, OSyncError **error) { OSyncCapability *capability = NULL; - osync_trace(TRACE_ENTRY, "%s(%p, %s, %s, %p)", __func__, capobjtype, name, error); + osync_trace(TRACE_ENTRY, "%s(%p, %s, %p)", __func__, capobjtype, error); osync_assert(capobjtype); - osync_assert(name); capability = osync_try_malloc0(sizeof(OSyncCapability), error); if(!capability) Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capability.h ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capability.h Thu Jun 4 11:28:24 2009 (r5665) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capability.h Thu Jun 4 22:46:11 2009 (r5666) @@ -63,11 +63,10 @@ * @brief Creates a new capability object which will be added to the end of capabilities of the capabilities object. * The returned object will be freed with the capabilities object. * @param capobjtype The pointer to a capabilities objtype object - * @param name The name of the capability * @param error The error which will hold the info in case of an error * @return The pointer to the newly allocated capability object or NULL in case of error */ -OSYNC_EXPORT OSyncCapability *osync_capability_new(OSyncCapabilitiesObjType* capobjtype, const char *name, OSyncError **error); +OSYNC_EXPORT OSyncCapability *osync_capability_new(OSyncCapabilitiesObjType* capobjtype, OSyncError **error); /** * @brief Get the name of the capability Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capability_internals.h ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capability_internals.h Thu Jun 4 11:28:24 2009 (r5665) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capability_internals.h Thu Jun 4 22:46:11 2009 (r5666) @@ -39,23 +39,7 @@ * @param error The error which will hold the info in case of an error * @return The pointer to the newly allocated capability object or NULL in case of error */ -OSyncCapability *osync_capability_new_node(OSyncCapabilitiesObjType *objtype, xmlNodePtr node, OSyncError **error); - -/** - * @brief Multi-level parsing of OSyncCapability based on a given XML Node. - * - * This function create a Capability-tree out of the given xmlNode pointer. This function - * is calling it self in a recursion and parses all siblings and child of the given xmlNode pointer. - * - * @param parent The parent OSyncCapability - * @param node The node to start parsing the capabilities. - * @param first_child Reference to a pointer to store the first parsed OSyncCapability child - * @param last_child Reference to a pointer to store the last parsed OSyncCapability child - * @param child_count Reference to unsinged int to count the childs of the capability node - * @param error The error which will hold the info in case of an error - * @returns TRUE on success, FALSE on error - */ -osync_bool osync_capability_parse(OSyncCapability *parent, xmlNodePtr node, OSyncCapability **first_child, OSyncCapability **last_child, unsigned int *child_count, OSyncError **error); +OSyncCapability *osync_capability_parse(OSyncCapabilitiesObjType *objtype, xmlNodePtr node, OSyncError **error); /** * @brief Frees a capability object Modified: branches/opensync-ticket1084/opensync/opensync-capabilities.h ============================================================================== --- branches/opensync-ticket1084/opensync/opensync-capabilities.h Thu Jun 4 11:28:24 2009 (r5665) +++ branches/opensync-ticket1084/opensync/opensync-capabilities.h Thu Jun 4 22:46:11 2009 (r5666) @@ -24,7 +24,6 @@ OPENSYNC_BEGIN_DECLS #include "capabilities/opensync_capabilities.h" -#include "capabilities/opensync_capabilities_objtype.h" #include "capabilities/opensync_capability.h" OPENSYNC_END_DECLS |