/usr/local/CPAN/Xmldoom/Xmldoom/Criteria/Property.pm
package Xmldoom::Criteria::Property;
use Xmldoom::Criteria;
use strict;
sub new
{
my $class = shift;
my $args = shift;
my $object_name;
my $property_name;
if ( ref($args) eq 'HASH' )
{
$object_name = $args->{object_name};
$property_name = $args->{property_name};
}
else
{
($object_name, $property_name) = split '/', $args;
}
my $self = {
object_name => $object_name,
property_name => $property_name
};
bless $self, $class;
return $self;
}
sub get_object_name { return shift->{object_name}; }
sub get_property_name { return shift->{property_name}; }
sub get_query_lval
{
my ($self, $database) = @_;
my $object = $database->get_object( $self->get_object_name() );
my $prop = $object->get_property( $self->get_property_name() );
if ( $prop->get_type() eq 'external' )
{
die "Cannot search against an external property!";
}
return $prop->get_query_lval();
}
sub get_query_rval
{
my ($self, $database, $lval) = @_;
if ( not $lval->isa( 'Xmldoom::Criteria::Property' ) )
{
die "A Property rvalue cannot be cast into anyother type.";
}
return $self->get_query_lval( $database );
}
sub get_tables
{
my ($self, $database) = @_;
my $object = $database->get_object( $self->get_object_name() );
my $prop = $object->get_property( $self->get_property_name() );
return $prop->get_tables();
}
sub clone
{
my $self = shift;
return Xmldoom::Criteria::Property->new({
object_name => $self->get_object_name(),
property_name => $self->get_property_name()
});
}
1;