Refactor: Translations for AFF (#6904)

This commit is contained in:
Marc Bernard 2024-04-08 15:12:16 +02:00 committed by GitHub
parent 3acb94ef05
commit 993466a1c9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 75 additions and 136 deletions

View File

@ -51,7 +51,7 @@ CLASS zcl_abapgit_json_handler DEFINITION
"! @parameter ev_data | data of the xstring
METHODS deserialize
IMPORTING
!iv_content TYPE xstring
!iv_content TYPE string
!iv_defaults TYPE ty_skip_paths OPTIONAL
!iv_enum_mappings TYPE ty_enum_mappings OPTIONAL
EXPORTING
@ -99,14 +99,11 @@ CLASS zcl_abapgit_json_handler IMPLEMENTATION.
METHOD deserialize.
DATA lv_json TYPE string.
DATA lo_ajson TYPE REF TO zif_abapgit_ajson.
DATA lo_ajson TYPE REF TO zif_abapgit_ajson.
CLEAR ev_data.
lv_json = zcl_abapgit_convert=>xstring_to_string_utf8( iv_content ).
lo_ajson = zcl_abapgit_ajson=>parse( lv_json
lo_ajson = zcl_abapgit_ajson=>parse( iv_content
)->map( zcl_abapgit_ajson_mapping=>create_to_snake_case( ) ).
map2abap_original_language( CHANGING co_ajson = lo_ajson ).

View File

@ -6,14 +6,24 @@ CLASS zcl_abapgit_json_path DEFINITION PUBLIC CREATE PUBLIC.
RAISING zcx_abapgit_exception.
METHODS: deserialize
IMPORTING it_json_path TYPE string_table
RETURNING VALUE(rv_result) TYPE xstring
RETURNING VALUE(rv_result) TYPE string
RAISING zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_json_path IMPLEMENTATION.
METHOD deserialize.
rv_result = lcl_json_path=>deserialize( it_json_path ).
ENDMETHOD.
METHOD serialize.
DATA: lo_json_path TYPE REF TO lcl_json_path,
lv_json_xstring TYPE xstring,
@ -39,11 +49,4 @@ CLASS zcl_abapgit_json_path IMPLEMENTATION.
it_path = lt_root_path
CHANGING ct_json_paths = rt_result ).
ENDMETHOD.
METHOD deserialize.
rv_result = lcl_json_path=>deserialize( it_json_path ).
ENDMETHOD.
ENDCLASS.

View File

@ -13,7 +13,7 @@ CLASS lcl_json_path DEFINITION CREATE PUBLIC.
CLASS-METHODS: deserialize
IMPORTING it_json_path TYPE string_table
RETURNING VALUE(rv_result) TYPE xstring
RETURNING VALUE(rv_result) TYPE string
RAISING zcx_abapgit_exception.
PROTECTED SECTION.
@ -343,8 +343,7 @@ CLASS lcl_json_path IMPLEMENTATION.
DATA: lo_merged TYPE REF TO zif_abapgit_ajson,
lv_json_path TYPE string,
lo_deserialization_result TYPE REF TO zif_abapgit_ajson,
lx_ajson TYPE REF TO zcx_abapgit_ajson_error,
lv_result_as_string TYPE string.
lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
TRY.
lo_merged = zcl_abapgit_ajson=>parse( `` ).
@ -374,8 +373,7 @@ CLASS lcl_json_path IMPLEMENTATION.
ENDLOOP.
TRY.
lv_result_as_string = lo_merged->stringify( 2 ).
rv_result = zcl_abapgit_convert=>string_to_xstring( lv_result_as_string ).
rv_result = lo_merged->stringify( 2 ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
ENDTRY.

View File

@ -145,7 +145,6 @@ CLASS ltcl_json_path IMPLEMENTATION.
METHOD deserialize_nested_arrays.
DATA: lt_file TYPE string_table,
lo_cut TYPE REF TO zcl_abapgit_json_path,
lv_xact TYPE xstring,
lv_act TYPE string,
lv_exp TYPE string,
lt_exp TYPE string_table,
@ -156,7 +155,7 @@ CLASS ltcl_json_path IMPLEMENTATION.
APPEND `$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param2')].description=ABC` TO lt_file.
CREATE OBJECT lo_cut.
lv_xact = lo_cut->deserialize( lt_file ).
lv_act = lo_cut->deserialize( lt_file ).
APPEND `{ "header": { "description": "Text" } ,` TO lt_exp.
APPEND `"descriptions": {` TO lt_exp.
@ -170,8 +169,6 @@ CLASS ltcl_json_path IMPLEMENTATION.
lv_exp = concat_lines_of( table = lt_exp
sep = cl_abap_char_utilities=>newline ).
lv_act = zcl_abapgit_convert=>xstring_to_string_utf8( lv_xact ).
lv_is_equal = zcl_abapgit_ajson_utilities=>new( )->is_equal( iv_json_a = lv_act
iv_json_b = lv_exp ).
@ -183,16 +180,13 @@ CLASS ltcl_json_path IMPLEMENTATION.
METHOD deserialize_simple.
DATA: lt_file TYPE string_table,
lo_cut TYPE REF TO zcl_abapgit_json_path,
lv_xact TYPE xstring,
lv_act TYPE string,
lv_is_equal TYPE abap_bool.
APPEND `$.header.description=Text` TO lt_file.
CREATE OBJECT lo_cut.
lv_xact = lo_cut->deserialize( lt_file ).
lv_act = zcl_abapgit_convert=>xstring_to_string_utf8( lv_xact ).
lv_act = lo_cut->deserialize( lt_file ).
lv_is_equal = zcl_abapgit_ajson_utilities=>new( )->is_equal(
iv_json_a = lv_act
@ -206,7 +200,6 @@ CLASS ltcl_json_path IMPLEMENTATION.
METHOD deserialize_with_comments.
DATA: lt_file TYPE string_table,
lo_cut TYPE REF TO zcl_abapgit_json_path,
lv_xact TYPE xstring,
lv_act TYPE string.
APPEND `# comment = abc` TO lt_file.
@ -214,9 +207,7 @@ CLASS ltcl_json_path IMPLEMENTATION.
APPEND `` TO lt_file.
CREATE OBJECT lo_cut.
lv_xact = lo_cut->deserialize( lt_file ).
lv_act = zcl_abapgit_convert=>xstring_to_string_utf8( lv_xact ).
lv_act = lo_cut->deserialize( lt_file ).
cl_abap_unit_assert=>assert_initial( lv_act ).

View File

@ -105,11 +105,6 @@ CLASS zcl_abapgit_objects_files DEFINITION
VALUE(rt_i18n_files) TYPE zif_abapgit_i18n_file=>ty_table_of
RAISING
zcx_abapgit_exception .
METHODS get_i18n_properties_file
RETURNING
VALUE(rt_result) TYPE zif_abapgit_git_definitions=>ty_files_tt
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
@ -297,39 +292,6 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
ENDMETHOD.
METHOD get_i18n_properties_file.
" TODO: replace this method with read_i18n_files
DATA lv_lang TYPE laiso.
DATA lv_ext TYPE string.
FIELD-SYMBOLS <ls_file> LIKE LINE OF mt_files.
LOOP AT mt_files ASSIGNING <ls_file>.
zcl_abapgit_filename_logic=>i18n_file_to_object(
EXPORTING
iv_path = <ls_file>-path
iv_filename = <ls_file>-filename
IMPORTING
ev_lang = lv_lang
ev_ext = lv_ext ).
IF lv_ext = 'properties'.
APPEND <ls_file> TO rt_result.
mark_accessed(
iv_path = <ls_file>-path
iv_file = <ls_file>-filename
iv_sha1 = <ls_file>-sha1 ).
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD is_json_metadata.
DATA lv_pattern TYPE string.

View File

@ -22,6 +22,12 @@ CLASS zcl_abapgit_properties_file DEFINITION
METHODS push_text_pairs
IMPORTING it_translation TYPE string_table.
METHODS get_translations
EXPORTING
ev_data TYPE data
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
@ -40,12 +46,40 @@ CLASS zcl_abapgit_properties_file IMPLEMENTATION.
ENDMETHOD.
METHOD get_translations.
DATA:
lv_translation TYPE string,
lo_ajson TYPE REF TO zcl_abapgit_json_handler,
lo_json_path TYPE REF TO zcl_abapgit_json_path,
lx_exception TYPE REF TO cx_static_check.
CREATE OBJECT lo_ajson.
CREATE OBJECT lo_json_path.
TRY.
lv_translation = lo_json_path->deserialize( mt_translation ).
lo_ajson->deserialize(
EXPORTING
iv_content = lv_translation
IMPORTING
ev_data = ev_data ).
CATCH cx_static_check INTO lx_exception.
zcx_abapgit_exception=>raise_with_text( lx_exception ).
ENDTRY.
ENDMETHOD.
METHOD parse.
DATA lv_data TYPE string.
lv_data = zcl_abapgit_convert=>xstring_to_string_utf8( iv_xdata ).
SPLIT lv_data AT cl_abap_char_utilities=>newline INTO TABLE mt_translation.
ENDMETHOD.
@ -65,17 +99,12 @@ CLASS zcl_abapgit_properties_file IMPLEMENTATION.
METHOD zif_abapgit_i18n_file~render.
DATA: lv_translation TYPE string,
lo_buf TYPE REF TO zcl_abapgit_string_buffer,
lv_str TYPE string.
DATA lv_translation 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( lv_str ).
sep = cl_abap_char_utilities=>newline ) && cl_abap_char_utilities=>newline.
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_translation ).
ENDMETHOD.

View File

@ -262,11 +262,11 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
METHOD read_json.
DATA lv_json_data TYPE xstring.
DATA lv_json_data TYPE string.
DATA ls_intf_aff TYPE zif_abapgit_aff_intf_v1=>ty_main.
DATA lo_aff_mapper TYPE REF TO zif_abapgit_aff_type_mapping.
lv_json_data = mo_files->read_raw( 'json' ).
lv_json_data = mo_files->read_string( 'json' ).
ls_intf_aff = lcl_aff_metadata_handler=>deserialize( lv_json_data ).
CREATE OBJECT lo_aff_mapper TYPE lcl_aff_type_mapping.
@ -535,6 +535,7 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
lcl_aff_metadata_handler=>deserialize_translation(
EXPORTING
io_files = mo_files
is_item = ms_item
IMPORTING
et_description = lt_description
et_description_sub = lt_description_sub ).

View File

@ -508,11 +508,12 @@ CLASS lcl_aff_metadata_handler DEFINITION.
RETURNING VALUE(rt_result) TYPE zif_abapgit_i18n_file=>ty_table_of
RAISING zcx_abapgit_exception.
CLASS-METHODS deserialize
IMPORTING iv_data TYPE xstring
IMPORTING iv_data TYPE string
RETURNING VALUE(rv_result) TYPE zif_abapgit_aff_intf_v1=>ty_main
RAISING zcx_abapgit_exception.
CLASS-METHODS deserialize_translation
IMPORTING io_files TYPE REF TO zcl_abapgit_objects_files
is_item TYPE zif_abapgit_definitions=>ty_item
EXPORTING et_description TYPE zcl_abapgit_object_intf=>ty_intf-description
et_description_sub TYPE zcl_abapgit_object_intf=>ty_intf-description_sub
RAISING zcx_abapgit_exception.
@ -529,11 +530,7 @@ CLASS lcl_aff_metadata_handler DEFINITION.
fill_translation
IMPORTING iv_name TYPE seoclsname
iv_language TYPE laiso
RETURNING VALUE(rt_result) TYPE zif_abapgit_aff_intf_v1=>ty_main,
get_string_table
IMPORTING iv_xstring TYPE xstring
RETURNING VALUE(rt_result) TYPE string_table
RAISING zcx_abapgit_exception.
RETURNING VALUE(rt_result) TYPE zif_abapgit_aff_intf_v1=>ty_main.
ENDCLASS.
CLASS lcl_aff_metadata_handler IMPLEMENTATION.
@ -702,50 +699,29 @@ CLASS lcl_aff_metadata_handler IMPLEMENTATION.
METHOD deserialize_translation.
DATA: lt_data TYPE string_table,
lv_xtranslation TYPE xstring,
lo_ajson TYPE REF TO zcl_abapgit_json_handler,
lx_exception TYPE REF TO cx_static_check,
lv_obj_name TYPE seoclsname,
lv_langu TYPE laiso,
lt_translation_file TYPE zif_abapgit_git_definitions=>ty_files_tt,
ls_translation_file TYPE zif_abapgit_git_definitions=>ty_file,
lo_json_path TYPE REF TO zcl_abapgit_json_path,
DATA: lo_properties_file TYPE REF TO zcl_abapgit_properties_file,
lt_translation_file TYPE zif_abapgit_i18n_file=>ty_table_of,
li_translation_file LIKE LINE OF lt_translation_file,
ls_aff_data TYPE zif_abapgit_aff_intf_v1=>ty_main,
lo_type_mapper TYPE REF TO zif_abapgit_aff_type_mapping,
ls_ag_data TYPE zcl_abapgit_object_intf=>ty_intf.
lt_translation_file = io_files->get_i18n_properties_file( ).
CREATE OBJECT lo_json_path.
lt_translation_file = io_files->read_i18n_files( ).
LOOP AT lt_translation_file INTO ls_translation_file.
LOOP AT lt_translation_file INTO li_translation_file.
CLEAR ls_ag_data.
lt_data = get_string_table( ls_translation_file-data ).
lv_xtranslation = lo_json_path->deserialize( lt_data ).
lo_properties_file ?= li_translation_file.
lo_properties_file->get_translations( IMPORTING ev_data = ls_aff_data ).
CREATE OBJECT lo_ajson.
TRY.
lo_ajson->deserialize(
EXPORTING
iv_content = lv_xtranslation
IMPORTING
ev_data = ls_aff_data ).
CATCH cx_static_check INTO lx_exception.
zcx_abapgit_exception=>raise_with_text( lx_exception ).
ENDTRY.
FIND FIRST OCCURRENCE OF REGEX '^([\w]+).*\.i18n.([a-z]{2})\.'
IN ls_translation_file-filename SUBMATCHES lv_obj_name lv_langu.
ls_aff_data-header-original_language = to_upper( lv_langu ). " is target language
ls_aff_data-header-original_language = to_upper( li_translation_file->lang( ) ). " is target language
CREATE OBJECT lo_type_mapper TYPE lcl_aff_type_mapping.
lo_type_mapper->to_abapgit(
EXPORTING
iv_data = ls_aff_data
iv_object_name = to_upper( lv_obj_name )
iv_object_name = is_item-obj_name
IMPORTING
es_data = ls_ag_data ).
@ -754,17 +730,5 @@ CLASS lcl_aff_metadata_handler IMPLEMENTATION.
ENDLOOP.
ENDMETHOD.
METHOD get_string_table.
DATA lv_data TYPE string.
lv_data = zcl_abapgit_convert=>xstring_to_string_utf8( iv_xstring ).
SPLIT lv_data AT cl_abap_char_utilities=>newline INTO TABLE rt_result.
ENDMETHOD.
ENDCLASS.

View File

@ -363,7 +363,6 @@ CLASS ltcl_aff_metadata IMPLEMENTATION.
METHOD deserialize_non_defaults.
DATA:
lv_source TYPE string,
lv_source_xstring TYPE xstring,
ls_description_type TYPE zif_abapgit_aff_oo_types_v1=>ty_component_description,
ls_description_attr TYPE zif_abapgit_aff_oo_types_v1=>ty_component_description,
ls_description_meth_param TYPE zif_abapgit_aff_oo_types_v1=>ty_component_description,
@ -447,10 +446,8 @@ CLASS ltcl_aff_metadata IMPLEMENTATION.
` }` && cl_abap_char_utilities=>newline &&
`}` && cl_abap_char_utilities=>newline.
lv_source_xstring = cl_abap_codepage=>convert_to( lv_source ).
" cut
ls_actual = lcl_aff_metadata_handler=>deserialize( lv_source_xstring ).
ls_actual = lcl_aff_metadata_handler=>deserialize( lv_source ).
cl_abap_unit_assert=>assert_equals( act = ls_actual
exp = ls_expected ).
@ -459,7 +456,6 @@ CLASS ltcl_aff_metadata IMPLEMENTATION.
METHOD deserialize_defaults.
DATA:
lv_source TYPE string,
lv_source_xstring TYPE xstring,
ls_actual TYPE zif_abapgit_aff_intf_v1=>ty_main,
ls_expected TYPE zif_abapgit_aff_intf_v1=>ty_main.
@ -480,10 +476,8 @@ CLASS ltcl_aff_metadata IMPLEMENTATION.
` }` && cl_abap_char_utilities=>newline &&
`}` && cl_abap_char_utilities=>newline.
lv_source_xstring = cl_abap_codepage=>convert_to( lv_source ).
" cut
ls_actual = lcl_aff_metadata_handler=>deserialize( lv_source_xstring ).
ls_actual = lcl_aff_metadata_handler=>deserialize( lv_source ).
cl_abap_unit_assert=>assert_equals( act = ls_actual
exp = ls_expected ).