From b2c3a46c06a6a6039dcf3deea2abf7ea7e9957db Mon Sep 17 00:00:00 2001 From: miker Date: Tue, 2 Aug 2005 20:36:46 +0000 Subject: [PATCH] making class handling more generic git-svn-id: svn://svn.open-ils.org/ILS/trunk@1587 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- OpenSRF/src/gateway/fieldmapper-c-xml-out.pl | 105 ++++++++++++++----- 1 file changed, 76 insertions(+), 29 deletions(-) diff --git a/OpenSRF/src/gateway/fieldmapper-c-xml-out.pl b/OpenSRF/src/gateway/fieldmapper-c-xml-out.pl index 7f7ef3e389..eccc63ae89 100755 --- a/OpenSRF/src/gateway/fieldmapper-c-xml-out.pl +++ b/OpenSRF/src/gateway/fieldmapper-c-xml-out.pl @@ -85,61 +85,108 @@ void _rest_xml_output(growing_buffer* buf, object* obj, char * fm_class, int fm_ } /* add class hints if we have a class name */ - if(obj->classname) - buffer_fadd(buf,"", obj->classname); + if(obj->classname) { + if(obj->is_null) { + buffer_fadd(buf,"", obj->classname); + return; + } else { + buffer_fadd(buf,"", obj->classname); + } + } /* now add the data */ - if(obj->is_null) + if(obj->is_null) buffer_fadd(buf, "<%s/>",tag); - else if(obj->is_bool && obj->bool_value) - buffer_fadd(buf, "<%s>true",tag,tag); + else if(obj->is_bool && obj->bool_value) { + if (obj->classname) + buffer_add(buf, "true"); + else + buffer_fadd(buf, "<%s>true",tag,tag); - else if(obj->is_bool && ! obj->bool_value) - buffer_fadd(buf, "<%s>false",tag,tag); + } else if(obj->is_bool && ! obj->bool_value) { + if (obj->classname) + buffer_add(buf, "false"); + else + buffer_fadd(buf, "<%s>false",tag,tag); - else if (obj->is_string) - buffer_fadd(buf,"<%s>%s",tag,obj->string_data,tag); + } else if (obj->is_string) { + if (obj->classname) + buffer_add(buf,"%s",obj->string_data); + else + buffer_fadd(buf,"<%s>%s",tag,obj->string_data,tag); - else if(obj->is_number) - buffer_fadd(buf,"<%s>%ld",tag,obj->num_value,tag); + } else if(obj->is_number) { + if (obj->classname) + buffer_add(buf,"%ld",obj->num_value); + else + buffer_fadd(buf,"<%s>%ld",tag,obj->num_value,tag); - else if(obj->is_double) - buffer_fadd(buf,"<%s>%lf",tag,obj->double_value,tag); + } else if(obj->is_double) { + if (obj->classname) + buffer_fadd(buf,"%lf",tag,obj->double_value,tag); + else + buffer_fadd(buf,"<%s>%lf",tag,obj->double_value,tag); - else if (obj->is_array) { - if(!fm_class) - buffer_add(buf,""); - else - buffer_fadd(buf,"<%s>",tag); + } else if (obj->is_array) { + if(!obj->classname) { + if(!fm_class) + buffer_add(buf,""); + else + buffer_fadd(buf,"<%s>",tag); + } for( i = 0; i!= obj->size; i++ ) { _rest_xml_output(buf, obj->get_index(obj,i), obj->classname, i); } - if(!fm_class) - buffer_add(buf,""); - else - buffer_fadd(buf,"",tag); + if(!obj->classname) { + if(!fm_class) + buffer_add(buf,""); + else + buffer_fadd(buf,"",tag); + } } else if (obj->is_hash) { - buffer_add(buf,""); + + if(!obj->classname) { + if(!fm_class) + buffer_add(buf,""); + else + buffer_fadd(buf,"<%s>",tag); + } + object_iterator* itr = new_iterator(obj); object_node* tmp; while( (tmp = itr->next(itr)) ) { - buffer_add(buf,""); - buffer_fadd(buf,"%s",tmp->key); + if (obj->classname) { + buffer_fadd(buf,"<%s>",tmp->key); + } else { + buffer_add(buf,""); + buffer_fadd(buf,"%s",tmp->key); + } + _rest_xml_output(buf, tmp->item, NULL,0); - buffer_add(buf,""); + + if (obj->classname) { + buffer_fadd(buf,"",tmp->key); + } else { + buffer_add(buf,""); + } } free_iterator(itr); - buffer_add(buf,""); - } + if(!obj->classname) { + if(!fm_class) + buffer_add(buf,""); + else + buffer_fadd(buf,"",tag); + } + } if(obj->classname) - buffer_add(buf,""); + buffer_add(buf,""); } char * _lookup_fm_field(char * class, int pos) { -- 2.43.2