diff --git a/src/utils/zcl_abapgit_frontend_services.clas.abap b/src/utils/zcl_abapgit_frontend_services.clas.abap new file mode 100644 index 000000000..64828ab5b --- /dev/null +++ b/src/utils/zcl_abapgit_frontend_services.clas.abap @@ -0,0 +1,175 @@ +CLASS zcl_abapgit_frontend_services DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES zif_abapgit_frontend_services. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_FRONTEND_SERVICES IMPLEMENTATION. + + + METHOD zif_abapgit_frontend_services~file_download. + + DATA: + lt_rawdata TYPE solix_tab. + + lt_rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstr ). + + cl_gui_frontend_services=>gui_download( + EXPORTING + bin_filesize = xstrlen( iv_xstr ) + filename = iv_path + filetype = 'BIN' + CHANGING + data_tab = lt_rawdata + EXCEPTIONS + file_write_error = 1 + no_batch = 2 + gui_refuse_filetransfer = 3 + invalid_type = 4 + no_authority = 5 + unknown_error = 6 + header_not_allowed = 7 + separator_not_allowed = 8 + filesize_not_allowed = 9 + header_too_long = 10 + dp_error_create = 11 + dp_error_send = 12 + dp_error_write = 13 + unknown_dp_error = 14 + access_denied = 15 + dp_out_of_memory = 16 + disk_full = 17 + dp_timeout = 18 + file_not_found = 19 + dataprovider_exception = 20 + control_flush_error = 21 + not_supported_by_gui = 22 + error_no_gui = 23 + OTHERS = 24 ). + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from gui_download' ). "#EC NOTEXT + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_frontend_services~file_upload. + + DATA: + lt_data TYPE TABLE OF x255, + lv_length TYPE i. + + cl_gui_frontend_services=>gui_upload( + EXPORTING + filename = iv_path + filetype = 'BIN' + IMPORTING + filelength = lv_length + CHANGING + data_tab = lt_data + EXCEPTIONS + file_open_error = 1 + file_read_error = 2 + no_batch = 3 + gui_refuse_filetransfer = 4 + invalid_type = 5 + no_authority = 6 + unknown_error = 7 + bad_data_format = 8 + header_not_allowed = 9 + separator_not_allowed = 10 + header_too_long = 11 + unknown_dp_error = 12 + access_denied = 13 + dp_out_of_memory = 14 + disk_full = 15 + dp_timeout = 16 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19 ). + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from gui_upload' ). "#EC NOTEXT + ENDIF. + + CONCATENATE LINES OF lt_data INTO rv_xstr IN BYTE MODE. + rv_xstr = rv_xstr(lv_length). + + ENDMETHOD. + + + METHOD zif_abapgit_frontend_services~show_file_open_dialog. + + DATA: + lt_file_table TYPE filetable, + ls_file_table LIKE LINE OF lt_file_table, + lv_action TYPE i, + lv_rc TYPE i. + + cl_gui_frontend_services=>file_open_dialog( + EXPORTING + window_title = iv_title + default_filename = iv_default_filename + CHANGING + file_table = lt_file_table + rc = lv_rc + user_action = lv_action + EXCEPTIONS + file_open_dialog_failed = 1 + cntl_error = 2 + error_no_gui = 3 + not_supported_by_gui = 4 + OTHERS = 5 ). + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from file_open_dialog' ). "#EC NOTEXT + ENDIF. + IF lv_action = cl_gui_frontend_services=>action_cancel. + zcx_abapgit_exception=>raise( 'cancelled' ). "#EC NOTEXT + ENDIF. + + READ TABLE lt_file_table INDEX 1 INTO ls_file_table. + ASSERT sy-subrc = 0. + rv_path = ls_file_table-filename. + + ENDMETHOD. + + + METHOD zif_abapgit_frontend_services~show_file_save_dialog. + + DATA: + lv_action TYPE i, + lv_filename TYPE string, + lv_path TYPE string. + + cl_gui_frontend_services=>file_save_dialog( + EXPORTING + window_title = iv_title + default_extension = iv_extension + default_file_name = iv_default_filename + CHANGING + filename = lv_filename + path = lv_path + fullpath = rv_path + user_action = lv_action + EXCEPTIONS + cntl_error = 1 + error_no_gui = 2 + not_supported_by_gui = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from file_save_dialog' ). "#EC NOTEXT + ENDIF. + IF lv_action = cl_gui_frontend_services=>action_cancel. + zcx_abapgit_exception=>raise( 'cancelled' ). "#EC NOTEXT + ENDIF. + + ENDMETHOD. +ENDCLASS. diff --git a/src/utils/zcl_abapgit_frontend_services.clas.xml b/src/utils/zcl_abapgit_frontend_services.clas.xml new file mode 100644 index 000000000..62b6d5bfc --- /dev/null +++ b/src/utils/zcl_abapgit_frontend_services.clas.xml @@ -0,0 +1,19 @@ + + + + + + ZCL_ABAPGIT_FRONTEND_SERVICES + 1 + E + File system utils + 2 + 1 + X + X + X + X + + + + diff --git a/src/utils/zif_abapgit_frontend_services.intf.abap b/src/utils/zif_abapgit_frontend_services.intf.abap new file mode 100644 index 000000000..fa9ac408e --- /dev/null +++ b/src/utils/zif_abapgit_frontend_services.intf.abap @@ -0,0 +1,33 @@ +INTERFACE zif_abapgit_frontend_services + PUBLIC . + METHODS file_upload + IMPORTING + !iv_path TYPE string + RETURNING + VALUE(rv_xstr) TYPE xstring + RAISING + zcx_abapgit_exception . + METHODS file_download + IMPORTING + !iv_path TYPE string + !iv_xstr TYPE xstring + RAISING + zcx_abapgit_exception . + METHODS show_file_save_dialog + IMPORTING + !iv_title TYPE string + !iv_extension TYPE string + !iv_default_filename TYPE string + RETURNING + VALUE(rv_path) TYPE string + RAISING + zcx_abapgit_exception . + METHODS show_file_open_dialog + IMPORTING + !iv_title TYPE string + !iv_default_filename TYPE string + RETURNING + VALUE(rv_path) TYPE string + RAISING + zcx_abapgit_exception . +ENDINTERFACE. diff --git a/src/utils/zif_abapgit_frontend_services.intf.xml b/src/utils/zif_abapgit_frontend_services.intf.xml new file mode 100644 index 000000000..b64c20a87 --- /dev/null +++ b/src/utils/zif_abapgit_frontend_services.intf.xml @@ -0,0 +1,16 @@ + + + + + + ZIF_ABAPGIT_FRONTEND_SERVICES + 1 + E + Frontend services interface + 2 + 1 + X + + + + diff --git a/src/zcl_abapgit_factory.clas.abap b/src/zcl_abapgit_factory.clas.abap index b8cb910b8..7939a47c9 100644 --- a/src/zcl_abapgit_factory.clas.abap +++ b/src/zcl_abapgit_factory.clas.abap @@ -57,6 +57,11 @@ CLASS zcl_abapgit_factory DEFINITION CLASS-METHODS get_cts_api RETURNING VALUE(ri_cts_api) TYPE REF TO zif_abapgit_cts_api. + CLASS-METHODS get_frontend_services + RETURNING + VALUE(ri_fe_serv) TYPE REF TO zif_abapgit_frontend_services. + + PROTECTED SECTION. PRIVATE SECTION. TYPES: @@ -92,11 +97,41 @@ CLASS zcl_abapgit_factory DEFINITION CLASS-DATA gi_stage_logic TYPE REF TO zif_abapgit_stage_logic . CLASS-DATA gi_cts_api TYPE REF TO zif_abapgit_cts_api. CLASS-DATA gi_adhoc_code_inspector TYPE REF TO zif_abapgit_code_inspector. + CLASS-DATA gi_fe_services TYPE REF TO zif_abapgit_frontend_services. ENDCLASS. -CLASS zcl_abapgit_factory IMPLEMENTATION. +CLASS ZCL_ABAPGIT_FACTORY IMPLEMENTATION. + + + METHOD get_abap_unit_tests. + + IF gi_adhoc_code_inspector IS BOUND. + ri_abap_unit_tests = gi_adhoc_code_inspector. + ELSE. + CREATE OBJECT ri_abap_unit_tests + TYPE zcl_abapgit_abap_unit_tests + EXPORTING + iv_package = iv_package. + ENDIF. + + ENDMETHOD. + + + METHOD get_adhoc_code_inspector. + + IF gi_adhoc_code_inspector IS BOUND. + ri_adhoc_code_inspector = gi_adhoc_code_inspector. + ELSE. + CREATE OBJECT ri_adhoc_code_inspector + TYPE zcl_abapgit_adhoc_code_insp + EXPORTING + iv_package = iv_package + iv_test_name = iv_test_name. + ENDIF. + + ENDMETHOD. METHOD get_branch_overview. @@ -137,6 +172,26 @@ CLASS zcl_abapgit_factory IMPLEMENTATION. ENDMETHOD. + METHOD get_cts_api. + IF gi_cts_api IS NOT BOUND. + CREATE OBJECT gi_cts_api TYPE zcl_abapgit_cts_api. + ENDIF. + + ri_cts_api = gi_cts_api. + ENDMETHOD. + + + METHOD get_frontend_services. + + IF gi_fe_services IS INITIAL. + CREATE OBJECT gi_fe_services TYPE zcl_abapgit_frontend_services. + ENDIF. + + ri_fe_serv = gi_fe_services. + + ENDMETHOD. + + METHOD get_sap_package. DATA: ls_sap_package TYPE ty_sap_package. @@ -208,40 +263,4 @@ CLASS zcl_abapgit_factory IMPLEMENTATION. ri_tadir = gi_tadir. ENDMETHOD. - - METHOD get_cts_api. - IF gi_cts_api IS NOT BOUND. - CREATE OBJECT gi_cts_api TYPE zcl_abapgit_cts_api. - ENDIF. - - ri_cts_api = gi_cts_api. - ENDMETHOD. - - METHOD get_adhoc_code_inspector. - - IF gi_adhoc_code_inspector IS BOUND. - ri_adhoc_code_inspector = gi_adhoc_code_inspector. - ELSE. - CREATE OBJECT ri_adhoc_code_inspector - TYPE zcl_abapgit_adhoc_code_insp - EXPORTING - iv_package = iv_package - iv_test_name = iv_test_name. - ENDIF. - - ENDMETHOD. - - - METHOD get_abap_unit_tests. - - IF gi_adhoc_code_inspector IS BOUND. - ri_abap_unit_tests = gi_adhoc_code_inspector. - ELSE. - CREATE OBJECT ri_abap_unit_tests - TYPE zcl_abapgit_abap_unit_tests - EXPORTING - iv_package = iv_package. - ENDIF. - - ENDMETHOD. ENDCLASS. diff --git a/src/zcl_abapgit_zip.clas.abap b/src/zcl_abapgit_zip.clas.abap index ed7bd27a7..c3ab8918c 100644 --- a/src/zcl_abapgit_zip.clas.abap +++ b/src/zcl_abapgit_zip.clas.abap @@ -23,6 +23,7 @@ CLASS zcl_abapgit_zip DEFINITION RAISING zcx_abapgit_exception zcx_abapgit_cancel . + PROTECTED SECTION. PRIVATE SECTION. CLASS-METHODS file_upload RETURNING VALUE(rv_xstr) TYPE xstring @@ -249,152 +250,39 @@ CLASS ZCL_ABAPGIT_ZIP IMPLEMENTATION. METHOD file_download. - DATA: lt_rawdata TYPE solix_tab, - lv_action TYPE i, - lv_filename TYPE string, - lv_default TYPE string, - lv_path TYPE string, - lv_fullpath TYPE string, - lv_package TYPE devclass. - + DATA: + lv_path TYPE string, + lv_default TYPE string, + lo_fe_serv TYPE REF TO zif_abapgit_frontend_services, + lv_package TYPE devclass. lv_package = iv_package. TRANSLATE lv_package USING '/#'. CONCATENATE lv_package '_' sy-datlo '_' sy-timlo INTO lv_default. - cl_gui_frontend_services=>file_save_dialog( - EXPORTING - window_title = 'Export ZIP' - default_extension = 'zip' - default_file_name = lv_default - CHANGING - filename = lv_filename - path = lv_path - fullpath = lv_fullpath - user_action = lv_action - EXCEPTIONS - cntl_error = 1 - error_no_gui = 2 - not_supported_by_gui = 3 - OTHERS = 4 ). "#EC NOTEXT - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'error from file_save_dialog' ). - ENDIF. - IF lv_action = cl_gui_frontend_services=>action_cancel. - zcx_abapgit_exception=>raise( 'cancelled' ). - ENDIF. + lo_fe_serv = zcl_abapgit_factory=>get_frontend_services( ). - lt_rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstr ). + lv_path = lo_fe_serv->show_file_save_dialog( + iv_title = 'Export ZIP' + iv_extension = 'zip' + iv_default_filename = lv_default ). - cl_gui_frontend_services=>gui_download( - EXPORTING - bin_filesize = xstrlen( iv_xstr ) - filename = lv_fullpath - filetype = 'BIN' - CHANGING - data_tab = lt_rawdata - EXCEPTIONS - file_write_error = 1 - no_batch = 2 - gui_refuse_filetransfer = 3 - invalid_type = 4 - no_authority = 5 - unknown_error = 6 - header_not_allowed = 7 - separator_not_allowed = 8 - filesize_not_allowed = 9 - header_too_long = 10 - dp_error_create = 11 - dp_error_send = 12 - dp_error_write = 13 - unknown_dp_error = 14 - access_denied = 15 - dp_out_of_memory = 16 - disk_full = 17 - dp_timeout = 18 - file_not_found = 19 - dataprovider_exception = 20 - control_flush_error = 21 - not_supported_by_gui = 22 - error_no_gui = 23 - OTHERS = 24 ). - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'error from gui_download' ). - ENDIF. + lo_fe_serv->file_download( + iv_path = lv_path + iv_xstr = iv_xstr ). ENDMETHOD. METHOD file_upload. - DATA: lt_data TYPE TABLE OF x255, - lt_file_table TYPE filetable, - ls_file_table LIKE LINE OF lt_file_table, - lv_action TYPE i, - lv_string TYPE string, - lv_rc TYPE i, - lv_length TYPE i. + DATA: lv_path TYPE string. + lv_path = zcl_abapgit_factory=>get_frontend_services( )->show_file_open_dialog( + iv_title = 'Import ZIP' + iv_default_filename = '*.zip' ). - cl_gui_frontend_services=>file_open_dialog( - EXPORTING - window_title = 'Import ZIP' - default_filename = '*.zip' - CHANGING - file_table = lt_file_table - rc = lv_rc - user_action = lv_action - EXCEPTIONS - file_open_dialog_failed = 1 - cntl_error = 2 - error_no_gui = 3 - not_supported_by_gui = 4 - OTHERS = 5 ). "#EC NOTEXT - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'error from file_open_dialog' ). - ENDIF. - IF lv_action = cl_gui_frontend_services=>action_cancel. - zcx_abapgit_exception=>raise( 'cancelled' ). - ENDIF. - - READ TABLE lt_file_table INDEX 1 INTO ls_file_table. - ASSERT sy-subrc = 0. - lv_string = ls_file_table-filename. - - cl_gui_frontend_services=>gui_upload( - EXPORTING - filename = lv_string - filetype = 'BIN' - IMPORTING - filelength = lv_length - CHANGING - data_tab = lt_data - EXCEPTIONS - file_open_error = 1 - file_read_error = 2 - no_batch = 3 - gui_refuse_filetransfer = 4 - invalid_type = 5 - no_authority = 6 - unknown_error = 7 - bad_data_format = 8 - header_not_allowed = 9 - separator_not_allowed = 10 - header_too_long = 11 - unknown_dp_error = 12 - access_denied = 13 - dp_out_of_memory = 14 - disk_full = 15 - dp_timeout = 16 - not_supported_by_gui = 17 - error_no_gui = 18 - OTHERS = 19 ). - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'error from gui_upload' ). - ENDIF. - - CONCATENATE LINES OF lt_data INTO rv_xstr IN BYTE MODE. - rv_xstr = rv_xstr(lv_length). + rv_xstr = zcl_abapgit_factory=>get_frontend_services( )->file_upload( lv_path ). ENDMETHOD.