Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/Metadata/FormMeta.pm @ 365:7c621bb95e53
working on the metadata model
author | sergey |
---|---|
date | Mon, 02 Dec 2013 02:13:12 +0400 |
parents | 82b6c967bcf1 |
children | 935629bf80df |
comparison
equal
deleted
inserted
replaced
364:82b6c967bcf1 | 365:7c621bb95e53 |
---|---|
9 }, | 9 }, |
10 base => [ | 10 base => [ |
11 'IMPL::Web::View::Metadata::BaseMeta' => '@_' | 11 'IMPL::Web::View::Metadata::BaseMeta' => '@_' |
12 ], | 12 ], |
13 props => [ | 13 props => [ |
14 decl => PROP_RO, | 14 nodes => PROP_RO, |
15 decl => PROP_RO, | |
15 schema => PROP_RO, | 16 schema => PROP_RO, |
16 nodes => PROP_RO, | |
17 errors => PROP_RO | 17 errors => PROP_RO |
18 ] | 18 ] |
19 }; | 19 }; |
20 | 20 |
21 sub CTOR { | 21 sub CTOR { |
27 | 27 |
28 $this->$_() || die ArgException->new($_ => "The $_ is required") | 28 $this->$_() || die ArgException->new($_ => "The $_ is required") |
29 foreach qw(decl schema); | 29 foreach qw(decl schema); |
30 } | 30 } |
31 | 31 |
32 sub GetOwnErrors { | 32 sub isMultiple { |
33 | 33 shift->decl->isMultiple; |
34 } | 34 } |
35 | 35 |
36 sub isOptional { | |
37 shift->decl->isOptional; | |
38 } | |
39 | |
40 | |
41 sub GetOwnErrors { | |
42 my ($this) = @_; | |
43 | |
44 my $node = undef; | |
45 | |
46 $node = not($this->isMultiple) && $this->nodes ? $this->nodes->[0] : undef; | |
47 | |
48 return [ | |
49 grep { | |
50 ($node && $_->node && $_->node == $node) || (not($node) && $_->schema == $this->decl ) | |
51 } @{$this->errors || []} | |
52 ]; | |
53 } | |
36 | 54 |
37 1; | 55 1; |
38 | 56 |
39 __END__ | 57 __END__ |
40 | 58 |
44 | 62 |
45 =head1 SYNOPSIS | 63 =head1 SYNOPSIS |
46 | 64 |
47 =head1 DESCRIPTION | 65 =head1 DESCRIPTION |
48 | 66 |
49 Метаданные по модели, являющейся частью формы. Элемент формы описывается | 67 Расширенные метаданные модели для элементов формы, помимо стандартных свойств |
50 несколькими компонентами: | 68 сожержит в себе информацию о схеме. |
51 | 69 |
52 =over | 70 =head1 MEMBERS |
53 | 71 |
54 =item * schema | 72 =head2 C<[get]errors> |
55 | 73 |
56 Схема текущего элемента, СomlexType, SimpleType, ComplexNode или SimpleNode | 74 Ссылка на массив с ошибками при проверке схемы. Ошибки относятся ко всем |
75 узлам в текущей модели, включая вложенные и т.п. | |
57 | 76 |
58 =item * decl | 77 =head2 C<[get]model> |
59 | 78 |
60 Сам элемент формы, который присутствует в родительском контейнере. Объявление | 79 Ссылка на элемент документа, либо на массив с элементами для множественных |
61 может совпадать со схемой в случае, когда это был SimpleNode или ComplexNode, | 80 значений (C<isMultiple = true>). В том случае, когда документ был не |
62 иначе это Node ссылающийся на заранее обпределенный тип. | 81 корректен и для не множественного элемента было передено несколько значений, |
82 данное свойство будет содержать только первое. | |
63 | 83 |
64 =item * nodes | 84 =head2 C<[get]nodes> |
65 | 85 |
66 Список узлов документа, которые являются экземплярами текущего элемента, в | 86 Ссылка на массив с узлами документа. В теории количество узлов может быть |
67 случае, если этот элемен не является множественным (maxOccur=1), тогда здесь | 87 произвольным, поскольку документ может быть некорректным, т.е. их может |
68 должен быть только один элемент. | 88 быть более одного в то время, как C<isMultiple = false> или, напротив, ни |
89 одного при C<isOptional = false>. | |
69 | 90 |
70 =item * errors | 91 =head2 C<[get]modelType> |
71 | 92 |
72 Список ошибок относящихся к данному элементу. | 93 Название типа данных из схемы документа (C<< schema->name >>), если тип не имеет название, то это |
94 C<ComplexNode> для сложных узлов и C<SimpleNode> для простых. | |
73 | 95 |
74 =back | 96 Для моделей с множественными значениями это свойство означает тип элементов. |
97 | |
98 =head2 C<[get]decl> | |
99 | |
100 Объявление элемента формы, объявление может совпадать со схемой в случае, | |
101 когда это был C<SimpleNode> или C<ComplexNode>, иначе это C<Node> ссылающийся | |
102 на заранее обпределенный тип. | |
103 | |
104 =head2 C<[get]schema> | |
105 | |
106 Схема текущего элемента, C<СomlexType>, C<SimpleType>, C<ComplexNode> или | |
107 C<SimpleNode>. | |
108 | |
109 =head2 C<[get]isOptional> | |
110 | |
111 Данный элемент может не иметь ни одного значения | |
112 | |
113 =head2 C<[get]isMultiple> | |
114 | |
115 Данный элемент может иметь более одного значения. Модель с множественными | |
116 значениями является сложным элементом, в котором дочерними моделями являются | |
117 не свойства а сами элементы, в данном случае они их именами будут индексы. | |
118 | |
119 =begin code | |
120 | |
121 for(my $i=0; $i< 10; $i++) { | |
122 display_model( | |
123 $meta->model->[$i], | |
124 schema => meta->schema, | |
125 ); | |
126 } | |
127 | |
128 =end code | |
129 | |
130 =head2 C<GetOwnErrors()> | |
131 | |
132 Возвращает ошибки относящиеся к самому элементу C<model>, это принципиально | |
133 для контейнеров и в случаях, когда модель не корректна и в ней присутствуют | |
134 лишние значения. | |
75 | 135 |
76 =cut | 136 =cut |