diff --git a/src/persist/zcl_abapgit_persist_migrate.clas.abap b/src/persist/zcl_abapgit_persist_migrate.clas.abap index 9af233d8b..b6906003e 100644 --- a/src/persist/zcl_abapgit_persist_migrate.clas.abap +++ b/src/persist/zcl_abapgit_persist_migrate.clas.abap @@ -4,6 +4,12 @@ CLASS zcl_abapgit_persist_migrate DEFINITION PUBLIC CREATE PUBLIC. CLASS-METHODS: run RAISING zcx_abapgit_exception. PRIVATE SECTION. + TYPES: BEGIN OF ty_settings_to_migrate, + name TYPE string, + value TYPE string, + END OF ty_settings_to_migrate, + tty_settings_to_migrate TYPE STANDARD TABLE OF ty_settings_to_migrate + WITH NON-UNIQUE DEFAULT KEY. CONSTANTS c_text TYPE string VALUE 'Generated by abapGit' ##NO_TEXT. @@ -19,11 +25,81 @@ CLASS zcl_abapgit_persist_migrate DEFINITION PUBLIC CREATE PUBLIC. 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 tty_settings_to_migrate + ci_document TYPE REF TO if_ixml_document. + CLASS-METHODS distribute_settings_to_users + IMPORTING + it_settings_to_migrate TYPE tty_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_exception. + CLASS-METHODS get_global_settings_document + RETURNING + VALUE(ri_global_settings_dom) TYPE REF TO if_ixml_document + RAISING + zcx_abapgit_exception. + ENDCLASS. -CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION. +CLASS zcl_abapgit_persist_migrate IMPLEMENTATION. + + + METHOD distribute_settings_to_users. + + DATA: lt_abapgit_users TYPE STANDARD TABLE OF char12 + WITH NON-UNIQUE DEFAULT KEY, + ls_user_settings TYPE zcl_abapgit_settings=>ty_s_user_settings, + lo_user_persistence TYPE REF TO zcl_abapgit_persistence_user. + + FIELD-SYMBOLS: LIKE LINE OF lt_abapgit_users, + TYPE zcl_abapgit_persist_migrate=>ty_settings_to_migrate, + 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 . + + lo_user_persistence = zcl_abapgit_persistence_user=>get_instance( ). + + ls_user_settings = lo_user_persistence->get_settings( ). + + LOOP AT it_settings_to_migrate ASSIGNING . + + ASSIGN COMPONENT -name + OF STRUCTURE ls_user_settings + TO . + ASSERT sy-subrc = 0. + + = -value. + + ENDLOOP. + + lo_user_persistence->set_settings( ls_user_settings ). + + ENDLOOP. + + ENDMETHOD. METHOD lock_create. @@ -125,6 +201,62 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION. ENDMETHOD. + METHOD migrate_setting. + + DATA: lo_element TYPE REF TO if_ixml_element, + ls_setting_to_migrate LIKE LINE OF ct_settings_to_migrate. + + lo_element = ci_document->find_from_name( iv_name ). + IF lo_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 = lo_element->get_value( ). + INSERT ls_setting_to_migrate INTO TABLE ct_settings_to_migrate. + + lo_element->remove_node( ). + + ENDIF. + + ENDMETHOD. + + + METHOD migrate_settings. + + DATA: li_global_settings_document TYPE REF TO if_ixml_document, + lt_settings_to_migrate TYPE tty_settings_to_migrate. + + " migrate global settings to user specific settings + + li_global_settings_document = get_global_settings_document( ). + + 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 run. IF table_exists( ) = abap_false. @@ -135,6 +267,8 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION. lock_create( ). ENDIF. + migrate_settings( ). + ENDMETHOD. @@ -242,4 +376,47 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION. rv_exists = boolc( sy-subrc = 0 ). ENDMETHOD. + + + METHOD update_global_settings. + + DATA: lv_settings_xml TYPE string. + + " finally update global settings + " migrated elements are already removed from document + + lv_settings_xml = cl_ixml_80_20=>render_to_string( ii_document ). + + zcl_abapgit_persistence_db=>get_instance( )->update( + iv_type = zcl_abapgit_persistence_db=>c_type_settings + iv_value = '' + iv_data = lv_settings_xml ). + + ENDMETHOD. + + + METHOD read_global_settings_xml. + + TRY. + rv_global_settings_xml = zcl_abapgit_persistence_db=>get_instance( )->read( + iv_type = zcl_abapgit_persistence_db=>c_type_settings + iv_value = '' ). + + CATCH zcx_abapgit_not_found INTO DATA(lx_not_found). + zcx_abapgit_exception=>raise( lx_not_found->get_text( ) ). + ENDTRY. + + 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. + ENDCLASS. diff --git a/src/persist/zcl_abapgit_persist_settings.clas.abap b/src/persist/zcl_abapgit_persist_settings.clas.abap index e0410fd30..a813a4ae3 100644 --- a/src/persist/zcl_abapgit_persist_settings.clas.abap +++ b/src/persist/zcl_abapgit_persist_settings.clas.abap @@ -38,7 +38,8 @@ CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION. METHOD modify. - DATA: lv_settings TYPE string. + DATA: lv_settings TYPE string, + ls_user_settings TYPE zcl_abapgit_settings=>ty_s_user_settings. lv_settings = io_settings->get_settings_xml( ). @@ -48,9 +49,14 @@ CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION. iv_value = '' iv_data = lv_settings ). + ls_user_settings = io_settings->get_user_settings( ). + + zcl_abapgit_persistence_user=>get_instance( )->set_settings( ls_user_settings ). + " Settings have been modified: Update Buffered Settings IF mo_settings IS BOUND. mo_settings->set_xml_settings( lv_settings ). + mo_settings->set_user_settings( ls_user_settings ). ENDIF. ENDMETHOD. @@ -74,6 +80,8 @@ CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION. iv_type = zcl_abapgit_persistence_db=>c_type_settings iv_value = '' ) ). + ro_settings->set_user_settings( zcl_abapgit_persistence_user=>get_instance( )->get_settings( ) ). + CATCH zcx_abapgit_not_found zcx_abapgit_exception. ro_settings->set_defaults( ). diff --git a/src/persist/zcl_abapgit_persistence_user.clas.abap b/src/persist/zcl_abapgit_persistence_user.clas.abap index 626a4677d..d7a2d5fd8 100644 --- a/src/persist/zcl_abapgit_persistence_user.clas.abap +++ b/src/persist/zcl_abapgit_persistence_user.clas.abap @@ -140,6 +140,16 @@ CLASS zcl_abapgit_persistence_user DEFINITION VALUE(rv_hide) TYPE abap_bool RAISING zcx_abapgit_exception . + METHODS get_settings + RETURNING + VALUE(rs_user_settings) TYPE zcl_abapgit_settings=>ty_s_user_settings + RAISING + zcx_abapgit_exception. + METHODS set_settings + IMPORTING + is_user_settings TYPE zcl_abapgit_settings=>ty_s_user_settings + RAISING + zcx_abapgit_exception. PRIVATE SECTION. TYPES: @@ -160,6 +170,7 @@ CLASS zcl_abapgit_persistence_user DEFINITION diff_unified TYPE abap_bool, favorites TYPE tt_favorites, repo_config TYPE ty_repo_config_tt, + settings TYPE zcl_abapgit_settings=>ty_s_user_settings, END OF ty_user . DATA mv_user TYPE xubname . @@ -203,11 +214,12 @@ CLASS zcl_abapgit_persistence_user DEFINITION !is_repo_config TYPE ty_repo_config RAISING zcx_abapgit_exception . + ENDCLASS. -CLASS ZCL_ABAPGIT_PERSISTENCE_USER IMPLEMENTATION. +CLASS zcl_abapgit_persistence_user IMPLEMENTATION. METHOD constructor. @@ -554,4 +566,25 @@ CLASS ZCL_ABAPGIT_PERSISTENCE_USER IMPLEMENTATION. COMMIT WORK AND WAIT. ENDMETHOD. "update_repo_config + + METHOD get_settings. + + DATA: ls_user TYPE ty_user. + + ls_user = read( ). + + rs_user_settings = ls_user-settings. + + ENDMETHOD. + + METHOD set_settings. + + DATA: ls_user TYPE ty_user. + + ls_user = read( ). + ls_user-settings = is_user_settings. + update( ls_user ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_settings.clas.abap b/src/ui/zcl_abapgit_gui_page_settings.clas.abap index a53fa620c..82cd1ddd6 100644 --- a/src/ui/zcl_abapgit_gui_page_settings.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_settings.clas.abap @@ -48,12 +48,18 @@ CLASS zcl_abapgit_gui_page_settings DEFINITION RAISING zcx_abapgit_exception. METHODS read_settings. + METHODS render_section_begin + IMPORTING + iv_header TYPE csequence + RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. + METHODS render_section_end + RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_settings IMPLEMENTATION. METHOD build_settings. @@ -215,15 +221,18 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. read_settings( ). ro_html->add( render_form_begin( ) ). + ro_html->add( render_section_begin( |Global settings| ) ). ro_html->add( render_proxy( ) ). ro_html->add( |
| ). - ro_html->add( render_max_lines( ) ). - ro_html->add( |
| ). - ro_html->add( render_adt_jump_enabled( ) ). - ro_html->add( |
| ). ro_html->add( render_commit_msg( ) ). ro_html->add( |
| ). ro_html->add( render_development_internals( ) ). + ro_html->add( render_section_end( ) ). + ro_html->add( render_section_begin( |User specific settings| ) ). + ro_html->add( render_max_lines( ) ). + ro_html->add( |
| ). + ro_html->add( render_adt_jump_enabled( ) ). + ro_html->add( render_section_end( ) ). ro_html->add( render_form_end( ) ). ENDMETHOD. "render_content @@ -347,4 +356,23 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. ENDCASE. ENDMETHOD. + + METHOD render_section_begin. + + CREATE OBJECT ro_html. + + ro_html->add( |

{ iv_header }

| ). + ro_html->add( |
| ). + + ENDMETHOD. + + + METHOD render_section_end. + + CREATE OBJECT ro_html. + + ro_html->add( |
| ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 09d540e60..3183a1cf7 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -348,6 +348,10 @@ div.settings_container { background-color: #f2f2f2; } +div.settings_section { + margin-left:50px +} + /* DIFF */ div.diff { background-color: #f2f2f2; diff --git a/src/zcl_abapgit_settings.clas.abap b/src/zcl_abapgit_settings.clas.abap index 99548fbe6..6f5c4c5e6 100644 --- a/src/zcl_abapgit_settings.clas.abap +++ b/src/zcl_abapgit_settings.clas.abap @@ -1,12 +1,17 @@ CLASS zcl_abapgit_settings DEFINITION PUBLIC CREATE PUBLIC. PUBLIC SECTION. + TYPES: BEGIN OF ty_s_user_settings, + max_lines TYPE i, + adt_jump_enabled TYPE abap_bool, + END OF ty_s_user_settings. CONSTANTS: c_commitmsg_comment_length_dft TYPE i VALUE 50. CONSTANTS: c_commitmsg_body_size_dft TYPE i VALUE 72. - METHODS: set_proxy_url - IMPORTING - iv_url TYPE string, + METHODS: + set_proxy_url + IMPORTING + iv_url TYPE string, set_proxy_port IMPORTING iv_port TYPE string, @@ -62,12 +67,20 @@ CLASS zcl_abapgit_settings DEFINITION PUBLIC CREATE PUBLIC. VALUE(ev_settings_xml) TYPE string RAISING zcx_abapgit_exception, + get_user_settings + RETURNING + VALUE(rs_settings) TYPE zcl_abapgit_settings=>ty_s_user_settings + RAISING + zcx_abapgit_exception, set_xml_settings IMPORTING iv_settings_xml TYPE string RAISING zcx_abapgit_exception, - set_defaults. + set_defaults, + set_user_settings + IMPORTING + is_user_settings TYPE ty_s_user_settings. PRIVATE SECTION. TYPES: BEGIN OF ty_s_settings, @@ -76,22 +89,21 @@ CLASS zcl_abapgit_settings DEFINITION PUBLIC CREATE PUBLIC. proxy_auth TYPE string, run_critical_tests TYPE abap_bool, experimental_features TYPE abap_bool, - max_lines TYPE i, - adt_jump_enabled TYPE abap_bool, commitmsg_comment_length TYPE i, commitmsg_body_size TYPE i, END OF ty_s_settings. - DATA: ms_settings TYPE ty_s_settings. + DATA: ms_settings TYPE ty_s_settings, + ms_user_settings TYPE ty_s_user_settings. ENDCLASS. -CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. +CLASS zcl_abapgit_settings IMPLEMENTATION. METHOD get_adt_jump_enabled. - rv_adt_jump_enabled = ms_settings-adt_jump_enabled. + rv_adt_jump_enabled = ms_user_settings-adt_jump_enabled. ENDMETHOD. @@ -111,7 +123,7 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. METHOD get_max_lines. - rv_lines = ms_settings-max_lines. + rv_lines = ms_user_settings-max_lines. ENDMETHOD. @@ -150,8 +162,9 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. ENDMETHOD. + METHOD set_adt_jump_enanbled. - ms_settings-adt_jump_enabled = iv_adt_jump_enabled. + ms_user_settings-adt_jump_enabled = iv_adt_jump_enabled. ENDMETHOD. @@ -186,7 +199,7 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. METHOD set_max_lines. - ms_settings-max_lines = iv_lines. + ms_user_settings-max_lines = iv_lines. ENDMETHOD. @@ -210,6 +223,11 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. ENDMETHOD. + METHOD set_user_settings. + ms_user_settings = is_user_settings. + ENDMETHOD. + + METHOD set_xml_settings. DATA: lo_input TYPE REF TO zcl_abapgit_xml_input. @@ -226,4 +244,9 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION. cg_data = ms_settings ). ENDMETHOD. + + METHOD get_user_settings. + rs_settings = ms_user_settings. + ENDMETHOD. + ENDCLASS.