package CQL::PrefixNode; use strict; use warnings; use base qw( CQL::Node ); use CQL::Prefix; use Carp qw( croak ); =head1 NAME CQL::PrefixNode - represents a prefix node in a CQL parse tree =head1 SYNOPSIS use CQL::PrefixNode; my $prefix = CQL::PrefixNode->new( name => '', identifier => '', subtree => $node ); =head1 DESCRIPTION =head1 METHODS =head2 new() Creates a new CQL::PrefixNode inducing a mapping from the specified qualifier-set name to the specified identifier across the specified subtree. =cut sub new { my ($class,%opts) = @_; croak( 'must supply name' ) if ! exists $opts{name}; croak( 'must supply identifier' ) if ! exists $opts{identifier}; croak( 'must supply subtree' ) if ! exists $opts{subtree}; my $prefix = CQL::Prefix->new( name => $opts{name}, identifier => $opts{identifier} ); my $self = { prefix => $prefix, subtree => $opts{subtree} }; return bless $self, ref($class) || $class; } =head2 getPrefix() =cut sub getPrefix { return shift->{prefix}; } =head2 getSubtree() =cut sub getSubtree { return shift->{subtree}; } =head2 toCQL() =cut sub toCQL { my $self = shift; my $prefix = $self->getPrefix(); my $subtree = $self->getSubtree(); return ">" . $prefix->getName() . '="' . $prefix->getIdentifier() . '" ' . '(' . $subtree->toCQL() . ')'; } =head2 toXCQL() =cut sub toXCQL { my ($self,$level,@prefixes) = @_; $level = 0 if ! $level; push( @prefixes, $self->getPrefix() ); my $xml = $self->getSubtree()->toXCQL( $level, @prefixes ); return $self->addNamespace( $level, $xml ); } 1;