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