/usr/local/CPAN/Keystone-Resolver/Keystone/Resolver/plugins/ServiceType/fulltext.pm
# $Id: fulltext.pm,v 1.3 2007-07-19 16:11:55 mike Exp $
package Keystone::Resolver::plugins::ServiceType::fulltext;
use strict;
use warnings;
### A nice big comment is required describing the plugin interface.
# Returns undef if the service does not have the requested journal, or
# if its coverage does not include the requested volume/issue.
#
sub handle {
my $class = shift();
my($openURL, $service) = @_;
my($serial, $errmsg) = $openURL->_serial();
if (!defined $serial) {
# Serial not supported at all, first time of asking
return (undef, $errmsg, 1);
} elsif (!$serial) {
# Serial not supported at all, but we already knew that so
# there's no need to generate another message
return undef;
}
if (!$openURL->db()->service_has_serial($service, $serial)) {
# Journal not covered by this service: quiet failure, no error
$openURL->log(Keystone::Resolver::LogLevel::CHITCHAT,
, $service->render(), " lacks ", $serial->render());
return undef;
}
$openURL->log(Keystone::Resolver::LogLevel::CHITCHAT,
$service->render(), " has ", $serial->render());
# If a recipe is provided, then we use it to construct the URI.
# If not, then we take the service's tag as the name of a plugin,
# and invoke that to do the resolution.
my $recipe = $service->url_recipe();
return $openURL->_makeURI($recipe)
if $recipe;
my $tag = $service->tag();
eval {
require "Keystone/Resolver/plugins/Service/$tag.pm";
}; if ($@) {
$openURL->warn("can't load service plugin '$tag': $@");
return (undef, "service plug-in '$tag' not defined", 1);
}
return "Keystone::Resolver::plugins::Service::$tag"->uri($openURL);
}
1;