# HG changeset patch # User Sergey # Date 1262867682 -10800 # Node ID 4ff27cd051e34675221812f486bf92296d029882 # Parent c2e7f7c96bcdb787407f71c86504fda2cab7b1f1 updated ORM schema model diff -r c2e7f7c96bcd -r 4ff27cd051e3 Lib/IMPL/ORM/Schema.pm --- a/Lib/IMPL/ORM/Schema.pm Mon Nov 23 00:59:06 2009 +0300 +++ b/Lib/IMPL/ORM/Schema.pm Thu Jan 07 15:34:42 2010 +0300 @@ -5,6 +5,7 @@ use base qw(IMPL::DOM::Document); use IMPL::Class::Property; require IMPL::ORM::Schema::Entity; +require IMPL::ORM::Schema::ValueType; our %CTOR = ( 'IMPL::DOM::Document' => sub { nodeName => 'Schema' } @@ -47,13 +48,20 @@ $this->mapPending->{$typeName} = $entity; + $this->appendChild($entity); + return $this->mapReferenceTypes->{$typeName} = $entity; } sub _addReferenceType { my ($this,$className) = @_; - $this->mapReferenceTypes->{$className} = $className->ormGetSchema($this,delete $this->mapPending->{$className}); + if ( my $entity = delete $this->mapPending->{$className} ) { + $className->ormGetSchema($this,$entity); + } else { + return $this->appendChild( $this->mapReferenceTypes->{$className} = $className->ormGetSchema($this) ); + } + } # returns valuetype name @@ -77,7 +85,10 @@ $this = ref $this ? $this : $this->instance; - $this->mapValueTypes->{$_} = $classes{$_} foreach keys %classes; + while ( my ($typeName,$typeReflected) = each %classes ) { + $this->mapValueTypes->{$typeName} = $typeReflected; + $this->appendChild(IMPL::ORM::Schema::ValueType->new($typeName,$typeReflected)); + } } sub Classes { @@ -101,8 +112,7 @@ $this = ref $this ? $this : $this->instance; - $this->mapReferenceTypes->{$_} = $_->ormGetSchema($this,delete $this->mapPending->{$_}) - foreach (keys %{$this->mapPending}); + $_->ormGetSchema($this,delete $this->mapPending->{$_}) foreach (keys %{$this->mapPending}); } 1; @@ -118,4 +128,18 @@ Каждый узел - это описание сущности. + + + + + + + + + + + + + + =cut \ No newline at end of file diff -r c2e7f7c96bcd -r 4ff27cd051e3 Lib/IMPL/ORM/Schema/ValueType.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/ORM/Schema/ValueType.pm Thu Jan 07 15:34:42 2010 +0300 @@ -0,0 +1,31 @@ +package IMPL::ORM::Schema::ValueType; + +use strict; + +use base qw(IMPL::DOM::Node); + +our %CTOR = ( + 'IMPL::DOM::Node' => sub { nodeName => 'ValueType' } +); + +use IMPL::Class::Property; + +BEGIN { + public property typeName => prop_all; + public property typeReflected => prop_all; +} + +sub CTOR { + my ($this,$typeName,$typeReflected) = @_; + + $this->typeName($typeName); + $this->typeReflected($typeReflected); +} + +1; + +__END__ + +=pod + +=cut \ No newline at end of file