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 |
