package Xmldoom::Definition::Property;
use Xmldoom::Object::Property;
use Scalar::Util qw(weaken);
use strict;
sub new
{
my $class = shift;
my $args = shift;
my $parent;
my $name;
my $description;
my $hints;
my $reportable = 1;
my $searchable = 1;
my $shared = 0;
if ( ref($args) eq 'HASH' )
{
$parent = $args->{parent};
$name = $args->{name};
$description = $args->{description};
$hints = $args->{hints};
$reportable = $args->{reportable} if defined $args->{reportable};
$searchable = $args->{searchable} if defined $args->{searchable};
$shared = $args->{shared} if defined $args->{shared};
}
else
{
$parent = $args;
$name = shift;
}
my $self = {
parent => $parent,
name => $name,
description => $description || undef,
hints => $hints || { },
reportable => $reportable || 0,
searchable => $searchable || 0,
};
bless $self, $class;
# we have to do this before any weak references are manipulated
# because copies of weak references are strong references.
$self = Xmldoom::Threads::make_shared($self, $shared);
# weaken reference to parent
if ( defined $self->{parent} )
{
weaken( $self->{parent} );
}
return $self;
}
sub get_parent { return shift->{parent}; }
sub get_name { return shift->{name}; }
sub get_description { return shift->{description}; }
sub get_reportable { return shift->{reportable}; }
sub get_searchable { return shift->{searchable}; }
sub get_hint
{
my ($self, $name) = @_;
return $self->{hints}->{$name};
}
# NOTE: you need to override for any property which forces to join
# with another table, to ensure that the table gets on the from list
# of the query.
sub get_tables
{
my $self = shift;
return [ $self->get_parent()->get_table_name() ];
}
sub get_autoload_get_list
{
die "Abstract.";
}
sub get_autoload_set_list
{
die "Abstract.";
}
sub get_type
{
die "Abstract.";
}
sub get_data_type
{
die "Abstract.";
}
sub get
{
die "Abstract.";
}
sub set
{
die "Abstract.";
}
sub get_query_lval
{
die "Abstract.";
}
sub get_query_rval
{
die "Abstract.";
}
sub autoload
{
die "Abstract.";
}
1;