# HG changeset patch # User wizard # Date 1268400226 -10800 # Node ID c64bd1bf727df97e55f580f3b232b4b9e03b5d74 # Parent 8d0ae27d15c1452743f454da551e1f94b9f369bf Web application Page query handler diff -r 8d0ae27d15c1 -r c64bd1bf727d Lib/IMPL/Web/Application.pm --- a/Lib/IMPL/Web/Application.pm Wed Mar 10 16:41:46 2010 +0300 +++ b/Lib/IMPL/Web/Application.pm Fri Mar 12 16:23:46 2010 +0300 @@ -26,14 +26,20 @@ return $self->LoadXMLFile($file); } +sub CTOR { + my ($this) = @_; + + $this->factoryAction('IMPL::Web::Application::Action') unless $this->factoryAction; +} + sub Run { my ($this) = @_; while (my $query = $this->FetchRequest()) { - my $response = new IMPL::Web::Application::Response(request => $query); + my $response = new IMPL::Web::Application::Response(query => $query); - my $action = new IMPL::Web::Application::Action( - request => $query, + my $action = $this->factoryAction->new( + query => $query, response => $response, application => $this, ); diff -r 8d0ae27d15c1 -r c64bd1bf727d Lib/IMPL/Web/Application/Action.pm --- a/Lib/IMPL/Web/Application/Action.pm Wed Mar 10 16:41:46 2010 +0300 +++ b/Lib/IMPL/Web/Application/Action.pm Fri Mar 12 16:23:46 2010 +0300 @@ -1,13 +1,13 @@ package IMPL::Web::Application::Action; use strict; -use base qw(IMPL::Object); +use base qw(IMPL::Object IMPL::Object::Autofill); use IMPL::Class::Property; BEGIN { public property application => prop_get | owner_set; - public property request => prop_get | owner_set; + public property query => prop_get | owner_set; public property response => prop_get | owner_set; private property _entryPoint => prop_all; @@ -73,7 +73,7 @@ TDocumentOut->Invoke($Action,$nextHandler) { my $result = $nextHandler() { $AuthenticateMethod($Action,$nextHandler) { - my $context = $Action->application->security->Authenticate($Action->request,$Action->response); + my $context = $Action->application->security->Authenticate($Action->query,$Action->response); return $context->Impersonate($nextHandler) { $objSecCallToMethod->Invoke($Action,undef) { IMPL::Security->AccessCheck($target,$method); diff -r 8d0ae27d15c1 -r c64bd1bf727d Lib/IMPL/Web/QueryHandler.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Web/QueryHandler.pm Fri Mar 12 16:23:46 2010 +0300 @@ -0,0 +1,53 @@ +package IMPL::Web::QueryHandler; + +use base qw(IMPL::Object IMPL::Object::Autofill); +use IMPL::Class::Property; + +__PACKAGE__->PassThroughArgs; + +use IMPL::Exception; + +sub Invoke { + my ($self,$action,$nextHandler) = @_; + + if (not ref $self or UNIVERSAL::isa($self,'IMPL::Object::Factory')) { + return $self->new( action => $action )->Invoke($action,$nextHandler); + } else { + return $self->Process($action,$nextHandler); + } +} + +sub Process { + die new NotImplementedException("The method isn't implemented", __PACKAGE__, 'Process'); +} + +1; + +__END__ + +=pod + +=head1 DESCRIPTION + +Базовый класс для обработчиков запросов. + +=head1 MEMBERS + +=over 4 + +=item C< Invoke($action,$nextHandler) > + +Вызывается механизмом обработки запроса, для передачи управления обработчику. Данная реализация +проверяет как была вызвана, если как статический метод, то создает экземпляр класса и вызывает +у созданного объекта метод C< Invoke > с параметрами C< $action >, C< $nextHandler >. + +Если метод был вызван у объекта, то управление передается методу C< Process > + +C< $action > Экземпляр запроса + +C< $nextHandler > Делегат для вызова следующего обработчика. Вызывается без параметров, но следующему обработчику +втоматически будут переданы необходимые параметры. + +=back + +=cut \ No newline at end of file diff -r 8d0ae27d15c1 -r c64bd1bf727d Lib/IMPL/Web/QueryHandler/PageFormat.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Web/QueryHandler/PageFormat.pm Fri Mar 12 16:23:46 2010 +0300 @@ -0,0 +1,15 @@ +package IMPL::Web::QueryHandler::PageFormat; +use base qw(IMPL::Web::QueryHandler); + +__PACKAGE__->PassThroughArgs; + +use IMPL::Class::Property; +use URI; + +sub Process { + my ($this,$action,$nextHandler) = @_; + + +} + +1; \ No newline at end of file