Translation for INTF in AFF (#6774)

Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Albert Mink 2024-02-21 10:50:48 +01:00 committed by GitHub
parent 5eec8f264e
commit a7f9ceedea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 644 additions and 26 deletions

View File

@ -0,0 +1,39 @@
CLASS zcl_abapgit_json_path DEFINITION PUBLIC CREATE PUBLIC.
PUBLIC SECTION.
METHODS: serialize
IMPORTING iv_json TYPE string
RETURNING VALUE(rt_result) TYPE string_table
RAISING zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_json_path IMPLEMENTATION.
METHOD serialize.
DATA: lo_json_path TYPE REF TO lcl_json_path,
lv_json_xstring TYPE xstring,
lt_root_path TYPE string_table,
lo_reader TYPE REF TO if_sxml_reader,
lx_parse_error TYPE REF TO cx_sxml_parse_error.
lv_json_xstring = zcl_abapgit_convert=>string_to_xstring_utf8( iv_json ).
lo_reader = cl_sxml_string_reader=>create( input = lv_json_xstring ).
TRY.
IF lo_reader->read_next_node( ) IS INITIAL.
RETURN.
ENDIF.
CATCH cx_sxml_parse_error INTO lx_parse_error.
zcx_abapgit_exception=>raise_with_text( lx_parse_error ).
ENDTRY.
APPEND `$` TO lt_root_path.
CREATE OBJECT lo_json_path.
lo_json_path->serialize_rec( EXPORTING io_reader = lo_reader
it_path = lt_root_path
CHANGING ct_json_paths = rt_result ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,182 @@
*"* use this source file for the definition and implementation of
*"* local helper classes, interface definitions and type
*"* declarations
CLASS lcl_json_path DEFINITION CREATE PUBLIC.
PUBLIC SECTION.
METHODS:
serialize_rec
IMPORTING io_reader TYPE REF TO if_sxml_reader
it_path TYPE string_table
CHANGING ct_json_paths TYPE string_table.
PROTECTED SECTION.
PRIVATE SECTION.
METHODS:
is_array
IMPORTING io_reader TYPE REF TO if_sxml_reader
RETURNING VALUE(rv_result) TYPE abap_bool.
METHODS:
is_string_open
IMPORTING io_reader TYPE REF TO if_sxml_reader
RETURNING VALUE(rv_result) TYPE abap_bool.
METHODS:
is_object
IMPORTING io_reader TYPE REF TO if_sxml_reader
RETURNING VALUE(rv_result) TYPE abap_bool.
METHODS:
serialize_rec_array
IMPORTING io_reader TYPE REF TO if_sxml_reader
it_path TYPE string_table
CHANGING ct_json_paths TYPE string_table.
METHODS:
get_json_path
IMPORTING it_path TYPE string_table
RETURNING VALUE(rv_result) TYPE string.
ENDCLASS.
CLASS lcl_json_path IMPLEMENTATION.
METHOD is_array.
rv_result = boolc( io_reader->name = 'array' ).
ENDMETHOD.
METHOD is_string_open.
rv_result = boolc( io_reader->name = 'str' AND io_reader->node_type = if_sxml_node=>co_nt_element_open ).
ENDMETHOD.
METHOD is_object.
rv_result = boolc( io_reader->name = 'object' ).
ENDMETHOD.
METHOD serialize_rec.
DATA: lt_new_path TYPE string_table,
lv_key TYPE string.
lt_new_path = it_path.
IF io_reader->read_next_node( ) IS INITIAL.
RETURN.
ENDIF.
IF is_string_open( io_reader ) = abap_true.
APPEND io_reader->value TO lt_new_path.
lv_key = get_json_path( lt_new_path ).
io_reader->read_next_node( ).
lv_key = |{ lv_key }={ io_reader->value }|.
APPEND lv_key TO ct_json_paths.
io_reader->read_next_node( ).
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_object( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
APPEND io_reader->value TO lt_new_path.
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_array( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
APPEND io_reader->value TO lt_new_path.
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF ( is_object( io_reader ) = abap_true OR is_array( io_reader ) = abap_true )
AND io_reader->node_type = if_sxml_node=>co_nt_element_close.
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ENDIF.
ENDMETHOD.
METHOD serialize_rec_array.
DATA: lt_new_path TYPE string_table,
lv_json_path TYPE string,
lv_array_key TYPE string.
lt_new_path = it_path.
IF io_reader->read_next_node( ) IS INITIAL.
RETURN.
ENDIF.
IF is_string_open( io_reader ) = abap_true.
APPEND io_reader->value TO lt_new_path.
lv_json_path = get_json_path( lt_new_path ).
io_reader->read_next_node( ).
lv_json_path = |{ lv_json_path }={ io_reader->value }|.
APPEND lv_json_path TO ct_json_paths.
io_reader->read_next_node( ).
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_object( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
io_reader->read_next_node( ).
lv_array_key = io_reader->value.
io_reader->read_next_node( ).
lv_array_key = |[?(@.{ lv_array_key }=='{ io_reader->value }')]|.
APPEND lv_array_key TO lt_new_path.
io_reader->read_next_node( ).
io_reader->read_next_node( ).
APPEND io_reader->value TO lt_new_path.
lv_json_path = get_json_path( lt_new_path ).
io_reader->read_next_node( ).
lv_json_path = |{ lv_json_path }={ io_reader->value }|.
APPEND lv_json_path TO ct_json_paths.
io_reader->read_next_node( ).
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_array( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
APPEND io_reader->value TO lt_new_path.
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF ( is_object( io_reader ) = abap_true OR is_array( io_reader ) = abap_true )
AND io_reader->node_type = if_sxml_node=>co_nt_element_close.
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ENDIF.
ENDMETHOD.
METHOD get_json_path.
rv_result = concat_lines_of( table = it_path
sep = `.` ).
REPLACE ALL OCCURRENCES OF `.[` IN rv_result WITH `[`.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,142 @@
CLASS ltcl_json_path DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA: mt_act TYPE string_table,
mt_exp TYPE string_table,
ms_data TYPE zif_abapgit_aff_intf_v1=>ty_main.
METHODS:
flat_structure FOR TESTING RAISING cx_static_check,
array FOR TESTING RAISING cx_static_check,
array_nested FOR TESTING RAISING cx_static_check.
METHODS:
serialize
IMPORTING is_data TYPE zif_abapgit_aff_intf_v1=>ty_main
RETURNING VALUE(rt_result) TYPE string_table
RAISING zcx_abapgit_ajson_error
zcx_abapgit_exception.
ENDCLASS.
CLASS ltcl_json_path IMPLEMENTATION.
METHOD serialize.
DATA:
lo_ajson TYPE REF TO zif_abapgit_ajson,
lo_cut TYPE REF TO zcl_abapgit_json_path.
lo_ajson = zcl_abapgit_ajson=>new( iv_keep_item_order = abap_true
)->set( iv_path = '/'
iv_val = is_data
)->map( zcl_abapgit_ajson_mapping=>create_to_camel_case( )
)->filter( zcl_abapgit_ajson_filter_lib=>create_empty_filter( ) ).
lo_ajson->delete( '/category/' ).
lo_ajson->delete( '/proxy/' ).
CREATE OBJECT lo_cut.
rt_result = lo_cut->serialize( lo_ajson->stringify( ) ).
ENDMETHOD.
METHOD flat_structure.
DATA lv_header_descr TYPE string.
lv_header_descr = `$.header.description=Text`.
ms_data-header-description = 'Text'.
mt_act = serialize( ms_data ).
APPEND lv_header_descr TO mt_exp.
cl_abap_unit_assert=>assert_equals( exp = mt_exp
act = mt_act ).
ENDMETHOD.
METHOD array.
DATA lv_header_descr TYPE string.
DATA lv_descr_meth_1 TYPE string.
DATA lv_descr_meth_2 TYPE string.
DATA ls_meth_desc TYPE zif_abapgit_aff_oo_types_v1=>ty_method.
lv_header_descr = `$.header.description=Text`.
lv_descr_meth_1 = `$.descriptions.methods[?(@.name=='METH1')].description=Sonne`.
lv_descr_meth_2 = `$.descriptions.methods[?(@.name=='METH2')].description=Mond`.
APPEND lv_header_descr TO mt_exp.
APPEND lv_descr_meth_1 TO mt_exp.
APPEND lv_descr_meth_2 TO mt_exp.
ms_data-header-description = 'Text'.
ls_meth_desc-name = `METH1`.
ls_meth_desc-description = `Sonne`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
CLEAR ls_meth_desc.
ls_meth_desc-name = `METH2`.
ls_meth_desc-description = `Mond`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
mt_act = serialize( ms_data ).
cl_abap_unit_assert=>assert_equals( exp = mt_exp
act = mt_act ).
ENDMETHOD.
METHOD array_nested.
DATA lv_header_descr TYPE string.
DATA lv_descr_meth_1 TYPE string.
DATA lv_descr_meth_1_param_1 TYPE string.
DATA lv_descr_meth_1_param_2 TYPE string.
DATA lv_descr_meth_2 TYPE string.
DATA ls_meth_desc TYPE zif_abapgit_aff_oo_types_v1=>ty_method.
DATA ls_meth_param TYPE zif_abapgit_aff_oo_types_v1=>ty_component_description.
lv_header_descr = `$.header.description=Text`.
lv_descr_meth_1 = `$.descriptions.methods[?(@.name=='METH1')].description=Sonne`.
lv_descr_meth_1_param_1 =
`$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param1')].description=Parameter A`.
lv_descr_meth_1_param_2 =
`$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param2')].description=Parameter B`.
lv_descr_meth_2 = `$.descriptions.methods[?(@.name=='METH2')].description=Mond`.
APPEND lv_header_descr TO mt_exp.
APPEND lv_descr_meth_1 TO mt_exp.
APPEND lv_descr_meth_1_param_1 TO mt_exp.
APPEND lv_descr_meth_1_param_2 TO mt_exp.
APPEND lv_descr_meth_2 TO mt_exp.
ls_meth_param-name = 'param1'.
ls_meth_param-description = 'Parameter A'.
APPEND ls_meth_param TO ls_meth_desc-parameters.
ls_meth_param-name = 'param2'.
ls_meth_param-description = 'Parameter B'.
APPEND ls_meth_param TO ls_meth_desc-parameters.
ls_meth_desc-name = `METH1`.
ls_meth_desc-description = `Sonne`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
CLEAR ls_meth_desc.
ls_meth_desc-name = `METH2`.
ls_meth_desc-description = `Mond`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
ms_data-header-description = 'Text'.
mt_act = serialize( ms_data ).
cl_abap_unit_assert=>assert_equals( exp = mt_exp
act = mt_act ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_JSON_PATH</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - de-/serializes JSON string to JSON paths</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,70 @@
CLASS zcl_abapgit_properties_file DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_i18n_file.
CONSTANTS:
c_properties_feature TYPE string VALUE 'TRANSL'.
METHODS constructor
IMPORTING iv_lang TYPE laiso.
METHODS push_text_pairs
IMPORTING it_translation TYPE string_table.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_lang TYPE laiso.
DATA mt_translation TYPE string_table.
ENDCLASS.
CLASS zcl_abapgit_properties_file IMPLEMENTATION.
METHOD constructor.
mv_lang = to_lower( iv_lang ).
ENDMETHOD.
METHOD push_text_pairs.
mt_translation = it_translation.
ENDMETHOD.
METHOD zif_abapgit_i18n_file~ext.
rv_ext = 'properties'.
ENDMETHOD.
METHOD zif_abapgit_i18n_file~lang.
rv_lang = mv_lang.
ENDMETHOD.
METHOD zif_abapgit_i18n_file~render.
DATA: lv_translation TYPE string,
lo_buf TYPE REF TO zcl_abapgit_string_buffer,
lv_str TYPE string.
lv_translation = concat_lines_of( table = mt_translation
sep = cl_abap_char_utilities=>newline ).
CREATE OBJECT lo_buf.
lo_buf->add( lv_translation ).
lv_str = lo_buf->join_w_newline_and_flush( ) && cl_abap_char_utilities=>newline.
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8_bom( lv_str ).
ENDMETHOD.
METHOD zif_abapgit_i18n_file~translate.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_PROPERTIES_FILE</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Properties file serializer</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -270,9 +270,9 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
ls_intf_aff = lcl_aff_metadata_handler=>deserialize( lv_json_data ).
CREATE OBJECT lo_aff_mapper TYPE lcl_aff_type_mapping.
lo_aff_mapper->to_abapgit( EXPORTING iv_data = ls_intf_aff
lo_aff_mapper->to_abapgit( EXPORTING iv_data = ls_intf_aff
iv_object_name = ms_item-obj_name
IMPORTING es_data = rs_intf ).
IMPORTING es_data = rs_intf ).
ENDMETHOD.
@ -392,7 +392,9 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
ls_intf TYPE ty_intf,
ls_clskey TYPE seoclskey,
lv_serialized_data TYPE xstring,
lt_langu_additional TYPE zif_abapgit_lang_definitions=>ty_langus.
lt_langu_additional TYPE zif_abapgit_lang_definitions=>ty_langus,
lt_i18n_file TYPE zif_abapgit_i18n_file=>ty_table_of,
lo_i18n_file TYPE REF TO zif_abapgit_i18n_file.
ls_clskey-clsname = ms_item-obj_name.
@ -422,7 +424,13 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
lv_serialized_data = lcl_aff_metadata_handler=>serialize( ls_intf ).
mo_files->add_raw( iv_ext = 'json'
iv_data = lv_serialized_data ).
lt_i18n_file = lcl_aff_metadata_handler=>serialize_translations(
is_intf = ls_intf
it_language = mo_i18n_params->ms_params-translation_languages ).
LOOP AT lt_i18n_file INTO lo_i18n_file.
mo_files->add_i18n_file( lo_i18n_file ).
ENDLOOP.
ELSE.
io_xml->add( iv_name = 'VSEOINTERF'
ig_data = ls_intf-vseointerf ).

View File

@ -102,9 +102,9 @@ CLASS lcl_aff_helper IMPLEMENTATION.
rs_properties-attributes = get_attributes( lt_components ).
rs_properties-methods = get_methods( is_components = lt_components
rs_properties-methods = get_methods( is_components = lt_components
is_sub_components = lt_sub_components ).
rs_properties-events = get_events( is_components = lt_components
rs_properties-events = get_events( is_components = lt_components
is_sub_components = lt_sub_components ).
rs_properties-types = get_types( lt_components ).
ENDMETHOD.
@ -133,7 +133,7 @@ CLASS lcl_aff_helper IMPLEMENTATION.
ON component~cmpname = component_text~cmpname AND component~clsname = component_text~clsname
AND component_text~langu = iv_language
WHERE component~clsname = iv_clif_name
ORDER BY component~cmpname. "#EC CI_BUFFJOIN
ORDER BY component~cmpname. "#EC CI_BUFFJOIN
SELECT sub_component~cmpname sub_component~sconame sub_component_text~descript sub_component~scotype
INTO TABLE lt_sub_components
@ -152,9 +152,9 @@ CLASS lcl_aff_helper IMPLEMENTATION.
ENDLOOP.
rs_properties-attributes = get_attributes( lt_components_exp ).
rs_properties-methods = get_methods( is_components = lt_components_exp
rs_properties-methods = get_methods( is_components = lt_components_exp
is_sub_components = lt_sub_components ).
rs_properties-events = get_events( is_components = lt_components_exp
rs_properties-events = get_events( is_components = lt_components_exp
is_sub_components = lt_sub_components ).
rs_properties-types = get_types( lt_components_exp ).
@ -339,17 +339,17 @@ CLASS lcl_aff_helper IMPLEMENTATION.
METHOD set_descriptions_compo_subco.
set_attributes( is_properties = is_properties
iv_clif_name = iv_clif_name
iv_language = iv_language ).
iv_clif_name = iv_clif_name
iv_language = iv_language ).
set_methods( is_properties = is_properties
iv_clif_name = iv_clif_name
iv_language = iv_language ).
iv_clif_name = iv_clif_name
iv_language = iv_language ).
set_events( is_properties = is_properties
iv_clif_name = iv_clif_name
iv_language = iv_language ).
iv_clif_name = iv_clif_name
iv_language = iv_language ).
set_types( is_properties = is_properties
iv_clif_name = iv_clif_name
iv_language = iv_language ).
iv_clif_name = iv_clif_name
iv_language = iv_language ).
ENDMETHOD.
ENDCLASS.
@ -387,8 +387,8 @@ CLASS lcl_aff_type_mapping IMPLEMENTATION.
" get descriptions
ls_data_aff-descriptions = lcl_aff_helper=>get_descriptions_compo_subco(
iv_language = ls_data_aff-header-original_language
iv_clif_name = ls_data_abapgit-vseointerf-clsname ).
iv_language = ls_data_aff-header-original_language
iv_clif_name = ls_data_abapgit-vseointerf-clsname ).
es_data = ls_data_aff.
ENDMETHOD.
@ -502,6 +502,11 @@ CLASS lcl_aff_metadata_handler DEFINITION.
IMPORTING is_intf TYPE zcl_abapgit_object_intf=>ty_intf
RETURNING VALUE(rv_result) TYPE xstring
RAISING zcx_abapgit_exception.
CLASS-METHODS serialize_translations
IMPORTING is_intf TYPE zcl_abapgit_object_intf=>ty_intf
it_language TYPE zif_abapgit_definitions=>ty_languages
RETURNING VALUE(rt_result) TYPE zif_abapgit_i18n_file=>ty_table_of
RAISING zcx_abapgit_exception.
CLASS-METHODS deserialize
IMPORTING iv_data TYPE xstring
RETURNING VALUE(rv_result) TYPE zif_abapgit_aff_intf_v1=>ty_main
@ -515,7 +520,11 @@ CLASS lcl_aff_metadata_handler DEFINITION.
"! For serialization
"! @parameter rt_result | Paths that will not be serialized (depending on value)
get_paths_to_skip
RETURNING VALUE(rt_result) TYPE zcl_abapgit_json_handler=>ty_skip_paths.
RETURNING VALUE(rt_result) TYPE zcl_abapgit_json_handler=>ty_skip_paths,
fill_translation
IMPORTING iv_name TYPE seoclsname
iv_language TYPE laiso
RETURNING VALUE(rt_result) TYPE zif_abapgit_aff_intf_v1=>ty_main.
ENDCLASS.
CLASS lcl_aff_metadata_handler IMPLEMENTATION.
@ -609,16 +618,77 @@ CLASS lcl_aff_metadata_handler IMPLEMENTATION.
CREATE OBJECT lo_ajson.
TRY.
lo_ajson->deserialize(
EXPORTING
iv_content = iv_data
iv_defaults = lt_values_for_initial
iv_enum_mappings = lt_enum_mappings
IMPORTING
ev_data = rv_result ).
EXPORTING
iv_content = iv_data
iv_defaults = lt_values_for_initial
iv_enum_mappings = lt_enum_mappings
IMPORTING
ev_data = rv_result ).
CATCH cx_static_check INTO lx_exception.
zcx_abapgit_exception=>raise_with_text( lx_exception ).
ENDTRY.
ENDMETHOD.
METHOD serialize_translations.
DATA: ls_data TYPE zif_abapgit_aff_intf_v1=>ty_main,
lv_langu TYPE laiso,
lv_json TYPE string,
lo_ajson TYPE REF TO zif_abapgit_ajson,
lo_json_path TYPE REF TO zcl_abapgit_json_path,
lt_translation TYPE string_table,
lx_exception TYPE REF TO zcx_abapgit_ajson_error,
lo_trans_file TYPE REF TO zcl_abapgit_properties_file.
LOOP AT it_language INTO lv_langu.
ls_data = fill_translation( iv_name = is_intf-vseointerf-clsname
iv_language = lv_langu ).
" convert AFF type to JSON
TRY.
lo_ajson = zcl_abapgit_ajson=>new( iv_keep_item_order = abap_true
)->set( iv_path = '/'
iv_val = ls_data
)->map( zcl_abapgit_ajson_mapping=>create_to_camel_case( )
)->filter( zcl_abapgit_ajson_filter_lib=>create_empty_filter( ) ).
" remove manually the non-primitive types that are initial or not relevant for translation
lo_ajson->delete( '/category/' ).
lo_ajson->delete( '/proxy/' ).
lv_json = lo_ajson->stringify( ).
CATCH zcx_abapgit_ajson_error INTO lx_exception.
zcx_abapgit_exception=>raise_with_text( lx_exception ).
ENDTRY.
CREATE OBJECT lo_json_path.
lt_translation = lo_json_path->serialize( lv_json ).
CREATE OBJECT lo_trans_file
EXPORTING iv_lang = lv_langu.
lo_trans_file->push_text_pairs( lt_translation ).
APPEND lo_trans_file TO rt_result.
ENDLOOP.
ENDMETHOD.
METHOD fill_translation.
DATA: lv_langu_sap1 TYPE sy-langu.
lv_langu_sap1 = zcl_abapgit_convert=>language_sap2_to_sap1( iv_language ).
rt_result-descriptions = lcl_aff_helper=>get_descriptions_compo_subco(
iv_clif_name = iv_name
iv_language = lv_langu_sap1 ).
SELECT SINGLE descript FROM seoclasstx INTO rt_result-header-description
WHERE clsname = iv_name AND
langu = lv_langu_sap1.
ENDMETHOD.
ENDCLASS.

View File

@ -55,6 +55,36 @@ CLASS ltcl_object_types IMPLEMENTATION.
ENDCLASS.
CLASS lcl_settings_with_features DEFINITION.
PUBLIC SECTION.
INTERFACES zif_abapgit_persist_settings.
METHODS: constructor
IMPORTING iv_features TYPE string.
PRIVATE SECTION.
DATA mv_features TYPE string.
ENDCLASS.
CLASS lcl_settings_with_features IMPLEMENTATION.
METHOD zif_abapgit_persist_settings~modify.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_persist_settings~read.
CREATE OBJECT ro_settings.
ro_settings->set_experimental_features( mv_features ).
ENDMETHOD.
METHOD constructor.
mv_features = iv_features.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------------*
* CLASS ltcl_serialize DEFINITION
*----------------------------------------------------------------------*
@ -80,7 +110,8 @@ CLASS ltcl_serialize DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT F
serialize_msag FOR TESTING RAISING zcx_abapgit_exception,
serialize_prog FOR TESTING RAISING zcx_abapgit_exception,
serialize_tran FOR TESTING RAISING zcx_abapgit_exception,
serialize_ttyp FOR TESTING RAISING zcx_abapgit_exception.
serialize_ttyp FOR TESTING RAISING zcx_abapgit_exception,
serialize_intf_aff_translate FOR TESTING RAISING cx_static_check.
ENDCLASS.
@ -162,6 +193,48 @@ CLASS ltcl_serialize IMPLEMENTATION.
ENDMETHOD.
METHOD serialize_intf_aff_translate.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item,
lo_settings TYPE REF TO lcl_settings_with_features,
ls_act TYPE zif_abapgit_objects=>ty_serialization,
ls_translation_de TYPE zif_abapgit_git_definitions=>ty_file,
lt_target_langu TYPE zif_abapgit_definitions=>ty_languages,
lo_i18n_params TYPE REF TO zcl_abapgit_i18n_params,
lv_features TYPE string,
lv_filename TYPE string.
ls_item-obj_type = 'INTF'.
ls_item-obj_name = 'IF_BADI_TADIR_CHANGED'.
lv_features = |{ zcl_abapgit_aff_registry=>c_aff_feature }, { zcl_abapgit_properties_file=>c_properties_feature }|.
CREATE OBJECT lo_settings
EXPORTING
iv_features = lv_features.
zcl_abapgit_persist_injector=>set_settings( lo_settings ).
APPEND `DE` TO lt_target_langu.
lo_i18n_params = zcl_abapgit_i18n_params=>new( iv_main_language = zif_abapgit_definitions=>c_english
it_translation_langs = lt_target_langu
iv_use_lxe = abap_true ).
ls_act = zcl_abapgit_objects=>serialize(
is_item = ls_item
io_i18n_params = lo_i18n_params ).
cl_abap_unit_assert=>assert_not_initial( ls_act-files ).
cl_abap_unit_assert=>assert_equals( act = ls_act-item
exp = ls_item ).
lv_filename = 'if_badi_tadir_changed.intf.i18n.de.properties'.
READ TABLE ls_act-files WITH KEY filename = lv_filename INTO ls_translation_de.
cl_abap_unit_assert=>assert_not_initial( ls_translation_de ).
ENDMETHOD.
METHOD serialize_doma.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.

View File

@ -174,6 +174,7 @@
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_serialize", "method": "serialize_prog", "note": "no such table: seometarel"},
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_serialize", "method": "serialize_tran", "note": "no such table: seometarel"},
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_serialize", "method": "serialize_ttyp", "note": "no such table: seometarel"},
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_serialize", "method": "serialize_intf_aff_translate", "note": "Void type: SEOCLASSDF"},
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_check_objects_locked", "method": "throw_excp_if_object_is_locked", "note": "no such table: seometarel"},
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_check_objects_locked", "method": "no_excp_if_obj_is_not_locked", "note": "no such table: seometarel"},