diff --git a/src/persist/zcl_abapgit_persistence_repo.clas.abap b/src/persist/zcl_abapgit_persistence_repo.clas.abap index a524dc98d..ea4d4fe2e 100644 --- a/src/persist/zcl_abapgit_persistence_repo.clas.abap +++ b/src/persist/zcl_abapgit_persistence_repo.clas.abap @@ -188,7 +188,7 @@ CLASS ZCL_ABAPGIT_PERSISTENCE_REPO IMPLEMENTATION. LOOP AT lt_content INTO ls_content. MOVE-CORRESPONDING from_xml( ls_content-data_str ) TO ls_repo. IF ls_repo-local_settings-write_protected = abap_false AND - zcl_abapgit_environment=>is_repo_object_changes_allowed( ) = abap_false. + zcl_abapgit_factory=>get_environment( )->is_repo_object_changes_allowed( ) = abap_false. ls_repo-local_settings-write_protected = abap_true. ENDIF. ls_repo-key = ls_content-value. diff --git a/src/ui/zcl_abapgit_gui_page_repo_sett.clas.abap b/src/ui/zcl_abapgit_gui_page_repo_sett.clas.abap index 98f8df7ed..067458f90 100644 --- a/src/ui/zcl_abapgit_gui_page_repo_sett.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_repo_sett.clas.abap @@ -190,7 +190,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION. CLEAR lv_checked. IF ls_settings-write_protected = abap_true. - IF zcl_abapgit_environment=>is_repo_object_changes_allowed( ) = abap_true. + IF zcl_abapgit_factory=>get_environment( )->is_repo_object_changes_allowed( ) = abap_true. lv_checked = | checked|. ELSE. lv_checked = | checked disabled|. diff --git a/src/ui/zcl_abapgit_hotkeys.clas.abap b/src/ui/zcl_abapgit_hotkeys.clas.abap index 47c1b8875..dd85aa623 100644 --- a/src/ui/zcl_abapgit_hotkeys.clas.abap +++ b/src/ui/zcl_abapgit_hotkeys.clas.abap @@ -18,6 +18,7 @@ CLASS zcl_abapgit_hotkeys DEFINITION RETURNING VALUE(rv_yes) TYPE abap_bool. + PROTECTED SECTION. PRIVATE SECTION. CONSTANTS: mc_hotkey_interface TYPE string VALUE `ZIF_ABAPGIT_GUI_PAGE_HOTKEY` ##NO_TEXT. @@ -51,12 +52,12 @@ ENDCLASS. -CLASS zcl_abapgit_hotkeys IMPLEMENTATION. +CLASS ZCL_ABAPGIT_HOTKEYS IMPLEMENTATION. METHOD get_all_default_hotkeys. - IF zcl_abapgit_environment=>is_merged( ) = abap_true. + IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true. rt_hotkey_actions = get_hotkeys_from_local_intf( io_page ). ELSE. rt_hotkey_actions = get_hotkeys_from_global_intf( io_page ). @@ -70,14 +71,6 @@ CLASS zcl_abapgit_hotkeys IMPLEMENTATION. ENDMETHOD. - METHOD should_show_hint. - IF gv_hint_was_shown = abap_false. - rv_yes = abap_true. - gv_hint_was_shown = abap_true. - ENDIF. - ENDMETHOD. - - METHOD get_hotkeys_from_global_intf. DATA: lt_hotkey_actions TYPE zif_abapgit_gui_page_hotkey=>tty_hotkey_with_name, @@ -185,4 +178,11 @@ CLASS zcl_abapgit_hotkeys IMPLEMENTATION. ENDMETHOD. + + METHOD should_show_hint. + IF gv_hint_was_shown = abap_false. + rv_yes = abap_true. + gv_hint_was_shown = abap_true. + ENDIF. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_abapgit_environment.clas.abap b/src/zcl_abapgit_environment.clas.abap index fc5bd8a55..b053482a4 100644 --- a/src/zcl_abapgit_environment.clas.abap +++ b/src/zcl_abapgit_environment.clas.abap @@ -1,25 +1,17 @@ CLASS zcl_abapgit_environment DEFINITION PUBLIC - CREATE PUBLIC . + FINAL + CREATE PRIVATE + GLOBAL FRIENDS zcl_abapgit_factory . PUBLIC SECTION. - CLASS-METHODS is_sap_cloud_platform - RETURNING - VALUE(rv_cloud) TYPE abap_bool. - - CLASS-METHODS is_merged - RETURNING - VALUE(rv_is_merged) TYPE abap_bool. - - CLASS-METHODS is_repo_object_changes_allowed - RETURNING VALUE(rv_allowed) TYPE abap_bool. + INTERFACES zif_abapgit_environment . PROTECTED SECTION. - - CLASS-DATA gv_cloud TYPE abap_bool VALUE abap_undefined ##NO_TEXT. - CLASS-DATA gv_is_merged TYPE abap_bool VALUE abap_undefined ##NO_TEXT. - CLASS-DATA gv_client_modifiable TYPE abap_bool VALUE abap_undefined. PRIVATE SECTION. + DATA mv_cloud TYPE abap_bool VALUE abap_undefined ##NO_TEXT. + DATA mv_is_merged TYPE abap_bool VALUE abap_undefined ##NO_TEXT. + DATA mv_client_modifiable TYPE abap_bool VALUE abap_undefined ##NO_TEXT. ENDCLASS. @@ -27,56 +19,71 @@ ENDCLASS. CLASS ZCL_ABAPGIT_ENVIRONMENT IMPLEMENTATION. - METHOD is_merged. - - DATA lo_marker TYPE REF TO data ##NEEDED. - - IF gv_is_merged = abap_undefined. - TRY. - CREATE DATA lo_marker TYPE REF TO ('LIF_ABAPMERGE_MARKER') ##no_text. - "No exception --> marker found - gv_is_merged = abap_true. - - CATCH cx_sy_create_data_error. - gv_is_merged = abap_false. - ENDTRY. - ENDIF. - - rv_is_merged = gv_is_merged. - + METHOD zif_abapgit_environment~compare_with_inactive. + rv_result = zif_abapgit_environment~is_sap_cloud_platform( ). ENDMETHOD. - METHOD is_repo_object_changes_allowed. + METHOD zif_abapgit_environment~is_merged. + DATA lo_marker TYPE REF TO data ##NEEDED. + + IF mv_is_merged = abap_undefined. + TRY. + CREATE DATA lo_marker TYPE REF TO ('LIF_ABAPMERGE_MARKER') ##no_text. + "No exception --> marker found + mv_is_merged = abap_true. + + CATCH cx_sy_create_data_error. + mv_is_merged = abap_false. + ENDTRY. + ENDIF. + rv_result = mv_is_merged. + ENDMETHOD. + + + METHOD zif_abapgit_environment~is_repo_object_changes_allowed. DATA lv_ind TYPE t000-ccnocliind. - IF gv_client_modifiable = abap_undefined. + IF mv_client_modifiable = abap_undefined. SELECT SINGLE ccnocliind FROM t000 INTO lv_ind WHERE mandt = sy-mandt. IF sy-subrc = 0 AND ( lv_ind = ' ' OR lv_ind = '1' ). "check changes allowed - gv_client_modifiable = abap_true. + mv_client_modifiable = abap_true. ELSE. - gv_client_modifiable = abap_false. + mv_client_modifiable = abap_false. ENDIF. ENDIF. - rv_allowed = gv_client_modifiable. + rv_result = mv_client_modifiable. ENDMETHOD. - METHOD is_sap_cloud_platform. + METHOD zif_abapgit_environment~is_restart_required. + " This method will be used in the context of SAP Cloud Platform: + " Pull/Push operations are executed in background jobs. + " In case of the respective application server needs to be restarted, + " it is required to terminae the background job and reschedule again. + rv_result = abap_false. + TRY. + CALL METHOD ('CL_APJ_SCP_TOOLS')=>('IS_RESTART_REQUIRED') + RECEIVING + restart_required = rv_result. + CATCH cx_sy_dyn_call_illegal_method. + rv_result = abap_false. + ENDTRY. + ENDMETHOD. - IF gv_cloud = abap_undefined. + + METHOD zif_abapgit_environment~is_sap_cloud_platform. + IF mv_cloud = abap_undefined. TRY. CALL METHOD ('CL_COS_UTILITIES')=>('IS_SAP_CLOUD_PLATFORM') RECEIVING - rv_is_sap_cloud_platform = gv_cloud. + rv_is_sap_cloud_platform = mv_cloud. CATCH cx_sy_dyn_call_illegal_method. - gv_cloud = abap_false. + mv_cloud = abap_false. ENDTRY. ENDIF. - - rv_cloud = gv_cloud. - + rv_result = mv_cloud. ENDMETHOD. ENDCLASS. diff --git a/src/zcl_abapgit_environment.clas.testclasses.abap b/src/zcl_abapgit_environment.clas.testclasses.abap index 608cccfaf..0c12a3b37 100644 --- a/src/zcl_abapgit_environment.clas.testclasses.abap +++ b/src/zcl_abapgit_environment.clas.testclasses.abap @@ -1,3 +1,5 @@ +CLASS ltcl_test DEFINITION DEFERRED. +CLASS zcl_abapgit_environment DEFINITION LOCAL FRIENDS ltcl_test. CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT @@ -5,7 +7,7 @@ CLASS ltcl_test DEFINITION FOR TESTING PRIVATE SECTION. DATA: - mo_cut TYPE REF TO zcl_abapgit_environment. + mi_cut TYPE REF TO zif_abapgit_environment. METHODS: setup, @@ -17,13 +19,13 @@ CLASS ltcl_test IMPLEMENTATION. METHOD setup. - CREATE OBJECT mo_cut. + CREATE OBJECT mi_cut TYPE zcl_abapgit_environment. ENDMETHOD. METHOD is_cloud. - mo_cut->is_sap_cloud_platform( ). + mi_cut->is_sap_cloud_platform( ). * no assertions, just make sure the dynamic code runs ENDMETHOD. diff --git a/src/zcl_abapgit_factory.clas.abap b/src/zcl_abapgit_factory.clas.abap index 3fb77643b..5a325f7f4 100644 --- a/src/zcl_abapgit_factory.clas.abap +++ b/src/zcl_abapgit_factory.clas.abap @@ -1,10 +1,8 @@ CLASS zcl_abapgit_factory DEFINITION PUBLIC CREATE PRIVATE - GLOBAL FRIENDS zcl_abapgit_injector . - + GLOBAL FRIENDS zcl_abapgit_injector. PUBLIC SECTION. - CLASS-METHODS get_tadir RETURNING VALUE(ri_tadir) TYPE REF TO zif_abapgit_tadir . @@ -33,6 +31,9 @@ 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_environment + RETURNING + VALUE(ro_environment) TYPE REF TO zif_abapgit_environment . PROTECTED SECTION. PRIVATE SECTION. @@ -43,7 +44,7 @@ CLASS zcl_abapgit_factory DEFINITION END OF ty_sap_package . TYPES: tty_sap_package TYPE HASHED TABLE OF ty_sap_package - WITH UNIQUE KEY package . + WITH UNIQUE KEY package . TYPES: BEGIN OF ty_code_inspector, package TYPE devclass, @@ -51,13 +52,14 @@ CLASS zcl_abapgit_factory DEFINITION END OF ty_code_inspector . TYPES: tty_code_inspector TYPE HASHED TABLE OF ty_code_inspector - WITH UNIQUE KEY package . + WITH UNIQUE KEY package . CLASS-DATA gi_tadir TYPE REF TO zif_abapgit_tadir . CLASS-DATA gt_sap_package TYPE tty_sap_package . CLASS-DATA gt_code_inspector TYPE tty_code_inspector . CLASS-DATA gi_stage_logic TYPE REF TO zif_abapgit_stage_logic . CLASS-DATA gi_cts_api TYPE REF TO zif_abapgit_cts_api . + CLASS-DATA go_environment TYPE REF TO zif_abapgit_environment . ENDCLASS. @@ -109,6 +111,14 @@ CLASS ZCL_ABAPGIT_FACTORY IMPLEMENTATION. ENDMETHOD. + METHOD get_environment. + IF go_environment IS NOT BOUND. + CREATE OBJECT go_environment TYPE zcl_abapgit_environment. + ENDIF. + ro_environment = go_environment. + ENDMETHOD. + + METHOD get_sap_package. DATA: ls_sap_package TYPE ty_sap_package. diff --git a/src/zcl_abapgit_injector.clas.abap b/src/zcl_abapgit_injector.clas.abap index cc23eba1d..ef2894ae2 100644 --- a/src/zcl_abapgit_injector.clas.abap +++ b/src/zcl_abapgit_injector.clas.abap @@ -22,6 +22,9 @@ CLASS zcl_abapgit_injector DEFINITION CLASS-METHODS set_cts_api IMPORTING !ii_cts_api TYPE REF TO zif_abapgit_cts_api . + CLASS-METHODS set_environment + IMPORTING + !io_environment TYPE REF TO zif_abapgit_environment . PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -59,6 +62,11 @@ CLASS ZCL_ABAPGIT_INJECTOR IMPLEMENTATION. ENDMETHOD. + METHOD set_environment. + zcl_abapgit_factory=>go_environment = io_environment. + ENDMETHOD. + + METHOD set_sap_package. DATA: ls_sap_package TYPE zcl_abapgit_factory=>ty_sap_package. @@ -90,8 +98,6 @@ CLASS ZCL_ABAPGIT_INJECTOR IMPLEMENTATION. METHOD set_tadir. - zcl_abapgit_factory=>gi_tadir = ii_tadir. - ENDMETHOD. ENDCLASS. diff --git a/src/zcl_abapgit_serialize.clas.abap b/src/zcl_abapgit_serialize.clas.abap index b5587ec77..8e7a65458 100644 --- a/src/zcl_abapgit_serialize.clas.abap +++ b/src/zcl_abapgit_serialize.clas.abap @@ -83,7 +83,7 @@ CLASS ZCL_ABAPGIT_SERIALIZE IMPLEMENTATION. lo_settings = zcl_abapgit_persist_settings=>get_instance( )->read( ). - IF zcl_abapgit_environment=>is_merged( ) = abap_true + IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true OR lo_settings->get_parallel_proc_disabled( ) = abap_true. gv_max_threads = 1. ENDIF. diff --git a/src/zif_abapgit_environment.intf.abap b/src/zif_abapgit_environment.intf.abap new file mode 100644 index 000000000..8a5fac357 --- /dev/null +++ b/src/zif_abapgit_environment.intf.abap @@ -0,0 +1,18 @@ +INTERFACE zif_abapgit_environment + PUBLIC. + METHODS is_sap_cloud_platform + RETURNING + VALUE(rv_result) TYPE abap_bool. + METHODS is_merged + RETURNING + VALUE(rv_result) TYPE abap_bool. + METHODS is_repo_object_changes_allowed + RETURNING + VALUE(rv_result) TYPE abap_bool. + METHODS compare_with_inactive + RETURNING + VALUE(rv_result) TYPE abap_bool. + METHODS is_restart_required + RETURNING + VALUE(rv_result) TYPE abap_bool. +ENDINTERFACE. diff --git a/src/zif_abapgit_environment.intf.xml b/src/zif_abapgit_environment.intf.xml new file mode 100644 index 000000000..2215e3c6e --- /dev/null +++ b/src/zif_abapgit_environment.intf.xml @@ -0,0 +1,15 @@ + + + + + + ZIF_ABAPGIT_ENVIRONMENT + E + abapGit Environment + 2 + 1 + X + + + +