diff options
Diffstat (limited to 'lib/WebCoso/Config/Collection.pm')
-rw-r--r-- | lib/WebCoso/Config/Collection.pm | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/WebCoso/Config/Collection.pm b/lib/WebCoso/Config/Collection.pm index 6b5d201..28e1892 100644 --- a/lib/WebCoso/Config/Collection.pm +++ b/lib/WebCoso/Config/Collection.pm @@ -6,6 +6,9 @@ use WebCoso::Config; { my %names_of :ATTR( :get<names> ); +my %parents_of :ATTR; +my %children_of :ATTR; +my %resources_of :ATTR( :init_arg<resources> ); sub BUILD { my ($self,$ident,$args_ref)=@_; @@ -15,6 +18,14 @@ sub BUILD { $names={''=>$names} unless ref($names) eq 'HASH'; $names_of{$ident}=$names; + my $parents=$args_ref->{parents}; + $_->add_child($self) for @$parents; + $parents_of{$ident}=$parents; + + my $children=$args_ref->{children}; + $_->add_parent($self) for @$children; + $children_of{$ident}=$children; + WebCoso::Config->add_collection($self); } @@ -49,6 +60,28 @@ sub properties { } } +sub add_child { + my ($self,$child)=@_; + push @{ $children_of{ ident($self) } },$child; +} +sub add_parent { + my ($self,$parent)=@_; + push @{ $parents_of{ ident($self) } },$parent; +} + +sub get_parents { + my ($self)=@_; + return @{ $parents_of{ ident($self) } }; +} +sub get_children { + my ($self)=@_; + return @{ $children_of{ ident($self) } }; +} +sub get_resources { + my ($self)=@_; + return @{ $resources_of{ ident($self) } }; +} + } 1; |