diff --git a/src/ui/zcl_abapgit_free_sel_dialog.clas.abap b/src/ui/zcl_abapgit_free_sel_dialog.clas.abap new file mode 100644 index 000000000..cee8e76f5 --- /dev/null +++ b/src/ui/zcl_abapgit_free_sel_dialog.clas.abap @@ -0,0 +1,356 @@ +"! Free Selections Dialog +CLASS zcl_abapgit_free_sel_dialog DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + TYPES: + BEGIN OF ty_free_sel_field, + name TYPE fieldname, + only_parameter TYPE abap_bool, + param_obligatory TYPE abap_bool, + value TYPE string, + value_range TYPE rsds_selopt_t, + ddic_tabname TYPE tabname, + ddic_fieldname TYPE fieldname, + text TYPE rsseltext, + END OF ty_free_sel_field, + ty_free_sel_field_tab TYPE STANDARD TABLE OF ty_free_sel_field WITH DEFAULT KEY. + METHODS: + constructor IMPORTING iv_title TYPE syst_title OPTIONAL + iv_frame_text TYPE syst_title OPTIONAL, + set_fields CHANGING ct_fields TYPE ty_free_sel_field_tab, + show RAISING zcx_abapgit_cancel + zcx_abapgit_exception. + PROTECTED SECTION. + PRIVATE SECTION. + TYPES: + ty_field_text_tab TYPE STANDARD TABLE OF rsdstexts WITH DEFAULT KEY. + METHODS: + convert_input_fields EXPORTING et_default_values TYPE rsds_trange + es_restriction TYPE sscr_restrict_ds + et_fields TYPE rsdsfields_t + et_field_texts TYPE ty_field_text_tab, + free_selections_init IMPORTING it_default_values TYPE rsds_trange + is_restriction TYPE sscr_restrict_ds + EXPORTING ev_selection_id TYPE dynselid + CHANGING ct_fields TYPE rsdsfields_t + ct_field_texts TYPE ty_field_text_tab + RAISING zcx_abapgit_exception, + free_selections_dialog IMPORTING iv_selection_id TYPE dynselid + EXPORTING et_result_ranges TYPE rsds_trange + CHANGING ct_fields TYPE rsdsfields_t + RAISING zcx_abapgit_cancel + zcx_abapgit_exception, + validate_results IMPORTING it_result_ranges TYPE rsds_trange + RAISING zcx_abapgit_exception, + transfer_results_to_input IMPORTING it_result_ranges TYPE rsds_trange. + DATA: + mr_fields TYPE REF TO ty_free_sel_field_tab, + mv_title TYPE syst_title, + mv_frame_text TYPE syst_title. +ENDCLASS. + + + +CLASS zcl_abapgit_free_sel_dialog IMPLEMENTATION. + METHOD constructor. + mv_title = iv_title. + mv_frame_text = iv_frame_text. + ENDMETHOD. + + METHOD set_fields. + GET REFERENCE OF ct_fields INTO mr_fields. + ENDMETHOD. + + METHOD show. + DATA: lt_default_values TYPE rsds_trange, + ls_restriction TYPE sscr_restrict_ds, + lt_fields TYPE rsdsfields_t, + lt_field_texts TYPE ty_field_text_tab, + lv_repeat_dialog TYPE abap_bool VALUE abap_true, + lv_selection_id TYPE dynselid, + lt_results TYPE rsds_trange, + lx_validation_error TYPE REF TO zcx_abapgit_exception. + + convert_input_fields( + IMPORTING + et_default_values = lt_default_values + es_restriction = ls_restriction + et_fields = lt_fields + et_field_texts = lt_field_texts ). + + WHILE lv_repeat_dialog = abap_true. + lv_repeat_dialog = abap_false. + + free_selections_init( + EXPORTING + it_default_values = lt_default_values + is_restriction = ls_restriction + IMPORTING + ev_selection_id = lv_selection_id + CHANGING + ct_fields = lt_fields + ct_field_texts = lt_field_texts ). + + free_selections_dialog( + EXPORTING + iv_selection_id = lv_selection_id + IMPORTING + et_result_ranges = lt_results + CHANGING + ct_fields = lt_fields ). + + TRY. + validate_results( lt_results ). + CATCH zcx_abapgit_exception INTO lx_validation_error. + lv_repeat_dialog = abap_true. + lt_default_values = lt_results. + MESSAGE lx_validation_error TYPE 'I' DISPLAY LIKE 'E'. + CONTINUE. + ENDTRY. + + transfer_results_to_input( lt_results ). + ENDWHILE. + ENDMETHOD. + + METHOD convert_input_fields. + CONSTANTS: lc_only_eq_optlist_name TYPE sychar10 VALUE 'ONLYEQ'. + DATA: ls_parameter_opt_list TYPE sscr_opt_list. + FIELD-SYMBOLS: TYPE ty_free_sel_field, + TYPE ty_free_sel_field_tab, + TYPE rsdsfields, + TYPE sscr_ass_ds, + TYPE rsdstexts, + TYPE rsds_range, + TYPE rsds_frange, + TYPE rsdsselopt. + + ASSERT mr_fields IS BOUND. + ASSIGN mr_fields->* TO . + + LOOP AT ASSIGNING . + APPEND INITIAL LINE TO et_fields ASSIGNING . + -fieldname = -ddic_fieldname. + -tablename = -ddic_tabname. + + IF -only_parameter = abap_true. + IF es_restriction IS INITIAL. + ls_parameter_opt_list-name = lc_only_eq_optlist_name. + ls_parameter_opt_list-options-eq = abap_true. + APPEND ls_parameter_opt_list TO es_restriction-opt_list_tab. + ENDIF. + + APPEND INITIAL LINE TO es_restriction-ass_tab ASSIGNING . + -kind = 'S'. + -fieldname = -ddic_fieldname. + -tablename = -ddic_tabname. + -sg_main = 'I'. + -sg_addy = 'N'. + -op_main = lc_only_eq_optlist_name. + ENDIF. + + IF -text IS NOT INITIAL. + APPEND INITIAL LINE TO et_field_texts ASSIGNING . + -fieldname = -ddic_fieldname. + -tablename = -ddic_tabname. + -text = -text. + ENDIF. + + IF -value IS NOT INITIAL OR -value_range IS NOT INITIAL. + READ TABLE et_default_values WITH KEY tablename = -ddic_tabname + ASSIGNING . + IF sy-subrc <> 0. + APPEND INITIAL LINE TO et_default_values ASSIGNING . + -tablename = -ddic_tabname. + ENDIF. + + APPEND INITIAL LINE TO -frange_t ASSIGNING . + -fieldname = -ddic_fieldname. + + IF -value IS NOT INITIAL. + APPEND INITIAL LINE TO -selopt_t ASSIGNING . + -sign = 'I'. + -option = 'EQ'. + -low = -value. + ELSEIF -value_range IS NOT INITIAL. + -selopt_t = -value_range. + ENDIF. + ENDIF. + ENDLOOP. + ENDMETHOD. + + METHOD free_selections_init. + CALL FUNCTION 'FREE_SELECTIONS_INIT' + EXPORTING + kind = 'F' + field_ranges_int = it_default_values + restriction = is_restriction + IMPORTING + selection_id = ev_selection_id + TABLES + fields_tab = ct_fields + field_texts = ct_field_texts + EXCEPTIONS + fields_incomplete = 1 + fields_no_join = 2 + field_not_found = 3 + no_tables = 4 + table_not_found = 5 + expression_not_supported = 6 + incorrect_expression = 7 + illegal_kind = 8 + area_not_found = 9 + inconsistent_area = 10 + kind_f_no_fields_left = 11 + kind_f_no_fields = 12 + too_many_fields = 13 + dup_field = 14 + field_no_type = 15 + field_ill_type = 16 + dup_event_field = 17 + node_not_in_ldb = 18 + area_no_field = 19 + OTHERS = 20. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |Error from FREE_SELECTIONS_INIT: { sy-subrc }| ). + ENDIF. + ENDMETHOD. + + METHOD free_selections_dialog. + CALL FUNCTION 'FREE_SELECTIONS_DIALOG' + EXPORTING + selection_id = iv_selection_id + title = mv_title + frame_text = mv_frame_text + status = 1 + as_window = abap_true + no_intervals = abap_true + tree_visible = abap_false + IMPORTING + field_ranges = et_result_ranges + TABLES + fields_tab = ct_fields + EXCEPTIONS + internal_error = 1 + no_action = 2 + selid_not_found = 3 + illegal_status = 4 + OTHERS = 5. + CASE sy-subrc. + WHEN 0 ##NEEDED. + WHEN 2. + RAISE EXCEPTION TYPE zcx_abapgit_cancel. + WHEN OTHERS. + zcx_abapgit_exception=>raise( |Error from FREE_SELECTIONS_DIALOG: { sy-subrc }| ). + ENDCASE. + ENDMETHOD. + + METHOD validate_results. + DATA: ls_error_msg TYPE symsg, + lv_ddut_fieldname TYPE fnam_____4, + lv_value TYPE rsdsselop_. + FIELD-SYMBOLS: TYPE rsds_range, + TYPE rsds_frange, + TYPE ty_free_sel_field, + TYPE ty_free_sel_field_tab, + TYPE rsdsselopt. + + ASSIGN mr_fields->* TO . + ASSERT sy-subrc = 0. + + LOOP AT it_result_ranges ASSIGNING . + LOOP AT -frange_t ASSIGNING . + READ TABLE WITH KEY ddic_tabname = -tablename + ddic_fieldname = -fieldname + ASSIGNING . + ASSERT sy-subrc = 0. + IF -only_parameter = abap_false. + CONTINUE. + ENDIF. + + CASE lines( -selopt_t ). + WHEN 0. + CLEAR lv_value. + WHEN 1. + READ TABLE -selopt_t INDEX 1 ASSIGNING . + ASSERT sy-subrc = 0. + lv_value = -low. + WHEN OTHERS. + ASSERT 1 = 2. + ENDCASE. + + CLEAR ls_error_msg. + lv_ddut_fieldname = -ddic_fieldname. + + CALL FUNCTION 'DDUT_INPUT_CHECK' + EXPORTING + tabname = -ddic_tabname + fieldname = lv_ddut_fieldname + value = lv_value + accept_all_initial = abap_true + value_list = 'S' + IMPORTING + msgid = ls_error_msg-msgid + msgty = ls_error_msg-msgty + msgno = ls_error_msg-msgno + msgv1 = ls_error_msg-msgv1 + msgv2 = ls_error_msg-msgv2 + msgv3 = ls_error_msg-msgv3 + msgv4 = ls_error_msg-msgv4. + IF ls_error_msg IS NOT INITIAL. + zcx_abapgit_exception=>raise_t100( + iv_msgid = ls_error_msg-msgid + iv_msgno = ls_error_msg-msgno + iv_msgv1 = ls_error_msg-msgv1 + iv_msgv2 = ls_error_msg-msgv2 + iv_msgv3 = ls_error_msg-msgv3 + iv_msgv4 = ls_error_msg-msgv4 ). + ELSEIF -param_obligatory = abap_true AND lv_value IS INITIAL. + zcx_abapgit_exception=>raise( |Field '{ -name }' is obligatory| ). + ENDIF. + ENDLOOP. + ENDLOOP. + ENDMETHOD. + + METHOD transfer_results_to_input. + FIELD-SYMBOLS: TYPE ty_free_sel_field, + TYPE ty_free_sel_field_tab, + TYPE rsds_range, + TYPE rsds_frange, + TYPE rsdsselopt. + + ASSIGN mr_fields->* TO . + ASSERT sy-subrc = 0. + + LOOP AT ASSIGNING . + READ TABLE it_result_ranges WITH KEY tablename = -ddic_tabname + ASSIGNING . + IF sy-subrc = 0. + READ TABLE -frange_t WITH KEY fieldname = -ddic_fieldname + ASSIGNING . + IF sy-subrc = 0 AND -selopt_t IS NOT INITIAL. + IF -only_parameter = abap_true. + ASSERT lines( -selopt_t ) = 1. + + READ TABLE -selopt_t INDEX 1 ASSIGNING . + ASSERT sy-subrc = 0. + + ASSERT -sign = 'I' AND + -option = 'EQ' AND + -high IS INITIAL. + + -value = -low. + ELSE. + -value_range = -selopt_t. + ENDIF. + ELSE. + CLEAR: -value, -value_range. + ENDIF. + ELSE. + CLEAR: -value, -value_range. + ENDIF. + ENDLOOP. + ENDMETHOD. +ENDCLASS. diff --git a/src/ui/zcl_abapgit_free_sel_dialog.clas.xml b/src/ui/zcl_abapgit_free_sel_dialog.clas.xml new file mode 100644 index 000000000..a67034a2f --- /dev/null +++ b/src/ui/zcl_abapgit_free_sel_dialog.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_FREE_SEL_DIALOG + E + Free Selections Dialog + 1 + X + X + X + + + + diff --git a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap index 812a16621..63d58cea4 100644 --- a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap +++ b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap @@ -175,6 +175,9 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION. )->add( iv_txt = 'Debug Info' iv_act = zif_abapgit_definitions=>c_action-go_debuginfo + )->add( + iv_txt = 'Performance Test' + iv_act = zif_abapgit_definitions=>c_action-performance_test )->add( iv_txt = 'Settings' iv_act = zif_abapgit_definitions=>c_action-go_settings ). diff --git a/src/ui/zcl_abapgit_gui_router.clas.abap b/src/ui/zcl_abapgit_gui_router.clas.abap index 3fcba5c16..d422d10bc 100644 --- a/src/ui/zcl_abapgit_gui_router.clas.abap +++ b/src/ui/zcl_abapgit_gui_router.clas.abap @@ -490,8 +490,9 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION. WHEN zif_abapgit_definitions=>c_action-changed_by. zcl_abapgit_services_basis=>test_changed_by( ). ev_state = zcl_abapgit_gui=>c_event_state-no_more_act. - WHEN OTHERS. - " To pass abaplint, keep the place for future commands + WHEN zif_abapgit_definitions=>c_action-performance_test. + zcl_abapgit_services_basis=>run_performance_test( ). + ev_state = zcl_abapgit_gui=>c_event_state-no_more_act. ENDCASE. ENDMETHOD. diff --git a/src/ui/zcl_abapgit_popups.clas.abap b/src/ui/zcl_abapgit_popups.clas.abap index 800faddbd..93b61a07a 100644 --- a/src/ui/zcl_abapgit_popups.clas.abap +++ b/src/ui/zcl_abapgit_popups.clas.abap @@ -57,16 +57,16 @@ CLASS zcl_abapgit_popups DEFINITION EXPORTING !et_list TYPE INDEX TABLE . METHODS on_select_list_link_click - FOR EVENT link_click OF cl_salv_events_table + FOR EVENT link_click OF cl_salv_events_table IMPORTING !row !column . METHODS on_select_list_function_click - FOR EVENT added_function OF cl_salv_events_table + FOR EVENT added_function OF cl_salv_events_table IMPORTING !e_salv_function . METHODS on_double_click - FOR EVENT double_click OF cl_salv_events_table + FOR EVENT double_click OF cl_salv_events_table IMPORTING !row !column . @@ -91,6 +91,15 @@ CLASS zcl_abapgit_popups DEFINITION ev_value_3 TYPE spo_value CHANGING ct_fields TYPE ty_lt_fields RAISING zcx_abapgit_exception. + METHODS popup_get_from_free_selections + IMPORTING + iv_title TYPE syst_title OPTIONAL + iv_frame_text TYPE syst_title OPTIONAL + CHANGING + ct_fields TYPE zcl_abapgit_free_sel_dialog=>ty_free_sel_field_tab + RAISING + zcx_abapgit_cancel + zcx_abapgit_exception. METHODS validate_folder_logic IMPORTING iv_folder_logic TYPE string @@ -100,7 +109,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. +CLASS zcl_abapgit_popups IMPLEMENTATION. METHOD add_field. @@ -593,16 +602,16 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. CALL FUNCTION 'POPUP_TO_DECIDE_LIST' EXPORTING - textline1 = 'Select pull request' - titel = 'Select pull request' - start_col = 30 - start_row = 5 + textline1 = 'Select pull request' + titel = 'Select pull request' + start_col = 30 + start_row = 5 IMPORTING - answer = lv_answer + answer = lv_answer TABLES - t_spopli = lt_selection + t_spopli = lt_selection EXCEPTIONS - OTHERS = 1. + OTHERS = 1. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'Error from POPUP_TO_DECIDE_LIST' ). ENDIF. @@ -822,12 +831,12 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING - tabname = lv_tabname - fieldname = lv_fieldname + tabname = lv_tabname + fieldname = lv_fieldname TABLES return_tab = lt_ret EXCEPTIONS - OTHERS = 5. + OTHERS = 5. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |F4IF_FIELD_VALUE_REQUEST error [{ iv_tab_field }]| ). @@ -1446,4 +1455,84 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDIF. ENDMETHOD. + + METHOD zif_abapgit_popups~popup_perf_test_parameters. + DATA: lt_fields TYPE zcl_abapgit_free_sel_dialog=>ty_free_sel_field_tab. + FIELD-SYMBOLS: TYPE zcl_abapgit_free_sel_dialog=>ty_free_sel_field. + + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -name = 'PACKAGE'. + -only_parameter = abap_true. + -ddic_tabname = 'TADIR'. + -ddic_fieldname = 'DEVCLASS'. + -param_obligatory = abap_true. + -value = cv_package. + + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -name = 'PGMID'. + -only_parameter = abap_true. + -ddic_tabname = 'TADIR'. + -ddic_fieldname = 'PGMID'. + -value = 'R3TR'. + + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -name = 'OBJECT'. + -ddic_tabname = 'TADIR'. + -ddic_fieldname = 'OBJECT'. + + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -name = 'OBJ_NAME'. + -ddic_tabname = 'TADIR'. + -ddic_fieldname = 'OBJ_NAME'. + + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -name = 'INCLUDE_SUB_PACKAGES'. + -only_parameter = abap_true. + -ddic_tabname = 'TDEVC'. + -ddic_fieldname = 'IS_ENHANCEABLE'. + -text = 'Include subpackages'. + -value = cv_include_sub_packages. + + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -name = 'MASTER_LANG_ONLY'. + -only_parameter = abap_true. + -ddic_tabname = 'TVDIR'. + -ddic_fieldname = 'FLAG'. + -text = 'Master lang only'. + -value = cv_serialize_master_lang_only. + + popup_get_from_free_selections( + EXPORTING + iv_title = 'Serialization Performance Test Parameters' + iv_frame_text = 'Parameters' + CHANGING + ct_fields = lt_fields ). + + LOOP AT lt_fields ASSIGNING . + CASE -name. + WHEN 'PACKAGE'. + cv_package = -value. + WHEN 'OBJECT'. + et_object_type_filter = -value_range. + WHEN 'OBJ_NAME'. + et_object_name_filter = -value_range. + WHEN 'INCLUDE_SUB_PACKAGES'. + cv_include_sub_packages = boolc( -value IS NOT INITIAL ). + WHEN 'MASTER_LANG_ONLY'. + cv_serialize_master_lang_only = boolc( -value IS NOT INITIAL ). + ENDCASE. + ENDLOOP. + ENDMETHOD. + + METHOD popup_get_from_free_selections. + DATA: lo_free_sel_dialog TYPE REF TO zcl_abapgit_free_sel_dialog. + + CREATE OBJECT lo_free_sel_dialog + EXPORTING + iv_title = iv_title + iv_frame_text = iv_frame_text. + + lo_free_sel_dialog->set_fields( CHANGING ct_fields = ct_fields ). + lo_free_sel_dialog->show( ). + ENDMETHOD. ENDCLASS. diff --git a/src/ui/zcl_abapgit_services_basis.clas.abap b/src/ui/zcl_abapgit_services_basis.clas.abap index 2bba9678c..adde2d034 100644 --- a/src/ui/zcl_abapgit_services_basis.clas.abap +++ b/src/ui/zcl_abapgit_services_basis.clas.abap @@ -8,12 +8,15 @@ CLASS zcl_abapgit_services_basis DEFINITION IMPORTING iv_prefill_package TYPE devclass OPTIONAL RETURNING - VALUE(rv_package) TYPE devclass + VALUE(rv_package) TYPE devclass RAISING zcx_abapgit_exception. CLASS-METHODS test_changed_by RAISING zcx_abapgit_exception. + CLASS-METHODS run_performance_test + RAISING + zcx_abapgit_exception. PROTECTED SECTION. PRIVATE SECTION. @@ -21,7 +24,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_SERVICES_BASIS IMPLEMENTATION. +CLASS zcl_abapgit_services_basis IMPLEMENTATION. METHOD create_package. @@ -67,4 +70,78 @@ CLASS ZCL_ABAPGIT_SERVICES_BASIS IMPLEMENTATION. MESSAGE lv_user TYPE 'S'. ENDMETHOD. + + METHOD run_performance_test. + DATA: lo_performance TYPE REF TO zcl_abapgit_performance_test, + lv_package TYPE devclass, + lv_include_sub_packages TYPE abap_bool VALUE abap_true, + lv_serialize_master_lang_only TYPE abap_bool VALUE abap_true, + lt_object_type_filter TYPE zif_abapgit_definitions=>ty_object_type_range, + lt_object_name_filter TYPE zif_abapgit_definitions=>ty_object_name_range, + lt_result TYPE zcl_abapgit_performance_test=>gty_result_tab, + lo_alv TYPE REF TO cl_salv_table, + lx_salv_error TYPE REF TO cx_salv_error, + lv_current_repo TYPE zif_abapgit_persistence=>ty_value, + lo_runtime_column TYPE REF TO cl_salv_column, + lo_seconds_column TYPE REF TO cl_salv_column. + + TRY. + lv_current_repo = zcl_abapgit_persistence_user=>get_instance( )->get_repo_show( ). + IF lv_current_repo IS NOT INITIAL. + lv_package = zcl_abapgit_repo_srv=>get_instance( )->get( lv_current_repo )->get_package( ). + ENDIF. + CATCH zcx_abapgit_exception ##NO_HANDLER. + ENDTRY. + + zcl_abapgit_ui_factory=>get_popups( )->popup_perf_test_parameters( + IMPORTING + et_object_type_filter = lt_object_type_filter + et_object_name_filter = lt_object_name_filter + CHANGING + cv_package = lv_package + cv_include_sub_packages = lv_include_sub_packages + cv_serialize_master_lang_only = lv_serialize_master_lang_only ). + + CREATE OBJECT lo_performance + EXPORTING + iv_package = lv_package + iv_include_sub_packages = lv_include_sub_packages + iv_serialize_master_lang_only = lv_serialize_master_lang_only. + + + lo_performance->set_object_type_filter( lt_object_type_filter ). + lo_performance->set_object_name_filter( lt_object_name_filter ). + + lo_performance->run_measurement( ). + + lt_result = lo_performance->get_result( ). + + TRY. + cl_salv_table=>factory( + IMPORTING + r_salv_table = lo_alv + CHANGING + t_table = lt_result ). + lo_alv->get_functions( )->set_all( ). + lo_alv->get_display_settings( )->set_list_header( 'Serialization Performance Test Results' ). + lo_runtime_column = lo_alv->get_columns( )->get_column( 'RUNTIME' ). + lo_runtime_column->set_medium_text( 'Runtime' ). + lo_runtime_column->set_visible( abap_false ). + lo_seconds_column = lo_alv->get_columns( )->get_column( 'SECONDS' ). + lo_seconds_column->set_medium_text( 'Seconds' ). + lo_alv->get_columns( )->set_count_column( 'COUNTER' ). + lo_alv->get_aggregations( )->add_aggregation( lo_runtime_column->get_columnname( ) ). + lo_alv->get_aggregations( )->add_aggregation( lo_seconds_column->get_columnname( ) ). + lo_alv->set_screen_popup( + start_column = 1 + end_column = 180 + start_line = 1 + end_line = 25 ). + lo_alv->display( ). + CATCH cx_salv_error INTO lx_salv_error. + zcx_abapgit_exception=>raise( + iv_text = lx_salv_error->get_text( ) + ix_previous = lx_salv_error ). + ENDTRY. + ENDMETHOD. ENDCLASS. diff --git a/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap b/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap index 6e1ff75d8..46dfac4a3 100644 --- a/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap +++ b/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap @@ -104,6 +104,9 @@ CLASS ltcl_abapgit_popups_mock IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_popups~popup_perf_test_parameters. + + ENDMETHOD. ENDCLASS. CLASS ltcl_no_dependency_injection IMPLEMENTATION. diff --git a/src/ui/zif_abapgit_popups.intf.abap b/src/ui/zif_abapgit_popups.intf.abap index 49a9222d5..75bf30713 100644 --- a/src/ui/zif_abapgit_popups.intf.abap +++ b/src/ui/zif_abapgit_popups.intf.abap @@ -18,7 +18,7 @@ INTERFACE zif_abapgit_popups METHODS popup_search_help IMPORTING - !iv_tab_field TYPE string + !iv_tab_field TYPE string RETURNING VALUE(rv_value) TYPE ddshretval-fieldval RAISING @@ -44,8 +44,8 @@ INTERFACE zif_abapgit_popups IMPORTING iv_source_branch_name TYPE string EXPORTING - !ev_name TYPE string - !ev_cancel TYPE abap_bool + !ev_name TYPE string + !ev_cancel TYPE abap_bool RAISING zcx_abapgit_exception . METHODS repo_new_offline @@ -165,9 +165,19 @@ INTERFACE zif_abapgit_popups zcx_abapgit_exception. METHODS choose_pr_popup IMPORTING - it_pulls TYPE zif_abapgit_pr_enum_provider=>tty_pulls + it_pulls TYPE zif_abapgit_pr_enum_provider=>tty_pulls RETURNING VALUE(rs_pull) TYPE zif_abapgit_pr_enum_provider=>ty_pull_request RAISING zcx_abapgit_exception. + METHODS popup_perf_test_parameters + EXPORTING + et_object_type_filter TYPE zif_abapgit_definitions=>ty_object_type_range + et_object_name_filter TYPE zif_abapgit_definitions=>ty_object_name_range + CHANGING + cv_package TYPE devclass + cv_include_sub_packages TYPE abap_bool + cv_serialize_master_lang_only TYPE abap_bool + RAISING + zcx_abapgit_exception. ENDINTERFACE. diff --git a/src/zcl_abapgit_performance_test.clas.abap b/src/zcl_abapgit_performance_test.clas.abap new file mode 100644 index 000000000..ac7077282 --- /dev/null +++ b/src/zcl_abapgit_performance_test.clas.abap @@ -0,0 +1,135 @@ +"! Performance test run +CLASS zcl_abapgit_performance_test DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + TYPES: + BEGIN OF gty_result, + pgmid TYPE pgmid, + object TYPE trobjtype, + obj_name TYPE sobj_name, + devclass TYPE devclass, + counter TYPE i, + runtime TYPE i, + seconds TYPE p LENGTH 16 DECIMALS 6, + END OF gty_result, + gty_result_tab TYPE STANDARD TABLE OF gty_result WITH KEY pgmid object obj_name. + METHODS: + constructor IMPORTING iv_package TYPE devclass + iv_include_sub_packages TYPE abap_bool DEFAULT abap_true + iv_serialize_master_lang_only TYPE abap_bool DEFAULT abap_true, + set_object_type_filter IMPORTING it_object_type_range TYPE zif_abapgit_definitions=>ty_object_type_range, + set_object_name_filter IMPORTING it_object_name_range TYPE zif_abapgit_definitions=>ty_object_name_range, + get_object_type_filter RETURNING VALUE(rt_object_type_range) TYPE zif_abapgit_definitions=>ty_object_type_range, + get_object_name_filter RETURNING VALUE(rt_object_name_range) TYPE zif_abapgit_definitions=>ty_object_name_range, + run_measurement RAISING zcx_abapgit_exception, + get_result RETURNING VALUE(rt_result) TYPE gty_result_tab. + PROTECTED SECTION. + PRIVATE SECTION. + METHODS: + select_tadir_entries RETURNING VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt + RAISING zcx_abapgit_exception. + DATA: + mv_package TYPE devclass, + mv_include_sub_packages TYPE abap_bool, + mv_serialize_master_lang_only TYPE abap_bool, + BEGIN OF ms_filter_parameters, + object_type_range TYPE zif_abapgit_definitions=>ty_object_type_range, + object_name_range TYPE zif_abapgit_definitions=>ty_object_name_range, + END OF ms_filter_parameters, + mt_result TYPE gty_result_tab. +ENDCLASS. + + + +CLASS zcl_abapgit_performance_test IMPLEMENTATION. + METHOD constructor. + mv_package = iv_package. + mv_include_sub_packages = iv_include_sub_packages. + mv_serialize_master_lang_only = iv_serialize_master_lang_only. + ENDMETHOD. + + METHOD get_object_name_filter. + rt_object_name_range = ms_filter_parameters-object_name_range. + ENDMETHOD. + + METHOD get_object_type_filter. + rt_object_type_range = ms_filter_parameters-object_type_range. + ENDMETHOD. + + METHOD set_object_name_filter. + ms_filter_parameters-object_name_range = it_object_name_range. + ENDMETHOD. + + METHOD set_object_type_filter. + ms_filter_parameters-object_type_range = it_object_type_range. + ENDMETHOD. + + METHOD run_measurement. + DATA: li_actual_progress TYPE REF TO zif_abapgit_progress, + lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt, + lt_tadir_single TYPE zif_abapgit_definitions=>ty_tadir_tt, + lo_serializer TYPE REF TO zcl_abapgit_serialize, + lv_start_runtime TYPE i, + lv_end_runtime TYPE i, + lx_exception TYPE REF TO zcx_abapgit_exception, + lo_dummy_progress TYPE REF TO lcl_dummy_progress. + FIELD-SYMBOLS: TYPE zif_abapgit_definitions=>ty_tadir, + TYPE gty_result. + + CLEAR mt_result. + + li_actual_progress = zcl_abapgit_progress=>get_instance( 1 ). + CREATE OBJECT lo_dummy_progress. + zcl_abapgit_progress=>set_instance( lo_dummy_progress ). + + TRY. + lt_tadir = select_tadir_entries( ). + + CREATE OBJECT lo_serializer + EXPORTING + iv_serialize_master_lang_only = mv_serialize_master_lang_only. + + LOOP AT lt_tadir ASSIGNING . + INSERT INTO TABLE lt_tadir_single. + + GET RUN TIME FIELD lv_start_runtime. + + lo_serializer->serialize( + it_tadir = lt_tadir_single + iv_force_sequential = abap_true ). + + GET RUN TIME FIELD lv_end_runtime. + + APPEND INITIAL LINE TO mt_result ASSIGNING . + -pgmid = -pgmid. + -object = -object. + -obj_name = -obj_name. + -devclass = -devclass. + -runtime = lv_end_runtime - lv_start_runtime. + -seconds = -runtime / 1000000. + + CLEAR lt_tadir_single. + ENDLOOP. + + CATCH zcx_abapgit_exception INTO lx_exception. + zcl_abapgit_progress=>set_instance( li_actual_progress ). + RAISE EXCEPTION lx_exception. + ENDTRY. + ENDMETHOD. + + METHOD select_tadir_entries. + rt_tadir = zcl_abapgit_factory=>get_tadir( )->read( + iv_package = mv_package + iv_ignore_subpackages = boolc( mv_include_sub_packages = abap_false ) ). + + DELETE rt_tadir WHERE object NOT IN ms_filter_parameters-object_type_range + OR obj_name NOT IN ms_filter_parameters-object_name_range. + ENDMETHOD. + + METHOD get_result. + rt_result = mt_result. + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_abapgit_performance_test.clas.locals_def.abap b/src/zcl_abapgit_performance_test.clas.locals_def.abap new file mode 100644 index 000000000..cd9160f65 --- /dev/null +++ b/src/zcl_abapgit_performance_test.clas.locals_def.abap @@ -0,0 +1,11 @@ +*"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + +CLASS lcl_dummy_progress DEFINITION. + PUBLIC SECTION. + INTERFACES: + zif_abapgit_progress. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. diff --git a/src/zcl_abapgit_performance_test.clas.locals_imp.abap b/src/zcl_abapgit_performance_test.clas.locals_imp.abap new file mode 100644 index 000000000..5db9d0e35 --- /dev/null +++ b/src/zcl_abapgit_performance_test.clas.locals_imp.abap @@ -0,0 +1,12 @@ +*"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + + +CLASS lcl_dummy_progress IMPLEMENTATION. + METHOD zif_abapgit_progress~set_total. + ENDMETHOD. + + METHOD zif_abapgit_progress~show. + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_abapgit_performance_test.clas.xml b/src/zcl_abapgit_performance_test.clas.xml new file mode 100644 index 000000000..e6c4f4715 --- /dev/null +++ b/src/zcl_abapgit_performance_test.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_PERFORMANCE_TEST + E + Performance test run + 1 + X + X + X + + + + diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 37bbacab5..76016b1e1 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -413,6 +413,9 @@ INTERFACE zif_abapgit_definitions TYPES: ty_step_data_tt TYPE STANDARD TABLE OF ty_step_data WITH DEFAULT KEY . + TYPES: + ty_object_type_range TYPE RANGE OF trobjtype, + ty_object_name_range TYPE RANGE OF sobj_name. CONSTANTS: BEGIN OF c_git_branch_type, branch TYPE ty_git_branch_type VALUE 'HD', @@ -490,6 +493,7 @@ INTERFACE zif_abapgit_definitions zip_package TYPE string VALUE 'zip_package', zip_transport TYPE string VALUE 'zip_transport', zip_object TYPE string VALUE 'zip_object', + performance_test TYPE string VALUE 'performance_test', git_pull TYPE string VALUE 'git_pull', git_reset TYPE string VALUE 'git_reset', git_branch_create TYPE string VALUE 'git_branch_create',