TT#46752 AMA format writer objects: structure 9013, 9014

Change-Id: I93498b1bcdb6bd7923b1f1c1d49a76ae0c4b8b0e
changes/53/24553/5
Rene Krenn 7 years ago
parent e1a7da370d
commit 135dec41d7

@ -1,42 +0,0 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Block;
use strict;
## no critic
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
);
sub new {
my $class = shift;
my $self = bless {}, $class;
my %params = @_;
(
$self->{name},
) = @params{qw/
name
/};
return $self;
}
sub print {
my $self = shift;
}
sub get_block_descriptor_word {
my $self = shift;
#return total length in bytes (up to 256*256 bytes)
}
sub pad {
}
1;

@ -0,0 +1,49 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::BlockCount;
use strict;
## no critic
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Field qw($TERMINATOR);
#use NGCP::BulkProcessor::Array qw(contains);
require Exporter;
our @ISA = qw(Exporter NGCP::BulkProcessor::Projects::Export::Ama::Format::Field);
our @EXPORT_OK = qw(
);
my $field_name = "block count";
my $length = 6;
my @param_names = qw/block_count/;
sub new {
my $class = shift;
my $self = NGCP::BulkProcessor::Projects::Export::Ama::Format::Field->new(
$class,
name => $field_name,
length => $length,
@_);
return $self;
}
sub _get_param_names {
my $self = shift;
return @param_names;
}
sub get_hex {
my $self = shift;
my ($block_count) = $self->_get_params(@_);
die("invalid block count '$block_count'") if ($block_count < 0 or $block_count > 99999);
return sprintf('%05d',$block_count) . $TERMINATOR;
}
1;

@ -1,4 +1,4 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallTypeCode;
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType;
use strict;
## no critic
@ -12,6 +12,7 @@ our @EXPORT_OK = qw(
$STATION_SPECIAL_CALLING
$FLAT_RATE
$FREE_CALL
$TRANSFER
$OPERATING_COMPANY_NUMBER_SERVICE_CALLS
$MDRRAO
$ON_NET_PRIVATE_VIRTUAL_NETWORK
@ -20,12 +21,13 @@ our @EXPORT_OK = qw(
my $field_name = "call type code";
my $length = 4;
my @param_names = qw/call_type_code/;
my @param_names = qw/call_type/;
our $STATION_PAID = '006';
our $STATION_SPECIAL_CALLING = '015';
our $FLAT_RATE = '067';
our $FREE_CALL = '074';
our $TRANSFER = '092';
our $OPERATING_COMPANY_NUMBER_SERVICE_CALLS = '142';
our $MDRRAO = '159';
our $ON_NET_PRIVATE_VIRTUAL_NETWORK = '160';
@ -55,9 +57,9 @@ sub _get_param_names {
sub get_hex {
my $self = shift;
my ($call_type_code) = $self->_get_params(@_);
die("invalid call type code '$call_type_code'") unless length($call_type_code) == 3;
return $call_type_code . $TERMINATOR;
my ($call_type) = $self->_get_params(@_);
die("invalid call type '$call_type'") unless length($call_type) == 3;
return $call_type . $TERMINATOR;
}

@ -0,0 +1,49 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::FileSequenceNumber;
use strict;
## no critic
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Field qw($TERMINATOR);
#use NGCP::BulkProcessor::Array qw(contains);
require Exporter;
our @ISA = qw(Exporter NGCP::BulkProcessor::Projects::Export::Ama::Format::Field);
our @EXPORT_OK = qw(
);
my $field_name = "file sequence number";
my $length = 4;
my @param_names = qw/file_sequence_number/;
sub new {
my $class = shift;
my $self = NGCP::BulkProcessor::Projects::Export::Ama::Format::Field->new(
$class,
name => $field_name,
length => $length,
@_);
return $self;
}
sub _get_param_names {
my $self = shift;
return @param_names;
}
sub get_hex {
my $self = shift;
my ($file_sequence_number) = $self->_get_params(@_);
die("invalid file sequence number '$file_sequence_number'") if ($file_sequence_number < 1 or $file_sequence_number > 999);
return sprintf('%03d',$file_sequence_number) . $TERMINATOR;
}
1;

@ -0,0 +1,54 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::GenericIssue;
use strict;
## no critic
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Field qw($TERMINATOR);
#use NGCP::BulkProcessor::Array qw(contains);
require Exporter;
our @ISA = qw(Exporter NGCP::BulkProcessor::Projects::Export::Ama::Format::Field);
our @EXPORT_OK = qw(
);
my $field_name = "generic issue";
my $length = 6;
my @param_names = qw/generic_issue_number point_issue_level overwrite_level/;
sub new {
my $class = shift;
my $self = NGCP::BulkProcessor::Projects::Export::Ama::Format::Field->new(
$class,
name => $field_name,
length => $length,
@_);
$self->{generic_issue_number} //= 0;
$self->{point_issue_level} //= 0;
$self->{overwrite_level} //= 0;
return $self;
}
sub _get_param_names {
my $self = shift;
return @param_names;
}
sub get_hex {
my $self = shift;
my ($generic_issue_number,$point_issue_level,$overwrite_level) = $self->_get_params(@_);
die("invalid generic issue number '$generic_issue_number'") if length($generic_issue_number) < 1 or length($generic_issue_number) > 2;
die("invalid point issue level '$point_issue_level'") if length($point_issue_level) < 1 or length($point_issue_level) > 2;
die("invalid overwrite level '$overwrite_level'") if length($overwrite_level) != 1;
return sprintf('%02d',$generic_issue_number) . sprintf('%02d',$point_issue_level) . $overwrite_level . $TERMINATOR;
}
1;

@ -0,0 +1,49 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordCount;
use strict;
## no critic
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Field qw($TERMINATOR);
#use NGCP::BulkProcessor::Array qw(contains);
require Exporter;
our @ISA = qw(Exporter NGCP::BulkProcessor::Projects::Export::Ama::Format::Field);
our @EXPORT_OK = qw(
);
my $field_name = "record count";
my $length = 8;
my @param_names = qw/record_count/;
sub new {
my $class = shift;
my $self = NGCP::BulkProcessor::Projects::Export::Ama::Format::Field->new(
$class,
name => $field_name,
length => $length,
@_);
return $self;
}
sub _get_param_names {
my $self = shift;
return @param_names;
}
sub get_hex {
my $self = shift;
my ($record_count) = $self->_get_params(@_);
die("invalid record count '$record_count'") if ($record_count < 0 or $record_count > 9999999);
return sprintf('%07d',$record_count) . $TERMINATOR;
}
1;

@ -20,7 +20,7 @@ our @EXPORT_OK = qw(
my $field_name = "service feature";
my $length = 4;
my @param_names = qw/service_feature_code/;
my @param_names = qw/service_feature/;
our $OTHER = '000';
our $THREE_WAY = '010';
@ -38,7 +38,7 @@ sub new {
name => $field_name,
length => $length,
@_);
#$self->{service_feature_code} //= 0;
#$self->{service_feature} //= 0;
return $self;
@ -54,9 +54,9 @@ sub _get_param_names {
sub get_hex {
my $self = shift;
my ($service_feature_code) = $self->_get_params(@_);
die("invalid service feature code '$service_feature_code'") unless length($service_feature_code) == 3;
return $service_feature_code . $TERMINATOR;
my ($service_feature) = $self->_get_params(@_);
die("invalid service feature '$service_feature'") unless length($service_feature) == 3;
return $service_feature . $TERMINATOR;
}

@ -0,0 +1,65 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::TracerType;
use strict;
## no critic
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Field qw($TERMINATOR);
use NGCP::BulkProcessor::Array qw(contains);
require Exporter;
our @ISA = qw(Exporter NGCP::BulkProcessor::Projects::Export::Ama::Format::Field);
our @EXPORT_OK = qw(
$TRANSFER_IN
$TRANSFER_OUT
$AMATPS_PRIMARY
$AMATPS_SECONDARY
$DMS100F_HOURLY
);
my $field_name = "tracer type";
my $length = 4;
my @param_names = qw/tracer_type/;
my @tracer_types = ();
our $TRANSFER_IN = '007';
push(@tracer_types,$TRANSFER_IN);
our $TRANSFER_OUT = '008';
push(@tracer_types,$TRANSFER_OUT);
our $AMATPS_PRIMARY = '032';
push(@tracer_types,$AMATPS_PRIMARY);
our $AMATPS_SECONDARY = '033';
push(@tracer_types,$AMATPS_SECONDARY);
our $DMS100F_HOURLY = '037';
push(@tracer_types,$DMS100F_HOURLY);
sub new {
my $class = shift;
my $self = NGCP::BulkProcessor::Projects::Export::Ama::Format::Field->new(
$class,
name => $field_name,
length => $length,
@_);
return $self;
}
sub _get_param_names {
my $self = shift;
return @param_names;
}
sub get_hex {
my $self = shift;
my ($tracer_type) = $self->_get_params(@_);
die("invalid tracer type '$tracer_type'") unless contains($tracer_type,\@tracer_types);
return $tracer_type . $TERMINATOR;
}
1;

@ -9,6 +9,8 @@ our @EXPORT_OK = qw(
);
my $record_descriptor_word_length = 8;
sub new {
my $class = shift;
@ -35,7 +37,7 @@ sub get_hex {
sub get_length {
my $self = shift;
my $length = 8; #RDW
my $length = $record_descriptor_word_length;
$length += $self->{structure}->get_length(@_);
foreach my $module (@{$self->{modules}}) {
next unless $module->get_enabled(@_);

@ -7,7 +7,7 @@ use NGCP::BulkProcessor::Projects::Export::Ama::Format::Structure qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::HexId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::StructureCode qw($STRUCTURE_CODE_0510);
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallTypeCode qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeType qw();
@ -58,7 +58,7 @@ sub new {
@_,
);
$self->_add_field($self->{structure_code});
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallTypeCode->new(
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorType->new(

@ -0,0 +1,91 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure9013;
use strict;
## no critic
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Structure qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::HexId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::StructureCode qw($STRUCTURE_CODE_9013);
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ConnectTime qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::GenericIssue qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::TracerType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::FileSequenceNumber qw();
require Exporter;
our @ISA = qw(Exporter NGCP::BulkProcessor::Projects::Export::Ama::Format::FieldSet NGCP::BulkProcessor::Projects::Export::Ama::Format::Structure);
our @EXPORT_OK = qw(
);
my $length = 64;
sub new {
my $class = shift;
my $self = NGCP::BulkProcessor::Projects::Export::Ama::Format::Structure->new(
$class,
length => $length,
#structure_name => $structure_name,
@_);
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::HexId->new(
@_,
));
$self->{structure_code} = NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::StructureCode->new(
structure_code => $STRUCTURE_CODE_9013,
@_,
);
$self->_add_field($self->{structure_code});
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType->new(
call_type => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType::TRANSFER,
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorType->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorId->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeType->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeId->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ConnectTime->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::GenericIssue->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::TracerType->new(
tracer_type => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::TracerType::TRANSFER_IN,
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::FileSequenceNumber->new(
@_,
));
return $self;
}
sub get_structure_code_field {
my $self = shift;
return $self->{structure_code};
}
#sub get_instance {
# return
#}
1;

@ -0,0 +1,99 @@
package NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure9014;
use strict;
## no critic
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Structure qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::HexId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::StructureCode qw($STRUCTURE_CODE_9014);
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeId qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ConnectTime qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::GenericIssue qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::TracerType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::FileSequenceNumber qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordCount qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::BlockCount qw();
require Exporter;
our @ISA = qw(Exporter NGCP::BulkProcessor::Projects::Export::Ama::Format::FieldSet NGCP::BulkProcessor::Projects::Export::Ama::Format::Structure);
our @EXPORT_OK = qw(
);
my $length = 78;
sub new {
my $class = shift;
my $self = NGCP::BulkProcessor::Projects::Export::Ama::Format::Structure->new(
$class,
length => $length,
#structure_name => $structure_name,
@_);
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::HexId->new(
@_,
));
$self->{structure_code} = NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::StructureCode->new(
structure_code => $STRUCTURE_CODE_9014,
@_,
);
$self->_add_field($self->{structure_code});
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType->new(
call_type => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType::TRANSFER,
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorType->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SensorId->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeType->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordingOfficeId->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ConnectTime->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::GenericIssue->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::TracerType->new(
tracer_type => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::TracerType::TRANSFER_IN,
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::FileSequenceNumber->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::RecordCount->new(
@_,
));
$self->_add_field(NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::BlockCount->new(
@_,
));
return $self;
}
sub get_structure_code_field {
my $self = shift;
return $self->{structure_code};
}
#sub get_instance {
# return
#}
1;

@ -10,8 +10,10 @@ use NGCP::BulkProcessor::Calendar qw(current_local);
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Record qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure0510 qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure9013 qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure9014 qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallTypeCode qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ServiceFeature qw();
use NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SignificantDigitsNextField qw();
@ -24,9 +26,27 @@ my $source = "43011001";
my $destination = "43011002";
my $duration = 123.456;
my $test = NGCP::BulkProcessor::Projects::Export::Ama::Format::Record->new(
my $transfer_in = NGCP::BulkProcessor::Projects::Export::Ama::Format::Record->new(
NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure9013->new(
rewritten => 0,
sensor_id => '008708', # Graz
padding => 0,
recording_office_id => '008708',
date => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date::get_ama_date($dt),
connect_time => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ConnectTime::get_connect_time($dt),
file_sequence_number => 1,
)
);
my @records = ();
push(@records,NGCP::BulkProcessor::Projects::Export::Ama::Format::Record->new(
NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure0510->new(
call_type_code => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallTypeCode::STATION_PAID,
call_type => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::CallType::STATION_PAID,
rewritten => 0,
sensor_id => '008708', # Graz
@ -36,7 +56,7 @@ my $test = NGCP::BulkProcessor::Projects::Export::Ama::Format::Record->new(
date => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date::get_ama_date($dt),
service_feature_code => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ServiceFeature::OTHER,
service_feature => $NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ServiceFeature::OTHER,
originating_significant_digits => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SignificantDigitsNextField::get_number_length($source),
originating_open_digits_1 => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::SignificantDigitsNextField::get_number_digits_1($source),
@ -51,6 +71,25 @@ my $test = NGCP::BulkProcessor::Projects::Export::Ama::Format::Record->new(
connect_time => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ConnectTime::get_connect_time($dt),
elapsed_time => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ElapsedTime::get_elapsed_time($duration),
)
));
my $transfer_out = NGCP::BulkProcessor::Projects::Export::Ama::Format::Record->new(
NGCP::BulkProcessor::Projects::Export::Ama::Format::Structures::Structure9014->new(
rewritten => 0,
sensor_id => '008708', # Graz
padding => 0,
recording_office_id => '008708',
date => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::Date::get_ama_date($dt),
connect_time => NGCP::BulkProcessor::Projects::Export::Ama::Format::Fields::ConnectTime::get_connect_time($dt),
file_sequence_number => 1,
=> (scalar @records),
)
);
print $test->{structure}->to_string()."\n";
@ -64,5 +103,3 @@ if (open(my $fh,">:raw",'test.ama')) {
} else {
#fileerror("failed to open $self->{crt_path}: $!",getlogger(__PACKAGE__));
}

Loading…
Cancel
Save