Mercurial > pub > Impl
diff Lib/IMPL/DOM/Schema/Property.pm @ 23:716b287d4795
merge
author | Sergey |
---|---|
date | Wed, 30 Sep 2009 17:43:52 +0400 |
parents | fafe56cfcd69 |
children | 7f00786f8210 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/DOM/Schema/Property.pm Wed Sep 30 17:43:52 2009 +0400 @@ -0,0 +1,52 @@ +package IMPL::DOM::Schema::Property; +use strict; +use warnings; + +use base qw(IMPL::DOM::Schema::SimpleNode); +require IMPL::DOM::Schema; +require IMPL::DOM::Node; +use IMPL::Class::Property; + +__PACKAGE__->PassThroughArgs; + +BEGIN { + public property RequiredMessage => prop_all; +} + +our %CTOR = { + 'IMPL::DOM::Schema::SimleNode' => sub { + my %args = @_; + + $args{maxOccur} = 1; + $args{minOccur} = delete $args{optional} ? 0 : 1; + $args{nodeName} ||= 'Property'; + + return %args; + } +}; + +sub CTOR { + my ($this,%args) = @_; + + $this->RequiredMessage($args{RequiredMessage} || 'A property %Schema.name% is required'); +} + +sub Validate { + my ($this,$node) = @_; + + if ($this->minOccur) { + my $prop = $this->name; + my $nodeProp = new IMPL::DOM::Node(nodeName => '::property', nodeValue => $node->$prop() || $node->nodePropety($prop)); + + if (! $nodeProp->nodeValue) { + return new IMPL::DOM::Schema::VaidationError( + Message => + ); + } + return $this->SUPER::Validate($nodeProp); + } else { + return (); + } +} + +1;