Refactoring of ZCL_ABAPGIT_ENVIRONMENT (#2826)

* Refactoring of ZCL_ABAPGIT_ENVIRONMENT #2810

* fixes saplint issues

* fixes saplint isues

* fixes saplint issues

* fixes issue based on review

* align zcl_abapgit_objects.clas.abap to master

* add the test class again
This commit is contained in:
ThomasPloski 2019-08-01 11:49:59 +02:00 committed by Lars Hvam
parent 3f05693262
commit a5ebe60642
10 changed files with 125 additions and 67 deletions

View File

@ -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.

View File

@ -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|.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_ENVIRONMENT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit Environment</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>