--- nfo/perl/libs/Data/Rap/Metadata.pm 2003/03/29 07:13:19 1.3 +++ nfo/perl/libs/Data/Rap/Metadata.pm 2004/06/20 16:12:24 1.4 @@ -1,7 +1,11 @@ ## ---------------------------------------------------------------------- -## $Id: Metadata.pm,v 1.3 2003/03/29 07:13:19 joko Exp $ +## $Id: Metadata.pm,v 1.4 2004/06/20 16:12:24 joko Exp $ ## ---------------------------------------------------------------------- ## $Log: Metadata.pm,v $ +## Revision 1.4 2004/06/20 16:12:24 joko +## + sub indexTargets +## modified getTargetDetails to use cached target details +## ## Revision 1.3 2003/03/29 07:13:19 joko ## better exception handling if target was not found in xml ## @@ -23,6 +27,7 @@ use Data::Dumper; use DesignPattern::Object; +use Storable; sub accessMetadata { @@ -83,6 +88,12 @@ sub getTargetDetails { my $self = shift; my $target = shift; + my $options = shift; + + # check cache and return result from there + if (my $result = $self->{cache}->{targets}->{$target} and not $options->{force}) { + return $result; + } # get metadata for single task from storage my $mdbe = $self->accessMetadata(); @@ -104,6 +115,37 @@ return $tree; } +sub indexTargets { + my $self = shift; + my $options = shift; + + my $filename = 'rap.xml.cache'; + + if ($options->{build}) { + $self->log("Building index of Targets", 'notice'); + # clear cache + delete $self->{cache}->{targets}; + my $list = $self->getTargetList(); + foreach my $target (@$list) { + $self->log("Reading target: $target->{name}", 'info'); + my $details = $self->getTargetDetails($target->{name}, { force => 1 }); + $self->{cache}->{targets}->{$target->{name}} = $details; + } + store $self->{cache}->{targets}, $filename; + + } elsif ($options->{load}) { + if (not -e $filename) { + return; + } + if ($self->{cache}->{targets} = retrieve($filename)) { + return 1; + } + + } else { + $self->log("Please call with options build or load", 'warning'); + + } +} 1; __END__