Mozilla/mozilla/webtools/PLIF/PLIF/Application.pm
ian%hixie.ch 4015b54a02 Stop perl parsing source files that aren't used. (Lazy loading using __DATA__ blocks)
git-svn-id: svn://10.0.0.236/trunk@139442 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-14 07:50:18 +00:00

155 lines
5.3 KiB
Perl

# -*- Mode: perl; tab-width: 4; indent-tabs-mode: nil; -*-
#
# This file is MPL/GPL dual-licensed under the following terms:
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.1 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and
# limitations under the License.
#
# The Original Code is PLIF 1.0.
# The Initial Developer of the Original Code is Ian Hickson.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License Version 2 or later (the "GPL"), in
# which case the provisions of the GPL are applicable instead of those
# above. If you wish to allow use of your version of this file only
# under the terms of the GPL and not to allow others to use your
# version of this file under the MPL, indicate your decision by
# deleting the provisions above and replace them with the notice and
# other provisions required by the GPL. If you do not delete the
# provisions above, a recipient may use your version of this file
# under either the MPL or the GPL.
package PLIF::Application;
use strict;
use vars qw(@ISA);
@ISA = qw(PLIF::Program);
require PLIF::Program; # see note below
1;
__DATA__
# Note: this module "require"s PLIF::Program (as opposed to "use"ing
# it) because that module will try to call 'main'->create, which won't
# work if the module is parsed during compilation instead of during
# execution. For the same reason, the @ISA line is above the
# require. All modules that have PLIF::Application as an ancestor need
# to do this.
#
# In theory, if you use PLIF::Application, the class tree should look
# like this:
#
# PLIF (the core module)
# |
# PLIF::Controller (defines the service management)
# |
# PLIF::Program (defines things like 'input' and 'output')
# |
# PLIF::Application (defines the generic command dispatcher)
# |
# A PLIF Shell (bootstraps PLIF::Application)
#
# However, you might want to skip the PLIF::Application layer if all
# you are doing is writing a `simple' utility (although frankly I
# would doubt your choice of PLIF as an infrastructure if all you are
# looking for is a `simple' utility -- HTTP content negotiation and
# database-agnostic logic is probably a bit of an overkill there...).
#
# If you are writing an application that uses PLIF for some part of
# the work, but not for input and output, then you would probably
# inherit straight from PLIF::Controller, and only use the getService
# call (and friends).
# find either a service or a one-shot object that claims to implement
# command dispatching, and ask them to handle this.
sub dispatch {
my $self = shift;
if (not $self->dispatchMethod('dispatcher.commands', 'cmd', @_)) {
$self->SUPER::dispatch(@_);
}
}
sub registerServices {
my $self = shift;
$self->SUPER::registerServices(@_);
$self->registerCoreServices();
$self->registerAppServices();
$self->registerInstalledServices();
$self->registerFallbackServices();
}
sub registerCoreServices {
my $self = shift;
# install the configuration system
$self->register(qw(
PLIF::DataSource::Configuration
PLIF::Database::ConfigurationFile
PLIF::Output::Generic
PLIF::Output::Generic::StdOut
PLIF::Service::XML
PLIF::Service::Coses
PLIF::Service::TemplateToolkit
PLIF::Service::Components::AdminCommands
));
}
sub registerAppServices {} # stub
# utility function to be called by real application if needed
sub registerWebServices {
my $self = shift;
# install the web-related services
$self->register(qw(
PLIF::Input::CGI::GetPathInfo
PLIF::Input::CGI::Get
PLIF::Input::CGI::Head
PLIF::Input::CGI::PostURLEncoded
PLIF::Input::CGI::PostMultipart
PLIF::Input::CGI::PostXMLRPC
PLIF::Database::DBI
PLIF::DatabaseHelper::DBI
PLIF::DataSource::Strings::MySQL
PLIF::DataSource::User::MySQL
PLIF::Service::XMLRPC
PLIF::Service::WWW
PLIF::Service::User
PLIF::Service::Passwords
PLIF::Service::UserField::String
PLIF::Service::UserField::Integer
PLIF::Service::UserFieldFactory
PLIF::Service::Components::Login
PLIF::Service::Components::CosesEditor
PLIF::Service::Components::UserPrefs
PLIF::Service::ContactMethod::Email
PLIF::ProtocolHelper::Logout::HTTP
PLIF::ProtocolHelper::UA::HTTP
));
}
sub registerInstalledServices {
my $self = shift;
# install the modules from the configuration database
my $modules = $self->getService('dataSource.configuration')->getInstalledModules($self);
if (defined($modules)) {
$self->register(@$modules);
}
}
sub registerFallbackServices {
my $self = shift;
# install the configuration system
$self->register(qw(
PLIF::DataSource::FileStrings
PLIF::DataSource::DebugStrings
PLIF::Service::GenericOutputs
PLIF::Input::CommandLine
PLIF::Input::Default
));
}