package perfSONAR_PS::XML::Namespace;
{
=head1 NAME
Namespace - a container for namespaces
=head1 DESCRIPTION
The purpose of this module is to create OO interface to namespace registration and therefore
add the layer of abstraction for any namespace related operation. All perfSONAR-PS classes should
work with the instance of this class and avoid using explicit namespace declaration.
=head1 SYNOPSIS
use perfSONAR_PS::XML::Namespace;
# create Namespace object with default URIs
$ns = perfSONAR_PS::XML::Namespace->new();
# overwrite Namespace object with custom URIs
$nss = {'pinger' => 'http://newpinger/namespace/'};
$ns = perfSONAR_PS::XML::Namespace->new(-hash => $nss);
# overwrite only specific Namespace with custom URI
$ns = perfSONAR_PS::XML::Namespace->new(-pinger => 'http://newpinger/namespace/');
$pinger_uri = $ns->getNsByKey('pinger'); ## get URI by key
$ns->setNsByKey('pinger' => 'http://newpinger/namespace/'); ## set URI by key
=head1 API
There are many get/set methods
=head2 new(-NS => \%nss)
Creates a new object, pass hash ref as collection of namespaces
or new(-pinger => http://ggf.org/ns/nmwg/tools/pinger/2.0/", 'nmwgr' => "http://ggf.org/ns/nmwg/result/2.0/")
=cut
use version; our $VERSION = qv('3.0_1');
use Log::Log4perl qw(get_logger);
our $nss = {
'nmwg' => "http://ggf.org/ns/nmwg/base/2.0/",
'nmwgr' => "http://ggf.org/ns/nmwg/result/2.0/" ,
'select' => "http://ggf.org/ns/nmwg/ops/select/2.0/",
'netutil' => "http://ggf.org/ns/nmwg/characteristic/utilization/2.0/",
'traceroute' =>"http://ggf.org/ns/nmwg/tools/traceroute/2.0/",
'snmp' => "http://ggf.org/ns/nmwg/tools/snmp/2.0/",
'ping' => "http://ggf.org/ns/nmwg/tools/ping/2.0/",
'owamp' =>"http://ggf.org/ns/nmwg/tools/owamp/2.0/",
'bwctl' =>"http://ggf.org/ns/nmwg/tools/bwctl/2.0/",
'pinger' =>"http://ggf.org/ns/nmwg/tools/pinger/2.0/",
'iperf' =>"http://ggf.org/ns/nmwg/tools/iperf/2.0/",
'average'=> "http://ggf.org/ns/nmwg/ops/average/2.0/",
'nmwgt' => "http://ggf.org/ns/nmwg/topology/2.0/",
'topo'=> "http://ggf.org/ns/nmwg/topology/2.0/",
'nmtl4' => "http://ogf.org/schema/network/topology/l4/20070707 ",
'nmtl3' => "http://ogf.org/schema/network/topology/l3/20070707",
'nmtl2' => "http://ogf.org/schema/network/topology/l2/20070707/",
'nmtopo' => "http://ogf.org/schema/network/topology/base/20070707/",
'nmtb' => "http://ogf.org/schema/network/topology/base/20070707/",
'nmtm' => "http://ggf.org/ns/nmwg/time/2.0/",
};
sub new {
my $that = shift;
my $class = ref($that) || $that;
my @param = @_;
my $self = $nss ;
bless $self, $class;
my $logger = get_logger($that);
my %conf = ();
if(@param) {
if ($param[0] eq '-NS') {
%conf = %{$param[1]}
} else {
%conf = @param;
}
$logger->debug(" params: " . ( join " : " , @param) );
foreach my $cf ( keys %conf ) {
(my $stripped_cf = $cf) =~ s/\-//;
if(exists $self->{$stripped_cf}) {
$self->{$stripped_cf} = $conf{$cf};
} else {
$logger->warn("Unknown option: $cf - " . $conf{$cf}) ;
}
}
}
return $self;
}
=head2 getNsByKey()
Returns namespace string by id of the namespace, where kyes are:
'nmwg', 'nmwgr
'nmwgt' ( aliased as 'topo' too),'nmwgtopo3'
'nmtl3','nmtl4', 'nmtm'
'select', 'average'
'traceroute','snmp', 'ping', 'owamp', 'netutil', 'bwctl','pinger', 'iperf
Might be utized as Class method:
my $URI = Namespace::getNsByKey($key);
=cut
sub getNsByKey {
my $self = shift;
my $key = shift;
my $logger = get_logger($that);
if(ref($self)) {
if ( ! defined $self->{$key} ) {
$logger->error( "Key '$key' not found");
return undef;
}
return $self->{$key};
} else {
if ( ! defined $nss->{$self} ) {
$logger->error( "Key '$self' not found");
return undef;
}
return $nss->{$self};
}
}
=head2 setNsByKey('pinger' => 'http://newpinger/namespace/' )
Sets namespace URI string by id of the namespace or defnies the new one
=cut
sub setNsByKey {
my $self = shift;
my ($key , $val) = @_;
return $self->{$key}=$val;
}
}
1;
__END__
=head1 SEE ALSO
To join the 'perfSONAR-PS' mailing list, please visit:
https://mail.internet2.edu/wws/info/i2-perfsonar
The perfSONAR-PS subversion repository is located at:
https://svn.internet2.edu/svn/perfSONAR-PS
Questions and comments can be directed to the author, or the mailing list.
=head1 AUTHOR
Maxim Grigoriev, E<lt>maxim@fnal.govE<gt>
=head1 COPYRIGHT AND LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.
=cut