mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Allow Object Types with multiple files in AFF (#5979)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
c61cf0d586
commit
c2b8b597aa
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user