Mercurial > pub > Impl
diff Lib/IMPL/Config.pm @ 49:16ada169ca75
migrating to the Eclipse IDE
author | wizard@linux-odin.local |
---|---|
date | Fri, 26 Feb 2010 10:49:21 +0300 |
parents | a9b70d836b28 |
children | a35b60b16a99 |
line wrap: on
line diff
--- a/Lib/IMPL/Config.pm Fri Feb 26 01:43:42 2010 +0300 +++ b/Lib/IMPL/Config.pm Fri Feb 26 10:49:21 2010 +0300 @@ -1,132 +1,132 @@ -package IMPL::Config; -use strict; -use warnings; - -use base qw(IMPL::Object IMPL::Object::Serializable IMPL::Object::Autofill); - -__PACKAGE__->PassThroughArgs; - -use IMPL::Class::Member; -use IMPL::Class::PropertyInfo; -use IMPL::Exception; - -use IMPL::Serialization; -use IMPL::Serialization::XmlFormatter; - -sub LoadXMLFile { - my ($self,$file) = @_; - - my $class = ref $self || $self; - - my $serializer = new IMPL::Serializer( - Formatter => new IMPL::Serialization::XmlFormatter( - IdentOutput => 1, - SkipWhitespace => 1 - ) - ); - - open my $hFile,'<',$file or die new IMPL::Exception("Failed to open file",$file,$!); - - my $obj; - eval { - $obj = $serializer->Deserialize($hFile); - }; - - if ($@) { - my $e=$@; - die new IMPL::Exception("Can't load the configuration file",$file,$e); - } - return $obj; -} - -sub SaveXMLFile { - my ($this,$file) = @_; - - my $serializer = new IMPL::Serializer( - Formatter => new IMPL::Serialization::XmlFormatter( - IdentOutput => 1, - SkipWhitespace => 1 - ) - ); - - open my $hFile,'>',$file or die new IMPL::Exception("Failed to open file",$file,$!); - - $serializer->Serialize($hFile, $this); -} - -sub xml { - my $this = shift; - my $serializer = new IMPL::Serializer( - Formatter => new IMPL::Serialization::XmlFormatter( - IdentOutput => 1, - SkipWhitespace => 1 - ) - ); - my $str = ''; - open my $hFile,'>',\$str or die new IMPL::Exception("Failed to open stream",$!); - - $serializer->Serialize($hFile, $this); - - undef $hFile; - - return $str; -} - -sub save { - my ($this,$ctx) = @_; - - foreach my $info ($this->get_meta('IMPL::Class::PropertyInfo')) { - next if $info->Access != IMPL::Class::Member::MOD_PUBLIC; # save only public properties - - my $name = $info->Name; - $ctx->AddVar($name => $this->$name()) if $this->$name(); - } -} - -1; -__END__ - -=pod - -=h1 SYNOPSIS - -package App::Config -use base qw(IMPL::Config) - -use IMPL::Class::Property; -use IMPL::Config::Class; - -BEGIN { - public property SimpleString => prop_all; - public property MyClass => prop_all; -} - -sub CTOR { - my $this = shift; - $this->superCTOR(@_); - - $this->MyClass(new IMPL::Config::Class(Type => MyClass)) unless $this->MyClass; -} - -=head1 DESCRIPTION - -Позволяет сохранить/загрузить конфигурацию. Также все классы конфигурации -должны наследоваться от данного класса, и все Public свойства будут -автоматически сохраняться и восстанавливаться. - -=head1 MEMBERS - -=over - -=item static LoadXMLFile($fileName) -Создает из XML файла экземпляр приложения - -=item SaveXMLFile($fileName) -Сохраняет приложение в файл - -=item xml -Сохраняет конфигурацию приложения в XML строку - -=back - -=cut \ No newline at end of file +package IMPL::Config; +use strict; +use warnings; + +use base qw(IMPL::Object IMPL::Object::Serializable IMPL::Object::Autofill); + +__PACKAGE__->PassThroughArgs; + +use IMPL::Class::Member; +use IMPL::Class::PropertyInfo; +use IMPL::Exception; + +use IMPL::Serialization; +use IMPL::Serialization::XmlFormatter; + +sub LoadXMLFile { + my ($self,$file) = @_; + + my $class = ref $self || $self; + + my $serializer = new IMPL::Serializer( + Formatter => new IMPL::Serialization::XmlFormatter( + IdentOutput => 1, + SkipWhitespace => 1 + ) + ); + + open my $hFile,'<',$file or die new IMPL::Exception("Failed to open file",$file,$!); + + my $obj; + eval { + $obj = $serializer->Deserialize($hFile); + }; + + if ($@) { + my $e=$@; + die new IMPL::Exception("Can't load the configuration file",$file,$e); + } + return $obj; +} + +sub SaveXMLFile { + my ($this,$file) = @_; + + my $serializer = new IMPL::Serializer( + Formatter => new IMPL::Serialization::XmlFormatter( + IdentOutput => 1, + SkipWhitespace => 1 + ) + ); + + open my $hFile,'>',$file or die new IMPL::Exception("Failed to open file",$file,$!); + + $serializer->Serialize($hFile, $this); +} + +sub xml { + my $this = shift; + my $serializer = new IMPL::Serializer( + Formatter => new IMPL::Serialization::XmlFormatter( + IdentOutput => 1, + SkipWhitespace => 1 + ) + ); + my $str = ''; + open my $hFile,'>',\$str or die new IMPL::Exception("Failed to open stream",$!); + + $serializer->Serialize($hFile, $this); + + undef $hFile; + + return $str; +} + +sub save { + my ($this,$ctx) = @_; + + foreach my $info ($this->get_meta('IMPL::Class::PropertyInfo')) { + next if $info->Access != IMPL::Class::Member::MOD_PUBLIC; # save only public properties + + my $name = $info->Name; + $ctx->AddVar($name => $this->$name()) if $this->$name(); + } +} + +1; +__END__ + +=pod + +=h1 SYNOPSIS + +package App::Config +use base qw(IMPL::Config) + +use IMPL::Class::Property; +use IMPL::Config::Class; + +BEGIN { + public property SimpleString => prop_all; + public property MyClass => prop_all; +} + +sub CTOR { + my $this = shift; + $this->superCTOR(@_); + + $this->MyClass(new IMPL::Config::Class(Type => MyClass)) unless $this->MyClass; +} + +=head1 DESCRIPTION + +Позволяет сохранить/загрузить конфигурацию. Также все классы конфигурации +должны наследоваться от данного класса, и все Public свойства будут +автоматически сохраняться и восстанавливаться. + +=head1 MEMBERS + +=over + +=item static LoadXMLFile($fileName) +Создает из XML файла экземпляр приложения + +=item SaveXMLFile($fileName) +Сохраняет приложение в файл + +=item xml +Сохраняет конфигурацию приложения в XML строку + +=back + +=cut