aboutsummaryrefslogtreecommitdiff
path: root/lib/WebCoso/Config/Collection.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/WebCoso/Config/Collection.pm')
-rw-r--r--lib/WebCoso/Config/Collection.pm33
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;