# $Id: LName.pm 1354 2006-06-14 00:27:26Z rvosa $ # Subversion: $Rev: 117 $ # Copyright (c) 1997 Lunatech Research / Bart Schuller # See the file "Artistic" in the distribution for licensing and # (lack of) warranties. use strict; use COPE::CORBA::Exception; use Log::Log4perl; use COPE::CORBA::ORB; Log::Log4perl::init( COPE::CORBA::ORB->LOGPERLCONF ); package LNameComponent::NotSet; use vars qw/@ISA/; @ISA = qw/CORBA::UserException/; package LNameComponent; use vars qw/@ISA/; @ISA = qw/CosNaming::NameComponent/; my $logger = Log::Log4perl::get_logger('CosNaming.NameComponent'); sub id { $logger->info("Returning ID"); my ( $self, $k ) = @_; if ( defined $k ) { $self->{id} = $k; } else { if ( defined $self->{id} ) { return $self->{id}; } else { $logger->fatal("LNameComponent::NotSet"); throw LNameComponent::NotSet; } } } sub kind { $logger->info("Returning kind"); my ( $self, $k ) = @_; if ( defined $k ) { $self->{kind} = $k; } else { if ( defined $self->{kind} ) { return $self->{kind}; } else { $logger->fatal("LNameComponent::NotSet"); throw LNameComponent::NotSet; } } } package LName::InvalidName; use vars qw/@ISA/; @ISA = qw/CORBA::UserException/; package LName; use COPE::CosNaming_types; $logger = Log::Log4perl::get_logger('LName'); sub new { $logger->info("Creating \"LName\" object"); my ($class) = @_; my $self = []; return bless $self, $class; } sub insert_component { $logger->info("Inserting component"); my ( $self, $i, $lnc ) = @_; splice( @$self, $i - 1, 0, new LNameComponent %$lnc ); return $self; } sub get_component { $logger->info("Getting component"); my ( $self, $i ) = @_; return $self->[ $i - 1 ]; } sub delete_component { $logger->info("Deleting component"); my ( $self, $i ) = @_; return splice( @$self, $i - 1, 1 ); } sub num_components { $logger->info("Returning number of components"); my ($self) = @_; return scalar @$self; } sub equal { $logger->info("Checking for equality"); my ( $self, $ln ) = @_; return 0 if @$self != @$ln; for ( my $i = 0 ; $i < @$self ; $i++ ) { if ( ( $self->[$i]->id ne $ln->[$i]->id ) || ( $self->[$i]->kind ne $ln->[$i]->kind ) ) { return 0; } } return 1; } sub less_than { $logger->info("Checking if less than"); my ( $self, $ln ) = @_; my $nelem = @$self; if ( @$ln < $nelem ) { $nelem = @$ln; } for ( my $i = 0 ; $i < $nelem ; $i++ ) { if ( $self->[$i]->id lt $ln->[$i]->id ) { return 1; } } return @$self < @$ln ? 1 : 0; } sub to_idl_form { $logger->info("Converting to IDL form"); my ($self) = @_; if ( !@$self ) { throw LName::InvalidName; } my @name; foreach (@$self) { push @name, new CosNaming::NameComponent %$_; } return \@name; } sub from_idl_form { $logger->info("Converting from IDL form"); my ( $self, $n ) = @_; @$self = map { new LNameComponent %$_ } @$n; } 1; __END__ =head1 NAME LName A class to ... =head1 SYNOPSIS use LName; =head1 DESCRIPTION The LName class implements ... =head1 OPTIONS -D - show debugging information -h - show help -v - show version Other options ... =head1 SUBROUTINES =head2 id (method) Parameters: k Insert description of method here... =head2 kind (method) Parameters: k Insert description of method here... =head2 new (constructor) Parameters: class Insert description of constructor here... =head2 insert_component (method) Parameters: i lnc Insert description of method here... =head2 get_component (method) Parameters: i Insert description of method here... =head2 delete_component (method) Parameters: i Insert description of method here... =head2 num_components (method) Parameters: none Insert description of method here... =head2 equal (method) Parameters: ln Insert description of method here... =head2 less_than (method) Parameters: ln Insert description of method here... =head2 to_idl_form (method) Parameters: none Insert description of method here... =head2 from_idl_form (method) Parameters: n Insert description of method here... =head1 FILES Files used by the LName class ... =head1 SEE ALSO Related information ... =head1 WARNINGS ... =head1 NOTES ... =head1 BUGS What? =cut