| 
7
 | 
     1 package IMPL::DOM::Schema::ComplexNode;
 | 
| 
 | 
     2 use strict;
 | 
| 
 | 
     3 use warnings;
 | 
| 
 | 
     4 
 | 
| 
 | 
     5 use base qw(IMPL::DOM::Schema::Item);
 | 
| 
 | 
     6 use IMPL::Class::Property;
 | 
| 
 | 
     7 
 | 
| 
 | 
     8 BEGIN {
 | 
| 
 | 
     9     public property nodeType => prop_all;
 | 
| 
 | 
    10     public property content => {
 | 
| 
 | 
    11         get => \&_getContent,
 | 
| 
 | 
    12         set => \&_setContent
 | 
| 
 | 
    13     }
 | 
| 
 | 
    14 }
 | 
| 
 | 
    15 
 | 
| 
 | 
    16 __PACKAGE__->PassThroughArgs;
 | 
| 
 | 
    17 
 | 
| 
 | 
    18 sub _getContent {
 | 
| 
 | 
    19     $_[0]->firstChild;
 | 
| 
 | 
    20 }
 | 
| 
 | 
    21 
 | 
| 
 | 
    22 sub _setContent {
 | 
| 
 | 
    23     $_[0]->firstChild($_[1]);
 | 
| 
 | 
    24 }
 | 
| 
 | 
    25 
 | 
| 
 | 
    26 sub Validate {
 | 
| 
 | 
    27     my ($this,$node) = @_;
 | 
| 
 | 
    28     
 | 
| 
 | 
    29     if (my $type = $this->nodeType) {
 | 
| 
 | 
    30         my $schemaType = $this->Schema->ResolveType($type);
 | 
| 
 | 
    31         return $schemaType->Validate($node);
 | 
| 
 | 
    32     } else {
 | 
| 
 | 
    33         my @errors;
 | 
| 
 | 
    34         push @errors, $_->Validate foreach @{$this->childNodes};
 | 
| 
 | 
    35         
 | 
| 
 | 
    36         if (@errors and $this->Message) {
 | 
| 
 | 
    37             return {
 | 
| 
 | 
    38                 Error => 1,
 | 
| 
 | 
    39                 Message => $this->formatMessage($node),
 | 
| 
 | 
    40                 InnerErrors => \@errors
 | 
| 
 | 
    41             };
 | 
| 
 | 
    42         } else {
 | 
| 
 | 
    43             return @errors;
 | 
| 
 | 
    44         }
 | 
| 
 | 
    45     }
 | 
| 
 | 
    46 }
 | 
| 
 | 
    47 
 | 
| 
 | 
    48 1;
 | 
| 
 | 
    49 
 | 
| 
 | 
    50 __END__
 | 
| 
 | 
    51 
 | 
| 
 | 
    52 =pod
 | 
| 
 | 
    53 
 | 
| 
 | 
    54 =head1 DESCRIPTION
 | 
| 
 | 
    55 
 | 
| 
 | 
    56   .    ,  
 | 
| 
 | 
    57 .
 | 
| 
 | 
    58 
 | 
| 
 | 
    59         ..
 | 
| 
 | 
    60        , . C<content>
 | 
| 
 | 
    61 
 | 
| 
 | 
    62 =head2 PROPERTIES
 | 
| 
 | 
    63 
 | 
| 
 | 
    64 =over
 | 
| 
 | 
    65 
 | 
| 
 | 
    66 =item C<nodeType>
 | 
| 
 | 
    67 
 | 
| 
 | 
    68    ,     .  
 | 
| 
 | 
    69  C<content>   .
 | 
| 
 | 
    70 
 | 
| 
 | 
    71 =item C<content>
 | 
| 
 | 
    72 
 | 
| 
 | 
    73  ,    C<IMPL::DOM::Schema::NodeSet> 
 | 
| 
 | 
    74 C<IMPL::DOM::Schema::NodeList>,        .
 | 
| 
 | 
    75        .
 | 
| 
 | 
    76 
 | 
| 
 | 
    77 =back
 | 
| 
 | 
    78 
 | 
| 
 | 
    79 =cut
 |