Mercurial > pub > Impl
diff Lib/Form.pm @ 49:16ada169ca75
migrating to the Eclipse IDE
author | wizard@linux-odin.local |
---|---|
date | Fri, 26 Feb 2010 10:49:21 +0300 |
parents | 03e58a454b20 |
children |
line wrap: on
line diff
--- a/Lib/Form.pm Fri Feb 26 01:43:42 2010 +0300 +++ b/Lib/Form.pm Fri Feb 26 10:49:21 2010 +0300 @@ -1,147 +1,147 @@ -package Form; -use strict; -use Common; -use base qw(Form::Container); -use Form::ItemId; -use Form::ValueItem; - -BEGIN { - DeclareProperty AutoCreate => ACCESS_ALL; - DeclareProperty isValidated => ACCESS_READ; - DeclareProperty isValid => ACCESS_READ; - DeclareProperty ValidationErrors => ACCESS_READ; - DeclareProperty MapFieldClasses => ACCESS_READ; - DeclareProperty LoadedFiledClasses => ACCESS_NONE; - DeclareProperty Bindings => ACCESS_READ; -} - -sub CTOR { - my ($this,$schema,$bind) = @_; - - $this->SUPER::CTOR( - Schema => $schema->Body, - Id => Form::ItemId->new('Form',undef,Form::ItemId::Root->new()), - Form => $this - ); - $this->{$MapFieldClasses} = { - SelectBox => 'Form::ValueItem::List', - RadioSelect => 'Form::ValueItem::List', - MultiCheckBox => 'Form::ValueItem::List' - }; - $this->{$LoadedFiledClasses} = { 'Form::ValueItem' => 1 }; - $this->{$Bindings} = $bind || {}; - $this->{$isValid} = 0; - $this->{$isValidated} = 0; -} - -sub NavigatePath { - my ($this,$path) = @_; - - shift @$path if $path->[0]->Name eq 'Form'; # eat root node in Form/Item - - return $this->SUPER::NavigatePath($path); -} - -sub Item { - my ($this,$strId) = @_; - - return $this->Navigate($this->MakeItemId($strId,undef)); -} - -sub MakeItemId { - my ($this,$Name,$BaseObject) = @_; - - my $ItemId; - if ($BaseObject and $BaseObject->isa('Form::Item')) { - $ItemId = $BaseObject->Id; - } else { - $ItemId = new Form::ItemId::Root; - } - - foreach my $item (split /\//,$Name) { - if ($item =~ /^(\w+?)(\d+)?$/) { - $ItemId = Form::ItemId->new($1,$2,$ItemId); - } else { - die new Exception('The invalid identifier',$Name); - } - } - return $ItemId; -} - -sub CreateInstance { - my ($this,$schema,$ItemId,$parent) = @_; - - my $obj; - if ($schema->isa('Schema::Form::Container')) { - $obj = new Form::Container( - Id => Form::ItemId->new($ItemId->Name,$ItemId->InstanceID,($parent ? $parent->Id : undef)), - Form => $this, - Parent => $parent, - Schema => $schema, - Attributes => {%{$schema->Attributes}} - ); - } elsif ($schema->isa('Schema::Form::Field')) { - my $class = $this->{$MapFieldClasses}{$schema->Format->Name} || 'Form::ValueItem'; - if (not $this->{$LoadedFiledClasses}{$class}) { - eval "require $class;" or die new Exception('Failed to load a module',$class,$@); - $this->{$LoadedFiledClasses}{$class} = 1; - } - $obj = $class->new( - Id => Form::ItemId->new($ItemId->Name,$ItemId->InstanceID,($parent ? $parent->Id : undef)), - Form => $this, - Parent => $parent, - Type => $schema->Format->Name, - Schema => $schema, - Attributes => {%{$schema->Attributes}} - ); - } else { - die new Exception('Unexpected schema type', ref $schema); - } - - return $obj; -} - -sub Validate { - my ($this) = @_; - - my @errors = $this->SUPER::Validate; - $this->{$isValidated} = 1; - if (@errors) { - $this->{$isValid} = 0; - $this->{$ValidationErrors} = \@errors; - } else { - $this->{$isValid} = 1; - delete $this->{$ValidationErrors}; - } - - return @errors; -} - -sub SelectErrors { - my ($this,$parentId) = @_; - - return [grep $_->Item->Parent->Id->Canonical eq $parentId, $this->ValidationErrors]; -} - -sub LoadValues { - my ($this,$rhValues) = @_; - - $this->{$isValidated} = 0; - $this->{$isValid} = 0; - - foreach my $key (keys %$rhValues) { - eval { $this->Item($key)->Value($rhValues->{$key}) }; - undef $@; - } -} - - -sub Dispose { - my ($this) = @_; - - delete @$this{$ValidationErrors,$MapFieldClasses,$LoadedFiledClasses,$Bindings}; - - $this->SUPER::Dispose; -} - -1; \ No newline at end of file +package Form; +use strict; +use Common; +use base qw(Form::Container); +use Form::ItemId; +use Form::ValueItem; + +BEGIN { + DeclareProperty AutoCreate => ACCESS_ALL; + DeclareProperty isValidated => ACCESS_READ; + DeclareProperty isValid => ACCESS_READ; + DeclareProperty ValidationErrors => ACCESS_READ; + DeclareProperty MapFieldClasses => ACCESS_READ; + DeclareProperty LoadedFiledClasses => ACCESS_NONE; + DeclareProperty Bindings => ACCESS_READ; +} + +sub CTOR { + my ($this,$schema,$bind) = @_; + + $this->SUPER::CTOR( + Schema => $schema->Body, + Id => Form::ItemId->new('Form',undef,Form::ItemId::Root->new()), + Form => $this + ); + $this->{$MapFieldClasses} = { + SelectBox => 'Form::ValueItem::List', + RadioSelect => 'Form::ValueItem::List', + MultiCheckBox => 'Form::ValueItem::List' + }; + $this->{$LoadedFiledClasses} = { 'Form::ValueItem' => 1 }; + $this->{$Bindings} = $bind || {}; + $this->{$isValid} = 0; + $this->{$isValidated} = 0; +} + +sub NavigatePath { + my ($this,$path) = @_; + + shift @$path if $path->[0]->Name eq 'Form'; # eat root node in Form/Item + + return $this->SUPER::NavigatePath($path); +} + +sub Item { + my ($this,$strId) = @_; + + return $this->Navigate($this->MakeItemId($strId,undef)); +} + +sub MakeItemId { + my ($this,$Name,$BaseObject) = @_; + + my $ItemId; + if ($BaseObject and $BaseObject->isa('Form::Item')) { + $ItemId = $BaseObject->Id; + } else { + $ItemId = new Form::ItemId::Root; + } + + foreach my $item (split /\//,$Name) { + if ($item =~ /^(\w+?)(\d+)?$/) { + $ItemId = Form::ItemId->new($1,$2,$ItemId); + } else { + die new Exception('The invalid identifier',$Name); + } + } + return $ItemId; +} + +sub CreateInstance { + my ($this,$schema,$ItemId,$parent) = @_; + + my $obj; + if ($schema->isa('Schema::Form::Container')) { + $obj = new Form::Container( + Id => Form::ItemId->new($ItemId->Name,$ItemId->InstanceID,($parent ? $parent->Id : undef)), + Form => $this, + Parent => $parent, + Schema => $schema, + Attributes => {%{$schema->Attributes}} + ); + } elsif ($schema->isa('Schema::Form::Field')) { + my $class = $this->{$MapFieldClasses}{$schema->Format->Name} || 'Form::ValueItem'; + if (not $this->{$LoadedFiledClasses}{$class}) { + eval "require $class;" or die new Exception('Failed to load a module',$class,$@); + $this->{$LoadedFiledClasses}{$class} = 1; + } + $obj = $class->new( + Id => Form::ItemId->new($ItemId->Name,$ItemId->InstanceID,($parent ? $parent->Id : undef)), + Form => $this, + Parent => $parent, + Type => $schema->Format->Name, + Schema => $schema, + Attributes => {%{$schema->Attributes}} + ); + } else { + die new Exception('Unexpected schema type', ref $schema); + } + + return $obj; +} + +sub Validate { + my ($this) = @_; + + my @errors = $this->SUPER::Validate; + $this->{$isValidated} = 1; + if (@errors) { + $this->{$isValid} = 0; + $this->{$ValidationErrors} = \@errors; + } else { + $this->{$isValid} = 1; + delete $this->{$ValidationErrors}; + } + + return @errors; +} + +sub SelectErrors { + my ($this,$parentId) = @_; + + return [grep $_->Item->Parent->Id->Canonical eq $parentId, $this->ValidationErrors]; +} + +sub LoadValues { + my ($this,$rhValues) = @_; + + $this->{$isValidated} = 0; + $this->{$isValid} = 0; + + foreach my $key (keys %$rhValues) { + eval { $this->Item($key)->Value($rhValues->{$key}) }; + undef $@; + } +} + + +sub Dispose { + my ($this) = @_; + + delete @$this{$ValidationErrors,$MapFieldClasses,$LoadedFiledClasses,$Bindings}; + + $this->SUPER::Dispose; +} + +1;