#!/usr/bin/perl
#
##################################################################
package Service;
use strict;
sub new {
my ($class) = shift;
my (%params) = @_;
bless { "_ports" => undef }, $class;
}
sub get_port {
my $self = shift;
my ($port_name) = @_;
return $self->{'_ports'}->{$port_name};
}
sub get_port_binding {
my $self = shift;
my ($port_name) = @_;
return $self->get_port($port_name)->binding();
}
sub add_port {
my $self = shift;
my $port = Service::Port->new(@_);
$self->{'_ports'}->{ $port->name() } = $port;
}
##################################################################
package Service::Port;
use strict;
sub BEGIN {
no strict 'refs';
for my $method (qw(name bindingName binding)) {
my $field = '_' . $method;
*$method = sub {
my $self = shift;
@_
? ( $self->{$field} = shift, return $self )
: return $self->{$field};
}
}
}
sub address {
my $self = shift;
return $self->binding->{'address'};
}
sub new {
my ($class) = shift;
my (%params) = @_;
bless {
"_name" => $params{"name"},
"_binding" => $params{"binding"},
"_bindingName" => $params{"bindingName"}
}, $class;
}
##################################################################
1;