diff --git a/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap b/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap index a71555838..81219c278 100644 --- a/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap +++ b/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap @@ -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 TO . IF -msgty = 'E'. zcx_abapgit_exception=>raise_t100( - iv_msgid = -msgid - iv_msgno = -msgno - iv_msgv1 = -msgv1 - iv_msgv2 = -msgv2 - iv_msgv3 = -msgv3 - iv_msgv4 = -msgv4 ). + iv_msgid = -msgid + iv_msgno = -msgno + iv_msgv1 = -msgv1 + iv_msgv2 = -msgv2 + iv_msgv3 = -msgv3 + iv_msgv4 = -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: TYPE any, - TYPE any, - TYPE any, - TYPE any, - TYPE any, - TYPE ANY TABLE, - TYPE any, - TYPE any, - TYPE any, - TYPE symsg. + FIELD-SYMBOLS: TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE ANY TABLE, + TYPE any, + TYPE any, + TYPE any, + TYPE symsg, + 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_additional_extensions = get_additional_extensions( ). + + LOOP AT ls_additional_extensions ASSIGNING . + + lv_file_as_xstring = zif_abapgit_object~mo_files->read_raw( iv_ext = -extension ). + + CALL METHOD -file_name_mapper->('IF_AFF_FILE_NAME_MAPPER~GET_FILE_NAME_FROM_OBJECT') + EXPORTING + object = + 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 . + ?= lo_object_file. + + CALL METHOD lo_files_container->('ADD_FILE') + EXPORTING + 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 TO . ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO . ii_log->add( - iv_msg = - iv_type = - is_item = ms_item ). + iv_msg = + iv_type = + is_item = ms_item ). IF -msgty = 'E'. zcx_abapgit_exception=>raise_t100( - iv_msgid = -msgid - iv_msgno = -msgno - iv_msgv1 = -msgv1 - iv_msgv2 = -msgv2 - iv_msgv3 = -msgv3 - iv_msgv4 = -msgv4 ). + iv_msgid = -msgid + iv_msgno = -msgno + iv_msgv1 = -msgv1 + iv_msgv2 = -msgv2 + iv_msgv3 = -msgv3 + iv_msgv4 = -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: TYPE any, - TYPE any, - TYPE any, - TYPE ANY TABLE, - TYPE any, - TYPE symsg. + FIELD-SYMBOLS: TYPE any, + TYPE any, + TYPE any, + TYPE ANY TABLE, + TYPE any, + TYPE symsg, + 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 TO . IF -msgty = 'E'. zcx_abapgit_exception=>raise_t100( - iv_msgid = -msgid - iv_msgno = -msgno - iv_msgv1 = -msgv1 - iv_msgv2 = -msgv2 - iv_msgv3 = -msgv3 - iv_msgv4 = -msgv4 ). + iv_msgid = -msgid + iv_msgno = -msgno + iv_msgv1 = -msgv1 + iv_msgv2 = -msgv2 + iv_msgv3 = -msgv3 + iv_msgv4 = -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 . + + CALL METHOD -file_name_mapper->('IF_AFF_FILE_NAME_MAPPER~GET_FILE_NAME_FROM_OBJECT') + EXPORTING + object = + 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 = -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.