package WebCoso::Config::Collection;
use strict;
use warnings;
use Class::Std;
use WebCoso::Config;
{
my %names_of :ATTR( :get<names> );
my %parents_of :ATTR( :get<parents_ref> );
my %children_of :ATTR( :get<children_ref> );
my %resources_of :ATTR( :init_arg<resources> :get<resources_ref> );
sub BUILD {
my ($self,$ident,$args_ref)=@_;
my $names=$args_ref->{name};
$names={''=>$names} unless ref($names) eq 'HASH';
$names_of{$ident}=$names;
my $parents=$args_ref->{parents} || [];
$parents_of{$ident}=$parents;
$_->add_child($self) for @$parents;
my $children=$args_ref->{children} || [];
$children_of{$ident}=$children;
$_->add_parent($self) for @$children;
WebCoso::Config->add_collection($self);
}
sub axes {
return 'language';
}
sub axis {
my ($self,$axis_name)=@_;
if ($axis_name eq 'language') {
return keys %{ $self->get_names() }
}
else {
return;
}
}
sub properties {
my ($self,$axis_name,$axis_value,@rest)=@_;
if (@rest==0 and $axis_name eq 'language') {
if ( grep { $_ eq $axis_value }
keys %{ $self->get_names() }
) {
return {
name => $self->get_names()->{$axis_value}
};
}
else {
return;
}
}
}
sub add_child {
my ($self,$child)=@_;
return if grep { $_ eq $child } @{ $self->get_children_ref() };
push @{ $self->get_children_ref() },$child;
$child->add_parent($self);
}
sub add_parent {
my ($self,$parent)=@_;
return if grep { $_ eq $parent } @{ $self->get_parents_ref() };
push @{ $self->get_parents_ref() },$parent;
$parent->add_child($self);
}
sub get_parents {
my ($self)=@_;
return @{ $self->get_parents_ref() };
}
sub get_children {
my ($self)=@_;
return @{ $self->get_children_ref() };
}
sub get_resources {
my ($self)=@_;
return @{ $self->get_resources_ref() };
}
}
1;