# -- # 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::Test; use strict; use warnings; use Kernel::System::VariableCheck qw(IsHashRefWithData IsStringWithData); our $ObjectManagerDisabled = 1; =head1 NAME Kernel::GenericInterface::Mapping::Test - GenericInterface test data mapping backend =head1 PUBLIC INTERFACE =head2 new() usually, you want to create an instance of this by using Kernel::GenericInterface::Mapping->new(); =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}; } # check mapping config if ( !IsHashRefWithData( $Param{MappingConfig} ) ) { return $Self->{DebuggerObject}->Error( Summary => 'Got no MappingConfig as hash ref with content!', ); } # 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!', ); } return $Self; } =head2 Map() perform data mapping possible config options for value mapping are - 'ToUpper', turns all characters into upper case - 'ToLower', turns all characters into lower case - 'Empty', sets to empty string if no config option is provided or one that does not match the options above, the original data will be returned 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 Test backend!' ); } # return if data is empty if ( !defined $Param{Data} || !%{ $Param{Data} } ) { return { Success => 1, Data => {}, }; } # no config means that we just return input data if ( !defined $Self->{MappingConfig}->{Config} || !defined $Self->{MappingConfig}->{Config}->{TestOption} ) { return { Success => 1, Data => $Param{Data}, }; } # check TestOption format if ( !IsStringWithData( $Self->{MappingConfig}->{Config}->{TestOption} ) ) { return $Self->{DebuggerObject}->Error( Summary => 'Got no TestOption as string with value!', ); } # parse data according to configuration my $ReturnData = {}; if ( $Self->{MappingConfig}->{Config}->{TestOption} eq 'ToUpper' ) { $ReturnData = $Self->_ToUpper( Data => $Param{Data} ); } elsif ( $Self->{MappingConfig}->{Config}->{TestOption} eq 'ToLower' ) { $ReturnData = $Self->_ToLower( Data => $Param{Data} ); } elsif ( $Self->{MappingConfig}->{Config}->{TestOption} eq 'Empty' ) { $ReturnData = $Self->_Empty( Data => $Param{Data} ); } else { $ReturnData = $Param{Data}; } # return result return { Success => 1, Data => $ReturnData, }; } =begin Internal: =head2 _ToUpper() change all characters in values to upper case my $ReturnData => $MappingObject->_ToUpper( Data => { # data payload before mapping 'abc' => 'Def, 'ghi' => 'jkl', }, ); $ReturnData = { # data payload after mapping 'abc' => 'DEF', 'ghi' => 'JKL', }; =cut sub _ToUpper { my ( $Self, %Param ) = @_; my $ReturnData = {}; for my $Key ( sort keys %{ $Param{Data} } ) { $ReturnData->{$Key} = uc $Param{Data}->{$Key}; } return $ReturnData; } =head2 _ToLower() change all characters in values to lower case my $ReturnData => $MappingObject->_ToLower( Data => { # data payload before mapping 'abc' => 'Def, 'ghi' => 'JKL', }, ); $ReturnData = { # data payload after mapping 'abc' => 'def', 'ghi' => 'jkl', }; =cut sub _ToLower { my ( $Self, %Param ) = @_; my $ReturnData = {}; for my $Key ( sort keys %{ $Param{Data} } ) { $ReturnData->{$Key} = lc $Param{Data}->{$Key}; } return $ReturnData; } =head2 _Empty() set all values to empty string my $ReturnData => $MappingObject->_Empty( Data => { # data payload before mapping 'abc' => 'Def, 'ghi' => 'JKL', }, ); $ReturnData = { # data payload after mapping 'abc' => '', 'ghi' => '', }; =cut sub _Empty { my ( $Self, %Param ) = @_; my $ReturnData = {}; for my $Key ( sort keys %{ $Param{Data} } ) { $ReturnData->{$Key} = ''; } return $ReturnData; } 1; =end Internal: =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