# HG changeset patch
# User Sergey
# Date 1258469184 -10800
# Node ID f25d021780b35d6fe83f320ca96b63d3be7df5f9
# Parent a8086f85a5717efdd2fc59e6b8467feddc8dc7ab
DOM::Navigator::Builder working version
diff -r a8086f85a571 -r f25d021780b3 Lib/IMPL/DOM/Navigator/Builder.pm
--- a/Lib/IMPL/DOM/Navigator/Builder.pm Mon Nov 16 18:39:25 2009 +0300
+++ b/Lib/IMPL/DOM/Navigator/Builder.pm Tue Nov 17 17:46:24 2009 +0300
@@ -19,7 +19,7 @@
my ($this,$docClass,$schema) = @_;
$this->{$_docClass} = $docClass;
- $this->{$_schemaNavi} = IMPL::DOM::Navigator::SchemaNavigator->new($schema);
+ $this->{$_schemaNavi} = $schema ? IMPL::DOM::Navigator::SchemaNavigator->new($schema) : undef;
}
sub NavigateCreate {
@@ -32,7 +32,7 @@
if (! $this->{$Document}) {
$node = $this->{$Document} = $this->{$_docClass}->new(nodeName => $nodeName,%props);
} else {
- die new IMPL::InvalidOperationException('Can\t create a second top level element');
+ die new IMPL::InvalidOperationException('Can\t create a second top level element') unless $this->{$_nodeCurrent};
$node = $this->{$Document}->Create($nodeName,$class,\%props);
push @{$this->{$_nodesPath}}, $this->{$_nodeCurrent};
$this->{$_nodeCurrent}->appendChild($node);
diff -r a8086f85a571 -r f25d021780b3 Lib/IMPL/DOM/Navigator/SchemaNavigator.pm
--- a/Lib/IMPL/DOM/Navigator/SchemaNavigator.pm Mon Nov 16 18:39:25 2009 +0300
+++ b/Lib/IMPL/DOM/Navigator/SchemaNavigator.pm Tue Nov 17 17:46:24 2009 +0300
@@ -37,7 +37,7 @@
die new IMPL::InvalidArgumentException('name is required') unless defined $name;
# perform a safe navigation
- return dosafe $this sub {
+ #return dosafe $this sub {
my $steps = 1;
# navigate to node
if (
@@ -84,7 +84,7 @@
} else {
die; # abort navigation
}
- }
+ #}
}
sub SchemaBack {
diff -r a8086f85a571 -r f25d021780b3 _test/Test/DOM/Builder.pm
--- a/_test/Test/DOM/Builder.pm Mon Nov 16 18:39:25 2009 +0300
+++ b/_test/Test/DOM/Builder.pm Tue Nov 17 17:46:24 2009 +0300
@@ -25,7 +25,7 @@
IMPL::DOM::Schema::NodeSet->new()->appendRange(
new IMPL::DOM::Schema::SimpleNode( name => 'firstName' ),
new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ),
- new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange(
+ new IMPL::DOM::Schema::ComplexNode( name => 'address', maxOccur => 'unbounded' )->appendRange(
IMPL::DOM::Schema::NodeSet->new()->appendRange(
new IMPL::DOM::Schema::SimpleNode( name => 'street' ),
new IMPL::DOM::Schema::SimpleNode( name => 'line', minOccur => 0 )
@@ -55,15 +55,32 @@
$this->schemaDoc
);
+ use Time::HiRes qw(gettimeofday tv_interval);
+
+ my $t = [gettimeofday];
+
$builder->NavigateCreate('personInfo', version => '1');
$builder->NavigateCreate('firstName')->nodeValue('Nemo');
$builder->Back();
- $builder->NavigateCreate('address', local => 1);
- $builder->NavigateCreate('street')->nodeValue('Hellroad');
+ $builder->NavigateCreate('lastName')->nodeValue('Nobel');
+ $builder->Back();
+ $builder->NavigateCreate('lastName')->nodeValue('Gardum');
+ $builder->Back();
+ for(1..100) {
+ $builder->NavigateCreate('address', local => 1);
+ $builder->NavigateCreate('street')->nodeValue('Hellroad');
+ $builder->Back();
+ $builder->NavigateCreate('line')->nodeValue($_);
+ $builder->Back();
$builder->Back();
- $builder->Back();
+ }
$builder->Back();
+ print "Build: ",tv_interval($t,[gettimeofday]),"\n";
+ $t = [gettimeofday];
+ print $_->Message,"\n" foreach $this->schemaDoc->Validate($builder->Document);
+ print "Validate: ",tv_interval($t,[gettimeofday]),"\n";
+
return 1;
};
diff -r a8086f85a571 -r f25d021780b3 impl.kpf
--- a/impl.kpf Mon Nov 16 18:39:25 2009 +0300
+++ b/impl.kpf Tue Nov 17 17:46:24 2009 +0300
@@ -456,6 +456,32 @@
default
+
+
+
+
+
+ 9011
+
+
+ _test/Test/DOM/Builder.pm
+
+ Perl
+
+
+
+ application/x-www-form-urlencoded
+ GET
+ 1
+ 0
+ 0
+
+
+ enabled
+
+
+ default
+