comparison 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
comparison
equal deleted inserted replaced
406:f23fcb19d3c1 407:c6e90e02dd17
1 package IMPL::Web::View::Metadata::BaseMeta;
2 use strict;
3
4 use IMPL::lang;
5 use IMPL::Const qw(:prop);
6 use IMPL::declare {
7 require => {
8 Exception => 'IMPL::Exception',
9 ArgException => '-IMPL::InvalidArgumentException',
10 NotImplException => '-IMPL::NotImplementedException'
11 },
12 base => [
13 'IMPL::Object' => undef
14 ],
15 props => [
16 model => PROP_RO,
17 modelType => PROP_RO,
18 name => PROP_RO,
19 label => PROP_RO,
20 container => PROP_RO,
21 template => PROP_RO,
22
23 _childMap => PROP_RO,
24 _childNames => PROP_RO
25 ]
26 };
27
28 sub CTOR {
29 my ($this,$model,$type,$args) = @_;
30
31 $this->model($model);
32 $this->modelType($type);
33 $this->_childMap({});
34
35 #mixin other args
36 if ($args) {
37 $this->$_($args->{$_}) foreach grep $args->{$_}, qw(name label container template);
38 }
39 }
40
41 sub GetProperty {
42 my ($this,$name) = @_;
43
44 $this->GetProperties()
45 unless $this->_childNames;
46
47 return $this->_childMap->{$name};
48 }
49
50 sub GetProperties {
51 my ($this) = @_;
52
53 if ($this->_childNames) {
54 return [ map $this->_childMap->{$_}, @{$this->_childNames} ];
55 } else {
56 my @childNames;
57 my %childMap;
58 my @result;
59
60 foreach my $child (@{$this->PopulateProperties()}) {
61 $childMap{$child->name} = $child;
62 push @childNames, $child->name;
63 push @result, $child;
64 }
65
66 $this->_childMap(\%childMap);
67 $this->_childNames(\@childNames);
68 return \@result;
69 }
70 }
71
72 sub PopulateProperties {
73 my ($this) = @_;
74
75 die NotImplException->new();
76 }
77
78 sub GetItems {
79 my ($this) = @_;
80
81 die NotImplException->new();
82 }
83
84 sub GetItem {
85 my ($this,$index) = @_;
86
87 die NotImplException->new();
88 }
89
90 1;
91
92 __END__
93
94 =pod
95
96 =head1 NAME
97
98 =head1 SYNOPSIS
99
100 =head1 DESCRIPTION
101
102 Метаданные описывают модель, ее свойства, используются для построения
103 представления.
104
105 =over
106
107 =item * type
108
109 Опционально. Тип модели. В случаях, когда модель не определена, данное свойство
110 позволяет определить ее тип.
111
112 =item * label
113
114 Опционально. Имя модели для отображения.
115
116 =item * template
117
118 Шаблон, который следует использовать для отображения модели.
119
120 =item * fields
121
122 Коллекция с информацией по свойствам (полям) модели. Данный хеш используется
123 для определения представления при использовании C<display_for('field')>.
124
125 =back
126
127 Метаданные публикуются провайдером, кроме того они могут быть расширены
128 дополнительными свойствами.
129
130 =head1 MEMBERS
131
132 =head2 C<GetChild($name)>
133
134 Возвращает метаданные для дочернего элемента, например свойства объекта
135
136 =head2 C<GetChildren()>
137
138 Возвращает ссылку на массив с метаданными для дочерних элементов
139
140 =cut