view Lib/IMPL/ORM/Entity.pm @ 148:e6447ad85cb4

DOM objects now have a schema and schemaSource properties RegExp now can launder data Improved post to DOM transformation (multiple values a now supported) Added new axes to navigation queries: ancestor and descendant minor changes and bug fixes
author wizard
date Mon, 16 Aug 2010 08:26:44 +0400
parents 16ada169ca75
children 4267a2ac3d46
line wrap: on
line source

package IMPL::ORM::Entity;
use strict;
use warnings;

use base qw(IMPL::Object);
use IMPL::Class::Property;
use IMPL::Class::Property::Direct;

BEGIN {
    public _direct property Name => prop_get;
    public _direct property Class => prop_get;
    public _direct property Values => prop_get;
    public _direct property Schema => prop_get;
}

sub CTOR {
    my ($this,$class,$schema) = @_;
    
    $this->{$Class} = $class;
    (my $name = $class) =~ s/::/_/g;
    $this->{$Name} = $name;
    $this->Schema = $schema;
    $this->{$Values} = {
        map {$_->{name},{type => $_->{type}, virtual => $_->{virtual}}} @$schema
    };
}

sub Store;
*Store = \&dbgStore;

sub dbgStore {
    my ($this,$prop,$value) = @_;
    
    if ( my $container = $this->{$Values}{$prop} ) {
        $container->{oldValue} = $container->{value};
        $container->{value} = $value;
    } else {
        die new IMPL::InvalidOperationException("Property not found",$this->Name,$prop);
    }
}

sub Get {
    my ($this,$prop) = @_;
    
    return $this->{$Values}{$prop}{value};
}

1;