1 package OpenSRF::DOM::Element::domainObjectCollection;
2 use base 'OpenSRF::DOM::Element';
3 use OpenSRF::DOM::Element::domainObjectAttr;
7 my $self = CORE::shift;
8 (my $name = $AUTOLOAD) =~ s/.*://; # strip fully-qualified portion
10 return class($self) if ($name eq 'class');
13 my $meth = class($self).'::'.$name;
15 ### Check for recursion
16 my $calling_method = (caller(1))[3];
20 if ($info[0] =~ /AUTOLOAD/) { @info = caller(2); }
22 unless( @info ) { @info = caller(); }
23 if( $calling_method and $calling_method eq "OpenSRF::DOM::Element::domainObjectCollection::AUTOLOAD" ) {
24 throw OpenSRF::EX::PANIC ( "RECURSION! Caller [ @info ] | Object [ ".ref($self)." ]\n ** Trying to call $name", ERROR );
26 ### Check for recursion
29 return $self->$meth(@args);;
32 OpenSRF::Utils::Logger->error( $@ . $e);
36 return upcast($self)->$name(@_);
40 my $obj = CORE::shift;
41 return bless $obj => 'XML::LibXML::Element';
45 my $self = CORE::shift;
46 return bless $self => class($self);
50 my $class = CORE::shift;
51 my $type = CORE::shift;
52 my $obj = $class->SUPER::new( name => $type );
53 while ( my $val = shift) {
54 throw OpenSRF::EX::NotADomainObject
55 if (ref $val and $val->nodeName !~ /^oils:domainObject/o);
56 $obj->appendChild( $val );
63 return 'OpenSRF::DomainObjectCollection::'.$self->getAttribute('name');
68 return $self->getAttribute('name');
72 my $self = CORE::shift;
73 return $self->removeChild( $self->lastChild )->upcast;
77 my $self = CORE::shift;
79 for my $node (@args) {
80 #throw OpenSRF::EX::NotADomainObject ( "$_ must be a oils:domainOjbect*, it's a ".$_->nodeName )
81 # unless ($_->nodeName =~ /^oils:domainObject/o);
83 unless ($node->nodeName =~ /^oils:domainObject/o) {
84 $node = OpenSRF::DomainObject::oilsScalar->new($node);
87 $self->appendChild( $node );
92 my $self = CORE::shift;
93 return $self->removeChild( $self->firstChild )->upcast;
97 my $self = CORE::shift;
100 throw OpenSRF::EX::NotADomainObject
101 unless ($_->nodeName =~ /^oils:domainObject/o);
102 $self->insertBefore( $_, $self->firstChild );
107 my $self = CORE::shift;
108 return $self->firstChild->upcast;
112 my $self = CORE::shift;
113 return map {(bless($_ => 'OpenSRF::DomainObject::'.$_->getAttribute('name')))} $self->childNodes;