From c40406930a92d3e491368fc55bf4e443209e41d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 30 Nov 2022 18:29:40 +0100 Subject: [PATCH] add label F4 value help (#5891) Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com> --- ...apgit_repo_checksums.clas.testclasses.abap | 3 + src/repo/zcl_abapgit_repo_srv.clas.abap | 33 ++++++ src/repo/zif_abapgit_repo_srv.intf.abap | 14 ++- .../zcl_abapgit_gui_page_addofflin.clas.abap | 38 ++++++ .../zcl_abapgit_gui_page_addonline.clas.abap | 38 ++++++ .../zcl_abapgit_gui_page_sett_locl.clas.abap | 33 +++++- ...pgit_html_form_utils.clas.testclasses.abap | 3 + src/ui/zcl_abapgit_popups.clas.abap | 110 +++++++++++++++++- ...apgit_services_basis.clas.testclasses.abap | 4 + ..._abapgit_ui_injector.clas.testclasses.abap | 4 + src/ui/zif_abapgit_popups.intf.abap | 9 +- 11 files changed, 281 insertions(+), 8 deletions(-) diff --git a/src/repo/zcl_abapgit_repo_checksums.clas.testclasses.abap b/src/repo/zcl_abapgit_repo_checksums.clas.testclasses.abap index d2abf0223..128495b89 100644 --- a/src/repo/zcl_abapgit_repo_checksums.clas.testclasses.abap +++ b/src/repo/zcl_abapgit_repo_checksums.clas.testclasses.abap @@ -272,6 +272,9 @@ CLASS lcl_repo_mock IMPLEMENTATION. ENDMETHOD. METHOD zif_abapgit_repo_srv~validate_url. ENDMETHOD. + METHOD zif_abapgit_repo_srv~get_label_list. + ENDMETHOD. + ENDCLASS. CLASS lcl_local_file_builder DEFINITION FINAL. diff --git a/src/repo/zcl_abapgit_repo_srv.clas.abap b/src/repo/zcl_abapgit_repo_srv.clas.abap index 1d58543b5..e85ca8fd0 100644 --- a/src/repo/zcl_abapgit_repo_srv.clas.abap +++ b/src/repo/zcl_abapgit_repo_srv.clas.abap @@ -676,4 +676,37 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ENDIF. ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~get_label_list. + + DATA: + lt_repo TYPE zif_abapgit_repo_srv=>ty_repo_list, + ls_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings, + lt_labels TYPE string_table, + ls_label LIKE LINE OF rt_labels. + + FIELD-SYMBOLS: + TYPE REF TO zif_abapgit_repo, + TYPE LINE OF string_table. + + lt_repo = zif_abapgit_repo_srv~list( ). + + LOOP AT lt_repo ASSIGNING . + + ls_local_settings = ->get_local_settings( ). + lt_labels = zcl_abapgit_repo_labels=>split( ls_local_settings-labels ). + + LOOP AT lt_labels ASSIGNING . + ls_label-label = . + INSERT ls_label INTO TABLE rt_labels. + ENDLOOP. + + ENDLOOP. + + SORT rt_labels. + DELETE ADJACENT DUPLICATES FROM rt_labels. + + ENDMETHOD. + ENDCLASS. diff --git a/src/repo/zif_abapgit_repo_srv.intf.abap b/src/repo/zif_abapgit_repo_srv.intf.abap index 504ec65be..3f06af797 100644 --- a/src/repo/zif_abapgit_repo_srv.intf.abap +++ b/src/repo/zif_abapgit_repo_srv.intf.abap @@ -3,7 +3,13 @@ INTERFACE zif_abapgit_repo_srv TYPES: - ty_repo_list TYPE STANDARD TABLE OF REF TO zif_abapgit_repo WITH DEFAULT KEY . + ty_repo_list TYPE STANDARD TABLE OF REF TO zif_abapgit_repo WITH DEFAULT KEY, + + BEGIN OF ty_label, + label TYPE string, + END OF ty_label, + ty_labels TYPE STANDARD TABLE OF ty_label WITH NON-UNIQUE DEFAULT KEY + WITH NON-UNIQUE SORTED KEY key_label COMPONENTS label. METHODS init. METHODS delete @@ -99,4 +105,10 @@ INTERFACE zif_abapgit_repo_srv !ev_reason TYPE string RAISING zcx_abapgit_exception . + METHODS get_label_list + RETURNING + VALUE(rt_labels) TYPE ty_labels + RAISING + zcx_abapgit_exception. + ENDINTERFACE. diff --git a/src/ui/zcl_abapgit_gui_page_addofflin.clas.abap b/src/ui/zcl_abapgit_gui_page_addofflin.clas.abap index 5fd94d072..e3b520deb 100644 --- a/src/ui/zcl_abapgit_gui_page_addofflin.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_addofflin.clas.abap @@ -35,6 +35,7 @@ CLASS zcl_abapgit_gui_page_addofflin DEFINITION BEGIN OF c_event, go_back TYPE string VALUE 'go-back', choose_package TYPE string VALUE 'choose-package', + choose_labels TYPE string VALUE 'choose-labels', create_package TYPE string VALUE 'create-package', add_offline_repo TYPE string VALUE 'add-repo-offline', END OF c_event . @@ -55,6 +56,11 @@ CLASS zcl_abapgit_gui_page_addofflin DEFINITION METHODS get_form_schema RETURNING VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form . + + METHODS choose_labels + RAISING + zcx_abapgit_exception. + ENDCLASS. @@ -119,6 +125,7 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. iv_value = zif_abapgit_dot_abapgit=>c_folder_logic-mixed )->text( iv_name = c_id-labels + iv_side_action = c_event-choose_labels iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")| iv_hint = 'Comma-separated labels for grouping and repo organization (optional)' )->checkbox( @@ -163,6 +170,14 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. iv_val = |Invalid folder logic { io_form_data->get( c_id-folder_logic ) }| ). ENDIF. + TRY. + zcl_abapgit_repo_labels=>validate( io_form_data->get( c_id-labels ) ). + CATCH zcx_abapgit_exception INTO lx_err. + ro_validation_log->set( + iv_key = c_id-labels + iv_val = lx_err->get_text( ) ). + ENDTRY. + ENDMETHOD. @@ -202,6 +217,11 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act. ENDIF. + WHEN c_event-choose_labels. + + choose_labels( ). + rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render. + WHEN c_event-add_offline_repo. mo_validation_log = validate_form( mo_form_data ). @@ -235,4 +255,22 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. ri_html->add( '' ). ENDMETHOD. + + + METHOD choose_labels. + + DATA: + lv_old_labels TYPE string, + lv_new_labels TYPE string. + + lv_old_labels = mo_form_data->get( c_id-labels ). + + lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ). + + mo_form_data->set( + iv_key = c_id-labels + iv_val = lv_new_labels ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_addonline.clas.abap b/src/ui/zcl_abapgit_gui_page_addonline.clas.abap index ca3e6556d..e537ff21b 100644 --- a/src/ui/zcl_abapgit_gui_page_addonline.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_addonline.clas.abap @@ -40,6 +40,7 @@ CLASS zcl_abapgit_gui_page_addonline DEFINITION choose_package TYPE string VALUE 'choose-package', create_package TYPE string VALUE 'create-package', choose_branch TYPE string VALUE 'choose-branch', + choose_labels TYPE string VALUE 'choose-labels', add_online_repo TYPE string VALUE 'add-repo-online', END OF c_event. @@ -59,6 +60,11 @@ CLASS zcl_abapgit_gui_page_addonline DEFINITION METHODS get_form_schema RETURNING VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form. + + METHODS choose_labels + RAISING + zcx_abapgit_exception. + ENDCLASS. @@ -135,6 +141,7 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. iv_hint = 'Name to show instead of original repository name (optional)' )->text( iv_name = c_id-labels + iv_side_action = c_event-choose_labels iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")| iv_hint = 'Comma-separated labels for grouping and repo organization (optional)' )->checkbox( @@ -195,6 +202,14 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. iv_val = |Invalid folder logic { io_form_data->get( c_id-folder_logic ) }| ). ENDIF. + TRY. + zcl_abapgit_repo_labels=>validate( io_form_data->get( c_id-labels ) ). + CATCH zcx_abapgit_exception INTO lx_err. + ro_validation_log->set( + iv_key = c_id-labels + iv_val = lx_err->get_text( ) ). + ENDTRY. + ENDMETHOD. @@ -260,6 +275,11 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render. ENDIF. + WHEN c_event-choose_labels. + + choose_labels( ). + rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render. + WHEN c_event-add_online_repo. mo_validation_log = validate_form( mo_form_data ). @@ -292,4 +312,22 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. io_validation_log = mo_validation_log ) ). ri_html->add( '' ). ENDMETHOD. + + + METHOD choose_labels. + + DATA: + lv_old_labels TYPE string, + lv_new_labels TYPE string. + + lv_old_labels = mo_form_data->get( c_id-labels ). + + lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ). + + mo_form_data->set( + iv_key = c_id-labels + iv_val = lv_new_labels ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_sett_locl.clas.abap b/src/ui/zcl_abapgit_gui_page_sett_locl.clas.abap index e8f6f308b..383e52195 100644 --- a/src/ui/zcl_abapgit_gui_page_sett_locl.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_sett_locl.clas.abap @@ -40,7 +40,8 @@ CLASS zcl_abapgit_gui_page_sett_locl DEFINITION END OF c_id . CONSTANTS: BEGIN OF c_event, - save TYPE string VALUE 'save', + save TYPE string VALUE 'save', + choose_labels TYPE string VALUE 'choose-labels', END OF c_event . DATA mo_form TYPE REF TO zcl_abapgit_html_form . @@ -69,11 +70,15 @@ CLASS zcl_abapgit_gui_page_sett_locl DEFINITION METHODS save_settings RAISING zcx_abapgit_exception . + METHODS choose_labels + RAISING + zcx_abapgit_exception. + ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_sett_locl IMPLEMENTATION. METHOD constructor. @@ -124,6 +129,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION. iv_hint = 'Name to show instead of original repo name (optional)' )->text( iv_name = c_id-labels + iv_side_action = c_event-choose_labels iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")| iv_hint = 'Comma-separated labels for grouping and repo organization (optional)' )->checkbox( @@ -268,6 +274,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION. WHEN zif_abapgit_definitions=>c_action-go_back. rs_handled-state = mo_form_util->exit( mo_form_data ). + WHEN c_event-choose_labels. + + choose_labels( ). + rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render. + WHEN c_event-save. " Validate form entries before saving mo_validation_log = validate_form( mo_form_data ). @@ -307,4 +318,22 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION. ri_html->add( `` ). ENDMETHOD. + + + METHOD choose_labels. + + DATA: + lv_old_labels TYPE string, + lv_new_labels TYPE string. + + lv_old_labels = mo_form_data->get( c_id-labels ). + + lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ). + + mo_form_data->set( + iv_key = c_id-labels + iv_val = lv_new_labels ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/ui/zcl_abapgit_html_form_utils.clas.testclasses.abap b/src/ui/zcl_abapgit_html_form_utils.clas.testclasses.abap index 56b9d2459..0cde046b2 100644 --- a/src/ui/zcl_abapgit_html_form_utils.clas.testclasses.abap +++ b/src/ui/zcl_abapgit_html_form_utils.clas.testclasses.abap @@ -100,6 +100,9 @@ CLASS ltcl_popups_mock IMPLEMENTATION. METHOD zif_abapgit_popups~tag_list_popup. ENDMETHOD. + METHOD zif_abapgit_popups~popup_to_select_labels. + ENDMETHOD. + ENDCLASS. CLASS ltcl_test_form DEFINITION diff --git a/src/ui/zcl_abapgit_popups.clas.abap b/src/ui/zcl_abapgit_popups.clas.abap index 67a9e3dcd..27d6ba9dc 100644 --- a/src/ui/zcl_abapgit_popups.clas.abap +++ b/src/ui/zcl_abapgit_popups.clas.abap @@ -65,16 +65,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 . @@ -975,7 +975,10 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. lo_table_header TYPE REF TO cl_salv_form_text. FIELD-SYMBOLS: TYPE STANDARD TABLE, - TYPE zif_abapgit_definitions=>ty_alv_column. + TYPE zif_abapgit_definitions=>ty_alv_column, + TYPE i, + TYPE any, + TYPE data. CLEAR: et_list. @@ -984,6 +987,23 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. ASSIGN mr_table->* TO . ASSERT sy-subrc = 0. + LOOP AT it_preselected_rows ASSIGNING . + + READ TABLE INDEX ASSIGNING . + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |Preselected row { } doesn't exist| ). + ENDIF. + + ASSIGN + COMPONENT c_fieldname_selected + OF STRUCTURE + TO . + ASSERT sy-subrc = 0. + + = abap_true. + + ENDLOOP. + ms_position = center( iv_width = iv_end_column - iv_start_column iv_height = iv_end_line - iv_start_line ). @@ -1278,4 +1298,86 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. ENDIF. ENDMETHOD. + + + METHOD zif_abapgit_popups~popup_to_select_labels. + + DATA: + lt_all_labels TYPE zif_abapgit_repo_srv=>ty_labels, + ls_label LIKE LINE OF lt_all_labels, + lt_current_labels TYPE string_table, + lt_selected_labels LIKE lt_all_labels, + lt_columns_to_display TYPE zif_abapgit_definitions=>ty_alv_column_tt, + lt_preselected_rows TYPE zif_abapgit_popups=>ty_rows, + ls_columns_to_display LIKE LINE OF lt_columns_to_display, + lv_save_tabix TYPE i, + li_popup TYPE REF TO zif_abapgit_popups. + + FIELD-SYMBOLS: TYPE zif_abapgit_repo_srv=>ty_label, + TYPE LINE OF string_table. + + lt_current_labels = zcl_abapgit_repo_labels=>split( iv_labels ). + + lt_all_labels = zcl_abapgit_repo_srv=>get_instance( )->get_label_list( ). + + " Add labels which are not saved yet + LOOP AT lt_current_labels ASSIGNING . + + READ TABLE lt_all_labels TRANSPORTING NO FIELDS + WITH KEY key_label + COMPONENTS label = . + IF sy-subrc <> 0. + ls_label-label = . + INSERT ls_label INTO TABLE lt_all_labels. + ENDIF. + + ENDLOOP. + + IF lines( lt_all_labels ) = 0. + zcx_abapgit_exception=>raise( |No labels maintained yet| ). + ENDIF. + + SORT lt_all_labels. + DELETE ADJACENT DUPLICATES FROM lt_all_labels. + + " Preselect current labels + LOOP AT lt_all_labels ASSIGNING . + + lv_save_tabix = sy-tabix. + + READ TABLE lt_current_labels TRANSPORTING NO FIELDS + WITH KEY table_line = -label. + IF sy-subrc = 0. + INSERT lv_save_tabix INTO TABLE lt_preselected_rows. + ENDIF. + + ENDLOOP. + + ls_columns_to_display-name = 'LABEL'. + ls_columns_to_display-text = 'Label'. + INSERT ls_columns_to_display INTO TABLE lt_columns_to_display. + + li_popup = zcl_abapgit_ui_factory=>get_popups( ). + li_popup->popup_to_select_from_list( + EXPORTING + iv_header_text = 'Select labels' + iv_select_column_text = 'Add label' + it_list = lt_all_labels + iv_selection_mode = if_salv_c_selection_mode=>multiple + it_columns_to_display = lt_columns_to_display + it_preselected_rows = lt_preselected_rows + iv_start_column = 15 + iv_end_column = 55 + IMPORTING + et_list = lt_selected_labels ). + + LOOP AT lt_selected_labels ASSIGNING . + IF rv_labels IS NOT INITIAL. + rv_labels = rv_labels && ','. + ENDIF. + rv_labels = rv_labels && -label. + ENDLOOP. + + ENDMETHOD. + ENDCLASS. diff --git a/src/ui/zcl_abapgit_services_basis.clas.testclasses.abap b/src/ui/zcl_abapgit_services_basis.clas.testclasses.abap index c462208f5..82bb59f13 100644 --- a/src/ui/zcl_abapgit_services_basis.clas.testclasses.abap +++ b/src/ui/zcl_abapgit_services_basis.clas.testclasses.abap @@ -419,4 +419,8 @@ CLASS ltcl_popups_mock IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_popups~popup_to_select_labels. + + 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 72a5f61b7..5c96dfa9d 100644 --- a/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap +++ b/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap @@ -88,6 +88,10 @@ CLASS ltcl_abapgit_popups_mock IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_popups~popup_to_select_labels. + + 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 1c4ef8ddd..d2658d919 100644 --- a/src/ui/zif_abapgit_popups.intf.abap +++ b/src/ui/zif_abapgit_popups.intf.abap @@ -3,7 +3,8 @@ INTERFACE zif_abapgit_popups TYPES: - ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY . + ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY, + ty_rows TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line. CONSTANTS c_new_branch_label TYPE string VALUE '+ create new ...' ##NO_TEXT. @@ -99,6 +100,7 @@ INTERFACE zif_abapgit_popups !iv_selection_mode TYPE salv_de_constant DEFAULT if_salv_c_selection_mode=>multiple !iv_select_column_text TYPE csequence DEFAULT space !it_columns_to_display TYPE zif_abapgit_definitions=>ty_alv_column_tt + !it_preselected_rows TYPE ty_rows OPTIONAL EXPORTING VALUE(et_list) TYPE STANDARD TABLE RAISING @@ -127,4 +129,9 @@ INTERFACE zif_abapgit_popups METHODS popup_select_wb_tc_tr_and_tsk RETURNING VALUE(rt_r_trkorr) TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt RAISING zcx_abapgit_exception. + METHODS popup_to_select_labels + IMPORTING iv_labels TYPE string OPTIONAL + RETURNING VALUE(rv_labels) TYPE string + RAISING zcx_abapgit_exception. + ENDINTERFACE.