changeset 62:c64bd1bf727d

Web application Page query handler
author wizard
date Fri, 12 Mar 2010 16:23:46 +0300
parents 8d0ae27d15c1
children 76b878ad6596
files Lib/IMPL/Web/Application.pm Lib/IMPL/Web/Application/Action.pm Lib/IMPL/Web/QueryHandler.pm Lib/IMPL/Web/QueryHandler/PageFormat.pm
diffstat 4 files changed, 80 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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, 
         ); 
--- 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);
--- /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
--- /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