From b268c85415154131fb9bd2d94aaf721a8339c06c Mon Sep 17 00:00:00 2001 From: bigld Date: Sun, 2 Jul 2017 20:20:34 +0200 Subject: [PATCH] Save Settings as single Record Settings are now saved as single record in XML format A migration is done on startup --- src/zabapgit_persistence.prog.abap | 478 ++++++++++++++++------------- 1 file changed, 265 insertions(+), 213 deletions(-) diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index a01d44b84..f15217588 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -2,6 +2,8 @@ *& Include ZABAPGIT_PERSISTENCE *&---------------------------------------------------------------------* +CLASS lcl_settings DEFINITION DEFERRED. + CLASS lcl_persist_migrate DEFINITION FINAL. PUBLIC SECTION. @@ -12,6 +14,8 @@ CLASS lcl_persist_migrate DEFINITION FINAL. c_text TYPE string VALUE 'Generated by abapGit' ##NO_TEXT. CLASS-METHODS: + migrate_settings + RAISING lcx_exception, migrate_repo RAISING lcx_exception, migrate_user @@ -113,7 +117,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL. TYPES: BEGIN OF ty_repo, key TYPE lcl_persistence_db=>ty_value. - INCLUDE TYPE ty_repo_xml. + INCLUDE TYPE ty_repo_xml. TYPES: END OF ty_repo. TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY. TYPES: tt_repo_keys TYPE STANDARD TABLE OF ty_repo-key WITH DEFAULT KEY. @@ -230,7 +234,7 @@ CLASS lcl_persist_background DEFINITION FINAL. TYPES: BEGIN OF ty_background, key TYPE lcl_persistence_db=>ty_value. - INCLUDE TYPE ty_xml. + INCLUDE TYPE ty_xml. TYPES: END OF ty_background. TYPES: tt_background TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY. @@ -270,6 +274,99 @@ CLASS lcl_persist_background DEFINITION FINAL. ENDCLASS. "lcl_persistence_background DEFINITION + +CLASS lcl_settings DEFINITION FINAL. + + PUBLIC SECTION. + CONSTANTS: c_commitmsg_comment_length_dft TYPE i VALUE 50. + CONSTANTS: c_commitmsg_body_size_dft TYPE i VALUE 72. + CONSTANTS: c_dbtype_settings TYPE lcl_persistence_db=>ty_type VALUE 'SETTINGS' ##NO_TEXT. + + METHODS set_proxy_url + IMPORTING + iv_url TYPE string. + METHODS set_proxy_port + IMPORTING + iv_port TYPE string. + METHODS set_proxy_authentication + IMPORTING + iv_auth TYPE abap_bool. + METHODS get_proxy_url + RETURNING + VALUE(rv_proxy_url) TYPE string. + METHODS get_proxy_port + RETURNING + VALUE(rv_port) TYPE string. + METHODS get_proxy_authentication + RETURNING + VALUE(rv_auth) TYPE abap_bool. + METHODS set_run_critical_tests + IMPORTING + iv_run TYPE abap_bool. + METHODS + get_run_critical_tests + RETURNING VALUE(rv_run) TYPE abap_bool. + METHODS set_max_lines + IMPORTING iv_lines TYPE i. + METHODS get_max_lines + RETURNING + VALUE(rv_lines) TYPE i. + METHODS set_adt_jump_enanbled + IMPORTING iv_adt_jump_enabled TYPE abap_bool. + METHODS get_adt_jump_enabled + RETURNING + VALUE(rv_adt_jump_enabled) TYPE abap_bool. + METHODS set_commitmsg_comment_length + IMPORTING iv_length TYPE i. + METHODS get_commitmsg_comment_length + RETURNING + VALUE(rv_length) TYPE i. + METHODS set_commitmsg_body_size + IMPORTING iv_length TYPE i. + METHODS get_commitmsg_body_size + RETURNING + VALUE(rv_length) TYPE i. + METHODS get_settings_xml + RETURNING VALUE(ev_settings_xml) TYPE string + RAISING lcx_exception. + METHODS set_xml_settings + IMPORTING iv_settings_xml TYPE string + RAISING lcx_exception. + METHODS set_defaults. + + + + PRIVATE SECTION. + TYPES: BEGIN OF ty_s_settings, + proxy_url TYPE string, + proxy_port TYPE string, + proxy_auth TYPE string, + run_critical_tests 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. + +ENDCLASS. + +CLASS lcl_persist_settings DEFINITION FINAL. + + PUBLIC SECTION. + METHODS modify + IMPORTING + io_settings TYPE REF TO lcl_settings + RAISING + lcx_exception. + METHODS read + RETURNING + VALUE(ro_settings) TYPE REF TO lcl_settings. + PRIVATE SECTION. + + +ENDCLASS. + CLASS lcl_persist_background IMPLEMENTATION. METHOD constructor. @@ -1284,10 +1381,111 @@ CLASS lcl_persist_migrate IMPLEMENTATION. migrate_repo( ). migrate_user( ). + migrate_settings( ). ENDIF. ENDMETHOD. + METHOD migrate_settings. + + DATA: lr_settings TYPE REF TO lcl_settings. + DATA: lr_persist_settings TYPE REF TO lcl_persist_settings. + DATA: lv_critical_tests_as_string TYPE string. + DATA: lv_critical_tests_as_boolean TYPE abap_bool. + DATA: lv_max_lines_as_string TYPE string. + DATA: lv_flag TYPE abap_bool. + DATA: lv_max_lines_as_integer TYPE i. + DATA: lv_s_param_value TYPE string. + DATA: lv_i_param_value TYPE i. + DATA: lv_adt_jump_enabled_as_string TYPE string. + DATA: lv_adt_jump_enabled_as_boolean TYPE abap_bool. + + + TRY. + lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = '' ). + CATCH lcx_not_found. + + CREATE OBJECT lr_persist_settings. + CREATE OBJECT lr_settings. + lr_settings->set_defaults( ). + + TRY. + lr_settings->set_proxy_url( + lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'PROXY_URL' ) ). + CATCH lcx_not_found. + ENDTRY. + + TRY. + lr_settings->set_proxy_port( + lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'PROXY_PORT' ) ). + CATCH lcx_not_found. + ENDTRY. + + TRY. + lv_flag = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'PROXY_AUTH' ). + lr_settings->set_proxy_authentication( lv_flag ). + CATCH lcx_not_found. + ENDTRY. + + TRY. + lv_critical_tests_as_string = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'CRIT_TESTS' ). + lv_critical_tests_as_boolean = lv_critical_tests_as_string. + lr_settings->set_run_critical_tests( lv_critical_tests_as_boolean ). + CATCH lcx_not_found. + ENDTRY. + + TRY. + lv_max_lines_as_string = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'MAX_LINES' ). + lv_max_lines_as_integer = lv_max_lines_as_string. + lr_settings->set_max_lines( lv_max_lines_as_integer ). + CATCH lcx_not_found cx_sy_conversion_no_number. + ENDTRY. + + TRY. + lv_adt_jump_enabled_as_string = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'ADT_JUMP' ). + lv_adt_jump_enabled_as_boolean = lv_adt_jump_enabled_as_string. + lr_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ). + CATCH lcx_not_found. + ENDTRY. + + TRY. + lv_s_param_value = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'COMMENT_LEN' ). + lv_i_param_value = lv_s_param_value. + lr_settings->set_commitmsg_comment_length( lv_i_param_value ). + CATCH lcx_not_found cx_sy_conversion_no_number. + ENDTRY. + + TRY. + lv_s_param_value = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'BODY_SIZE' ). + lv_i_param_value = lv_s_param_value. + lr_settings->set_commitmsg_body_size( lv_i_param_value ). + CATCH lcx_not_found cx_sy_conversion_no_number. + ENDTRY. + + lr_persist_settings->modify( io_settings = lr_settings ). + + ENDTRY. + + ENDMETHOD. + METHOD migrate_repo. DATA: lt_repo TYPE lcl_persistence=>ty_repos_persi_tt, @@ -1531,148 +1729,115 @@ CLASS lcl_persist_migrate IMPLEMENTATION. ENDCLASS. -CLASS lcl_settings DEFINITION FINAL. - - PUBLIC SECTION. - 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_port - IMPORTING - iv_port TYPE string. - METHODS set_proxy_authentication - IMPORTING - iv_auth TYPE abap_bool. - METHODS get_proxy_url - RETURNING - VALUE(rv_proxy_url) TYPE string. - METHODS get_proxy_port - RETURNING - VALUE(rv_port) TYPE string. - METHODS get_proxy_authentication - RETURNING - VALUE(rv_auth) TYPE abap_bool. - METHODS set_run_critical_tests - IMPORTING - iv_run TYPE abap_bool. - METHODS - get_run_critical_tests - RETURNING VALUE(rv_run) TYPE abap_bool. - METHODS set_max_lines - IMPORTING iv_lines TYPE i. - METHODS get_max_lines - RETURNING - VALUE(rv_lines) TYPE i. - METHODS set_adt_jump_enanbled - IMPORTING iv_adt_jump_enabled TYPE abap_bool. - METHODS get_adt_jump_enabled - RETURNING - VALUE(rv_adt_jump_enabled) TYPE abap_bool. - METHODS set_commitmsg_comment_length - IMPORTING iv_length TYPE i. - METHODS get_commitmsg_comment_length - RETURNING - VALUE(rv_length) TYPE i. - METHODS set_commitmsg_body_size - IMPORTING iv_length TYPE i. - METHODS get_commitmsg_body_size - RETURNING - VALUE(rv_length) TYPE i. - - PRIVATE SECTION. - DATA: mv_proxy_url TYPE string, - mv_proxy_port TYPE string, - mv_proxy_auth TYPE string, - mv_run_critical_tests TYPE abap_bool, - mv_lines TYPE i, - mv_adt_jump_enabled TYPE abap_bool, - mv_commitmsg_comment_length TYPE i, - mv_commitmsg_body_size TYPE i. - -ENDCLASS. - CLASS lcl_settings IMPLEMENTATION. METHOD set_proxy_authentication. - mv_proxy_auth = iv_auth. + ms_settings-proxy_auth = iv_auth. ENDMETHOD. METHOD get_proxy_authentication. - rv_auth = mv_proxy_auth. + rv_auth = ms_settings-proxy_auth. ENDMETHOD. METHOD set_proxy_url. - mv_proxy_url = iv_url. + ms_settings-proxy_url = iv_url. ENDMETHOD. METHOD get_proxy_url. - rv_proxy_url = mv_proxy_url. + rv_proxy_url = ms_settings-proxy_url. ENDMETHOD. METHOD set_proxy_port. - mv_proxy_port = iv_port. + ms_settings-proxy_port = iv_port. ENDMETHOD. METHOD get_proxy_port. - rv_port = mv_proxy_port. + rv_port = ms_settings-proxy_port. ENDMETHOD. METHOD set_run_critical_tests. - mv_run_critical_tests = iv_run. + ms_settings-run_critical_tests = iv_run. ENDMETHOD. METHOD get_run_critical_tests. - rv_run = mv_run_critical_tests. + rv_run = ms_settings-run_critical_tests. ENDMETHOD. METHOD get_max_lines. - rv_lines = mv_lines. + rv_lines = ms_settings-max_lines. ENDMETHOD. METHOD set_max_lines. - mv_lines = iv_lines. + ms_settings-max_lines = iv_lines. ENDMETHOD. METHOD get_adt_jump_enabled. - rv_adt_jump_enabled = mv_adt_jump_enabled. + rv_adt_jump_enabled = ms_settings-adt_jump_enabled. ENDMETHOD. METHOD set_adt_jump_enanbled. - mv_adt_jump_enabled = iv_adt_jump_enabled. + ms_settings-adt_jump_enabled = iv_adt_jump_enabled. ENDMETHOD. METHOD get_commitmsg_comment_length. - rv_length = mv_commitmsg_comment_length. + rv_length = ms_settings-commitmsg_comment_length. ENDMETHOD. METHOD set_commitmsg_comment_length. - mv_commitmsg_comment_length = iv_length. + ms_settings-commitmsg_comment_length = iv_length. ENDMETHOD. METHOD get_commitmsg_body_size. - rv_length = mv_commitmsg_body_size. + rv_length = ms_settings-commitmsg_body_size. ENDMETHOD. METHOD set_commitmsg_body_size. - mv_commitmsg_body_size = iv_length. + ms_settings-commitmsg_body_size = iv_length. ENDMETHOD. -ENDCLASS. + METHOD get_settings_xml. -CLASS lcl_persist_settings DEFINITION FINAL. + DATA: lr_output TYPE REF TO lcl_xml_output. - PUBLIC SECTION. - METHODS modify - IMPORTING - io_settings TYPE REF TO lcl_settings - RAISING - lcx_exception. - METHODS read - RETURNING - VALUE(ro_settings) TYPE REF TO lcl_settings. + CREATE OBJECT lr_output. + + lr_output->add( iv_name = lcl_settings=>c_dbtype_settings + ig_data = ms_settings ). + + ev_settings_xml = lr_output->render( ). + + ENDMETHOD. + + METHOD set_xml_settings. + + DATA: lr_input TYPE REF TO lcl_xml_input. + + CREATE OBJECT lr_input EXPORTING iv_xml = iv_settings_xml. + + CLEAR ms_settings. + + lr_input->read( EXPORTING iv_name = lcl_settings=>c_dbtype_settings + CHANGING cg_data = ms_settings ). + + ENDMETHOD. + + METHOD set_defaults. + + CLEAR ms_settings. + + set_proxy_authentication( abap_false ). + + set_run_critical_tests( abap_false ). + + set_max_lines( 500 ). + + set_adt_jump_enanbled( abap_false ). + + set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ). + + set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ). + + ENDMETHOD. ENDCLASS. @@ -1680,140 +1845,27 @@ CLASS lcl_persist_settings IMPLEMENTATION. METHOD modify. -* todo, refactor this class to use XML and only 1 row in the database? - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'PROXY_URL' - iv_data = io_settings->get_proxy_url( ) ). - - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'PROXY_PORT' - iv_data = io_settings->get_proxy_port( ) ). - - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'PROXY_AUTH' - iv_data = io_settings->get_proxy_authentication( ) ). - - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'CRIT_TESTS' - iv_data = io_settings->get_run_critical_tests( ) ). - - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'MAX_LINES' - iv_data = |{ io_settings->get_max_lines( ) }| ). - - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'ADT_JUMP' - iv_data = io_settings->get_adt_jump_enabled( ) ). - - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'COMMENT_LEN' - iv_data = |{ io_settings->get_commitmsg_comment_length( ) }| ). - - lcl_app=>db( )->modify( - iv_type = 'SETTINGS' - iv_value = 'BODY_SIZE' - iv_data = |{ io_settings->get_commitmsg_body_size( ) }| ). + iv_type = lcl_settings=>c_dbtype_settings + iv_value = '' + iv_data = io_settings->get_settings_xml( ) ). ENDMETHOD. METHOD read. - DATA: lv_critical_tests_as_string TYPE string, - lv_critical_tests_as_boolean TYPE abap_bool, - lv_max_lines_as_string TYPE string, - lv_flag TYPE abap_bool, - lv_max_lines_as_integer TYPE i, - lv_s_param_value TYPE string, - lv_i_param_value TYPE i, - lv_adt_jump_enabled_as_string TYPE string, - lv_adt_jump_enabled_as_boolean TYPE abap_bool. - - CREATE OBJECT ro_settings. TRY. - ro_settings->set_proxy_url( - lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'PROXY_URL' ) ). - CATCH lcx_not_found. - ro_settings->set_proxy_url( '' ). - ENDTRY. - TRY. - ro_settings->set_proxy_port( - lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'PROXY_PORT' ) ). - CATCH lcx_not_found. - ro_settings->set_proxy_port( '' ). - ENDTRY. + ro_settings->set_xml_settings( + lcl_app=>db( )->read( iv_type = lcl_settings=>c_dbtype_settings + iv_value = '' ) ). - TRY. - lv_flag = lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'PROXY_AUTH' ). - ro_settings->set_proxy_authentication( lv_flag ). - CATCH lcx_not_found. - ro_settings->set_proxy_authentication( abap_false ). - ENDTRY. + CATCH lcx_not_found lcx_exception. - TRY. - lv_critical_tests_as_string = lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'CRIT_TESTS' ). - lv_critical_tests_as_boolean = lv_critical_tests_as_string. - ro_settings->set_run_critical_tests( lv_critical_tests_as_boolean ). - CATCH lcx_not_found. - ro_settings->set_run_critical_tests( abap_false ). - ENDTRY. + ro_settings->set_defaults( ). - TRY. - lv_max_lines_as_string = lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'MAX_LINES' ). - lv_max_lines_as_integer = lv_max_lines_as_string. - ro_settings->set_max_lines( lv_max_lines_as_integer ). - CATCH lcx_not_found cx_sy_conversion_no_number. - ro_settings->set_max_lines( 500 ). " default - ENDTRY. - - TRY. - lv_adt_jump_enabled_as_string = lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'ADT_JUMP' ). - lv_adt_jump_enabled_as_boolean = lv_adt_jump_enabled_as_string. - ro_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ). - CATCH lcx_not_found. - ro_settings->set_adt_jump_enanbled( abap_false ). - ENDTRY. - - TRY. - lv_s_param_value = lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'COMMENT_LEN' ). - lv_i_param_value = lv_s_param_value. - ro_settings->set_commitmsg_comment_length( lv_i_param_value ). - CATCH lcx_not_found cx_sy_conversion_no_number. - ro_settings->set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ). " default - ENDTRY. - - TRY. - lv_s_param_value = lcl_app=>db( )->read( - iv_type = 'SETTINGS' - iv_value = 'BODY_SIZE' ). - lv_i_param_value = lv_s_param_value. - ro_settings->set_commitmsg_body_size( lv_i_param_value ). - CATCH lcx_not_found cx_sy_conversion_no_number. - ro_settings->set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ). " default ENDTRY. ENDMETHOD.