diff options
Diffstat (limited to 'lib/WebCoso')
-rw-r--r-- | lib/WebCoso/Config.pm | 41 | ||||
-rw-r--r-- | lib/WebCoso/X.pm | 10 |
2 files changed, 49 insertions, 2 deletions
diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm index 1b4d6d8..018c3c7 100644 --- a/lib/WebCoso/Config.pm +++ b/lib/WebCoso/Config.pm @@ -9,6 +9,8 @@ use utf8; my @resources; my $collections=WebCoso::Collections->new(); my %resource_to_pipeline; +my %name_to_resource; +my %name_to_collection; sub read_scalar { my ($class,$content,$filename)=@_; @@ -25,9 +27,18 @@ EOF nested => $@, ); } - else { - return 1; + my $symbols=\%WEBCOSO::CONFIG::; + for my $name (keys %$symbols) { + my $object=${*{$symbols->{$name}}{SCALAR}}; + my $type=ref($object); + if ($type eq 'WebCoso::Resource') { + $name_to_resource{$name}=$object; + } + elsif ($type eq 'WebCoso::Collection') { + $name_to_collection{$name}=$object; + } } + return 1; } sub add_resource { @@ -39,6 +50,19 @@ sub get_all_resources { return @resources; } +sub get_res_by_name { + my ($class,$name)=@_; + + if (exists $name_to_resource{$name}) { + return $name_to_resource{$name}; + } + else { + WebCoso::X::NoSuchResource->throw( + resource => $name + ); + } +} + sub add_collection { my ($class,$collection)=@_; $collections->add_collection($collection); @@ -48,6 +72,19 @@ sub get_collections { return $collections; } +sub get_coll_by_name { + my ($class,$name)=@_; + + if (exists $name_to_collection{$name}) { + return $name_to_collection{$name}; + } + else { + WebCoso::X::NoSuchCollection->throw( + collection => $name + ); + } +} + sub get_pipeline_for { my ($class, $resource)=@_; diff --git a/lib/WebCoso/X.pm b/lib/WebCoso/X.pm index 57acd58..a882709 100644 --- a/lib/WebCoso/X.pm +++ b/lib/WebCoso/X.pm @@ -37,6 +37,11 @@ use Exception::Class fields => [ 'resource' ], description => 'è stata richiesta una risorsa ignota', }, + 'WebCoso::X::NoSuchCollection' => { + isa => 'WebCoso::X::Base', + fields => [ 'collection' ], + description => 'è stata richiesta una collezione ignota', + }, 'WebCoso::X::NoSuchStep' => { isa => 'WebCoso::X::Base', fields => [ 'pipeline', 'step' ], @@ -76,6 +81,11 @@ sub WebCoso::X::NoSuchResource::full_message { return 'Risorsa ignota: ' . $self->resource(); } +sub WebCoso::X::NoSuchCollection::full_message { + my ($self)=@_; + return 'Collezione ignota: ' . $self->collection(); +} + sub WebCoso::X::NoSuchStep::full_message { my ($self)=@_; |