# -*- Mode: Perl; indent-tabs-mode: nil; -*-
package Wombat::Core::EngineMapper;
=pod
=head1 NAME
Wombat::Core::EngineMapper - internal mapper base class
=head1 SYNOPSIS
=head1 DESCRIPTION
Implementation of B<Wombat::Mapper> for a B<Wombat::Core::Engine>.
=cut
use base qw(Wombat::Core::MapperBase);
use strict;
use warnings;
use Servlet::Util::Exception ();
=pod
=head1 ACCESSOR METHODS
=over
=item setContainer($container)
Set the Container with which the Mapper is associated.
B<Parameters:>
=over
=item $container
the B<Wombat::Container> used for processing Requests
=back
B<Throws:>
=over
=item B<Servlet::Util::IllegalArgumentException>
if the Container is not acceptable to this Mapper
=back
=cut
sub setContainer {
my $self = shift;
my $container = shift;
unless ($container && $container->isa('Wombat::Core::Engine')) {
my $msg = "setContainer: container is not Engine\n";
Servlet::Util::IllegalArgumentException->throw($container);
}
$self->SUPER::setContainer($container);
return 1;
}
=pod
=back
=head1 PUBLIC METHODS
=over
=item map($request)
Return the child Container that should be used to process the
Request, or C<undef> f no such child Container can be identified.
B<Parameters:>
=over
=item $request
the B<Wombat::Request> being processed
=back
=cut
sub map {
my $self = shift;
my $request = shift;
my $engine = $self->getContainer();
my $freq = $request->getRequest();
# figure out the requested server name
my $server = $freq->getServerName();
unless ($server) {
$server = $engine->getDefaultHost();
$freq->setServerName($server);
}
return undef unless $server;
$server = lc $server;
# try direct match
my $host = $engine->getChild($server);
unless ($host) {
# try aliases
no warnings; # shut up "* matches null string many times"
for my $child ($engine->getChildren()) {
for my $alias ($child->getAliases()) {
if ($server =~ /^$alias$/) {
$host = $child;
last;
}
}
last if $host;
}
}
unless ($host) {
# try default host
$host ||= $engine->getChild($engine->getDefaultHost());
}
return $host;
}
1;
__END__
=back
=head1 SEE ALSO
L<Servlet::Util::Exception>,
L<Wombat::Container>,
L<Wombat::Engine>,
L<Wombat::Mapper>,
L<Wombat::Request>
=head1 AUTHOR
Brian Moseley, bcm@maz.org
=cut