comparison Lib/IMPL/DOM/Navigator/SchemaNavigator.pm @ 246:2746a8e5a6c4

Fixed regressions in DOM due previous refactorings Fixed ObjectToDOM transformation to handle a schema with mixed node types
author sergey
date Tue, 30 Oct 2012 01:17:31 +0400
parents 2904da230022
children 4ddb27ff4a0b
comparison
equal deleted inserted replaced
245:7c517134c42f 246:2746a8e5a6c4
1 package IMPL::DOM::Navigator::SchemaNavigator; 1 package IMPL::DOM::Navigator::SchemaNavigator;
2 use strict; 2 use strict;
3 use warnings; 3 use warnings;
4 4
5 use parent qw(IMPL::DOM::Navigator);
6 use IMPL::Class::Property; 5 use IMPL::Class::Property;
7 use IMPL::Class::Property::Direct; 6 use IMPL::Class::Property::Direct;
8 7
9 require IMPL::DOM::Schema::ComplexType; 8 require IMPL::DOM::Schema::ComplexType;
10 require IMPL::DOM::Schema::NodeSet; 9 require IMPL::DOM::Schema::NodeSet;
11 require IMPL::DOM::Schema::AnyNode; 10 require IMPL::DOM::Schema::AnyNode;
12 11
13 __PACKAGE__->PassThroughArgs; 12 use IMPL::declare {
13 base => [
14 'IMPL::DOM::Navigator' => '@_'
15 ]
16 };
14 17
15 BEGIN { 18 BEGIN {
16 public _direct property Schema => prop_get; 19 public _direct property Schema => prop_get;
17 private _direct property _historySteps => prop_all; 20 private _direct property _historySteps => prop_all;
18 } 21 }
19 22
20 sub CTOR { 23 sub CTOR {
21 my ($this,$schema) = @_; 24 my ($this,$schema) = @_;
22 25
23 $this->{$Schema} = $schema; 26 $this->{$Schema} = $schema->isa('IMPL::DOM::Schema::ComplexNode') ? $schema->document : $schema;
24 27
25 die new IMPL::InvalidArgumentException("A schema object is required") unless $schema->isa('IMPL::DOM::Schema') || $schema->isa('IMPL::DOM::Schema::ComplexNode'); 28 die new IMPL::InvalidArgumentException("A schema object is required") unless ref $this->{$Schema} && eval { $this->{$Schema}->isa('IMPL::DOM::Schema') };
26 } 29 }
27 30
28 my $schemaAnyNode = IMPL::DOM::Schema::ComplexType->new(type => '::AnyNodeType', nativeType => 'IMPL::DOM::ComplexNode')->appendRange( 31 my $schemaAnyNode = IMPL::DOM::Schema::ComplexType->new(type => '::AnyNodeType', nativeType => 'IMPL::DOM::ComplexNode')->appendRange(
29 IMPL::DOM::Schema::NodeSet->new()->appendRange( 32 IMPL::DOM::Schema::NodeSet->new()->appendRange(
30 IMPL::DOM::Schema::AnyNode->new() 33 IMPL::DOM::Schema::AnyNode->new()