# --
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --
package Kernel::GenericInterface::Mapping;
use strict;
use warnings;
use Kernel::System::VariableCheck qw(IsHashRefWithData IsStringWithData);
# prevent 'Used once' warning for Kernel::OM
use Kernel::System::ObjectManager;
our $ObjectManagerDisabled = 1;
=head1 NAME
Kernel::GenericInterface::Mapping - GenericInterface data mapping interface
=head1 PUBLIC INTERFACE
=head2 new()
create an object.
use Kernel::GenericInterface::Debugger;
use Kernel::GenericInterface::Mapping;
my $DebuggerObject = Kernel::GenericInterface::Debugger->new(
DebuggerConfig => {
DebugThreshold => 'debug',
TestMode => 0, # optional, in testing mode the data will not be written to the DB
# ...
},
WebserviceID => 12,
CommunicationType => Requester, # Requester or Provider
RemoteIP => 192.168.1.1, # optional
);
my $MappingObject = Kernel::GenericInterface::Mapping->new(
DebuggerObject => $DebuggerObject,
Invoker => 'TicketLock', # the name of the invoker in the web service
InvokerType => 'Nagios::TicketLock', # the Invoker backend to use
Operation => 'TicketCreate', # the name of the operation in the web service
OperationType => 'Ticket::TicketCreate', # the local operation backend to use
MappingConfig => {
Type => 'MappingSimple',
Config => {
# ...
},
},
);
=cut
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
# check needed params
for my $Needed (qw(DebuggerObject MappingConfig)) {
if ( !$Param{$Needed} ) {
return {
Success => 0,
ErrorMessage => "Got no $Needed!"
};
}
$Self->{$Needed} = $Param{$Needed};
}
# add optional params
OPTIONAL:
for my $Optional (qw(Invoker InvokerType Operation OperationType)) {
next OPTIONAL if !$Param{$Optional};
$Self->{$Optional} = $Param{$Optional};
}
# check config - we need at least a config type
if ( !IsHashRefWithData( $Param{MappingConfig} ) ) {
return $Self->{DebuggerObject}->Error(
Summary => 'Got no MappingConfig as hash ref with content!',
);
}
if ( !IsStringWithData( $Param{MappingConfig}->{Type} ) ) {
return $Self->{DebuggerObject}->Error(
Summary => 'Got no MappingConfig with Type as string with value!',
);
}
# check config - if we have a map config, it has to be a non-empty hash ref
if (
defined $Param{MappingConfig}->{Config}
&& !IsHashRefWithData( $Param{MappingConfig}->{Config} )
)
{
return $Self->{DebuggerObject}->Error(
Summary => 'Got MappingConfig with Data, but Data is no hash ref with content!',
);
}
# load backend module
my $GenericModule = 'Kernel::GenericInterface::Mapping::' . $Param{MappingConfig}->{Type};
if ( !$Kernel::OM->Get('Kernel::System::Main')->Require($GenericModule) ) {
return $Self->{DebuggerObject}->Error( Summary => "Can't load mapping backend module!" );
}
$Self->{BackendObject} = $GenericModule->new( %{$Self} );
# pass back error message from backend if backend module could not be executed
return $Self->{BackendObject} if ref $Self->{BackendObject} ne $GenericModule;
return $Self;
}
=head2 Map()
perform data mapping in backend
my $Result = $MappingObject->Map(
Data => { # data payload before mapping
...
},
);
$Result = {
Success => 1, # 0 or 1
ErrorMessage => '', # in case of error
Data => { # data payload of after mapping
...
},
};
=cut
sub Map {
my ( $Self, %Param ) = @_;
# check data - only accept undef or hash ref
if ( defined $Param{Data} && ref $Param{Data} ne 'HASH' ) {
return $Self->{DebuggerObject}->Error(
Summary => 'Got Data but it is not a hash ref in Mapping handler!'
);
}
# return if data is empty
if ( !defined $Param{Data} || !%{ $Param{Data} } ) {
return {
Success => 1,
Data => {},
};
}
# start map on backend
return $Self->{BackendObject}->Map(%Param);
}
1;
=head1 TERMS AND CONDITIONS
This software is part of the OTRS project (L).
This software comes with ABSOLUTELY NO WARRANTY. For details, see
the enclosed file COPYING for license information (GPL). If you
did not receive this file, see L.
=cut