1 package OpenSRF::DOM::Element::domainObject;
2 use strict; use warnings;
3 use base 'OpenSRF::DOM::Element';
5 use OpenSRF::DOM::Element::domainObjectAttr;
6 use OpenSRF::Utils::Logger qw(:level);
7 use OpenSRF::EX qw(:try);
9 #use OpenSRF::DomainObject::oilsPrimitive;
10 #use OpenSRF::DomainObject::oilsResponse;
11 use vars qw($AUTOLOAD);
15 (my $name = $AUTOLOAD) =~ s/.*://; # strip fully-qualified portion
17 return class($self) if ($name eq 'class');
18 if ($self->can($name)) {
19 return $self->$name(@_);
23 ### Check for recursion
24 my $calling_method = (caller(1))[3];
28 if ($info[0] =~ /AUTOLOAD/) { @info = caller(2); }
30 unless( @info ) { @info = caller(); }
32 if( $calling_method and $calling_method eq "OpenSRF::DOM::Element::domainObject::AUTOLOAD" ) {
34 throw OpenSRF::EX::PANIC ( "RECURSION! Caller [ @info[0..2] ] | Object [ ".ref($self)." ]\n ** Trying to call $name", ERROR );
36 ### Check for recursion
40 my $meth = class($self).'::'.$name;
43 return $self->$meth(@args);
47 OpenSRF::Utils::Logger->error( $@ . $e);
49 OpenSRF::Utils::Logger->error( $@ );
55 my $node = OpenSRF::DOM::Element::domainObject::upcast($self);
56 OpenSRF::Utils::Logger->debug( "Autoloaded to: ".ref($node), INTERNAL );
58 return $node->$name(@_);
63 return bless $obj => 'XML::LibXML::Element';
68 return bless $self => class($self);
74 my $obj = $class->SUPER::new( name => $type );
76 my ($attr,$val) = (shift,shift);
77 last unless ($attr and $val);
78 $obj->addAttr( $attr, $val );
79 #$obj->appendChild( OpenSRF::DOM::Element::domainObjectAttr->new($attr, $val) );
86 return 'OpenSRF::DomainObject::'.$self->getAttribute('name');
91 return $self->getAttribute('name');
96 $self->appendChild( $_ ) for OpenSRF::DOM::Element::domainObjectAttr->new(@_);
103 return (grep { $_->getAttribute('name') eq $type } $self->getChildrenByTagName("oils:domainObjectAttr"))[0];
108 my %attrs = map { ( $_->getAttribute('name') => $_->getAttribute('value') ) } $self->getChildrenByTagName('oils:domainObjectAttr');
115 return $self->attrHash->{shift};