CLASS zcl_abapgit_persist_migrate DEFINITION PUBLIC CREATE PUBLIC. PUBLIC SECTION. CLASS-METHODS: run RAISING zcx_abapgit_exception. PRIVATE SECTION. CONSTANTS: c_text TYPE string VALUE 'Generated by abapGit' ##NO_TEXT. CLASS-METHODS: migrate_settings RAISING zcx_abapgit_exception, table_create RAISING zcx_abapgit_exception, table_exists RETURNING VALUE(rv_exists) TYPE abap_bool, lock_create RAISING zcx_abapgit_exception, lock_exists RETURNING VALUE(rv_exists) TYPE abap_bool, settings_exists RETURNING VALUE(rv_exists) TYPE abap_bool. ENDCLASS. CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION. METHOD lock_create. DATA: lv_obj_name TYPE tadir-obj_name, ls_dd25v TYPE dd25v, lt_dd26e TYPE STANDARD TABLE OF dd26e WITH DEFAULT KEY, lt_dd27p TYPE STANDARD TABLE OF dd27p WITH DEFAULT KEY. FIELD-SYMBOLS: LIKE LINE OF lt_dd26e, LIKE LINE OF lt_dd27p. ls_dd25v-viewname = zcl_abapgit_persistence_db=>c_lock. ls_dd25v-aggtype = 'E'. ls_dd25v-roottab = zcl_abapgit_persistence_db=>c_tabname. ls_dd25v-ddlanguage = zif_abapgit_definitions=>gc_english. ls_dd25v-ddtext = c_text. APPEND INITIAL LINE TO lt_dd26e ASSIGNING . -viewname = zcl_abapgit_persistence_db=>c_lock. -tabname = zcl_abapgit_persistence_db=>c_tabname. -tabpos = '0001'. -fortabname = zcl_abapgit_persistence_db=>c_tabname. -enqmode = 'E'. APPEND INITIAL LINE TO lt_dd27p ASSIGNING . -viewname = zcl_abapgit_persistence_db=>c_lock. -objpos = '0001'. -viewfield = 'TYPE'. -tabname = zcl_abapgit_persistence_db=>c_tabname. -fieldname = 'TYPE'. -keyflag = abap_true. APPEND INITIAL LINE TO lt_dd27p ASSIGNING . -viewname = zcl_abapgit_persistence_db=>c_lock. -objpos = '0002'. -viewfield = 'VALUE'. -tabname = zcl_abapgit_persistence_db=>c_tabname. -fieldname = 'VALUE'. -keyflag = abap_true. CALL FUNCTION 'DDIF_ENQU_PUT' EXPORTING name = zcl_abapgit_persistence_db=>c_lock dd25v_wa = ls_dd25v TABLES dd26e_tab = lt_dd26e dd27p_tab = lt_dd27p EXCEPTIONS enqu_not_found = 1 name_inconsistent = 2 enqu_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'migrate, error from DDIF_ENQU_PUT' ). ENDIF. lv_obj_name = zcl_abapgit_persistence_db=>c_lock. CALL FUNCTION 'TR_TADIR_INTERFACE' EXPORTING wi_tadir_pgmid = 'R3TR' wi_tadir_object = 'ENQU' wi_tadir_obj_name = lv_obj_name wi_set_genflag = abap_true wi_test_modus = abap_false wi_tadir_devclass = '$TMP' EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'migrate, error from TR_TADIR_INTERFACE' ). ENDIF. CALL FUNCTION 'DDIF_ENQU_ACTIVATE' EXPORTING name = zcl_abapgit_persistence_db=>c_lock EXCEPTIONS not_found = 1 put_failure = 2 OTHERS = 3. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'migrate, error from DDIF_ENQU_ACTIVATE' ). ENDIF. ENDMETHOD. METHOD lock_exists. 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 ). ENDMETHOD. METHOD migrate_settings. DATA: lo_settings TYPE REF TO zcl_abapgit_settings, lo_persist_settings TYPE REF TO zcl_abapgit_persist_settings, 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. lo_persist_settings = zcl_abapgit_persist_settings=>get_instance( ). CREATE OBJECT lo_settings. lo_settings->set_defaults( ). TRY. lo_settings->set_proxy_url( zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'PROXY_URL' ) ). CATCH zcx_abapgit_not_found. ENDTRY. TRY. lo_settings->set_proxy_port( zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'PROXY_PORT' ) ). CATCH zcx_abapgit_not_found. ENDTRY. TRY. lv_flag = zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'PROXY_AUTH' ). lo_settings->set_proxy_authentication( lv_flag ). CATCH zcx_abapgit_not_found. ENDTRY. TRY. lv_critical_tests_as_string = zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'CRIT_TESTS' ). lv_critical_tests_as_boolean = lv_critical_tests_as_string. lo_settings->set_run_critical_tests( lv_critical_tests_as_boolean ). CATCH zcx_abapgit_not_found. ENDTRY. TRY. lv_max_lines_as_string = zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'MAX_LINES' ). lv_max_lines_as_integer = lv_max_lines_as_string. lo_settings->set_max_lines( lv_max_lines_as_integer ). CATCH zcx_abapgit_not_found cx_sy_conversion_no_number. ENDTRY. TRY. lv_adt_jump_enabled_as_string = zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'ADT_JUMP' ). lv_adt_jump_enabled_as_boolean = lv_adt_jump_enabled_as_string. lo_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ). CATCH zcx_abapgit_not_found. ENDTRY. TRY. lv_s_param_value = zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'COMMENT_LEN' ). lv_i_param_value = lv_s_param_value. lo_settings->set_commitmsg_comment_length( lv_i_param_value ). CATCH zcx_abapgit_not_found cx_sy_conversion_no_number. ENDTRY. TRY. lv_s_param_value = zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = 'BODY_SIZE' ). lv_i_param_value = lv_s_param_value. lo_settings->set_commitmsg_body_size( lv_i_param_value ). CATCH zcx_abapgit_not_found cx_sy_conversion_no_number. ENDTRY. lo_persist_settings->modify( lo_settings ). TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'PROXY_URL' ). CATCH zcx_abapgit_exception. ENDTRY. TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'PROXY_PORT' ). CATCH zcx_abapgit_exception. ENDTRY. TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'PROXY_AUTH' ). CATCH zcx_abapgit_exception. ENDTRY. TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'CRIT_TESTS' ). CATCH zcx_abapgit_exception. ENDTRY. TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'MAX_LINES' ). CATCH zcx_abapgit_exception. ENDTRY. TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'ADT_JUMP' ). CATCH zcx_abapgit_exception. ENDTRY. TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'COMMENT_LEN' ). CATCH zcx_abapgit_exception. ENDTRY. TRY. zcl_abapgit_persistence_db=>get_instance( )->delete( iv_type = 'SETTINGS' iv_value = 'BODY_SIZE' ). CATCH zcx_abapgit_exception. ENDTRY. ENDMETHOD. METHOD run. IF table_exists( ) = abap_false. table_create( ). ENDIF. IF lock_exists( ) = abap_false. lock_create( ). ENDIF. IF settings_exists( ) = abap_false. migrate_settings( ). ENDIF. ENDMETHOD. METHOD settings_exists. TRY. zcl_abapgit_persistence_db=>get_instance( )->read( iv_type = 'SETTINGS' iv_value = '' ). rv_exists = abap_true. CATCH zcx_abapgit_not_found. rv_exists = abap_false. ENDTRY. ENDMETHOD. METHOD table_create. DATA: lv_rc LIKE sy-subrc, lv_obj_name TYPE tadir-obj_name, ls_dd02v TYPE dd02v, ls_dd09l TYPE dd09l, lt_dd03p TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY. FIELD-SYMBOLS: LIKE LINE OF lt_dd03p. ls_dd02v-tabname = zcl_abapgit_persistence_db=>c_tabname. ls_dd02v-ddlanguage = zif_abapgit_definitions=>gc_english. ls_dd02v-tabclass = 'TRANSP'. ls_dd02v-ddtext = c_text. ls_dd02v-contflag = 'A'. ls_dd02v-exclass = '1'. ls_dd09l-tabname = zcl_abapgit_persistence_db=>c_tabname. ls_dd09l-as4local = 'A'. ls_dd09l-tabkat = '1'. ls_dd09l-tabart = 'APPL1'. ls_dd09l-bufallow = 'N'. APPEND INITIAL LINE TO lt_dd03p ASSIGNING . -tabname = zcl_abapgit_persistence_db=>c_tabname. -fieldname = 'TYPE'. -position = '0001'. -keyflag = 'X'. -datatype = 'CHAR'. -leng = '000012'. APPEND INITIAL LINE TO lt_dd03p ASSIGNING . -tabname = zcl_abapgit_persistence_db=>c_tabname. -fieldname = 'VALUE'. -position = '0002'. -keyflag = 'X'. -datatype = 'CHAR'. -leng = '000012'. APPEND INITIAL LINE TO lt_dd03p ASSIGNING . -tabname = zcl_abapgit_persistence_db=>c_tabname. -fieldname = 'DATA_STR'. -position = '0003'. -datatype = 'STRG'. CALL FUNCTION 'DDIF_TABL_PUT' EXPORTING name = zcl_abapgit_persistence_db=>c_tabname dd02v_wa = ls_dd02v dd09l_wa = ls_dd09l TABLES dd03p_tab = lt_dd03p EXCEPTIONS tabl_not_found = 1 name_inconsistent = 2 tabl_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'migrate, error from DDIF_TABL_PUT' ). ENDIF. lv_obj_name = zcl_abapgit_persistence_db=>c_tabname. CALL FUNCTION 'TR_TADIR_INTERFACE' EXPORTING wi_tadir_pgmid = 'R3TR' wi_tadir_object = 'TABL' wi_tadir_obj_name = lv_obj_name wi_set_genflag = abap_true wi_test_modus = abap_false wi_tadir_devclass = '$TMP' EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'migrate, error from TR_TADIR_INTERFACE' ). ENDIF. CALL FUNCTION 'DDIF_TABL_ACTIVATE' EXPORTING name = zcl_abapgit_persistence_db=>c_tabname auth_chk = abap_false IMPORTING rc = lv_rc EXCEPTIONS not_found = 1 put_failure = 2 OTHERS = 3. IF sy-subrc <> 0 OR lv_rc <> 0. zcx_abapgit_exception=>raise( 'migrate, error from DDIF_TABL_ACTIVATE' ). ENDIF. ENDMETHOD. METHOD table_exists. DATA: lv_tabname TYPE dd02l-tabname. SELECT SINGLE tabname FROM dd02l INTO lv_tabname WHERE tabname = zcl_abapgit_persistence_db=>c_tabname. rv_exists = boolc( sy-subrc = 0 ). ENDMETHOD. ENDCLASS.