Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/ControllerUnit.pm @ 113:7b14e0122b79
Updated PostToDOM transformation
added selectSingleNode method to IMPL::DOM::Node
Implemented FormWrapper in the Web::Application::ControllerUnit
author | wizard |
---|---|
date | Fri, 21 May 2010 02:38:11 +0400 |
parents | 0ed8e2541b1c |
children | c8dfbbdd8005 |
comparison
equal
deleted
inserted
replaced
112:0ed8e2541b1c | 113:7b14e0122b79 |
---|---|
3 use base qw(IMPL::Object); | 3 use base qw(IMPL::Object); |
4 | 4 |
5 use IMPL::Class::Property; | 5 use IMPL::Class::Property; |
6 use IMPL::DOM::Transform::PostToDOM; | 6 use IMPL::DOM::Transform::PostToDOM; |
7 use IMPL::DOM::Schema; | 7 use IMPL::DOM::Schema; |
8 use Class::Inspector; | |
9 use File::Spec; | |
8 | 10 |
9 use constant { | 11 use constant { |
10 CONTROLLER_METHODS => 'controller_methods', | 12 CONTROLLER_METHODS => 'controller_methods', |
11 STATE_CORRECT => 'correct', | 13 STATE_CORRECT => 'correct', |
12 STATE_NEW => 'new', | 14 STATE_NEW => 'new', |
19 public property query => prop_get | owner_set; | 21 public property query => prop_get | owner_set; |
20 public property formData => prop_get | owner_set; | 22 public property formData => prop_get | owner_set; |
21 public property formSchema => prop_get | owner_set; | 23 public property formSchema => prop_get | owner_set; |
22 public property formErrors => prop_get | owner_set; | 24 public property formErrors => prop_get | owner_set; |
23 } | 25 } |
26 | |
27 __PACKAGE__->class_data(CONTROLLER_METHODS,{}); | |
24 | 28 |
25 sub CTOR { | 29 sub CTOR { |
26 my ($this,$action,$args) = @_; | 30 my ($this,$action,$args) = @_; |
27 | 31 |
28 $this->action($action); | 32 $this->action($action); |
54 } | 58 } |
55 } | 59 } |
56 } | 60 } |
57 | 61 |
58 sub transactions { | 62 sub transactions { |
59 | 63 my ($self,@names) = @_; |
64 | |
65 $self->class_data(CONTROLLER_METHODS)->{$_} = {} foreach @names; | |
60 } | 66 } |
61 | 67 |
62 sub InvokeAction { | 68 sub InvokeAction { |
63 my ($self,$method,$action) = @_; | 69 my ($self,$method,$action) = @_; |
64 | 70 |
79 my $unit = $self->new($action); | 85 my $unit = $self->new($action); |
80 return $unit->$method(); | 86 return $unit->$method(); |
81 } | 87 } |
82 | 88 |
83 sub FormWrapper { | 89 sub FormWrapper { |
84 my ($this,$method,$action,$methodInfo) = @_; | 90 my ($self,$method,$action,$methodInfo) = @_; |
85 | 91 |
86 my $schema = $this->loadSchema($methodInfo->{schema}); | 92 my $schema = $self->loadSchema($methodInfo->{schema}); |
87 | 93 |
88 my $process = $this->query->param('process') || 0; | 94 my $process = $action->query->param('process') || 0; |
89 | 95 my $form = $methodInfo->{form} |
90 | 96 || $action->query->param('form') |
91 | 97 || $schema->selectSingleNode('ComplexNode')->name |
92 my %result = ( | 98 or die new IMPL::Exception('No situable form name could be determined',$self,$method); |
93 | 99 |
100 my %result; | |
101 | |
102 my $transform = IMPL::DOM::Transform::PostToDOM->new( | |
103 undef, | |
104 $schema, | |
105 $form | |
94 ); | 106 ); |
107 | |
108 $result{formSchema} = $schema; | |
109 $result{formData} = $transform->Transform($self->query); | |
110 | |
111 if ($process) { | |
112 $result{formErrors} = $transform->Errors->as_list; | |
113 if ($transform->Errors->Count) { | |
114 $result{state} = STATE_INVALID; | |
115 } else { | |
116 $result{state} = STATE_CORRECT; | |
117 my $unit = $self->new($action,\%result); | |
118 $result{result} = $unit->method(); | |
119 } | |
120 } else { | |
121 $result{state} = STATE_NEW; | |
122 } | |
123 | |
124 return \%result; | |
125 } | |
126 | |
127 sub loadSchema { | |
128 my ($self,$name) = @_; | |
129 | |
130 my ($vol,$dir,$file) = File::Spec->splitpath( Class::Inspector->resolved_filename(ref $self || $self) ); | |
131 | |
132 return IMPL::DOM::Schema->LoadSchema(File::Spec->catfile($vol,$dir,$name)); | |
95 } | 133 } |
96 | 134 |
97 1; | 135 1; |
98 | 136 |
99 __END__ | 137 __END__ |
104 | 142 |
105 C<IMPL::Web::Application::ControllerUnit> - базовый класс для обработчика транзакций в модели контроллера. | 143 C<IMPL::Web::Application::ControllerUnit> - базовый класс для обработчика транзакций в модели контроллера. |
106 | 144 |
107 =head1 DESCRIPTION | 145 =head1 DESCRIPTION |
108 | 146 |
109 Классы, наследуемые от данного класса используются для выполнения транзакций, которые приходят | 147 Классы, наследуемые от данного класса называется пакетом транзакций. Часть методов в таком классе |
110 через контроллер запросов. Как правило один класс представляет собой пакет транзакций, каждая | 148 объявляются как транзакции при помощи методов C<transaction>, C<form>. |
111 из которых является независимой от другой. | |
112 | 149 |
113 Перед выполнением транзакции создается экземпляр объекта, в рамках которого будет выполнена транзакция. | 150 Перед выполнением транзакции создается экземпляр объекта, в рамках которого будет выполнена транзакция. |
114 Для этого вызывается метод C<InvokeAction($method,$action)>, который создает/восстанавливает контекст | 151 Для этого вызывается метод C<InvokeAction($method,$action)>, который создает/восстанавливает контекст |
115 транзакции. | 152 транзакции. |
116 | 153 |