Frontend services util (#2219)

* extract file system calls from zip

* fs to utils package

* rename fs to frontend services

* linter fix

* fix zip class

* review fixes
This commit is contained in:
sbcgua 2018-12-22 12:35:49 +02:00 committed by Lars Hvam
parent 11a175d467
commit 2b887bb7c3
6 changed files with 318 additions and 168 deletions

View File

@ -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.

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_FRONTEND_SERVICES</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>File system utils</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -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.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_FRONTEND_SERVICES</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Frontend services interface</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -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.

View File

@ -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.