From 9419a10e87e0367306f1b490b50e2624888f1164 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 30 Nov 2023 07:48:55 +0100 Subject: [PATCH] put `zcl_abapgit_default_transport` behind interface (#6673) --- .../zcl_abapgit_default_transport.clas.abap | 191 ++++++++---------- .../zif_abapgit_default_transport.intf.abap | 24 +++ .../zif_abapgit_default_transport.intf.xml | 15 ++ src/objects/zcl_abapgit_object_sod1.clas.abap | 7 +- src/objects/zcl_abapgit_object_sod2.clas.abap | 7 +- src/objects/zcl_abapgit_objects.clas.abap | 10 +- src/repo/zcl_abapgit_repo.clas.abap | 2 +- src/ui/zcl_abapgit_popups.clas.abap | 8 +- src/zcl_abapgit_factory.clas.abap | 19 +- 9 files changed, 151 insertions(+), 132 deletions(-) create mode 100644 src/cts/zif_abapgit_default_transport.intf.abap create mode 100644 src/cts/zif_abapgit_default_transport.intf.xml diff --git a/src/cts/zcl_abapgit_default_transport.clas.abap b/src/cts/zcl_abapgit_default_transport.clas.abap index 820ef2da2..fcd940f45 100644 --- a/src/cts/zcl_abapgit_default_transport.clas.abap +++ b/src/cts/zcl_abapgit_default_transport.clas.abap @@ -1,40 +1,17 @@ CLASS zcl_abapgit_default_transport DEFINITION PUBLIC - CREATE PRIVATE . + CREATE PUBLIC . PUBLIC SECTION. - CLASS-METHODS: - get_instance - RETURNING - VALUE(ro_instance) TYPE REF TO zcl_abapgit_default_transport + INTERFACES zif_abapgit_default_transport. + + METHODS + constructor RAISING zcx_abapgit_exception. - METHODS: - constructor - RAISING - zcx_abapgit_exception, - - set - IMPORTING - iv_transport TYPE trkorr - RAISING - zcx_abapgit_exception, - - reset - RAISING - zcx_abapgit_exception, - get - RETURNING - VALUE(rs_default_task) TYPE e070use - RAISING - zcx_abapgit_exception . - - PROTECTED SECTION. PRIVATE SECTION. - - CLASS-DATA go_instance TYPE REF TO zcl_abapgit_default_transport . DATA mv_is_set_by_abapgit TYPE abap_bool . DATA ms_save TYPE e070use . @@ -58,7 +35,7 @@ ENDCLASS. -CLASS zcl_abapgit_default_transport IMPLEMENTATION. +CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION. METHOD clear. @@ -88,64 +65,6 @@ CLASS zcl_abapgit_default_transport IMPLEMENTATION. ENDMETHOD. - METHOD get. - - DATA: lt_e070use TYPE STANDARD TABLE OF e070use. - - CALL FUNCTION 'TR_TASK_GET' - TABLES - tt_e070use = lt_e070use - EXCEPTIONS - invalid_username = 1 - invalid_category = 2 - invalid_client = 3 - OTHERS = 4. - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise_t100( ). - ENDIF. - - READ TABLE lt_e070use INTO rs_default_task - INDEX 1. - - ENDMETHOD. - - - METHOD get_instance. - - IF go_instance IS NOT BOUND. - CREATE OBJECT go_instance. - ENDIF. - - ro_instance = go_instance. - - ENDMETHOD. - - - METHOD reset. - - DATA: ls_default_task TYPE e070use. - - IF mv_is_set_by_abapgit = abap_false. - " if the default transport request task isn't set - " by us there is nothing to do. - RETURN. - ENDIF. - - CLEAR mv_is_set_by_abapgit. - - ls_default_task = get( ). - - IF ls_default_task IS NOT INITIAL. - - clear( ls_default_task ). - - ENDIF. - - restore( ). - - ENDMETHOD. - - METHOD restore. IF ms_save IS INITIAL. @@ -173,29 +92,6 @@ CLASS zcl_abapgit_default_transport IMPLEMENTATION. ENDMETHOD. - METHOD set. - - " checks whether object changes of the package are rerorded in transport - " requests. If true then we set the default task, so that no annoying - " transport request popups are shown while deserializing. - - IF mv_is_set_by_abapgit = abap_true. - " the default transport request task is already set by us - " -> no reason to do it again. - RETURN. - ENDIF. - - IF iv_transport IS INITIAL. - zcx_abapgit_exception=>raise( |No transport request was supplied| ). - ENDIF. - - set_internal( iv_transport ). - - mv_is_set_by_abapgit = abap_true. - - ENDMETHOD. - - METHOD set_internal. CALL FUNCTION 'TR_TASK_SET' @@ -220,7 +116,80 @@ CLASS zcl_abapgit_default_transport IMPLEMENTATION. METHOD store. - ms_save = get( ). + ms_save = zif_abapgit_default_transport~get( ). + + ENDMETHOD. + + + METHOD zif_abapgit_default_transport~get. + + DATA lt_e070use TYPE STANDARD TABLE OF e070use WITH DEFAULT KEY. + DATA ls_line LIKE LINE OF lt_e070use. + + CALL FUNCTION 'TR_TASK_GET' + TABLES + tt_e070use = lt_e070use + EXCEPTIONS + invalid_username = 1 + invalid_category = 2 + invalid_client = 3 + OTHERS = 4. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + READ TABLE lt_e070use INTO ls_line INDEX 1. + IF sy-subrc = 0. + MOVE-CORRESPONDING ls_line TO rs_default_task. + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_default_transport~reset. + + DATA: ls_default_task TYPE e070use. + + IF mv_is_set_by_abapgit = abap_false. + " if the default transport request task isn't set + " by us there is nothing to do. + RETURN. + ENDIF. + + CLEAR mv_is_set_by_abapgit. + + ls_default_task = zif_abapgit_default_transport~get( ). + + IF ls_default_task IS NOT INITIAL. + + clear( ls_default_task ). + + ENDIF. + + restore( ). + + ENDMETHOD. + + + METHOD zif_abapgit_default_transport~set. + + " checks whether object changes of the package are rerorded in transport + " requests. If true then we set the default task, so that no annoying + " transport request popups are shown while deserializing. + + IF mv_is_set_by_abapgit = abap_true. + " the default transport request task is already set by us + " -> no reason to do it again. + RETURN. + ENDIF. + + IF iv_transport IS INITIAL. + zcx_abapgit_exception=>raise( |No transport request was supplied| ). + ENDIF. + + set_internal( iv_transport ). + + mv_is_set_by_abapgit = abap_true. ENDMETHOD. ENDCLASS. diff --git a/src/cts/zif_abapgit_default_transport.intf.abap b/src/cts/zif_abapgit_default_transport.intf.abap new file mode 100644 index 000000000..5abc4f03a --- /dev/null +++ b/src/cts/zif_abapgit_default_transport.intf.abap @@ -0,0 +1,24 @@ +INTERFACE zif_abapgit_default_transport PUBLIC. + + TYPES: BEGIN OF ty_get, + trfunction TYPE c LENGTH 1, + ordernum TYPE trkorr, + END OF ty_get. + + METHODS set + IMPORTING + iv_transport TYPE trkorr + RAISING + zcx_abapgit_exception. + + METHODS reset + RAISING + zcx_abapgit_exception. + + METHODS get + RETURNING + VALUE(rs_default_task) TYPE ty_get + RAISING + zcx_abapgit_exception . + +ENDINTERFACE. diff --git a/src/cts/zif_abapgit_default_transport.intf.xml b/src/cts/zif_abapgit_default_transport.intf.xml new file mode 100644 index 000000000..1d7795e67 --- /dev/null +++ b/src/cts/zif_abapgit_default_transport.intf.xml @@ -0,0 +1,15 @@ + + + + + + ZIF_ABAPGIT_DEFAULT_TRANSPORT + E + ZIF_ABAPGIT_DEFAULT_TRANSPORT + 2 + 1 + X + + + + diff --git a/src/objects/zcl_abapgit_object_sod1.clas.abap b/src/objects/zcl_abapgit_object_sod1.clas.abap index 8a8c2c418..e2ba1820b 100644 --- a/src/objects/zcl_abapgit_object_sod1.clas.abap +++ b/src/objects/zcl_abapgit_object_sod1.clas.abap @@ -306,7 +306,6 @@ CLASS zcl_abapgit_object_sod1 IMPLEMENTATION. ls_data TYPE REF TO data, ls_object_type TYPE wbobjtype, lv_object_key TYPE seu_objkey, - lv_transport_request TYPE trkorr, lo_logger TYPE REF TO cl_wb_checklist, lx_create_error TYPE REF TO cx_root, lx_error TYPE REF TO cx_root, @@ -350,15 +349,13 @@ CLASS zcl_abapgit_object_sod1 IMPLEMENTATION. lo_factory = get_wb_object_operator( is_object_type = ls_object_type iv_object_key = lv_object_key ). - lv_transport_request = zcl_abapgit_default_transport=>get_instance( )->get( )-ordernum. - IF zif_abapgit_object~exists( ) = abap_true. CALL METHOD lo_factory->('IF_WB_OBJECT_OPERATOR~UPDATE') EXPORTING io_object_data = lo_data_model version = 'A' - transport_request = lv_transport_request. + transport_request = iv_transport. ELSE. @@ -374,7 +371,7 @@ CLASS zcl_abapgit_object_sod1 IMPLEMENTATION. version = 'A' package = iv_package abap_language_version = lv_abap_language_version - transport_request = lv_transport_request + transport_request = iv_transport IMPORTING logger = lo_logger. diff --git a/src/objects/zcl_abapgit_object_sod2.clas.abap b/src/objects/zcl_abapgit_object_sod2.clas.abap index 185a8d93c..fff35f915 100644 --- a/src/objects/zcl_abapgit_object_sod2.clas.abap +++ b/src/objects/zcl_abapgit_object_sod2.clas.abap @@ -306,7 +306,6 @@ CLASS zcl_abapgit_object_sod2 IMPLEMENTATION. ls_data TYPE REF TO data, ls_object_type TYPE wbobjtype, lv_object_key TYPE seu_objkey, - lv_transport_request TYPE trkorr, lo_logger TYPE REF TO cl_wb_checklist, lx_create_error TYPE REF TO cx_root, lx_error TYPE REF TO cx_root, @@ -349,15 +348,13 @@ CLASS zcl_abapgit_object_sod2 IMPLEMENTATION. lo_factory = get_wb_object_operator( is_object_type = ls_object_type iv_object_key = lv_object_key ). - lv_transport_request = zcl_abapgit_default_transport=>get_instance( )->get( )-ordernum. - IF zif_abapgit_object~exists( ) = abap_true. CALL METHOD lo_factory->('IF_WB_OBJECT_OPERATOR~UPDATE') EXPORTING io_object_data = lo_data_model version = 'A' - transport_request = lv_transport_request. + transport_request = iv_transport. ELSE. @@ -373,7 +370,7 @@ CLASS zcl_abapgit_object_sod2 IMPLEMENTATION. version = 'A' package = iv_package abap_language_version = lv_abap_language_version - transport_request = lv_transport_request + transport_request = iv_transport IMPORTING logger = lo_logger. diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index 3bc69e5b7..0dd6b293d 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -511,7 +511,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. ENDIF. IF is_checks-transport-required = abap_true. - zcl_abapgit_default_transport=>get_instance( )->set( is_checks-transport-transport ). + zcl_abapgit_factory=>get_default_transport( )->set( is_checks-transport-transport ). ENDIF. TRY. @@ -524,7 +524,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. check_objects_locked( lt_items ). CATCH zcx_abapgit_exception INTO lx_error. - zcl_abapgit_default_transport=>get_instance( )->reset( ). + zcl_abapgit_factory=>get_default_transport( )->reset( ). RAISE EXCEPTION lx_error. ENDTRY. @@ -574,7 +574,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. ENDIF. ENDDO. - zcl_abapgit_default_transport=>get_instance( )->reset( ). + zcl_abapgit_factory=>get_default_transport( )->reset( ). IF lx_error IS BOUND AND lines( lt_tadir ) > 0. zcx_abapgit_exception=>raise( 'Error during uninstall. Check the log.' ). @@ -632,7 +632,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. lv_package = io_repo->get_package( ). IF is_checks-transport-required = abap_true. - zcl_abapgit_default_transport=>get_instance( )->set( is_checks-transport-transport ). + zcl_abapgit_factory=>get_default_transport( )->set( is_checks-transport-transport ). ENDIF. zcl_abapgit_objects_activation=>clear( ). @@ -809,7 +809,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. update_package_tree( io_repo->get_package( ) ). - zcl_abapgit_default_transport=>get_instance( )->reset( ). + zcl_abapgit_factory=>get_default_transport( )->reset( ). lo_timer->end( abap_true ). diff --git a/src/repo/zcl_abapgit_repo.clas.abap b/src/repo/zcl_abapgit_repo.clas.abap index 51315b630..b9157925f 100644 --- a/src/repo/zcl_abapgit_repo.clas.abap +++ b/src/repo/zcl_abapgit_repo.clas.abap @@ -326,7 +326,7 @@ CLASS zcl_abapgit_repo IMPLEMENTATION. ii_log = ii_log ). CATCH zcx_abapgit_exception INTO lx_error. " Ensure to reset default transport request task - zcl_abapgit_default_transport=>get_instance( )->reset( ). + zcl_abapgit_factory=>get_default_transport( )->reset( ). refresh( iv_drop_log = abap_false ). RAISE EXCEPTION lx_error. ENDTRY. diff --git a/src/ui/zcl_abapgit_popups.clas.abap b/src/ui/zcl_abapgit_popups.clas.abap index 968bce3a8..2753fe512 100644 --- a/src/ui/zcl_abapgit_popups.clas.abap +++ b/src/ui/zcl_abapgit_popups.clas.abap @@ -787,15 +787,15 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. DATA: lt_e071 TYPE STANDARD TABLE OF e071, lt_e071k TYPE STANDARD TABLE OF e071k, lv_order TYPE trkorr, - ls_e070use TYPE e070use. + ls_default TYPE zif_abapgit_default_transport=>ty_get. DATA lv_category TYPE e070-korrdev. " If default transport is set and its type matches, then use it as default for the popup - ls_e070use = zcl_abapgit_default_transport=>get_instance( )->get( ). + ls_default = zcl_abapgit_factory=>get_default_transport( )->get( ). - IF ( ls_e070use-trfunction = is_transport_type-request OR ls_e070use-trfunction IS INITIAL ) + IF ( ls_default-trfunction = is_transport_type-request OR ls_default-trfunction IS INITIAL ) AND iv_use_default_transport = abap_true. - lv_order = ls_e070use-ordernum. + lv_order = ls_default-ordernum. ENDIF. " Differentiate between customizing and WB requests diff --git a/src/zcl_abapgit_factory.clas.abap b/src/zcl_abapgit_factory.clas.abap index d90bbb986..6462be0f0 100644 --- a/src/zcl_abapgit_factory.clas.abap +++ b/src/zcl_abapgit_factory.clas.abap @@ -26,6 +26,11 @@ CLASS zcl_abapgit_factory DEFINITION CLASS-METHODS get_cts_api RETURNING VALUE(ri_cts_api) TYPE REF TO zif_abapgit_cts_api . + CLASS-METHODS get_default_transport + RETURNING + VALUE(ri_default_transport) TYPE REF TO zif_abapgit_default_transport + RAISING + zcx_abapgit_exception. CLASS-METHODS get_environment RETURNING VALUE(ri_environment) TYPE REF TO zif_abapgit_environment . @@ -79,11 +84,12 @@ CLASS zcl_abapgit_factory DEFINITION CLASS-DATA gi_sap_namespace TYPE REF TO zif_abapgit_sap_namespace . CLASS-DATA gi_sap_report TYPE REF TO zif_abapgit_sap_report. CLASS-DATA gi_function_module TYPE REF TO zif_abapgit_function_module. + CLASS-DATA gi_default_transport TYPE REF TO zif_abapgit_default_transport . ENDCLASS. -CLASS zcl_abapgit_factory IMPLEMENTATION. +CLASS ZCL_ABAPGIT_FACTORY IMPLEMENTATION. METHOD get_code_inspector. @@ -120,6 +126,17 @@ CLASS zcl_abapgit_factory IMPLEMENTATION. ENDMETHOD. + METHOD get_default_transport. + + IF gi_default_transport IS NOT BOUND. + CREATE OBJECT gi_default_transport TYPE zcl_abapgit_default_transport. + ENDIF. + + ri_default_transport = gi_default_transport. + + ENDMETHOD. + + METHOD get_environment. IF gi_environment IS NOT BOUND. CREATE OBJECT gi_environment TYPE zcl_abapgit_environment.