Mercurial > pub > Impl
diff lib/IMPL/Web/View/Metadata/BaseMeta.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/IMPL/Web/View/Metadata/BaseMeta.pm Fri Sep 04 19:40:23 2015 +0300 @@ -0,0 +1,140 @@ +package IMPL::Web::View::Metadata::BaseMeta; +use strict; + +use IMPL::lang; +use IMPL::Const qw(:prop); +use IMPL::declare { + require => { + Exception => 'IMPL::Exception', + ArgException => '-IMPL::InvalidArgumentException', + NotImplException => '-IMPL::NotImplementedException' + }, + base => [ + 'IMPL::Object' => undef + ], + props => [ + model => PROP_RO, + modelType => PROP_RO, + name => PROP_RO, + label => PROP_RO, + container => PROP_RO, + template => PROP_RO, + + _childMap => PROP_RO, + _childNames => PROP_RO + ] +}; + +sub CTOR { + my ($this,$model,$type,$args) = @_; + + $this->model($model); + $this->modelType($type); + $this->_childMap({}); + + #mixin other args + if ($args) { + $this->$_($args->{$_}) foreach grep $args->{$_}, qw(name label container template); + } +} + +sub GetProperty { + my ($this,$name) = @_; + + $this->GetProperties() + unless $this->_childNames; + + return $this->_childMap->{$name}; +} + +sub GetProperties { + my ($this) = @_; + + if ($this->_childNames) { + return [ map $this->_childMap->{$_}, @{$this->_childNames} ]; + } else { + my @childNames; + my %childMap; + my @result; + + foreach my $child (@{$this->PopulateProperties()}) { + $childMap{$child->name} = $child; + push @childNames, $child->name; + push @result, $child; + } + + $this->_childMap(\%childMap); + $this->_childNames(\@childNames); + return \@result; + } +} + +sub PopulateProperties { + my ($this) = @_; + + die NotImplException->new(); +} + +sub GetItems { + my ($this) = @_; + + die NotImplException->new(); +} + +sub GetItem { + my ($this,$index) = @_; + + die NotImplException->new(); +} + +1; + +__END__ + +=pod + +=head1 NAME + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +Метаданные описывают модель, ее свойства, используются для построения +представления. + +=over + +=item * type + +Опционально. Тип модели. В случаях, когда модель не определена, данное свойство +позволяет определить ее тип. + +=item * label + +Опционально. Имя модели для отображения. + +=item * template + +Шаблон, который следует использовать для отображения модели. + +=item * fields + +Коллекция с информацией по свойствам (полям) модели. Данный хеш используется +для определения представления при использовании C<display_for('field')>. + +=back + +Метаданные публикуются провайдером, кроме того они могут быть расширены +дополнительными свойствами. + +=head1 MEMBERS + +=head2 C<GetChild($name)> + +Возвращает метаданные для дочернего элемента, например свойства объекта + +=head2 C<GetChildren()> + +Возвращает ссылку на массив с метаданными для дочерних элементов + +=cut \ No newline at end of file