Remove user setting migration (#4551)

This commit is contained in:
Frederik Hudák 2021-02-21 09:26:31 +01:00 committed by GitHub
parent 155044e2a6
commit bbeb1e7a58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,56 +5,20 @@ CLASS zcl_abapgit_persist_migrate DEFINITION PUBLIC CREATE PUBLIC.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_setting_to_migrate,
name TYPE string,
value TYPE string,
END OF ty_setting_to_migrate,
ty_settings_to_migrate TYPE STANDARD TABLE OF ty_setting_to_migrate
WITH NON-UNIQUE DEFAULT KEY.
CONSTANTS c_text TYPE string VALUE 'Generated by abapGit' ##NO_TEXT.
CLASS-METHODS table_create
RAISING
zcx_abapgit_exception .
zcx_abapgit_exception.
CLASS-METHODS table_exists
RETURNING
VALUE(rv_exists) TYPE abap_bool .
VALUE(rv_exists) TYPE abap_bool.
CLASS-METHODS lock_create
RAISING
zcx_abapgit_exception .
zcx_abapgit_exception.
CLASS-METHODS lock_exists
RETURNING
VALUE(rv_exists) TYPE abap_bool .
CLASS-METHODS migrate_settings
RAISING
zcx_abapgit_exception.
CLASS-METHODS migrate_setting
IMPORTING
iv_name TYPE string
CHANGING
ct_settings_to_migrate TYPE ty_settings_to_migrate
ci_document TYPE REF TO if_ixml_document.
CLASS-METHODS distribute_settings_to_users
IMPORTING
it_settings_to_migrate TYPE ty_settings_to_migrate
RAISING
zcx_abapgit_exception.
CLASS-METHODS update_global_settings
IMPORTING
ii_document TYPE REF TO if_ixml_document
RAISING
zcx_abapgit_exception.
CLASS-METHODS read_global_settings_xml
RETURNING
VALUE(rv_global_settings_xml) TYPE string
RAISING
zcx_abapgit_not_found.
CLASS-METHODS get_global_settings_document
RETURNING
VALUE(ri_global_settings_dom) TYPE REF TO if_ixml_document
RAISING
zcx_abapgit_not_found.
VALUE(rv_exists) TYPE abap_bool.
ENDCLASS.
@ -63,59 +27,6 @@ ENDCLASS.
CLASS zcl_abapgit_persist_migrate IMPLEMENTATION.
METHOD distribute_settings_to_users.
TYPES: ty_char12 TYPE c LENGTH 12.
DATA: lt_abapgit_users TYPE STANDARD TABLE OF ty_char12
WITH NON-UNIQUE DEFAULT KEY,
ls_user_settings TYPE zif_abapgit_definitions=>ty_s_user_settings,
li_user_persistence TYPE REF TO zif_abapgit_persist_user.
FIELD-SYMBOLS: <lv_user> LIKE LINE OF lt_abapgit_users,
<ls_setting_to_migrate> TYPE ty_setting_to_migrate,
<lg_user_specific_setting_val> TYPE data.
" distribute settings to all abapGit users
SELECT value FROM (zcl_abapgit_persistence_db=>c_tabname)
INTO TABLE lt_abapgit_users
WHERE type = zcl_abapgit_persistence_db=>c_type_user.
LOOP AT lt_abapgit_users ASSIGNING <lv_user>.
li_user_persistence = zcl_abapgit_persistence_user=>get_instance( <lv_user> ).
ls_user_settings = li_user_persistence->get_settings( ).
LOOP AT it_settings_to_migrate ASSIGNING <ls_setting_to_migrate>.
ASSIGN COMPONENT <ls_setting_to_migrate>-name
OF STRUCTURE ls_user_settings
TO <lg_user_specific_setting_val>.
ASSERT sy-subrc = 0.
<lg_user_specific_setting_val> = <ls_setting_to_migrate>-value.
ENDLOOP.
li_user_persistence->set_settings( ls_user_settings ).
ENDLOOP.
ENDMETHOD.
METHOD get_global_settings_document.
DATA: lv_global_settings_xml TYPE string.
lv_global_settings_xml = read_global_settings_xml( ).
ri_global_settings_dom = cl_ixml_80_20=>parse_to_document( stream_string = lv_global_settings_xml ).
ENDMETHOD.
METHOD lock_create.
DATA: lv_obj_name TYPE tadir-obj_name,
@ -207,7 +118,6 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION.
DATA: lv_viewname TYPE dd25l-viewname.
SELECT SINGLE viewname FROM dd25l INTO lv_viewname
WHERE viewname = zcl_abapgit_persistence_db=>c_lock.
rv_exists = boolc( sy-subrc = 0 ).
@ -215,78 +125,6 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION.
ENDMETHOD.
METHOD migrate_setting.
DATA: li_element TYPE REF TO if_ixml_element,
ls_setting_to_migrate LIKE LINE OF ct_settings_to_migrate.
li_element = ci_document->find_from_name( iv_name ).
IF li_element IS BOUND.
" The element is present in the global config.
" Therefore we have to migrate it
ls_setting_to_migrate-name = iv_name.
ls_setting_to_migrate-value = li_element->get_value( ).
INSERT ls_setting_to_migrate INTO TABLE ct_settings_to_migrate.
li_element->remove_node( ).
ENDIF.
ENDMETHOD.
METHOD migrate_settings.
DATA: li_global_settings_document TYPE REF TO if_ixml_document,
lt_settings_to_migrate TYPE ty_settings_to_migrate,
lx_error TYPE REF TO zcx_abapgit_not_found.
" migrate global settings to user specific settings
TRY.
li_global_settings_document = get_global_settings_document( ).
CATCH zcx_abapgit_not_found INTO lx_error.
" No global settings available, nothing todo.
RETURN.
ENDTRY.
migrate_setting(
EXPORTING
iv_name = |MAX_LINES|
CHANGING
ct_settings_to_migrate = lt_settings_to_migrate
ci_document = li_global_settings_document ).
migrate_setting(
EXPORTING
iv_name = |ADT_JUMP_ENABLED|
CHANGING
ct_settings_to_migrate = lt_settings_to_migrate
ci_document = li_global_settings_document ).
IF lines( lt_settings_to_migrate ) > 0.
distribute_settings_to_users( lt_settings_to_migrate ).
update_global_settings( li_global_settings_document ).
ENDIF.
ENDMETHOD.
METHOD read_global_settings_xml.
rv_global_settings_xml = zcl_abapgit_persistence_db=>get_instance( )->read(
iv_type = zcl_abapgit_persistence_db=>c_type_settings
iv_value = '' ).
ENDMETHOD.
METHOD run.
IF table_exists( ) = abap_false.
@ -297,8 +135,6 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION.
lock_create( ).
ENDIF.
migrate_settings( ).
ENDMETHOD.
@ -407,29 +243,4 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION.
ENDMETHOD.
METHOD update_global_settings.
DATA: li_ixml TYPE REF TO if_ixml,
lv_settings_xml TYPE string,
li_ostream TYPE REF TO if_ixml_ostream,
li_renderer TYPE REF TO if_ixml_renderer,
li_streamfactory TYPE REF TO if_ixml_stream_factory.
" finally update global settings
" migrated elements are already removed from document
li_ixml = cl_ixml=>create( ).
li_streamfactory = li_ixml->create_stream_factory( ).
li_ostream = li_streamfactory->create_ostream_cstring( lv_settings_xml ).
li_renderer = li_ixml->create_renderer( ostream = li_ostream
document = ii_document ).
li_renderer->render( ).
zcl_abapgit_persistence_db=>get_instance( )->update(
iv_type = zcl_abapgit_persistence_db=>c_type_settings
iv_value = ''
iv_data = lv_settings_xml ).
ENDMETHOD.
ENDCLASS.