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.
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: <ls_list> LIKE LINE OF lt_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 ).
@ -119,8 +148,6 @@ CLASS ZCL_ABAPGIT_PERSIST_BACKGROUND IMPLEMENTATION.
<ls_output>-key = <ls_list>-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.

View File

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