Refactor: i18n filename logic (#6892)

Co-authored-by: Albert Mink <albert.mink@sap.com>
This commit is contained in:
Marc Bernard 2024-04-05 12:57:27 +02:00 committed by GitHub
parent 72d80c1120
commit 412cd9995b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 217 additions and 46 deletions

View File

@ -46,6 +46,17 @@ CLASS zcl_abapgit_filename_logic DEFINITION
RAISING
zcx_abapgit_exception .
CLASS-METHODS i18n_file_to_object
IMPORTING
!iv_filename TYPE string
!iv_path TYPE string
EXPORTING
!es_item TYPE zif_abapgit_definitions=>ty_item
!ev_lang TYPE laiso
!ev_ext TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS object_to_file
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
@ -54,6 +65,14 @@ CLASS zcl_abapgit_filename_logic DEFINITION
RETURNING
VALUE(rv_filename) TYPE string .
CLASS-METHODS object_to_i18n_file
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
!iv_lang TYPE laiso
!iv_ext TYPE string
RETURNING
VALUE(rv_filename) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
@ -122,7 +141,9 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION.
REPLACE ALL OCCURRENCES OF '#' IN lv_ext WITH '/'.
" Assume AFF namespace convention
CREATE OBJECT go_aff_registry TYPE zcl_abapgit_aff_registry.
IF go_aff_registry IS INITIAL.
CREATE OBJECT go_aff_registry TYPE zcl_abapgit_aff_registry.
ENDIF.
IF go_aff_registry->is_supported_object_type( |{ lv_type }| ) = abap_true.
REPLACE ALL OCCURRENCES OF '(' IN lv_name WITH '/'.
@ -157,6 +178,26 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION.
ENDMETHOD.
METHOD i18n_file_to_object.
DATA lo_dot TYPE REF TO zcl_abapgit_dot_abapgit.
lo_dot = zcl_abapgit_dot_abapgit=>build_default( ).
file_to_object(
EXPORTING
iv_filename = iv_filename
iv_path = iv_path
io_dot = lo_dot
IMPORTING
es_item = es_item ).
FIND FIRST OCCURRENCE OF REGEX 'i18n\.([^.]{2})\.([^.]+)$' IN iv_filename
SUBMATCHES ev_lang ev_ext ##SUBRC_OK.
ENDMETHOD.
METHOD is_obj_definition_file.
DATA:
@ -300,4 +341,14 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION.
TRANSLATE rv_filename TO LOWER CASE.
ENDMETHOD.
METHOD object_to_i18n_file.
rv_filename = object_to_file(
is_item = is_item
iv_extra = |i18n.{ iv_lang }|
iv_ext = iv_ext ).
ENDMETHOD.
ENDCLASS.

View File

@ -28,6 +28,8 @@ CLASS ltcl_run_checks DEFINITION FOR TESTING RISK LEVEL HARMLESS
dot_abapgit FOR TESTING RAISING zcx_abapgit_exception,
file_to_object FOR TESTING RAISING zcx_abapgit_exception,
object_to_file FOR TESTING RAISING zcx_abapgit_exception,
i18n_file_to_object FOR TESTING RAISING zcx_abapgit_exception,
object_to_i18n_file FOR TESTING RAISING zcx_abapgit_exception,
file_to_object_package FOR TESTING RAISING zcx_abapgit_exception,
object_to_file_package FOR TESTING RAISING zcx_abapgit_exception.
@ -381,6 +383,90 @@ CLASS ltcl_run_checks IMPLEMENTATION.
ENDMETHOD.
METHOD i18n_file_to_object.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
DATA lv_lang TYPE laiso.
DATA lv_ext TYPE string.
" PO file
zcl_abapgit_filename_logic=>i18n_file_to_object(
EXPORTING
iv_filename = 'zprogram.prog.i18n.de.po'
iv_path = '/src/'
IMPORTING
es_item = ls_item
ev_lang = lv_lang
ev_ext = lv_ext ).
cl_abap_unit_assert=>assert_equals(
exp = 'PROG'
act = ls_item-obj_type ).
cl_abap_unit_assert=>assert_equals(
exp = 'ZPROGRAM'
act = ls_item-obj_name ).
cl_abap_unit_assert=>assert_equals(
exp = 'de'
act = lv_lang ).
cl_abap_unit_assert=>assert_equals(
exp = 'po'
act = lv_ext ).
" Properties file
zcl_abapgit_filename_logic=>i18n_file_to_object(
EXPORTING
iv_filename = 'zprogram.prog.i18n.en.properties'
iv_path = '/src/'
IMPORTING
es_item = ls_item
ev_lang = lv_lang
ev_ext = lv_ext ).
cl_abap_unit_assert=>assert_equals(
exp = 'PROG'
act = ls_item-obj_type ).
cl_abap_unit_assert=>assert_equals(
exp = 'ZPROGRAM'
act = ls_item-obj_name ).
cl_abap_unit_assert=>assert_equals(
exp = 'en'
act = lv_lang ).
cl_abap_unit_assert=>assert_equals(
exp = 'properties'
act = lv_ext ).
ENDMETHOD.
METHOD object_to_i18n_file.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
DATA lv_filename TYPE string.
ls_item-obj_type = 'PROG'.
ls_item-obj_name = 'ZPROGRAM'.
" PO file
lv_filename = zcl_abapgit_filename_logic=>object_to_i18n_file(
is_item = ls_item
iv_lang = 'de'
iv_ext = 'po' ).
cl_abap_unit_assert=>assert_equals(
exp = 'zprogram.prog.i18n.de.po'
act = lv_filename ).
" Properties files
lv_filename = zcl_abapgit_filename_logic=>object_to_i18n_file(
is_item = ls_item
iv_lang = 'en'
iv_ext = 'properties' ).
cl_abap_unit_assert=>assert_equals(
exp = 'zprogram.prog.i18n.en.properties'
act = lv_filename ).
ENDMETHOD.
METHOD file_to_object_package.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.

View File

@ -106,7 +106,10 @@ CLASS zcl_abapgit_objects_files DEFINITION
RAISING
zcx_abapgit_exception .
METHODS get_i18n_properties_file
RETURNING VALUE(rt_result) TYPE zif_abapgit_git_definitions=>ty_files_tt.
RETURNING
VALUE(rt_result) TYPE zif_abapgit_git_definitions=>ty_files_tt
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
@ -175,9 +178,9 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
ENDIF.
ls_file-path = '/'.
ls_file-filename = zcl_abapgit_filename_logic=>object_to_file(
ls_file-filename = zcl_abapgit_filename_logic=>object_to_i18n_file(
is_item = ms_item
iv_extra = |i18n.{ ii_i18n_file->lang( ) }|
iv_lang = ii_i18n_file->lang( )
iv_ext = ii_i18n_file->ext( ) ).
APPEND ls_file TO mt_files.
@ -205,7 +208,6 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
DATA: ls_file TYPE zif_abapgit_git_definitions=>ty_file.
ls_file-path = '/'.
ls_file-filename = zcl_abapgit_filename_logic=>object_to_file(
is_item = ms_item
@ -295,6 +297,39 @@ 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.
@ -397,22 +432,33 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
METHOD read_i18n_files.
DATA lv_lang TYPE laiso.
DATA lv_ext TYPE string.
DATA lo_po TYPE REF TO zcl_abapgit_po_file.
DATA:
lv_lang TYPE laiso,
lv_ext TYPE string,
lo_po TYPE REF TO zcl_abapgit_po_file,
lo_properties TYPE REF TO zcl_abapgit_properties_file.
FIELD-SYMBOLS <ls_file> LIKE LINE OF mt_files.
LOOP AT mt_files ASSIGNING <ls_file>.
" TODO: Maybe this should be in zcl_abapgit_filename_logic
FIND FIRST OCCURRENCE OF REGEX 'i18n\.([^.]{2})\.([^.]+)$' IN <ls_file>-filename SUBMATCHES lv_lang lv_ext.
CHECK sy-subrc = 0.
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 ).
CASE lv_ext.
WHEN 'po'.
CREATE OBJECT lo_po EXPORTING iv_lang = lv_lang.
lo_po->parse( <ls_file>-data ).
APPEND lo_po TO rt_i18n_files.
WHEN 'properties'.
CREATE OBJECT lo_properties EXPORTING iv_lang = lv_lang.
lo_properties->parse( <ls_file>-data ).
APPEND lo_properties TO rt_i18n_files.
WHEN OTHERS.
CONTINUE. " Unsupported i18n file type
ENDCASE.
@ -499,31 +545,4 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
ENDLOOP.
ENDMETHOD.
METHOD get_i18n_properties_file.
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>.
" TODO: Maybe this should be in zcl_abapgit_filename_logic
FIND FIRST OCCURRENCE OF REGEX 'i18n\.([^.]{2})\.([^.]+)$' IN <ls_file>-filename SUBMATCHES lv_lang lv_ext.
CHECK sy-subrc = 0.
IF sy-subrc = 0 AND 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.
ENDCLASS.

View File

@ -47,7 +47,6 @@ CLASS zcl_abapgit_po_file DEFINITION
comments TYPE STANDARD TABLE OF ty_comment WITH KEY kind text,
END OF ty_msg_pair.
DATA mv_lang TYPE laiso.
DATA mt_pairs TYPE SORTED TABLE OF ty_msg_pair WITH UNIQUE KEY source.
@ -86,7 +85,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_PO_FILE IMPLEMENTATION.
CLASS zcl_abapgit_po_file IMPLEMENTATION.
METHOD build_po_body.

View File

@ -10,7 +10,14 @@ CLASS zcl_abapgit_properties_file DEFINITION
c_properties_feature TYPE string VALUE 'TRANSL'.
METHODS constructor
IMPORTING iv_lang TYPE laiso.
IMPORTING
iv_lang TYPE laiso.
METHODS parse
IMPORTING
iv_xdata TYPE xstring
RAISING
zcx_abapgit_exception.
METHODS push_text_pairs
IMPORTING it_translation TYPE string_table.
@ -28,12 +35,20 @@ ENDCLASS.
CLASS zcl_abapgit_properties_file IMPLEMENTATION.
METHOD constructor.
mv_lang = to_lower( iv_lang ).
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.
METHOD push_text_pairs.
mt_translation = it_translation.
ENDMETHOD.

View File

@ -1,13 +1,13 @@
INTERFACE zif_abapgit_i18n_file
PUBLIC.
INTERFACE zif_abapgit_i18n_file PUBLIC.
TYPES: ty_table_of TYPE STANDARD TABLE OF REF TO zif_abapgit_i18n_file WITH DEFAULT KEY.
TYPES ty_table_of TYPE STANDARD TABLE OF REF TO zif_abapgit_i18n_file WITH DEFAULT KEY.
METHODS render
RETURNING
VALUE(rv_data) TYPE xstring
RAISING
zcx_abapgit_exception.
METHODS translate
CHANGING
ct_text_pairs TYPE zif_abapgit_lxe_texts=>ty_text_pairs
@ -17,8 +17,9 @@ INTERFACE zif_abapgit_i18n_file
METHODS ext
RETURNING
VALUE(rv_ext) TYPE string.
METHODS lang
RETURNING
VALUE(rv_lang) TYPE string.
VALUE(rv_lang) TYPE laiso.
ENDINTERFACE.