From 46628837232956bfdb8d830036150cffb480d222 Mon Sep 17 00:00:00 2001 From: christianguenter2 Date: Fri, 15 Jun 2018 09:35:33 +0200 Subject: [PATCH] Introduce ZIF_ABAPGIT_POPUPS - create popups with factory ZCL_ABAPGIT_UI_FACTORY - inject test doubles with injector class ZCL_ABAPGIT_UI_INJECTOR --- src/ui/zcl_abapgit_gui_page_db.clas.abap | 2 +- src/ui/zcl_abapgit_gui_page_main.clas.abap | 2 +- src/ui/zcl_abapgit_gui_router.clas.abap | 2 +- src/ui/zcl_abapgit_popups.clas.abap | 235 +++++------------- src/ui/zcl_abapgit_popups.clas.xml | 1 - src/ui/zcl_abapgit_services_abapgit.clas.abap | 6 +- src/ui/zcl_abapgit_services_git.clas.abap | 12 +- src/ui/zcl_abapgit_services_repo.clas.abap | 35 ++- src/ui/zcl_abapgit_ui_factory.clas.abap | 32 +++ src/ui/zcl_abapgit_ui_factory.clas.xml | 17 ++ src/ui/zcl_abapgit_ui_injector.clas.abap | 23 ++ ..._abapgit_ui_injector.clas.testclasses.abap | 149 +++++++++++ src/ui/zcl_abapgit_ui_injector.clas.xml | 18 ++ src/ui/zif_abapgit_popups.intf.abap | 161 ++++++++++++ src/ui/zif_abapgit_popups.intf.xml | 16 ++ src/zabapgit_forms.prog.abap | 4 +- src/zcl_abapgit_transport.clas.abap | 4 +- src/zcl_abapgit_zip.clas.abap | 4 +- 18 files changed, 508 insertions(+), 215 deletions(-) create mode 100644 src/ui/zcl_abapgit_ui_factory.clas.abap create mode 100644 src/ui/zcl_abapgit_ui_factory.clas.xml create mode 100644 src/ui/zcl_abapgit_ui_injector.clas.abap create mode 100644 src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap create mode 100644 src/ui/zcl_abapgit_ui_injector.clas.xml create mode 100644 src/ui/zif_abapgit_popups.intf.abap create mode 100644 src/ui/zif_abapgit_popups.intf.xml diff --git a/src/ui/zcl_abapgit_gui_page_db.clas.abap b/src/ui/zcl_abapgit_gui_page_db.clas.abap index 244ab4750..c43422144 100644 --- a/src/ui/zcl_abapgit_gui_page_db.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_db.clas.abap @@ -53,7 +53,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB IMPLEMENTATION. ASSERT is_key-type IS NOT INITIAL. - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = 'Warning' text_question = 'Delete?' text_button_1 = 'Ok' diff --git a/src/ui/zcl_abapgit_gui_page_main.clas.abap b/src/ui/zcl_abapgit_gui_page_main.clas.abap index da4fdd26c..fa778f26d 100644 --- a/src/ui/zcl_abapgit_gui_page_main.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_main.clas.abap @@ -270,7 +270,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION. ls_item TYPE zif_abapgit_definitions=>ty_item. - ls_tadir = zcl_abapgit_popups=>popup_object( ). + ls_tadir = zcl_abapgit_ui_factory=>get_popups( )->popup_object( ). IF ls_tadir IS INITIAL. RETURN. ENDIF. diff --git a/src/ui/zcl_abapgit_gui_router.clas.abap b/src/ui/zcl_abapgit_gui_router.clas.abap index 0aa4260d5..ac369715f 100644 --- a/src/ui/zcl_abapgit_gui_router.clas.abap +++ b/src/ui/zcl_abapgit_gui_router.clas.abap @@ -108,7 +108,7 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION. DATA: lv_class_name TYPE string, lv_cancel TYPE abap_bool. - zcl_abapgit_popups=>run_page_class_popup( + zcl_abapgit_ui_factory=>get_popups( )->run_page_class_popup( IMPORTING ev_name = lv_class_name ev_cancel = lv_cancel ). diff --git a/src/ui/zcl_abapgit_popups.clas.abap b/src/ui/zcl_abapgit_popups.clas.abap index 3b01f4b9a..e4879953c 100644 --- a/src/ui/zcl_abapgit_popups.clas.abap +++ b/src/ui/zcl_abapgit_popups.clas.abap @@ -1,151 +1,30 @@ CLASS zcl_abapgit_popups DEFINITION PUBLIC FINAL - CREATE PUBLIC . + CREATE PRIVATE + GLOBAL FRIENDS zcl_abapgit_ui_factory. PUBLIC SECTION. - TYPES: - BEGIN OF ty_popup, - url TYPE string, - package TYPE devclass, - branch_name TYPE string, - cancel TYPE abap_bool, - END OF ty_popup . - - CONSTANTS c_new_branch_label TYPE string VALUE '+ create new ...' ##NO_TEXT. - - CLASS-METHODS popup_package_export - EXPORTING - !ev_package TYPE devclass - !ev_folder_logic TYPE string - RAISING - zcx_abapgit_exception . - CLASS-METHODS popup_folder_logic - RETURNING - VALUE(rv_folder_logic) TYPE string - RAISING - zcx_abapgit_exception . - CLASS-METHODS popup_object - RETURNING - VALUE(rs_tadir) TYPE tadir - RAISING - zcx_abapgit_exception . - CLASS-METHODS create_branch_popup - EXPORTING - !ev_name TYPE string - !ev_cancel TYPE abap_bool - RAISING - zcx_abapgit_exception . - - CLASS-METHODS run_page_class_popup - EXPORTING - !ev_name TYPE string - !ev_cancel TYPE abap_bool - RAISING - zcx_abapgit_exception . - CLASS-METHODS repo_new_offline - RETURNING - VALUE(rs_popup) TYPE ty_popup - RAISING - zcx_abapgit_exception . - CLASS-METHODS branch_list_popup - IMPORTING - !iv_url TYPE string - !iv_default_branch TYPE string OPTIONAL - !iv_show_new_option TYPE abap_bool OPTIONAL - RETURNING - VALUE(rs_branch) TYPE zif_abapgit_definitions=>ty_git_branch - RAISING - zcx_abapgit_exception . - - - CLASS-METHODS repo_popup - IMPORTING - !iv_url TYPE string - !iv_package TYPE devclass OPTIONAL - !iv_branch TYPE string DEFAULT 'refs/heads/master' - !iv_freeze_package TYPE abap_bool OPTIONAL - !iv_freeze_url TYPE abap_bool OPTIONAL - !iv_title TYPE clike DEFAULT 'Clone repository ...' - RETURNING - VALUE(rs_popup) TYPE ty_popup - RAISING - zcx_abapgit_exception ##NO_TEXT. - CLASS-METHODS popup_to_confirm - IMPORTING - !titlebar TYPE clike - !text_question TYPE clike - !text_button_1 TYPE clike DEFAULT 'Yes' - !icon_button_1 TYPE icon-name DEFAULT space - !text_button_2 TYPE clike DEFAULT 'No' - !icon_button_2 TYPE icon-name DEFAULT space - !default_button TYPE char1 DEFAULT '1' - !display_cancel_button TYPE char1 DEFAULT abap_true - RETURNING - VALUE(rv_answer) TYPE char1 - RAISING - zcx_abapgit_exception . - CLASS-METHODS popup_to_inform - IMPORTING - !titlebar TYPE clike - !text_message TYPE clike - RAISING - zcx_abapgit_exception . - CLASS-METHODS popup_to_create_package - EXPORTING - !es_package_data TYPE scompkdtln - !ev_create TYPE boolean - RAISING - zcx_abapgit_exception . - CLASS-METHODS popup_to_create_transp_branch - IMPORTING - !it_transport_headers TYPE trwbo_request_headers - RETURNING - VALUE(rs_transport_branch) TYPE zif_abapgit_definitions=>ty_transport_to_branch - RAISING - zcx_abapgit_exception - zcx_abapgit_cancel . - CLASS-METHODS popup_to_select_transports - RETURNING - VALUE(rt_trkorr) TYPE trwbo_request_headers . - CLASS-METHODS popup_to_select_from_list - IMPORTING - !it_list TYPE STANDARD TABLE - !i_header_text TYPE csequence - !i_select_column_text TYPE csequence - !it_columns_to_display TYPE stringtab - EXPORTING - VALUE(et_list) TYPE STANDARD TABLE - RAISING - zcx_abapgit_cancel - zcx_abapgit_exception . - CLASS-METHODS branch_popup_callback - IMPORTING - !iv_code TYPE clike - CHANGING - !ct_fields TYPE zif_abapgit_definitions=>ty_sval_tt - !cs_error TYPE svale - !cv_show_popup TYPE char01 - RAISING - zcx_abapgit_exception . - CLASS-METHODS package_popup_callback - IMPORTING - !iv_code TYPE clike - CHANGING - !ct_fields TYPE zif_abapgit_definitions=>ty_sval_tt - !cs_error TYPE svale - !cv_show_popup TYPE char01 - RAISING - zcx_abapgit_exception . - CLASS-METHODS popup_transport_request - IMPORTING - !is_transport_type TYPE zif_abapgit_definitions=>ty_transport_type - RETURNING - VALUE(rv_transport) TYPE trkorr - RAISING - zcx_abapgit_exception - zcx_abapgit_cancel . + INTERFACES: zif_abapgit_popups. + ALIASES: + popup_package_export FOR zif_abapgit_popups~popup_package_export, + popup_folder_logic FOR zif_abapgit_popups~popup_folder_logic, + popup_object FOR zif_abapgit_popups~popup_object, + create_branch_popup FOR zif_abapgit_popups~create_branch_popup, + run_page_class_popup FOR zif_abapgit_popups~run_page_class_popup, + repo_new_offline FOR zif_abapgit_popups~repo_new_offline, + branch_list_popup FOR zif_abapgit_popups~branch_list_popup, + repo_popup FOR zif_abapgit_popups~repo_popup, + popup_to_confirm FOR zif_abapgit_popups~popup_to_confirm, + popup_to_inform FOR zif_abapgit_popups~popup_to_inform, + popup_to_create_package FOR zif_abapgit_popups~popup_to_create_package, + popup_to_create_transp_branch FOR zif_abapgit_popups~popup_to_create_transp_branch, + popup_to_select_transports FOR zif_abapgit_popups~popup_to_select_transports, + popup_to_select_from_list FOR zif_abapgit_popups~popup_to_select_from_list, + branch_popup_callback FOR zif_abapgit_popups~branch_popup_callback, + package_popup_callback FOR zif_abapgit_popups~package_popup_callback, + popup_transport_request FOR zif_abapgit_popups~popup_transport_request. PRIVATE SECTION. @@ -153,12 +32,13 @@ CLASS zcl_abapgit_popups DEFINITION ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY. CONSTANTS c_fieldname_selected TYPE lvc_fname VALUE `SELECTED` ##NO_TEXT. - CLASS-DATA go_select_list_popup TYPE REF TO cl_salv_table . - CLASS-DATA gr_table TYPE REF TO data . - CLASS-DATA gv_cancel TYPE abap_bool . - CLASS-DATA go_table_descr TYPE REF TO cl_abap_tabledescr . - CLASS-METHODS add_field + DATA go_select_list_popup TYPE REF TO cl_salv_table . + DATA gr_table TYPE REF TO data . + DATA gv_cancel TYPE abap_bool . + DATA go_table_descr TYPE REF TO cl_abap_tabledescr . + + METHODS add_field IMPORTING !iv_tabname TYPE sval-tabname !iv_fieldname TYPE sval-fieldname @@ -168,22 +48,22 @@ CLASS zcl_abapgit_popups DEFINITION !iv_obligatory TYPE spo_obl OPTIONAL CHANGING !ct_fields TYPE ty_sval_tt . - CLASS-METHODS create_new_table + METHODS create_new_table IMPORTING !it_list TYPE STANDARD TABLE . - CLASS-METHODS get_selected_rows + METHODS get_selected_rows EXPORTING !et_list TYPE INDEX TABLE . - CLASS-METHODS on_select_list_link_click + METHODS on_select_list_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING !row !column . - CLASS-METHODS on_select_list_function_click + METHODS on_select_list_function_click FOR EVENT added_function OF cl_salv_events_table IMPORTING !e_salv_function . - CLASS-METHODS extract_field_values + METHODS extract_field_values IMPORTING it_fields TYPE ty_sval_tt EXPORTING @@ -195,8 +75,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. - +CLASS zcl_abapgit_popups IMPLEMENTATION. METHOD add_field. @@ -213,7 +92,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD branch_list_popup. + METHOD zif_abapgit_popups~branch_list_popup. DATA: lo_branches TYPE REF TO zcl_abapgit_git_branch_list, lt_branches TYPE zif_abapgit_definitions=>ty_git_branch_list_tt, @@ -271,7 +150,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. IF iv_show_new_option = abap_true. APPEND INITIAL LINE TO lt_selection ASSIGNING . - -varoption = c_new_branch_label. + -varoption = zif_abapgit_popups=>c_new_branch_label. ENDIF. CALL FUNCTION 'POPUP_TO_DECIDE_LIST' @@ -301,8 +180,8 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. READ TABLE lt_selection ASSIGNING WITH KEY selflag = abap_true. ASSERT sy-subrc = 0. - IF iv_show_new_option = abap_true AND -varoption = c_new_branch_label. - rs_branch-name = c_new_branch_label. + IF iv_show_new_option = abap_true AND -varoption = zif_abapgit_popups=>c_new_branch_label. + rs_branch-name = zif_abapgit_popups=>c_new_branch_label. ELSE. REPLACE FIRST OCCURRENCE OF lv_head_suffix IN -varoption WITH ''. READ TABLE lt_branches WITH KEY display_name = -varoption ASSIGNING . @@ -319,7 +198,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD branch_popup_callback. + METHOD zif_abapgit_popups~branch_popup_callback. DATA: lv_url TYPE string, ls_package_data TYPE scompkdtln, @@ -342,7 +221,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDIF. lv_url = -value. - ls_branch = zcl_abapgit_popups=>branch_list_popup( lv_url ). + ls_branch = branch_list_popup( lv_url ). IF ls_branch IS INITIAL. RETURN. ENDIF. @@ -358,7 +237,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ASSERT sy-subrc = 0. ls_package_data-devclass = -value. - zcl_abapgit_popups=>popup_to_create_package( + popup_to_create_package( IMPORTING es_package_data = ls_package_data ev_create = lv_create ). @@ -375,7 +254,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD create_branch_popup. + METHOD zif_abapgit_popups~create_branch_popup. DATA: lv_answer TYPE c LENGTH 1, lt_fields TYPE TABLE OF sval. @@ -604,7 +483,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD package_popup_callback. + METHOD zif_abapgit_popups~package_popup_callback. DATA: ls_package_data TYPE scompkdtln, lv_create TYPE boolean. @@ -620,8 +499,8 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ASSERT sy-subrc = 0. ls_package_data-devclass = -value. - zcl_abapgit_popups=>popup_to_create_package( IMPORTING es_package_data = ls_package_data - ev_create = lv_create ). + popup_to_create_package( IMPORTING es_package_data = ls_package_data + ev_create = lv_create ). IF lv_create = abap_false. RETURN. ENDIF. @@ -635,7 +514,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD popup_folder_logic. + METHOD zif_abapgit_popups~popup_folder_logic. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval. @@ -676,7 +555,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. "popup_package_export - METHOD popup_object. + METHOD zif_abapgit_popups~popup_object. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval. @@ -730,7 +609,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD popup_package_export. + METHOD zif_abapgit_popups~popup_package_export. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval. @@ -781,7 +660,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. "popup_package_export - METHOD popup_to_confirm. + METHOD zif_abapgit_popups~popup_to_confirm. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING @@ -805,7 +684,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. "popup_to_confirm - METHOD popup_to_create_package. + METHOD zif_abapgit_popups~popup_to_create_package. CALL FUNCTION 'FUNCTION_EXISTS' EXPORTING funcname = 'PB_POPUP_PACKAGE_CREATE' @@ -832,7 +711,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. " popup_to_create_package - METHOD popup_to_create_transp_branch. + METHOD zif_abapgit_popups~popup_to_create_transp_branch. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval, lv_transports_as_text TYPE string, @@ -885,7 +764,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD popup_to_inform. + METHOD zif_abapgit_popups~popup_to_inform. DATA: lv_line1 TYPE char70, lv_line2 TYPE char70. @@ -904,7 +783,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. " popup_to_inform. - METHOD popup_to_select_from_list. + METHOD zif_abapgit_popups~popup_to_select_from_list. DATA: lo_events TYPE REF TO cl_salv_events_table, @@ -991,7 +870,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD popup_to_select_transports. + METHOD zif_abapgit_popups~popup_to_select_transports. * todo, method to be renamed, it only returns one transport @@ -1011,7 +890,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD popup_transport_request. + METHOD zif_abapgit_popups~popup_transport_request. DATA: lt_e071 TYPE STANDARD TABLE OF e071, lt_e071k TYPE STANDARD TABLE OF e071k. @@ -1042,7 +921,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD repo_new_offline. + METHOD zif_abapgit_popups~repo_new_offline. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval, @@ -1123,7 +1002,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. "repo_new_offline - METHOD repo_popup. + METHOD zif_abapgit_popups~repo_popup. DATA: lv_returncode TYPE c, lv_icon_ok TYPE icon-name, @@ -1242,7 +1121,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. ENDMETHOD. - METHOD run_page_class_popup. + METHOD zif_abapgit_popups~run_page_class_popup. DATA: lv_answer TYPE c LENGTH 1, lt_fields TYPE TABLE OF sval. diff --git a/src/ui/zcl_abapgit_popups.clas.xml b/src/ui/zcl_abapgit_popups.clas.xml index 48c46ddc3..b37c9eb7b 100644 --- a/src/ui/zcl_abapgit_popups.clas.xml +++ b/src/ui/zcl_abapgit_popups.clas.xml @@ -7,7 +7,6 @@ 1 E Popups - 2 1 X X diff --git a/src/ui/zcl_abapgit_services_abapgit.clas.abap b/src/ui/zcl_abapgit_services_abapgit.clas.abap index ea21ca794..c2f83cdf7 100644 --- a/src/ui/zcl_abapgit_services_abapgit.clas.abap +++ b/src/ui/zcl_abapgit_services_abapgit.clas.abap @@ -54,7 +54,7 @@ CLASS ZCL_ABAPGIT_SERVICES_ABAPGIT IMPLEMENTATION. lv_answer TYPE c LENGTH 1. - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = iv_title text_question = iv_text text_button_1 = 'Continue' @@ -94,7 +94,7 @@ CLASS ZCL_ABAPGIT_SERVICES_ABAPGIT IMPLEMENTATION. IF is_installed( ) = abap_true. lv_text = 'Seems like abapGit package is already installed. No changes to be done'. - zcl_abapgit_popups=>popup_to_inform( + zcl_abapgit_ui_factory=>get_popups( )->popup_to_inform( titlebar = lc_title text_message = lv_text ). RETURN. @@ -117,7 +117,7 @@ CLASS ZCL_ABAPGIT_SERVICES_ABAPGIT IMPLEMENTATION. IF is_installed_pi( ) = abap_true. lv_text = 'Seems like abapGit plugins package is already installed. No changes to be done'. - zcl_abapgit_popups=>popup_to_inform( + zcl_abapgit_ui_factory=>get_popups( )->popup_to_inform( titlebar = lc_title text_message = lv_text ). RETURN. diff --git a/src/ui/zcl_abapgit_services_git.clas.abap b/src/ui/zcl_abapgit_services_git.clas.abap index 2a022c200..fda6bca65 100644 --- a/src/ui/zcl_abapgit_services_git.clas.abap +++ b/src/ui/zcl_abapgit_services_git.clas.abap @@ -129,7 +129,7 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). - zcl_abapgit_popups=>create_branch_popup( + zcl_abapgit_ui_factory=>get_popups( )->create_branch_popup( IMPORTING ev_name = lv_name ev_cancel = lv_cancel ). @@ -160,7 +160,7 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). - ls_branch = zcl_abapgit_popups=>branch_list_popup( lo_repo->get_url( ) ). + ls_branch = zcl_abapgit_ui_factory=>get_popups( )->branch_list_popup( lo_repo->get_url( ) ). IF ls_branch IS INITIAL. RAISE EXCEPTION TYPE zcx_abapgit_cancel. ENDIF. @@ -233,7 +233,7 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. zcx_abapgit_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ). ENDIF. - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = 'Warning' text_question = 'Reset local objects?' text_button_1 = 'Ok' @@ -254,7 +254,7 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. INSERT `OBJECT` INTO TABLE lt_columns. INSERT `OBJ_NAME` INTO TABLE lt_columns. - zcl_abapgit_popups=>popup_to_select_from_list( + zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_from_list( EXPORTING it_list = lt_unnecessary_local_objs i_header_text = |Which unnecessary objects should be deleted?| @@ -282,7 +282,7 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). - ls_branch = zcl_abapgit_popups=>branch_list_popup( + ls_branch = zcl_abapgit_ui_factory=>get_popups( )->branch_list_popup( iv_url = lo_repo->get_url( ) iv_default_branch = lo_repo->get_branch_name( ) iv_show_new_option = abap_true ). @@ -290,7 +290,7 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. RAISE EXCEPTION TYPE zcx_abapgit_cancel. ENDIF. - IF ls_branch-name = zcl_abapgit_popups=>c_new_branch_label. + IF ls_branch-name = zcl_abapgit_ui_factory=>get_popups( )->c_new_branch_label. create_branch( iv_key ). RETURN. ENDIF. diff --git a/src/ui/zcl_abapgit_services_repo.clas.abap b/src/ui/zcl_abapgit_services_repo.clas.abap index f1a52ffaf..8e6b9a61e 100644 --- a/src/ui/zcl_abapgit_services_repo.clas.abap +++ b/src/ui/zcl_abapgit_services_repo.clas.abap @@ -121,7 +121,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. ENDIF. IF ls_checks-transport-required = abap_true. - ls_checks-transport-transport = zcl_abapgit_popups=>popup_transport_request( + ls_checks-transport-transport = zcl_abapgit_ui_factory=>get_popups( )->popup_transport_request( is_transport_type = ls_checks-transport-type ). ENDIF. @@ -138,9 +138,9 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. METHOD new_offline. DATA: lo_repo TYPE REF TO zcl_abapgit_repo, - ls_popup TYPE zcl_abapgit_popups=>ty_popup. + ls_popup TYPE zif_abapgit_popups=>ty_popup. - ls_popup = zcl_abapgit_popups=>repo_new_offline( ). + ls_popup = zcl_abapgit_ui_factory=>get_popups( )->repo_new_offline( ). IF ls_popup-cancel = abap_true. RAISE EXCEPTION TYPE zcx_abapgit_cancel. ENDIF. @@ -159,10 +159,9 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. METHOD new_online. - DATA: ls_popup TYPE zcl_abapgit_popups=>ty_popup. + DATA: ls_popup TYPE zif_abapgit_popups=>ty_popup. - - ls_popup = zcl_abapgit_popups=>repo_popup( iv_url ). + ls_popup = zcl_abapgit_ui_factory=>get_popups( )->repo_popup( iv_url ). IF ls_popup-cancel = abap_true. RAISE EXCEPTION TYPE zcx_abapgit_cancel. ENDIF. @@ -213,7 +212,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. lv_column = 'OBJ_NAME'. INSERT lv_column INTO TABLE lt_columns. - zcl_abapgit_popups=>popup_to_select_from_list( + zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_from_list( EXPORTING it_list = ct_overwrite i_header_text = |The following Objects have been modified locally.| @@ -255,7 +254,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. 'from package' -devclass INTO lv_question SEPARATED BY space. "#EC NOTEXT - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = 'Warning' text_question = lv_question text_button_1 = 'Ok' @@ -296,7 +295,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. lv_question = |This will DELETE all objects in package { lv_package } ({ lines( lt_tadir ) } objects) from the system|. "#EC NOTEXT - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = 'Uninstall' text_question = lv_question text_button_1 = 'Delete' @@ -350,7 +349,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. && ' Please make sure you don''t have ones like that.'. ENDIF. - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = 'Warning' text_question = lv_question text_button_1 = 'OK' @@ -371,10 +370,10 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. METHOD remote_attach. - DATA: ls_popup TYPE zcl_abapgit_popups=>ty_popup, + DATA: ls_popup TYPE zif_abapgit_popups=>ty_popup, lo_repo TYPE REF TO zcl_abapgit_repo_online. - ls_popup = zcl_abapgit_popups=>repo_popup( + ls_popup = zcl_abapgit_ui_factory=>get_popups( )->repo_popup( iv_title = 'Attach repo to remote ...' iv_url = '' iv_package = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key )->get_package( ) @@ -398,12 +397,12 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. METHOD remote_change. - DATA: ls_popup TYPE zcl_abapgit_popups=>ty_popup, + DATA: ls_popup TYPE zif_abapgit_popups=>ty_popup, lo_repo TYPE REF TO zcl_abapgit_repo_online. lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). - ls_popup = zcl_abapgit_popups=>repo_popup( + ls_popup = zcl_abapgit_ui_factory=>get_popups( )->repo_popup( iv_title = 'Change repo remote ...' iv_url = lo_repo->get_url( ) iv_package = lo_repo->get_package( ) @@ -425,7 +424,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. DATA: lv_answer TYPE c LENGTH 1. - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = 'Make repository OFF-line' text_question = 'This will detach the repo from remote and make it OFF-line' text_button_1 = 'Make OFF-line' @@ -459,7 +458,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. lv_question = |This will remove the repository reference to the package { lv_package }. All objects will safely remain in the system.|. - lv_answer = zcl_abapgit_popups=>popup_to_confirm( + lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( titlebar = 'Remove' text_question = lv_question text_button_1 = 'Remove' @@ -503,13 +502,13 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. lo_repository ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_repository_key ). - lt_transport_headers = zcl_abapgit_popups=>popup_to_select_transports( ). + lt_transport_headers = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_transports( ). lt_transport_objects = zcl_abapgit_transport=>to_tadir( lt_transport_headers ). IF lt_transport_objects IS INITIAL. zcx_abapgit_exception=>raise( 'Canceled or List of objects is empty ' ). ENDIF. - ls_transport_to_branch = zcl_abapgit_popups=>popup_to_create_transp_branch( + ls_transport_to_branch = zcl_abapgit_ui_factory=>get_popups( )->popup_to_create_transp_branch( lt_transport_headers ). CREATE OBJECT lo_transport_to_branch. diff --git a/src/ui/zcl_abapgit_ui_factory.clas.abap b/src/ui/zcl_abapgit_ui_factory.clas.abap new file mode 100644 index 000000000..a78782b76 --- /dev/null +++ b/src/ui/zcl_abapgit_ui_factory.clas.abap @@ -0,0 +1,32 @@ +CLASS zcl_abapgit_ui_factory DEFINITION + PUBLIC + CREATE PRIVATE + GLOBAL FRIENDS zcl_abapgit_ui_injector. + + PUBLIC SECTION. + CLASS-METHODS: + get_popups + RETURNING + VALUE(ri_popups) TYPE REF TO zif_abapgit_popups. + + PRIVATE SECTION. + CLASS-DATA: + mi_popups TYPE REF TO zif_abapgit_popups. + +ENDCLASS. + + + +CLASS zcl_abapgit_ui_factory IMPLEMENTATION. + + METHOD get_popups. + + IF mi_popups IS INITIAL. + CREATE OBJECT mi_popups TYPE zcl_abapgit_popups. + ENDIF. + + ri_popups = mi_popups. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/ui/zcl_abapgit_ui_factory.clas.xml b/src/ui/zcl_abapgit_ui_factory.clas.xml new file mode 100644 index 000000000..4adeca9e1 --- /dev/null +++ b/src/ui/zcl_abapgit_ui_factory.clas.xml @@ -0,0 +1,17 @@ + + + + + + ZCL_ABAPGIT_UI_FACTORY + 1 + E + abapGit UI factory + 1 + X + X + X + + + + diff --git a/src/ui/zcl_abapgit_ui_injector.clas.abap b/src/ui/zcl_abapgit_ui_injector.clas.abap new file mode 100644 index 000000000..8634dc6e8 --- /dev/null +++ b/src/ui/zcl_abapgit_ui_injector.clas.abap @@ -0,0 +1,23 @@ +CLASS zcl_abapgit_ui_injector DEFINITION + PUBLIC + CREATE PRIVATE. + + PUBLIC SECTION. + CLASS-METHODS: + set_popups + IMPORTING + ii_popups TYPE REF TO zif_abapgit_popups. + +ENDCLASS. + + + +CLASS zcl_abapgit_ui_injector IMPLEMENTATION. + + METHOD set_popups. + + zcl_abapgit_ui_factory=>mi_popups = ii_popups. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap b/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap new file mode 100644 index 000000000..e8f961801 --- /dev/null +++ b/src/ui/zcl_abapgit_ui_injector.clas.testclasses.abap @@ -0,0 +1,149 @@ +*"* use this source file for your ABAP unit test classes + +CLASS ltd_abapgit_popups_mock DEFINITION. + + PUBLIC SECTION. + INTERFACES: zif_abapgit_popups. + +ENDCLASS. + +CLASS no_dependency_injection DEFINITION FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PRIVATE SECTION. + METHODS: + no_injection FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS simple_dependency_injection DEFINITION FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PRIVATE SECTION. + METHODS: + setup, + simple_injection FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS ltd_abapgit_popups_mock IMPLEMENTATION. + + METHOD zif_abapgit_popups~branch_list_popup. + + ENDMETHOD. + + METHOD zif_abapgit_popups~branch_popup_callback. + + ENDMETHOD. + + METHOD zif_abapgit_popups~create_branch_popup. + + ENDMETHOD. + + METHOD zif_abapgit_popups~package_popup_callback. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_folder_logic. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_object. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_package_export. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_to_confirm. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_to_create_package. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_to_create_transp_branch. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_to_inform. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_to_select_from_list. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_to_select_transports. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_transport_request. + + ENDMETHOD. + + METHOD zif_abapgit_popups~repo_new_offline. + + ENDMETHOD. + + METHOD zif_abapgit_popups~repo_popup. + + ENDMETHOD. + + METHOD zif_abapgit_popups~run_page_class_popup. + + ENDMETHOD. + +ENDCLASS. + +CLASS no_dependency_injection IMPLEMENTATION. + + METHOD no_injection. + + DATA: lo_popups TYPE REF TO zif_abapgit_popups, + lo_class_descr TYPE REF TO cl_abap_classdescr. + + lo_popups = zcl_abapgit_ui_factory=>get_popups( ). + + lo_class_descr ?= cl_abap_classdescr=>describe_by_object_ref( lo_popups ). + + cl_abap_unit_assert=>assert_equals( + exp = '\CLASS=ZCL_ABAPGIT_POPUPS' + act = lo_class_descr->absolute_name ). + + ENDMETHOD. + +ENDCLASS. + +CLASS simple_dependency_injection IMPLEMENTATION. + + METHOD setup. + + DATA: lo_popups_mock TYPE REF TO ltd_abapgit_popups_mock. + + CREATE OBJECT lo_popups_mock. + + zcl_abapgit_ui_injector=>set_popups( lo_popups_mock ). + + ENDMETHOD. + + METHOD simple_injection. + + DATA: lo_popups TYPE REF TO zif_abapgit_popups, + lo_class_descr TYPE REF TO cl_abap_classdescr. + + lo_popups = zcl_abapgit_ui_factory=>get_popups( ). + + lo_class_descr ?= cl_abap_classdescr=>describe_by_object_ref( lo_popups ). + + cl_abap_unit_assert=>assert_equals( + exp = '\CLASS-POOL=ZCL_ABAPGIT_UI_INJECTOR\CLASS=LTD_ABAPGIT_POPUPS_MOCK' + act = lo_class_descr->absolute_name ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/ui/zcl_abapgit_ui_injector.clas.xml b/src/ui/zcl_abapgit_ui_injector.clas.xml new file mode 100644 index 000000000..414c4ec1b --- /dev/null +++ b/src/ui/zcl_abapgit_ui_injector.clas.xml @@ -0,0 +1,18 @@ + + + + + + ZCL_ABAPGIT_UI_INJECTOR + 1 + E + abapGit UI injector + 1 + X + X + X + X + + + + diff --git a/src/ui/zif_abapgit_popups.intf.abap b/src/ui/zif_abapgit_popups.intf.abap new file mode 100644 index 000000000..0d9f9e8fc --- /dev/null +++ b/src/ui/zif_abapgit_popups.intf.abap @@ -0,0 +1,161 @@ +INTERFACE zif_abapgit_popups + PUBLIC . + + TYPES: + BEGIN OF ty_popup, + url TYPE string, + package TYPE devclass, + branch_name TYPE string, + cancel TYPE abap_bool, + END OF ty_popup . + + CONSTANTS: + c_new_branch_label TYPE string VALUE '+ create new ...' ##NO_TEXT. + + METHODS: + popup_package_export + EXPORTING + ev_package TYPE devclass + ev_folder_logic TYPE string + RAISING + zcx_abapgit_exception, + + popup_folder_logic + RETURNING + VALUE(rv_folder_logic) TYPE string + RAISING + zcx_abapgit_exception, + + popup_object + RETURNING + VALUE(rs_tadir) TYPE tadir + RAISING + zcx_abapgit_exception, + + create_branch_popup + EXPORTING + ev_name TYPE string + ev_cancel TYPE abap_bool + RAISING + zcx_abapgit_exception, + + run_page_class_popup + EXPORTING + ev_name TYPE string + ev_cancel TYPE abap_bool + RAISING + zcx_abapgit_exception, + + repo_new_offline + RETURNING + VALUE(rs_popup) TYPE zif_abapgit_popups=>ty_popup + RAISING + zcx_abapgit_exception, + + branch_list_popup + IMPORTING + iv_url TYPE string + iv_default_branch TYPE string OPTIONAL + iv_show_new_option TYPE abap_bool OPTIONAL + RETURNING + VALUE(rs_branch) TYPE zif_abapgit_definitions=>ty_git_branch + RAISING + zcx_abapgit_exception, + + repo_popup + IMPORTING + iv_url TYPE string + iv_package TYPE devclass OPTIONAL + iv_branch TYPE string DEFAULT 'refs/heads/master' + iv_freeze_package TYPE abap_bool OPTIONAL + iv_freeze_url TYPE abap_bool OPTIONAL + iv_title TYPE clike DEFAULT 'Clone repository ...' + RETURNING + VALUE(rs_popup) TYPE zif_abapgit_popups=>ty_popup + RAISING + zcx_abapgit_exception ##NO_TEXT, + + popup_to_confirm + IMPORTING + titlebar TYPE clike + text_question TYPE clike + text_button_1 TYPE clike DEFAULT 'Yes' + icon_button_1 TYPE icon-name DEFAULT space + text_button_2 TYPE clike DEFAULT 'No' + icon_button_2 TYPE icon-name DEFAULT space + default_button TYPE char1 DEFAULT '1' + display_cancel_button TYPE char1 DEFAULT abap_true + RETURNING + VALUE(rv_answer) TYPE char1 + RAISING + zcx_abapgit_exception, + + popup_to_inform + IMPORTING + titlebar TYPE clike + text_message TYPE clike + RAISING + zcx_abapgit_exception, + + popup_to_create_package + EXPORTING + es_package_data TYPE scompkdtln + ev_create TYPE boolean + RAISING + zcx_abapgit_exception, + + popup_to_create_transp_branch + IMPORTING + it_transport_headers TYPE trwbo_request_headers + RETURNING + VALUE(rs_transport_branch) TYPE zif_abapgit_definitions=>ty_transport_to_branch + RAISING + zcx_abapgit_exception + zcx_abapgit_cancel, + + popup_to_select_transports + RETURNING + VALUE(rt_trkorr) TYPE trwbo_request_headers, + + popup_to_select_from_list + IMPORTING + it_list TYPE STANDARD TABLE + i_header_text TYPE csequence + i_select_column_text TYPE csequence + it_columns_to_display TYPE stringtab + EXPORTING + VALUE(et_list) TYPE STANDARD TABLE + RAISING + zcx_abapgit_cancel + zcx_abapgit_exception, + + branch_popup_callback + IMPORTING + iv_code TYPE clike + CHANGING + ct_fields TYPE zif_abapgit_definitions=>ty_sval_tt + cs_error TYPE svale + cv_show_popup TYPE char01 + RAISING + zcx_abapgit_exception, + + package_popup_callback + IMPORTING + iv_code TYPE clike + CHANGING + ct_fields TYPE zif_abapgit_definitions=>ty_sval_tt + cs_error TYPE svale + cv_show_popup TYPE char01 + RAISING + zcx_abapgit_exception, + + popup_transport_request + IMPORTING + is_transport_type TYPE zif_abapgit_definitions=>ty_transport_type + RETURNING + VALUE(rv_transport) TYPE trkorr + RAISING + zcx_abapgit_exception + zcx_abapgit_cancel . + +ENDINTERFACE. diff --git a/src/ui/zif_abapgit_popups.intf.xml b/src/ui/zif_abapgit_popups.intf.xml new file mode 100644 index 000000000..d6cf35d51 --- /dev/null +++ b/src/ui/zif_abapgit_popups.intf.xml @@ -0,0 +1,16 @@ + + + + + + ZIF_ABAPGIT_POPUPS + 1 + E + abapGit popups + 2 + 1 + X + + + + diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 5bd54503c..c54e03242 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -64,7 +64,7 @@ FORM branch_popup TABLES tt_fields TYPE zif_abapgit_definitions=>ty_sval_tt DATA: lx_error TYPE REF TO zcx_abapgit_exception. TRY. - zcl_abapgit_popups=>branch_popup_callback( + zcl_abapgit_ui_factory=>get_popups( )->branch_popup_callback( EXPORTING iv_code = pv_code CHANGING @@ -88,7 +88,7 @@ FORM package_popup TABLES tt_fields TYPE zif_abapgit_definitions=>ty_sval_tt DATA: lx_error TYPE REF TO zcx_abapgit_exception. TRY. - zcl_abapgit_popups=>package_popup_callback( + zcl_abapgit_ui_factory=>get_popups( )->package_popup_callback( EXPORTING iv_code = pv_code CHANGING diff --git a/src/zcl_abapgit_transport.clas.abap b/src/zcl_abapgit_transport.clas.abap index 1a1a89bfd..d3bd00cfe 100644 --- a/src/zcl_abapgit_transport.clas.abap +++ b/src/zcl_abapgit_transport.clas.abap @@ -152,7 +152,7 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION. lt_trkorr TYPE trwbo_request_headers. - lt_trkorr = zcl_abapgit_popups=>popup_to_select_transports( ). + lt_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_transports( ). IF lines( lt_trkorr ) = 0. RETURN. ENDIF. @@ -172,7 +172,7 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION. ls_data-package = lv_package. ls_data-dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ). - ls_data-dot_abapgit-folder_logic = zcl_abapgit_popups=>popup_folder_logic( ). + ls_data-dot_abapgit-folder_logic = zcl_abapgit_ui_factory=>get_popups( )->popup_folder_logic( ). CREATE OBJECT lo_repo EXPORTING diff --git a/src/zcl_abapgit_zip.clas.abap b/src/zcl_abapgit_zip.clas.abap index 0b6aadcf1..be5b8e337 100644 --- a/src/zcl_abapgit_zip.clas.abap +++ b/src/zcl_abapgit_zip.clas.abap @@ -119,7 +119,7 @@ CLASS zcl_abapgit_zip IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_files. - ls_tadir = zcl_abapgit_popups=>popup_object( ). + ls_tadir = zcl_abapgit_ui_factory=>get_popups( )->popup_object( ). IF ls_tadir IS INITIAL. RAISE EXCEPTION TYPE zcx_abapgit_cancel. ENDIF. @@ -205,7 +205,7 @@ CLASS zcl_abapgit_zip IMPLEMENTATION. ls_data-key = 'DUMMY'. ls_data-dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ). - zcl_abapgit_popups=>popup_package_export( + zcl_abapgit_ui_factory=>get_popups( )->popup_package_export( IMPORTING ev_package = ls_data-package ev_folder_logic = ls_data-dot_abapgit-folder_logic ).