abapGit/src/persist/zcl_abapgit_persist_settings.clas.abap
2018-02-17 13:55:12 +01:00

87 lines
1.8 KiB
ABAP

CLASS zcl_abapgit_persist_settings DEFINITION
PUBLIC
CREATE PRIVATE .
PUBLIC SECTION.
METHODS modify
IMPORTING
!io_settings TYPE REF TO zcl_abapgit_settings
RAISING
zcx_abapgit_exception .
METHODS read
RETURNING
VALUE(ro_settings) TYPE REF TO zcl_abapgit_settings .
CLASS-METHODS get_instance
RETURNING
VALUE(ro_settings) TYPE REF TO zcl_abapgit_persist_settings .
PRIVATE SECTION.
DATA mo_settings TYPE REF TO zcl_abapgit_settings .
CLASS-DATA go_persist TYPE REF TO zcl_abapgit_persist_settings .
ENDCLASS.
CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION.
METHOD get_instance.
IF go_persist IS NOT BOUND.
CREATE OBJECT go_persist.
ENDIF.
ro_settings = go_persist.
ENDMETHOD.
METHOD modify.
DATA: lv_settings TYPE string.
lv_settings = io_settings->get_settings_xml( ).
zcl_abapgit_persistence_db=>get_instance( )->modify(
iv_type = zcl_abapgit_persistence_db=>c_type_settings
iv_value = ''
iv_data = lv_settings ).
" Settings have been modified: Update Buffered Settings
IF mo_settings IS BOUND.
mo_settings->set_xml_settings( lv_settings ).
ENDIF.
ENDMETHOD.
METHOD read.
IF mo_settings IS BOUND.
" Return Buffered Settings
ro_settings = mo_settings.
RETURN.
ENDIF.
" Settings have changed or have not yet been loaded
CREATE OBJECT ro_settings.
TRY.
ro_settings->set_xml_settings(
zcl_abapgit_persistence_db=>get_instance( )->read(
iv_type = zcl_abapgit_persistence_db=>c_type_settings
iv_value = '' ) ).
CATCH zcx_abapgit_not_found zcx_abapgit_exception.
ro_settings->set_defaults( ).
ENDTRY.
mo_settings = ro_settings.
ENDMETHOD.
ENDCLASS.