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);
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);
46 OpenSRF::Utils::Logger->error( $@ . $e);
51 my $node = OpenSRF::DOM::Element::domainObject::upcast($self);
52 OpenSRF::Utils::Logger->debug( "Autoloaded to: ".ref($node), INTERNAL );
54 return $node->$name(@_);
59 return bless $obj => 'XML::LibXML::Element';
64 return bless $self => class($self);
70 my $obj = $class->SUPER::new( name => $type );
72 my ($attr,$val) = (shift,shift);
73 last unless ($attr and $val);
74 $obj->addAttr( $attr, $val );
75 #$obj->appendChild( OpenSRF::DOM::Element::domainObjectAttr->new($attr, $val) );
82 return 'OpenSRF::DomainObject::'.$self->getAttribute('name');
87 return $self->getAttribute('name');
92 $self->appendChild( $_ ) for OpenSRF::DOM::Element::domainObjectAttr->new(@_);
99 return (grep { $_->getAttribute('name') eq $type } $self->getChildrenByTagName("oils:domainObjectAttr"))[0];
104 my %attrs = map { ( $_->getAttribute('name') => $_->getAttribute('value') ) } $self->getChildrenByTagName('oils:domainObjectAttr');
111 return $self->attrHash->{shift};