From a5fd2cae1b6ad5fa1fd03a8672d4646af2554418 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Tue, 10 Apr 2012 16:28:40 -0400 Subject: [PATCH] Teach Fieldmapper how to turn FM objects into simple XML Signed-off-by: Mike Rylander Signed-off-by: Bill Erickson Signed-off-by: Lebbeous Fogle-Weekley --- .../perlmods/lib/OpenILS/Utils/Fieldmapper.pm | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/Fieldmapper.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/Fieldmapper.pm index eddb944d48..c7e7a25299 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/Fieldmapper.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/Fieldmapper.pm @@ -6,6 +6,7 @@ use OpenSRF::Utils::Logger; use OpenSRF::Utils::SettingsClient; use OpenSRF::System; use XML::LibXML; +use Scalar::Util 'blessed'; my $log = 'OpenSRF::Utils::Logger'; @@ -332,6 +333,46 @@ sub RequiredField { return $$fieldmap{$self->class_name}{fields}{$f}{required}; } +sub toXML { + my $self = shift; + return undef unless (ref $self); + + my $dom = XML::LibXML::Document->new; + my $root = $dom->createElement( $self->class_name ); + $dom->setDocumentElement( $root ); + + for my $f ($self->properties) { + next if ($f eq 'isnew'); + next if ($f eq 'ischanged'); + next if ($f eq 'isdeleted'); + + my $value = $self->$f(); + my $element = $dom->createElement( $f ); + + $value = [$value] if (blessed($value)); # fm object + + if (ref($value)) { # array + for my $k (@$value) { + if (blessed($k)) { + my $subdoc = $k->toXML; + next unless $subdoc; + my $subnode = $subdoc->documentElement; + $dom->adoptNode($subnode); + $element->appendChild($subnode); + } elsif (ref $k) { # not sure what to do here + $element->appendText($k); + } else { # meh .. just append, I guess + $element->appendText($k); + } + } + } else { + $element->appendText($value); + } + } + + return $dom; +} + sub ValidateField { my $self = shift; my $f = shift; -- 2.43.2