From 96a010614b406ea27f1a9972b3096aa2bc61c406 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Wed, 16 Apr 2025 07:59:21 +0200 Subject: [PATCH] refactor `zcl_abapgit_user_record` (#7211) --- .../zcl_abapgit_background_push_au.clas.abap | 6 +- src/env/zcl_abapgit_user_record.clas.abap | 86 +++++++++---------- ..._abapgit_user_record.clas.testclasses.abap | 2 +- .../lib/zcl_abapgit_gui_chunk_lib.clas.abap | 2 +- .../db/zcl_abapgit_gui_page_db.clas.abap | 2 +- .../zcl_abapgit_gui_page_sett_info.clas.abap | 2 +- .../zcl_abapgit_gui_page_commit.clas.abap | 4 +- .../pages/zcl_abapgit_gui_page_tags.clas.abap | 4 +- 8 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src/background/zcl_abapgit_background_push_au.clas.abap b/src/background/zcl_abapgit_background_push_au.clas.abap index 756fd871c..946aa62bf 100644 --- a/src/background/zcl_abapgit_background_push_au.clas.abap +++ b/src/background/zcl_abapgit_background_push_au.clas.abap @@ -72,9 +72,9 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION. DATA: lo_user_record TYPE REF TO zcl_abapgit_user_record. - lo_user_record = zcl_abapgit_user_record=>get_instance( iv_changed_by ). - rs_user-name = lo_user_record->get_name( ). - rs_user-email = lo_user_record->get_email( ). + lo_user_record = zcl_abapgit_user_record=>get_instance( ). + rs_user-name = lo_user_record->get_name( iv_changed_by ). + rs_user-email = lo_user_record->get_email( iv_changed_by ). * If no email, fall back to localhost/default email IF rs_user-email IS INITIAL. diff --git a/src/env/zcl_abapgit_user_record.clas.abap b/src/env/zcl_abapgit_user_record.clas.abap index 47e848a35..2a43a9c36 100644 --- a/src/env/zcl_abapgit_user_record.clas.abap +++ b/src/env/zcl_abapgit_user_record.clas.abap @@ -6,20 +6,20 @@ CLASS zcl_abapgit_user_record DEFINITION PUBLIC SECTION. CLASS-METHODS reset. CLASS-METHODS get_instance - IMPORTING - !iv_user TYPE sy-uname RETURNING VALUE(ro_user) TYPE REF TO zcl_abapgit_user_record. - METHODS constructor - IMPORTING - !iv_user TYPE sy-uname. + METHODS get_name + IMPORTING + iv_username TYPE sy-uname RETURNING VALUE(rv_name) TYPE string. METHODS get_email + IMPORTING + iv_username TYPE sy-uname RETURNING VALUE(rv_email) TYPE string. - CLASS-METHODS get_title + METHODS get_title IMPORTING iv_username TYPE sy-uname RETURNING @@ -28,18 +28,14 @@ CLASS zcl_abapgit_user_record DEFINITION PRIVATE SECTION. TYPES: BEGIN OF ty_user, - user TYPE sy-uname, - o_user TYPE REF TO zcl_abapgit_user_record, + user TYPE sy-uname, + name TYPE string, + email TYPE string, END OF ty_user. CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user. - DATA: BEGIN OF ms_user, - name TYPE string, - email TYPE string, - END OF ms_user . - - METHODS check_user_exists + CLASS-METHODS check_user_exists IMPORTING iv_user TYPE sy-uname EXPORTING @@ -48,19 +44,35 @@ CLASS zcl_abapgit_user_record DEFINITION RAISING zcx_abapgit_exception. - METHODS get_user_dtls_from_other_clnt + CLASS-METHODS get_user_dtls_from_other_clnt IMPORTING - iv_user TYPE sy-uname. + iv_user TYPE sy-uname + RETURNING + VALUE(rs_user) TYPE ty_user. + + CLASS-METHODS build_cache + IMPORTING + iv_user TYPE sy-uname + RETURNING + VALUE(rs_user) TYPE ty_user. + + CLASS-METHODS read_cache + IMPORTING + iv_user TYPE sy-uname + RETURNING + VALUE(rs_user) TYPE ty_user. ENDCLASS. CLASS zcl_abapgit_user_record IMPLEMENTATION. + METHOD get_instance. + CREATE OBJECT ro_user. + ENDMETHOD. METHOD get_title. -* the queried username might not exist, so this method is static -* refactored for open-abap compatibility +* the queried username might not exist, refactored for open-abap compatibility DATA lr_addr3 TYPE REF TO data. FIELD-SYMBOLS TYPE any. @@ -120,9 +132,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. ENDMETHOD. - METHOD constructor. - - DATA ls_user TYPE ty_user. + METHOD build_cache. " Get user details TRY. @@ -130,41 +140,31 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. EXPORTING iv_user = iv_user IMPORTING - ev_fullname = ms_user-name - ev_email = ms_user-email ). + ev_fullname = rs_user-name + ev_email = rs_user-email ). CATCH zcx_abapgit_exception. " Could not find user, try to get from other clients - get_user_dtls_from_other_clnt( iv_user ). + rs_user = get_user_dtls_from_other_clnt( iv_user ). ENDTRY. - " If the user has been found add it to the list - IF ms_user-name IS NOT INITIAL AND ms_user-email IS NOT INITIAL. - ls_user-user = iv_user. - ls_user-o_user = me. - INSERT ls_user INTO TABLE gt_user. - ENDIF. + rs_user-user = iv_user. + INSERT rs_user INTO TABLE gt_user. ENDMETHOD. METHOD get_email. - rv_email = ms_user-email. + rv_email = read_cache( iv_username )-email. ENDMETHOD. - METHOD get_instance. + METHOD read_cache. - FIELD-SYMBOLS TYPE ty_user. - - READ TABLE gt_user ASSIGNING WITH TABLE KEY user = iv_user. - IF sy-subrc = 0. - ro_user = -o_user. - ELSE. - CREATE OBJECT ro_user - EXPORTING - iv_user = iv_user. + READ TABLE gt_user INTO rs_user WITH TABLE KEY user = iv_user. + IF sy-subrc <> 0. + rs_user = build_cache( iv_user ). ENDIF. ENDMETHOD. @@ -172,7 +172,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. METHOD get_name. - rv_name = ms_user-name. + rv_name = read_cache( iv_username )-name. ENDMETHOD. @@ -190,7 +190,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. ORDER BY PRIMARY KEY. LOOP AT lt_dev_clients ASSIGNING . - SELECT SINGLE p~name_text a~smtp_addr INTO (ms_user-name, ms_user-email) + SELECT SINGLE u~bname p~name_text a~smtp_addr INTO (rs_user-user, rs_user-name, rs_user-email) FROM usr21 AS u INNER JOIN adrp AS p ON p~persnumber = u~persnumber AND p~client = u~mandt diff --git a/src/env/zcl_abapgit_user_record.clas.testclasses.abap b/src/env/zcl_abapgit_user_record.clas.testclasses.abap index 02ce85af2..72ab1eb1f 100644 --- a/src/env/zcl_abapgit_user_record.clas.testclasses.abap +++ b/src/env/zcl_abapgit_user_record.clas.testclasses.abap @@ -19,7 +19,7 @@ CLASS ltcl_user_record IMPLEMENTATION. DATA: lo_user_record TYPE REF TO zcl_abapgit_user_record. zcl_abapgit_user_record=>reset( ). - lo_user_record = zcl_abapgit_user_record=>get_instance( c_wrong_user ). + lo_user_record = zcl_abapgit_user_record=>get_instance( ). cl_abap_unit_assert=>assert_equals( exp = 0 diff --git a/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap b/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap index 2c3603836..68fcd1ae4 100644 --- a/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap +++ b/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap @@ -1323,7 +1323,7 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION. ENDIF. IF iv_username <> zcl_abapgit_objects_super=>c_user_unknown AND iv_suppress_title = abap_false. - lv_title = zcl_abapgit_user_record=>get_title( iv_username ). + lv_title = zcl_abapgit_user_record=>get_instance( )->get_title( iv_username ). ENDIF. lv_jump = |{ zif_abapgit_definitions=>c_action-jump_user }?user={ iv_username }|. diff --git a/src/ui/pages/db/zcl_abapgit_gui_page_db.clas.abap b/src/ui/pages/db/zcl_abapgit_gui_page_db.clas.abap index e6e435979..dcca8eef3 100644 --- a/src/ui/pages/db/zcl_abapgit_gui_page_db.clas.abap +++ b/src/ui/pages/db/zcl_abapgit_gui_page_db.clas.abap @@ -367,7 +367,7 @@ CLASS zcl_abapgit_gui_page_db IMPLEMENTATION. WHEN zcl_abapgit_persistence_db=>c_type_user. lv_descr = 'Personal Settings'. - ls_explanation-value = zcl_abapgit_user_record=>get_instance( is_data-value )->get_name( ). + ls_explanation-value = zcl_abapgit_user_record=>get_instance( )->get_name( is_data-value ). WHEN zcl_abapgit_persistence_db=>c_type_settings. lv_descr = 'Global Settings'. diff --git a/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap b/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap index b723d2b8d..f256a63c6 100644 --- a/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap +++ b/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap @@ -194,7 +194,7 @@ CLASS zcl_abapgit_gui_page_sett_info IMPLEMENTATION. ENDIF. IF iv_username <> zcl_abapgit_objects_super=>c_user_unknown. - lv_title = zcl_abapgit_user_record=>get_title( iv_username ). + lv_title = zcl_abapgit_user_record=>get_instance( )->get_title( iv_username ). ENDIF. rv_user = iv_username. diff --git a/src/ui/pages/zcl_abapgit_gui_page_commit.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_commit.clas.abap index 2949faa54..5ca2e2cf7 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_commit.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_commit.clas.abap @@ -241,7 +241,7 @@ CLASS zcl_abapgit_gui_page_commit IMPLEMENTATION. ENDIF. IF rv_email IS INITIAL. " get default from user record - rv_email = zcl_abapgit_user_record=>get_instance( sy-uname )->get_email( ). + rv_email = zcl_abapgit_user_record=>get_instance( )->get_email( sy-uname ). ENDIF. ENDMETHOD. @@ -259,7 +259,7 @@ CLASS zcl_abapgit_gui_page_commit IMPLEMENTATION. ENDIF. IF rv_user IS INITIAL. " get default from user record - rv_user = zcl_abapgit_user_record=>get_instance( sy-uname )->get_name( ). + rv_user = zcl_abapgit_user_record=>get_instance( )->get_name( sy-uname ). ENDIF. ENDMETHOD. diff --git a/src/ui/pages/zcl_abapgit_gui_page_tags.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_tags.clas.abap index 9e589bd70..8071ebc42 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_tags.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_tags.clas.abap @@ -237,7 +237,7 @@ CLASS zcl_abapgit_gui_page_tags IMPLEMENTATION. ENDIF. IF rv_email IS INITIAL. " get default from user record - rv_email = zcl_abapgit_user_record=>get_instance( sy-uname )->get_email( ). + rv_email = zcl_abapgit_user_record=>get_instance( )->get_email( sy-uname ). ENDIF. ENDMETHOD. @@ -255,7 +255,7 @@ CLASS zcl_abapgit_gui_page_tags IMPLEMENTATION. ENDIF. IF rv_user IS INITIAL. " get default from user record - rv_user = zcl_abapgit_user_record=>get_instance( sy-uname )->get_name( ). + rv_user = zcl_abapgit_user_record=>get_instance( )->get_name( sy-uname ). ENDIF. ENDMETHOD.