From 426edc372128f953eec73b63fade1aeaaf0d5f2f Mon Sep 17 00:00:00 2001 From: rdibbern Date: Fri, 14 Jul 2023 19:29:46 +0200 Subject: [PATCH] Enable object handler for Event Consumption Model (EEEC) (#6348) Co-authored-by: Dr. Jonas Braun Co-authored-by: Raphael Dibbern Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- .../aff/zcl_abapgit_aff_registry.clas.abap | 1 + .../zcl_abapgit_object_common_aff.clas.abap | 71 +++++++--------- .../aff/zcl_abapgit_object_eeec.clas.abap | 80 +++++++++++++++++++ .../aff/zcl_abapgit_object_eeec.clas.xml | 16 ++++ 4 files changed, 128 insertions(+), 40 deletions(-) create mode 100644 src/objects/aff/zcl_abapgit_object_eeec.clas.abap create mode 100644 src/objects/aff/zcl_abapgit_object_eeec.clas.xml diff --git a/src/objects/aff/zcl_abapgit_aff_registry.clas.abap b/src/objects/aff/zcl_abapgit_aff_registry.clas.abap index bffbf15ad..faa135917 100644 --- a/src/objects/aff/zcl_abapgit_aff_registry.clas.abap +++ b/src/objects/aff/zcl_abapgit_aff_registry.clas.abap @@ -53,6 +53,7 @@ CLASS zcl_abapgit_aff_registry IMPLEMENTATION. register( iv_obj_type = 'CHKO' ). register( iv_obj_type = 'CHKV' ). register( iv_obj_type = 'EVTB' ). + register( iv_obj_type = 'EEEC' ). register( iv_obj_type = 'GSMP' ). register( iv_obj_type = 'INTF' iv_experimental = abap_true ). 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 cece1a262..12d708418 100644 --- a/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap +++ b/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap @@ -17,6 +17,11 @@ CLASS zcl_abapgit_object_common_aff DEFINITION METHODS get_additional_extensions RETURNING VALUE(rv_additional_extensions) TYPE ty_extension_mapper_pairs. + METHODS get_object_handler + RETURNING + VALUE(ro_object_handler) TYPE REF TO object + RAISING + zcx_abapgit_exception. PRIVATE SECTION. METHODS is_file_empty @@ -48,16 +53,15 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. METHOD zif_abapgit_object~delete. - DATA: lr_intf_aff_obj TYPE REF TO data, - lr_intf_aff_log 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_aff_factory TYPE REF TO object, - lv_name TYPE c LENGTH 120, - lx_error TYPE REF TO cx_root, - lo_aff_log TYPE REF TO object. + DATA: lr_intf_aff_obj TYPE REF TO data, + lr_intf_aff_log TYPE REF TO data, + lr_messages TYPE REF TO data, + lo_object_handler TYPE REF TO object, + lo_object_aff TYPE REF TO object, + lo_aff_factory TYPE REF TO object, + lv_name TYPE c LENGTH 120, + lx_error TYPE REF TO cx_root, + lo_aff_log TYPE REF TO object. FIELD-SYMBOLS: TYPE any, TYPE any, @@ -68,12 +72,7 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. lv_name = ms_item-obj_name. TRY. - CREATE OBJECT lo_handler_factory TYPE ('CL_AFF_OBJECT_HANDLER_FACTORY'). - CALL METHOD lo_handler_factory->('IF_AFF_OBJECT_HANDLER_FACTORY~GET_OBJECT_HANDLER') - EXPORTING - object_type = ms_item-obj_type - RECEIVING - result = lo_object_handler. + lo_object_handler = get_object_handler( ). CREATE OBJECT lo_object_aff TYPE ('CL_AFF_OBJ') EXPORTING @@ -146,7 +145,6 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. 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, @@ -181,13 +179,7 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. " beyond here there will be dragons.... TRY. - CREATE OBJECT lo_handler_factory TYPE ('CL_AFF_OBJECT_HANDLER_FACTORY'). - - CALL METHOD lo_handler_factory->('IF_AFF_OBJECT_HANDLER_FACTORY~GET_OBJECT_HANDLER') - EXPORTING - object_type = ms_item-obj_type - RECEIVING - result = lo_object_handler. + lo_object_handler = get_object_handler( ). CREATE OBJECT lo_object_aff TYPE ('CL_AFF_OBJ') EXPORTING @@ -326,10 +318,22 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. ENDTRY. ENDMETHOD. + METHOD get_object_handler. + + DATA lo_handler_factory TYPE REF TO object. + + CREATE OBJECT lo_handler_factory TYPE ('CL_AFF_OBJECT_HANDLER_FACTORY'). + + CALL METHOD lo_handler_factory->('IF_AFF_OBJECT_HANDLER_FACTORY~GET_OBJECT_HANDLER') + EXPORTING + object_type = ms_item-obj_type + RECEIVING + result = ro_object_handler. + + ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: lr_intf_aff_obj 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, lv_name TYPE c LENGTH 120, @@ -340,13 +344,7 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. lv_name = ms_item-obj_name. TRY. - CREATE OBJECT lo_handler_factory TYPE ('CL_AFF_OBJECT_HANDLER_FACTORY'). - - CALL METHOD lo_handler_factory->('IF_AFF_OBJECT_HANDLER_FACTORY~GET_OBJECT_HANDLER') - EXPORTING - object_type = ms_item-obj_type - RECEIVING - result = lo_object_handler. + lo_object_handler = get_object_handler( ). CREATE OBJECT lo_object_aff TYPE ('CL_AFF_OBJ') EXPORTING @@ -431,7 +429,6 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. 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, @@ -459,13 +456,7 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. lv_name = ms_item-obj_name. TRY. - CREATE OBJECT lo_handler_factory TYPE ('CL_AFF_OBJECT_HANDLER_FACTORY'). - - CALL METHOD lo_handler_factory->('IF_AFF_OBJECT_HANDLER_FACTORY~GET_OBJECT_HANDLER') - EXPORTING - object_type = ms_item-obj_type - RECEIVING - result = lo_object_handler. + lo_object_handler = get_object_handler( ). CREATE OBJECT lo_object_aff TYPE ('CL_AFF_OBJ') EXPORTING diff --git a/src/objects/aff/zcl_abapgit_object_eeec.clas.abap b/src/objects/aff/zcl_abapgit_object_eeec.clas.abap new file mode 100644 index 000000000..e2d2807d1 --- /dev/null +++ b/src/objects/aff/zcl_abapgit_object_eeec.clas.abap @@ -0,0 +1,80 @@ +CLASS zcl_abapgit_object_eeec DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_object_common_aff + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + METHODS: + zif_abapgit_object~changed_by REDEFINITION . + + PROTECTED SECTION. + METHODS: get_object_handler REDEFINITION. +ENDCLASS. + + + +CLASS zcl_abapgit_object_eeec IMPLEMENTATION. + + METHOD zif_abapgit_object~changed_by. + + DATA: lr_data TYPE REF TO data, + lo_registry_adapter TYPE REF TO object, + lv_object_key TYPE seu_objkey, + lx_error TYPE REF TO cx_root. + + FIELD-SYMBOLS: TYPE any, + TYPE any. + + TRY. + CREATE OBJECT lo_registry_adapter TYPE ('/IWXBE/CL_EEEC_REG_ADAPTER'). + CREATE DATA lr_data TYPE ('/IWXBE/IF_REGISTRY_TYPES=>TY_S_CONSUMER'). + ASSIGN lr_data->* TO . + + lv_object_key = ms_item-obj_name. + + TRY. + CALL METHOD lo_registry_adapter->('/IWXBE/IF_EEEC_REG_ADAPTER_WB~GET_METADATA') + EXPORTING + iv_object_key = lv_object_key + iv_state = 'I' + RECEIVING + rs_consumer = . + + CATCH cx_root. + CALL METHOD lo_registry_adapter->('/IWXBE/IF_EEEC_REG_ADAPTER_WB~GET_METADATA') + EXPORTING + iv_object_key = lv_object_key + iv_state = 'A' + RECEIVING + rs_consumer = . + ENDTRY. + + ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE TO . + rv_user = . + + CATCH cx_root INTO lx_error. + zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( ) + ix_previous = lx_error ). + ENDTRY. + + ENDMETHOD. + + METHOD get_object_handler. + + DATA lx_error TYPE REF TO cx_root. + + ro_object_handler = super->get_object_handler( ). + + IF ro_object_handler IS NOT BOUND. + TRY. + CREATE OBJECT ro_object_handler TYPE ('/IWXBE/CL_EEEC_AFF_OBJECTHANDL'). + CATCH cx_root INTO lx_error. + zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( ) + ix_previous = lx_error ). + ENDTRY. + ENDIF. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/objects/aff/zcl_abapgit_object_eeec.clas.xml b/src/objects/aff/zcl_abapgit_object_eeec.clas.xml new file mode 100644 index 000000000..16804c02a --- /dev/null +++ b/src/objects/aff/zcl_abapgit_object_eeec.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_OBJECT_EEEC + E + abapGit - EEEC - Event Consumption Model + 1 + X + X + X + + + +