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;