Refactor ZCL_ABAPGIT_PERSIST_BACKGROUND (#4123)

+ remove MT_JOBS
+ add GET_BY_KEY that can be used instead of LIST

closes #1455
This commit is contained in:
Lars Hvam 2020-11-07 09:52:00 +01:00 committed by GitHub
parent 098682dcbb
commit 85404ce72f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 78 additions and 54 deletions

View File

@ -4,51 +4,69 @@ CLASS zcl_abapgit_persist_background DEFINITION
PUBLIC SECTION. PUBLIC SECTION.
TYPES: BEGIN OF ty_xml, TYPES:
BEGIN OF ty_xml,
method TYPE string, method TYPE string,
username TYPE string, username TYPE string,
password TYPE string, password TYPE string,
settings TYPE zif_abapgit_background=>ty_settings_tt, settings TYPE zif_abapgit_background=>ty_settings_tt,
END OF ty_xml. END OF ty_xml .
TYPES:
TYPES: BEGIN OF ty_background, BEGIN OF ty_background,
key TYPE zif_abapgit_persistence=>ty_value. key TYPE zif_abapgit_persistence=>ty_value.
INCLUDE TYPE ty_xml. INCLUDE TYPE ty_xml.
TYPES: END OF ty_background. TYPES: END OF ty_background .
TYPES: ty_background_keys TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY. TYPES:
ty_background_keys TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY .
METHODS constructor.
METHODS constructor .
METHODS list METHODS list
RETURNING VALUE(rt_list) TYPE ty_background_keys RETURNING
RAISING zcx_abapgit_exception. 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 METHODS modify
IMPORTING is_data TYPE ty_background IMPORTING
RAISING zcx_abapgit_exception. !is_data TYPE ty_background
RAISING
zcx_abapgit_exception .
METHODS delete METHODS delete
IMPORTING iv_key TYPE ty_background-key IMPORTING
RAISING zcx_abapgit_exception. !iv_key TYPE ty_background-key
RAISING
zcx_abapgit_exception .
METHODS exists METHODS exists
IMPORTING iv_key TYPE ty_background-key IMPORTING
RETURNING VALUE(rv_yes) TYPE abap_bool !iv_key TYPE ty_background-key
RAISING zcx_abapgit_exception. RETURNING
VALUE(rv_yes) TYPE abap_bool
RAISING
zcx_abapgit_exception .
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE 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 METHODS from_xml
IMPORTING iv_string TYPE string IMPORTING
RETURNING VALUE(rs_xml) TYPE ty_xml !iv_string TYPE string
RAISING zcx_abapgit_exception. RETURNING
VALUE(rs_xml) TYPE ty_xml
RAISING
zcx_abapgit_exception .
METHODS to_xml METHODS to_xml
IMPORTING is_background TYPE ty_background IMPORTING
RETURNING VALUE(rv_string) TYPE string. !is_background TYPE ty_background
RETURNING
VALUE(rv_string) TYPE string .
ENDCLASS. ENDCLASS.
@ -73,16 +91,18 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION.
mo_db->delete( iv_type = zcl_abapgit_persistence_db=>c_type_background mo_db->delete( iv_type = zcl_abapgit_persistence_db=>c_type_background
iv_value = iv_key ). iv_value = iv_key ).
DELETE mt_jobs WHERE key = iv_key.
ENDMETHOD. ENDMETHOD.
METHOD exists. METHOD exists.
list( ). " Ensure mt_jobs is populated TRY.
READ TABLE mt_jobs WITH KEY key = iv_key TRANSPORTING NO FIELDS. mo_db->read( iv_type = zcl_abapgit_persistence_db=>c_type_background
rv_yes = boolc( sy-subrc = 0 ). iv_value = iv_key ).
rv_yes = abap_true.
CATCH zcx_abapgit_not_found.
rv_yes = abap_false.
ENDTRY.
ENDMETHOD. ENDMETHOD.
@ -95,6 +115,20 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION.
ENDMETHOD. 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. METHOD list.
DATA: lt_list TYPE zif_abapgit_persistence=>ty_contents, DATA: lt_list TYPE zif_abapgit_persistence=>ty_contents,
@ -103,11 +137,6 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION.
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list, FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list,
<ls_output> LIKE LINE OF rt_list. <ls_output> 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 ). lt_list = mo_db->list_by_type( zcl_abapgit_persistence_db=>c_type_background ).
@ -119,8 +148,6 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION.
<ls_output>-key = <ls_list>-value. <ls_output>-key = <ls_list>-value.
ENDLOOP. ENDLOOP.
mt_jobs = rt_list.
ENDMETHOD. ENDMETHOD.
@ -133,9 +160,6 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION.
iv_value = is_data-key iv_value = is_data-key
iv_data = to_xml( is_data ) ). iv_data = to_xml( is_data ) ).
DELETE mt_jobs WHERE key = is_data-key.
APPEND is_data TO mt_jobs.
ENDMETHOD. ENDMETHOD.

View File

@ -144,12 +144,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BKG IMPLEMENTATION.
CREATE OBJECT lo_per. CREATE OBJECT lo_per.
lt_per = lo_per->list( ).
READ TABLE lt_per INTO rs_persist WITH KEY key = io_repo->get_key( ). TRY.
IF sy-subrc <> 0. rs_persist = lo_per->get_by_key( io_repo->get_key( ) ).
CATCH zcx_abapgit_not_found.
CLEAR rs_persist. CLEAR rs_persist.
ENDIF. ENDTRY.
ENDMETHOD. ENDMETHOD.