--- 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 23:00:23 1.5 @@ -1,7 +1,14 @@ ## ---------------------------------------------------------------------- -## $Id: Metadata.pm,v 1.3 2003/03/29 07:13:19 joko Exp $ +## $Id: Metadata.pm,v 1.5 2004/06/20 23:00:23 joko Exp $ ## ---------------------------------------------------------------------- ## $Log: Metadata.pm,v $ +## Revision 1.5 2004/06/20 23:00:23 joko +## minor fix: now creates cache-file in same directory where rap.xml is +## +## 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 +30,8 @@ use Data::Dumper; use DesignPattern::Object; +use Storable; +use File::Basename qw( dirname ); sub accessMetadata { @@ -83,6 +92,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 +119,43 @@ return $tree; } +sub indexTargets { + my $self = shift; + my $options = shift; + + # determine filename for cache-file + my $filename = 'rap.xml.cache'; + if (my $rapfile = $self->{__rap}->{filename}) { + if (my $path = dirname($rapfile)) { + $filename = $path . '/' . $filename; + } + } + + 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__