aboutsummaryrefslogtreecommitdiff
path: root/lib/WebCoso/Config/Collection.pm
blob: 367a53e38f7d96ea7c3035c288de9495d5356e04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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};
    # trasformo un nome semplice in un nome "per qualsiasi lingua" 
    $names={''=>$namesunless ref($nameseq 'HASH';
    $names_of{$ident}=$names;
 
    my $parents=$args_ref->{parents} || [];
    $parents_of{$ident}=$parents;
    $_->add_child($selffor @$parents;
 
    my $children=$args_ref->{children} || [];
    $children_of{$ident}=$children;
    $_->add_parent($selffor @$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;