package OpenFrame::Example::Apache2Simple;

use strict;
use warnings;

use Apache2;
use Apache::Const -compile => qw(OK DECLINED);
use File::Spec::Functions qw(catfile);
use Pipeline;
use OpenFrame::AppKit;
use OpenFrame::Example::Redirector;
use OpenFrame::Response;
use OpenFrame::Segment::Apache2;
use OpenFrame::Segment::Apache2::NoImages;
use OpenFrame::Segment::ContentLoader;

our $VERSION = '1.00';

sub handler {
  my $r = shift;

  my $dir = catfile($r->dir_config('cwd'), 'webpages');

  my $request = OpenFrame::Segment::Apache2::Request->new();
  my $session_loader = OpenFrame::AppKit::Segment::SessionLoader->new();
  my $response = OpenFrame::Segment::Apache2::Response->new();
  my $redirect = OpenFrame::Example::Redirector->new();
  my $noimages = OpenFrame::Segment::Apache2::NoImages->new()
    ->directory($dir);
  my $content = OpenFrame::Segment::ContentLoader->new()
    ->directory($dir);

  if ($r->dir_config('debug')) {
    # debugorama
    $request->debug(10);
    $redirect->debug(10);
    $noimages->debug(10);
    $content->debug(10);
    $response->debug(10);
  }

  my $pipeline = Pipeline->new();
  $pipeline->add_segment($request, $session_loader, $redirect, $noimages, $content);
  $pipeline->add_cleanup($response);

  # Store the request in the pipeline
  $pipeline->store->set($r);
  my $out = $pipeline->dispatch();

  if ($out->code == ofDECLINE) {
    return Apache::DECLINED;
  } else {
    return Apache::OK;
  }
}

1;

__END__

=head1 NAME

OpenFrame::Example::Apache2Simple - Demo Apache2 Pipeline

=head1 SYNOPSIS

  SetHandler  perl-script
  PerlSetVar  cwd /home/website/
  # PerlSetVar  debug 1
  PerlHandler OpenFrame::Example::Apache2Simple

=head1 DESCRIPTION

OpenFrame::Example::Apache2Simple is an example pipeline which loads
static content.

The actual handler is quite short. The important part is to set up a
pipeline which has a OpenFrame::Segment::Apache2::Request segment at
the beginning and a OpenFrame::Segment::Apache2::Response as a cleanup
segment. Also, remember to check for an ofDECLINE and return DECLINED
in that case, or OK otherwise.

=head1 AUTHOR

Leon Brocard <acme@astray.com>

=head1 COPYRIGHT

Copyright 2002 Fotango Ltd.
Licensed under the same terms as Perl itself.

=cut