From 85404ce72fe0e2967174249596f8990af1f14796 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sat, 7 Nov 2020 09:52:00 +0100 Subject: [PATCH] Refactor ZCL_ABAPGIT_PERSIST_BACKGROUND (#4123) + remove MT_JOBS + add GET_BY_KEY that can be used instead of LIST closes #1455 --- .../zcl_abapgit_persist_background.clas.abap | 122 +++++++++++------- src/ui/zcl_abapgit_gui_page_bkg.clas.abap | 10 +- 2 files changed, 78 insertions(+), 54 deletions(-) diff --git a/src/persist/zcl_abapgit_persist_background.clas.abap b/src/persist/zcl_abapgit_persist_background.clas.abap index 89d0773a2..78a860bdf 100644 --- a/src/persist/zcl_abapgit_persist_background.clas.abap +++ b/src/persist/zcl_abapgit_persist_background.clas.abap @@ -4,51 +4,69 @@ CLASS zcl_abapgit_persist_background DEFINITION PUBLIC SECTION. - TYPES: BEGIN OF ty_xml, - method TYPE string, - username TYPE string, - password TYPE string, - settings TYPE zif_abapgit_background=>ty_settings_tt, - END OF ty_xml. - - TYPES: BEGIN OF ty_background, - key TYPE zif_abapgit_persistence=>ty_value. + TYPES: + BEGIN OF ty_xml, + method TYPE string, + username TYPE string, + password TYPE string, + settings TYPE zif_abapgit_background=>ty_settings_tt, + END OF ty_xml . + TYPES: + BEGIN OF ty_background, + key TYPE zif_abapgit_persistence=>ty_value. INCLUDE TYPE ty_xml. - TYPES: END OF ty_background. - TYPES: ty_background_keys TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY. - - METHODS constructor. + TYPES: END OF ty_background . + TYPES: + ty_background_keys TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY . + METHODS constructor . METHODS list - RETURNING VALUE(rt_list) TYPE ty_background_keys - RAISING zcx_abapgit_exception. - + RETURNING + VALUE(rt_list) TYPE ty_background_keys + RAISING + zcx_abapgit_exception . + METHODS get_by_key + IMPORTING + !iv_key TYPE ty_background-key + RETURNING + VALUE(rs_data) TYPE ty_background + RAISING + zcx_abapgit_exception + zcx_abapgit_not_found . METHODS modify - IMPORTING is_data TYPE ty_background - RAISING zcx_abapgit_exception. - + IMPORTING + !is_data TYPE ty_background + RAISING + zcx_abapgit_exception . METHODS delete - IMPORTING iv_key TYPE ty_background-key - RAISING zcx_abapgit_exception. - + IMPORTING + !iv_key TYPE ty_background-key + RAISING + zcx_abapgit_exception . METHODS exists - IMPORTING iv_key TYPE ty_background-key - RETURNING VALUE(rv_yes) TYPE abap_bool - RAISING zcx_abapgit_exception. + IMPORTING + !iv_key TYPE ty_background-key + RETURNING + VALUE(rv_yes) TYPE abap_bool + RAISING + zcx_abapgit_exception . PROTECTED SECTION. PRIVATE SECTION. - DATA: mo_db TYPE REF TO zcl_abapgit_persistence_db, - mt_jobs TYPE ty_background_keys. + + DATA mo_db TYPE REF TO zcl_abapgit_persistence_db . METHODS from_xml - IMPORTING iv_string TYPE string - RETURNING VALUE(rs_xml) TYPE ty_xml - RAISING zcx_abapgit_exception. - + IMPORTING + !iv_string TYPE string + RETURNING + VALUE(rs_xml) TYPE ty_xml + RAISING + zcx_abapgit_exception . METHODS to_xml - IMPORTING is_background TYPE ty_background - RETURNING VALUE(rv_string) TYPE string. - + IMPORTING + !is_background TYPE ty_background + RETURNING + VALUE(rv_string) TYPE string . ENDCLASS. @@ -73,16 +91,18 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION. mo_db->delete( iv_type = zcl_abapgit_persistence_db=>c_type_background iv_value = iv_key ). - DELETE mt_jobs WHERE key = iv_key. - ENDMETHOD. METHOD exists. - list( ). " Ensure mt_jobs is populated - READ TABLE mt_jobs WITH KEY key = iv_key TRANSPORTING NO FIELDS. - rv_yes = boolc( sy-subrc = 0 ). + TRY. + mo_db->read( iv_type = zcl_abapgit_persistence_db=>c_type_background + iv_value = iv_key ). + rv_yes = abap_true. + CATCH zcx_abapgit_not_found. + rv_yes = abap_false. + ENDTRY. ENDMETHOD. @@ -95,6 +115,20 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION. ENDMETHOD. + METHOD get_by_key. + + DATA: lt_list TYPE ty_background_keys. + + lt_list = list( ). + + READ TABLE lt_list WITH KEY key = iv_key INTO rs_data. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zcx_abapgit_not_found. + ENDIF. + + ENDMETHOD. + + METHOD list. DATA: lt_list TYPE zif_abapgit_persistence=>ty_contents, @@ -103,11 +137,6 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_list, LIKE LINE OF rt_list. - IF lines( mt_jobs ) > 0. - rt_list = mt_jobs. - RETURN. - ENDIF. - lt_list = mo_db->list_by_type( zcl_abapgit_persistence_db=>c_type_background ). @@ -119,8 +148,6 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION. -key = -value. ENDLOOP. - mt_jobs = rt_list. - ENDMETHOD. @@ -133,9 +160,6 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION. iv_value = is_data-key iv_data = to_xml( is_data ) ). - DELETE mt_jobs WHERE key = is_data-key. - APPEND is_data TO mt_jobs. - ENDMETHOD. diff --git a/src/ui/zcl_abapgit_gui_page_bkg.clas.abap b/src/ui/zcl_abapgit_gui_page_bkg.clas.abap index ff43912e3..695c4f8c0 100644 --- a/src/ui/zcl_abapgit_gui_page_bkg.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_bkg.clas.abap @@ -144,12 +144,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BKG IMPLEMENTATION. CREATE OBJECT lo_per. - lt_per = lo_per->list( ). - READ TABLE lt_per INTO rs_persist WITH KEY key = io_repo->get_key( ). - IF sy-subrc <> 0. - CLEAR rs_persist. - ENDIF. + TRY. + rs_persist = lo_per->get_by_key( io_repo->get_key( ) ). + CATCH zcx_abapgit_not_found. + CLEAR rs_persist. + ENDTRY. ENDMETHOD.