Allow Object Types with multiple files in AFF (#5979)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Katharina Wurz 2023-01-12 10:57:06 +01:00 committed by GitHub
parent c61cf0d586
commit c2b8b597aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,6 +9,15 @@ CLASS zcl_abapgit_object_common_aff DEFINITION
INTERFACES zif_abapgit_object
ABSTRACT METHODS changed_by .
PROTECTED SECTION.
TYPES: BEGIN OF ty_extension_mapper_pair,
extension TYPE string,
file_name_mapper TYPE REF TO object,
END OF ty_extension_mapper_pair,
ty_extension_mapper_pairs TYPE STANDARD TABLE OF ty_extension_mapper_pair WITH DEFAULT KEY.
METHODS get_additional_extensions
RETURNING VALUE(rv_additional_extensions) TYPE ty_extension_mapper_pairs.
PRIVATE SECTION.
METHODS is_file_empty
IMPORTING
@ -87,12 +96,12 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
ASSIGN COMPONENT 'MESSAGE' OF STRUCTURE <ls_message> TO <ls_msg>.
IF <ls_msg>-msgty = 'E'.
zcx_abapgit_exception=>raise_t100(
iv_msgid = <ls_msg>-msgid
iv_msgno = <ls_msg>-msgno
iv_msgv1 = <ls_msg>-msgv1
iv_msgv2 = <ls_msg>-msgv2
iv_msgv3 = <ls_msg>-msgv3
iv_msgv4 = <ls_msg>-msgv4 ).
iv_msgid = <ls_msg>-msgid
iv_msgno = <ls_msg>-msgno
iv_msgv1 = <ls_msg>-msgv1
iv_msgv2 = <ls_msg>-msgv2
iv_msgv3 = <ls_msg>-msgv3
iv_msgv4 = <ls_msg>-msgv4 ).
ENDIF.
ENDLOOP.
@ -118,39 +127,42 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
METHOD zif_abapgit_object~deserialize.
DATA: lr_intf_aff_obj TYPE REF TO data,
lr_intf_aff_file TYPE REF TO data,
lr_intf_files_container TYPE REF TO data,
lr_intf_aff_log TYPE REF TO data,
lr_intf_aff_settings TYPE REF TO data,
lo_handler_factory TYPE REF TO object,
lo_object_handler TYPE REF TO object,
lo_object_aff TYPE REF TO object,
lo_object_json_file TYPE REF TO object,
lo_files_container TYPE REF TO object,
lo_settings TYPE REF TO object,
lo_aff_log TYPE REF TO object,
lo_aff_factory TYPE REF TO object,
lr_messages TYPE REF TO data,
lv_json_as_xstring TYPE xstring,
lx_exception TYPE REF TO cx_root,
lv_file_name TYPE string,
lo_file_name_mapper TYPE REF TO object,
lv_name TYPE c LENGTH 120.
DATA: lr_intf_aff_obj TYPE REF TO data,
lr_intf_aff_file TYPE REF TO data,
lr_intf_files_container TYPE REF TO data,
lr_intf_aff_log TYPE REF TO data,
lr_intf_aff_settings TYPE REF TO data,
lo_handler_factory TYPE REF TO object,
lo_object_handler TYPE REF TO object,
lo_object_aff TYPE REF TO object,
lo_object_json_file TYPE REF TO object,
lo_object_file TYPE REF TO object,
lo_files_container TYPE REF TO object,
lo_settings TYPE REF TO object,
lo_aff_log TYPE REF TO object,
lo_aff_factory TYPE REF TO object,
lr_messages TYPE REF TO data,
lv_json_as_xstring TYPE xstring,
lx_exception TYPE REF TO cx_root,
lv_file_name TYPE string,
lo_file_name_mapper TYPE REF TO object,
lv_name TYPE c LENGTH 120,
lv_file_as_xstring TYPE xstring,
ls_additional_extensions TYPE ty_extension_mapper_pairs.
FIELD-SYMBOLS: <ls_intf_aff_obj> TYPE any,
<ls_intf_aff_file> TYPE any,
<ls_intf_files_container> TYPE any,
<ls_intf_aff_log> TYPE any,
<ls_intf_aff_settings> TYPE any,
<ls_messages> TYPE ANY TABLE,
<ls_message> TYPE any,
<ls_text> TYPE any,
<ls_type> TYPE any,
<ls_msg> TYPE symsg.
FIELD-SYMBOLS: <ls_intf_aff_obj> TYPE any,
<ls_intf_aff_file> TYPE any,
<ls_intf_files_container> TYPE any,
<ls_intf_aff_log> TYPE any,
<ls_intf_aff_settings> TYPE any,
<ls_messages> TYPE ANY TABLE,
<ls_message> TYPE any,
<ls_text> TYPE any,
<ls_type> TYPE any,
<ls_msg> TYPE symsg,
<ls_extension_mapper_pair> LIKE LINE OF ls_additional_extensions.
lv_json_as_xstring = zif_abapgit_object~mo_files->read_raw( iv_ext = 'json' ).
lv_name = ms_item-obj_name.
" beyond here there will be dragons....
@ -187,6 +199,7 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
RECEIVING
result = lv_file_name.
CREATE OBJECT lo_settings TYPE ('CL_AFF_SETTINGS_DESERIALIZE')
EXPORTING
version = 'A'
@ -206,6 +219,33 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
EXPORTING
file = <ls_intf_aff_file>.
ls_additional_extensions = get_additional_extensions( ).
LOOP AT ls_additional_extensions ASSIGNING <ls_extension_mapper_pair>.
lv_file_as_xstring = zif_abapgit_object~mo_files->read_raw( iv_ext = <ls_extension_mapper_pair>-extension ).
CALL METHOD <ls_extension_mapper_pair>-file_name_mapper->('IF_AFF_FILE_NAME_MAPPER~GET_FILE_NAME_FROM_OBJECT')
EXPORTING
object = <ls_intf_aff_obj>
RECEIVING
result = lv_file_name.
CREATE OBJECT lo_object_file TYPE ('CL_AFF_FILE')
EXPORTING
name = lv_file_name
content = lv_file_as_xstring.
CREATE DATA lr_intf_aff_file TYPE REF TO ('IF_AFF_FILE').
ASSIGN lr_intf_aff_file->* TO <ls_intf_aff_file>.
<ls_intf_aff_file> ?= lo_object_file.
CALL METHOD lo_files_container->('ADD_FILE')
EXPORTING
file = <ls_intf_aff_file>.
ENDLOOP.
CREATE OBJECT lo_aff_factory TYPE ('CL_AFF_FACTORY').
CALL METHOD lo_aff_factory->('CREATE_LOG')
RECEIVING
@ -241,18 +281,18 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
ASSIGN COMPONENT 'TEXT' OF STRUCTURE <ls_message> TO <ls_text>.
ASSIGN COMPONENT 'TYPE' OF STRUCTURE <ls_message> TO <ls_type>.
ii_log->add(
iv_msg = <ls_text>
iv_type = <ls_type>
is_item = ms_item ).
iv_msg = <ls_text>
iv_type = <ls_type>
is_item = ms_item ).
IF <ls_msg>-msgty = 'E'.
zcx_abapgit_exception=>raise_t100(
iv_msgid = <ls_msg>-msgid
iv_msgno = <ls_msg>-msgno
iv_msgv1 = <ls_msg>-msgv1
iv_msgv2 = <ls_msg>-msgv2
iv_msgv3 = <ls_msg>-msgv3
iv_msgv4 = <ls_msg>-msgv4 ).
iv_msgid = <ls_msg>-msgid
iv_msgno = <ls_msg>-msgno
iv_msgv1 = <ls_msg>-msgv1
iv_msgv2 = <ls_msg>-msgv2
iv_msgv3 = <ls_msg>-msgv3
iv_msgv4 = <ls_msg>-msgv4 ).
ENDIF.
ENDLOOP.
@ -262,8 +302,8 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
ii_log->add_error( is_item = ms_item
iv_msg = 'Error at deserialize' ).
ii_log->add_exception(
ix_exc = lx_exception
is_item = ms_item ).
ix_exc = lx_exception
is_item = ms_item ).
ENDTRY.
ENDMETHOD.
@ -342,7 +382,7 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
lv_argument = lv_lock_object.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESWB_EO'
iv_argument = lv_argument ).
iv_argument = lv_argument ).
ENDMETHOD.
@ -353,31 +393,35 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
METHOD zif_abapgit_object~serialize.
DATA: lr_intf_aff_obj TYPE REF TO data,
lr_intf_aff_log TYPE REF TO data,
lr_intf_aff_settings TYPE REF TO data,
lr_messages TYPE REF TO data,
lo_handler_factory TYPE REF TO object,
lo_object_handler TYPE REF TO object,
lo_object_aff TYPE REF TO object,
lo_object_json_file TYPE REF TO object,
lo_files_container TYPE REF TO object,
lo_settings TYPE REF TO object,
lo_aff_log TYPE REF TO object,
lo_aff_factory TYPE REF TO object,
lv_json_as_xstring TYPE xstring,
lx_exception TYPE REF TO cx_root,
lv_name TYPE c LENGTH 120,
lv_file_name TYPE string,
lo_file_name_mapper TYPE REF TO object,
lv_dummy TYPE string.
DATA: lr_intf_aff_obj TYPE REF TO data,
lr_intf_aff_log TYPE REF TO data,
lr_intf_aff_settings TYPE REF TO data,
lr_messages TYPE REF TO data,
lo_handler_factory TYPE REF TO object,
lo_object_handler TYPE REF TO object,
lo_object_aff TYPE REF TO object,
lo_object_json_file TYPE REF TO object,
lo_files_container TYPE REF TO object,
lo_settings TYPE REF TO object,
lo_aff_log TYPE REF TO object,
lo_aff_factory TYPE REF TO object,
lo_object_file TYPE REF TO object,
lv_json_as_xstring TYPE xstring,
lx_exception TYPE REF TO cx_root,
lv_name TYPE c LENGTH 120,
lv_file_name TYPE string,
lo_file_name_mapper TYPE REF TO object,
lv_dummy TYPE string,
ls_additional_extensions TYPE ty_extension_mapper_pairs,
lv_file_as_xstring TYPE xstring.
FIELD-SYMBOLS: <ls_intf_aff_obj> TYPE any,
<ls_intf_aff_log> TYPE any,
<ls_intf_aff_settings> TYPE any,
<ls_messages> TYPE ANY TABLE,
<ls_message> TYPE any,
<ls_msg> TYPE symsg.
FIELD-SYMBOLS: <ls_intf_aff_obj> TYPE any,
<ls_intf_aff_log> TYPE any,
<ls_intf_aff_settings> TYPE any,
<ls_messages> TYPE ANY TABLE,
<ls_message> TYPE any,
<ls_msg> TYPE symsg,
<ls_extension_mapper_pair> LIKE LINE OF ls_additional_extensions.
lv_name = ms_item-obj_name.
@ -437,12 +481,12 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
ASSIGN COMPONENT 'MESSAGE' OF STRUCTURE <ls_message> TO <ls_msg>.
IF <ls_msg>-msgty = 'E'.
zcx_abapgit_exception=>raise_t100(
iv_msgid = <ls_msg>-msgid
iv_msgno = <ls_msg>-msgno
iv_msgv1 = <ls_msg>-msgv1
iv_msgv2 = <ls_msg>-msgv2
iv_msgv3 = <ls_msg>-msgv3
iv_msgv4 = <ls_msg>-msgv4 ).
iv_msgid = <ls_msg>-msgid
iv_msgno = <ls_msg>-msgno
iv_msgv1 = <ls_msg>-msgv1
iv_msgv2 = <ls_msg>-msgv2
iv_msgv3 = <ls_msg>-msgv3
iv_msgv4 = <ls_msg>-msgv4 ).
ENDIF.
ENDLOOP.
@ -473,9 +517,35 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
result = lv_json_as_xstring.
zif_abapgit_object~mo_files->add_raw(
iv_ext = 'json'
iv_ext = 'json'
iv_data = lv_json_as_xstring ).
ls_additional_extensions = get_additional_extensions( ).
LOOP AT ls_additional_extensions ASSIGNING <ls_extension_mapper_pair>.
CALL METHOD <ls_extension_mapper_pair>-file_name_mapper->('IF_AFF_FILE_NAME_MAPPER~GET_FILE_NAME_FROM_OBJECT')
EXPORTING
object = <ls_intf_aff_obj>
RECEIVING
result = lv_file_name.
CALL METHOD lo_files_container->('IF_AFF_FILES_CONTAINER~GET_FILE')
EXPORTING
name = lv_file_name
RECEIVING
result = lo_object_file.
CALL METHOD lo_object_file->('IF_AFF_FILE~GET_CONTENT')
RECEIVING
result = lv_file_as_xstring.
zif_abapgit_object~mo_files->add_raw(
iv_ext = <ls_extension_mapper_pair>-extension
iv_data = lv_file_as_xstring ).
ENDLOOP.
CATCH cx_root INTO lx_exception.
zcx_abapgit_exception=>raise_with_text( lx_exception ).
ENDTRY.
@ -490,4 +560,9 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
result = rv_is_empty.
ENDMETHOD.
METHOD get_additional_extensions.
RETURN.
ENDMETHOD.
ENDCLASS.