diff Lib/Schema/DataSource.pm @ 49:16ada169ca75

migrating to the Eclipse IDE
author wizard@linux-odin.local
date Fri, 26 Feb 2010 10:49:21 +0300
parents 03e58a454b20
children 4267a2ac3d46
line wrap: on
line diff
--- a/Lib/Schema/DataSource.pm	Fri Feb 26 01:43:42 2010 +0300
+++ b/Lib/Schema/DataSource.pm	Fri Feb 26 10:49:21 2010 +0300
@@ -1,138 +1,138 @@
-package Configuration;
-our $DataDir;
-package Schema::DataSource;
-use Common;
-use strict;
-use base qw(Object);
-
-use BNFCompiler;
-use Schema::DB;
-use Schema;
-use URI::file;
-
-BEGIN {
-    DeclareProperty ProcessedSchemas => ACCESS_NONE;  #{ uri => schema }
-    DeclareProperty Types => ACCESS_READ; # Schema
-    DeclareProperty DataSourceBuilder => ACCESS_READ;
-    DeclareProperty Compiler => ACCESS_NONE;
-}
-
-sub CTOR {
-    my ($this,%args) = @_;
-    
-    $this->{$DataSourceBuilder} = $args{'DataSourceBuilder'} or die new Exception('A data source builder is required');
-    $this->{$Types} = new Schema;
-    $this->{$Compiler} = new BNFCompiler(SchemaCache => "${DataDir}Cache/",Transform => sub { BNFCompiler::DOM::TransformDOMToHash(@_,{skip_spaces => 1})} );
-    $this->{$Compiler}->LoadBNFSchema(file => 'Schema/schema.def');
-}
-
-sub as_list {
-    return( map { UNIVERSAL::isa($_,'ARRAY') ? @{$_} : defined $_ ? $_ : () } @_ );
-}
-
-sub ProcessSchema {
-    my ($this,$uriFile) = @_;
-    
-    return 1 if $this->{$ProcessedSchemas}{$uriFile->as_string};
-    
-    my $uriDir = URI::file->new('./')->abs($uriFile);
-    $this->{$ProcessedSchemas}->{$uriFile->as_string} = 1;
-    
-    my $Schema = $this->ParseSchema($uriFile);
-    
-    foreach my $item (as_list($Schema->{'header'}{'include_item'})) {
-        my $uriItem = URI::file->new($item->{'file_name'})->abs($uriDir);
-        $this->ProcessSchema($uriItem);
-    }
-    
-    $this->ConstructTypes($Schema);
-    
-}
-
-sub ParseSchema {
-    my ($this,$fileUri) = @_;
-    
-    my $fileName = $fileUri->file;
-    open my $hfile,"$fileName" or die new Exception('Failed to read the file',$fileName,$!);
-    local $/ = undef;
-    my $Schema = $this->{$Compiler}->Parse(<$hfile>);
-
-    return $Schema;
-}
-
-sub ConstructTypes {
-    my ($this,$schema) = @_;
-    return if not $schema->{'class'};
-    
-    foreach my $class (as_list($schema->{'class'})){
-        # объявление типа
-        my $type;
-        my $builder;
-        if ($class->{'type_definition'}{'args_list'}) {
-            $type = $this->{$Types}->CreateTemplate($class->{'type_definition'}{'name'},as_list($class->{'type_definition'}{'args_list'}{'name'}));
-        } else {
-            $type = $this->{$Types}->CreateType($class->{'type_definition'}{'name'});
-        }
-        
-        $type->SetAttributes(ValueType => 1) if $class->{'value_type'};
-        
-        my $mappingTip = $this->{$DataSourceBuilder}->GetClassMapping($type);
-        
-        
-        # обрабатываем список базовых классов
-        
-        if ($class->{'base_types'}) {
-            foreach my $typename (as_list($class->{'base_types'}{'type'})) {
-                $type->AddBase(MakeTypeName($typename));
-            }
-        }
-        
-        # обрабатываем список свойств
-        if ($class->{'property_list'}) {
-            foreach my $property (as_list($class->{'property_list'}{'property'})) {
-                $type->InsertProperty($property->{'name'},MakeTypeName($property->{'type'}));
-                if (my $mapping = $property->{'mapping'}) {
-                    $mappingTip->PropertyMapping($property->{'name'},Column => $mapping->{'column_name'},DBType => $mapping->{'db_type'});
-                }
-            }
-        }
-    }
-}
-
-sub MakeTypeName {
-    my ($typename) = @_;
-    
-    return new Schema::TypeName(
-        $typename->{'name'},
-        (
-            $typename->{'template_list'} ?
-                map { MakeTypeName($_) } as_list($typename->{'template_list'}{'type'})
-            :
-                ()
-        )
-    );
-}
-
-sub BuildSchema {
-    my ($this,$fileName) = @_;
-    
-    my $uriFile = URI::file->new_abs($fileName);
-    
-    $this->ProcessSchema($uriFile);
-    
-    $this->{$Types}->Close();
-
-    foreach my $type ($this->{$Types}->EnumTypes(skip_templates => 1)) {
-        $this->{$DataSourceBuilder}->AddType($type);
-    }
-}
-
-sub DESTROY {
-    my ($this) = @_;
-    
-    $this->{$Compiler}->Dispose;
-    $this->{$DataSourceBuilder}->Dispose;
-    $this->{$Types}->Dispose;
-}
-
-1;
+package Configuration;
+our $DataDir;
+package Schema::DataSource;
+use Common;
+use strict;
+use base qw(Object);
+
+use BNFCompiler;
+use Schema::DB;
+use Schema;
+use URI::file;
+
+BEGIN {
+    DeclareProperty ProcessedSchemas => ACCESS_NONE;  #{ uri => schema }
+    DeclareProperty Types => ACCESS_READ; # Schema
+    DeclareProperty DataSourceBuilder => ACCESS_READ;
+    DeclareProperty Compiler => ACCESS_NONE;
+}
+
+sub CTOR {
+    my ($this,%args) = @_;
+    
+    $this->{$DataSourceBuilder} = $args{'DataSourceBuilder'} or die new Exception('A data source builder is required');
+    $this->{$Types} = new Schema;
+    $this->{$Compiler} = new BNFCompiler(SchemaCache => "${DataDir}Cache/",Transform => sub { BNFCompiler::DOM::TransformDOMToHash(@_,{skip_spaces => 1})} );
+    $this->{$Compiler}->LoadBNFSchema(file => 'Schema/schema.def');
+}
+
+sub as_list {
+    return( map { UNIVERSAL::isa($_,'ARRAY') ? @{$_} : defined $_ ? $_ : () } @_ );
+}
+
+sub ProcessSchema {
+    my ($this,$uriFile) = @_;
+    
+    return 1 if $this->{$ProcessedSchemas}{$uriFile->as_string};
+    
+    my $uriDir = URI::file->new('./')->abs($uriFile);
+    $this->{$ProcessedSchemas}->{$uriFile->as_string} = 1;
+    
+    my $Schema = $this->ParseSchema($uriFile);
+    
+    foreach my $item (as_list($Schema->{'header'}{'include_item'})) {
+        my $uriItem = URI::file->new($item->{'file_name'})->abs($uriDir);
+        $this->ProcessSchema($uriItem);
+    }
+    
+    $this->ConstructTypes($Schema);
+    
+}
+
+sub ParseSchema {
+    my ($this,$fileUri) = @_;
+    
+    my $fileName = $fileUri->file;
+    open my $hfile,"$fileName" or die new Exception('Failed to read the file',$fileName,$!);
+    local $/ = undef;
+    my $Schema = $this->{$Compiler}->Parse(<$hfile>);
+
+    return $Schema;
+}
+
+sub ConstructTypes {
+    my ($this,$schema) = @_;
+    return if not $schema->{'class'};
+    
+    foreach my $class (as_list($schema->{'class'})){
+        # объявление типа
+        my $type;
+        my $builder;
+        if ($class->{'type_definition'}{'args_list'}) {
+            $type = $this->{$Types}->CreateTemplate($class->{'type_definition'}{'name'},as_list($class->{'type_definition'}{'args_list'}{'name'}));
+        } else {
+            $type = $this->{$Types}->CreateType($class->{'type_definition'}{'name'});
+        }
+        
+        $type->SetAttributes(ValueType => 1) if $class->{'value_type'};
+        
+        my $mappingTip = $this->{$DataSourceBuilder}->GetClassMapping($type);
+        
+        
+        # обрабатываем список базовых классов
+        
+        if ($class->{'base_types'}) {
+            foreach my $typename (as_list($class->{'base_types'}{'type'})) {
+                $type->AddBase(MakeTypeName($typename));
+            }
+        }
+        
+        # обрабатываем список свойств
+        if ($class->{'property_list'}) {
+            foreach my $property (as_list($class->{'property_list'}{'property'})) {
+                $type->InsertProperty($property->{'name'},MakeTypeName($property->{'type'}));
+                if (my $mapping = $property->{'mapping'}) {
+                    $mappingTip->PropertyMapping($property->{'name'},Column => $mapping->{'column_name'},DBType => $mapping->{'db_type'});
+                }
+            }
+        }
+    }
+}
+
+sub MakeTypeName {
+    my ($typename) = @_;
+    
+    return new Schema::TypeName(
+        $typename->{'name'},
+        (
+            $typename->{'template_list'} ?
+                map { MakeTypeName($_) } as_list($typename->{'template_list'}{'type'})
+            :
+                ()
+        )
+    );
+}
+
+sub BuildSchema {
+    my ($this,$fileName) = @_;
+    
+    my $uriFile = URI::file->new_abs($fileName);
+    
+    $this->ProcessSchema($uriFile);
+    
+    $this->{$Types}->Close();
+
+    foreach my $type ($this->{$Types}->EnumTypes(skip_templates => 1)) {
+        $this->{$DataSourceBuilder}->AddType($type);
+    }
+}
+
+sub DESTROY {
+    my ($this) = @_;
+    
+    $this->{$Compiler}->Dispose;
+    $this->{$DataSourceBuilder}->Dispose;
+    $this->{$Types}->Dispose;
+}
+
+1;