Decouple cl_gui_frontend_services (#5046)

* add additional methods

* fix whitespace

* add parameter prefixes

* zip: refactor usage of frontend_services

* debug info: refactor usage of frontend_services

* services basis: refactor frontend_services usage

* objects_super: refactor usage of frontend_services

* router: refactor usage of frontend_services

* services_abapgit: refactor usage of frontend_serv

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
g-back 2021-10-20 17:54:23 +02:00 committed by GitHub
parent 27eca9b766
commit 1e5befc44a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 197 additions and 116 deletions

View File

@ -306,13 +306,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
iv_sub_obj_name = iv_sub_obj_name
iv_line_number = iv_line_number ).
cl_gui_frontend_services=>execute(
EXPORTING document = lv_adt_link
EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |ADT Jump Error - failed to open link { lv_adt_link }. Subrc={ sy-subrc }| ).
ENDIF.
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = lv_adt_link ).
CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise( iv_text = 'ADT Jump Error'

View File

@ -1,11 +1,11 @@
CLASS zcl_abapgit_frontend_services DEFINITION
PUBLIC
CREATE PRIVATE
GLOBAL FRIENDS zcl_abapgit_ui_factory .
GLOBAL FRIENDS zcl_abapgit_ui_factory.
PUBLIC SECTION.
INTERFACES zif_abapgit_frontend_services .
INTERFACES zif_abapgit_frontend_services.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
@ -193,9 +193,9 @@ CLASS ZCL_ABAPGIT_FRONTEND_SERVICES IMPLEMENTATION.
" Note: do not use a string table for 'it_data'!
cl_gui_frontend_services=>clipboard_export(
EXPORTING
no_auth_check = iv_no_auth_check
no_auth_check = iv_no_auth_check
IMPORTING
data = it_data
data = it_data
CHANGING
rc = lv_rc
EXCEPTIONS
@ -208,4 +208,95 @@ CLASS ZCL_ABAPGIT_FRONTEND_SERVICES IMPLEMENTATION.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_frontend_services~execute.
cl_gui_frontend_services=>execute(
EXPORTING
document = iv_document
application = iv_application
parameter = iv_parameter
default_directory = iv_default_directory
maximized = iv_maximized
minimized = iv_minimized
synchronous = iv_synchronous
operation = iv_operation
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_frontend_services~get_system_directory.
cl_gui_frontend_services=>get_system_directory(
CHANGING
system_directory = cv_system_directory
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_frontend_services~directory_browse.
cl_gui_frontend_services=>directory_browse(
EXPORTING
window_title = iv_window_title
initial_folder = iv_initial_folder
CHANGING
selected_folder = cv_selected_folder
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_frontend_services~get_file_separator.
cl_gui_frontend_services=>get_file_separator(
CHANGING
file_separator = cv_file_separator
EXCEPTIONS
not_supported_by_gui = 1
error_no_gui = 2
cntl_error = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_frontend_services~get_gui_version.
cl_gui_frontend_services=>get_gui_version(
CHANGING
version_table = ct_version_table
rc = cv_rc
EXCEPTIONS
get_gui_version_failed = 1
cant_write_version_table = 2
gui_no_version = 3
cntl_error = 4
error_no_gui = 5
not_supported_by_gui = 6
OTHERS = 7 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -123,16 +123,21 @@ CLASS zcl_abapgit_gui_page_debuginfo IMPLEMENTATION.
METHOD render_debug_info.
DATA: lt_ver_tab TYPE filetable,
lv_rc TYPE i,
ls_release TYPE zif_abapgit_environment=>ty_release_sp,
lv_gui_version TYPE string,
ls_version LIKE LINE OF lt_ver_tab,
lv_devclass TYPE devclass.
DATA: lt_ver_tab TYPE filetable,
lv_rc TYPE i,
ls_release TYPE zif_abapgit_environment=>ty_release_sp,
lv_gui_version TYPE string,
ls_version LIKE LINE OF lt_ver_tab,
lv_devclass TYPE devclass,
lo_frontend_serv TYPE REF TO zif_abapgit_frontend_services.
lo_frontend_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
TRY.
lo_frontend_serv->get_gui_version( CHANGING ct_version_table = lt_ver_tab cv_rc = lv_rc ).
CATCH zcx_abapgit_exception ##NO_HANDLER.
" Continue rendering even if this fails
ENDTRY.
cl_gui_frontend_services=>get_gui_version(
CHANGING version_table = lt_ver_tab rc = lv_rc
EXCEPTIONS OTHERS = 1 ).
READ TABLE lt_ver_tab INTO ls_version INDEX 1. " gui release
lv_gui_version = ls_version-filename.
READ TABLE lt_ver_tab INTO ls_version INDEX 2. " gui sp

View File

@ -147,24 +147,7 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
METHOD call_browser.
cl_gui_frontend_services=>execute(
EXPORTING
document = |{ iv_url }|
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = |{ iv_url }| ).
ENDMETHOD.
@ -537,13 +520,10 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
trnumber = iv_transport
RECEIVING
result = lv_transport_adt_uri.
lv_adt_link = |adt://{ sy-sysid }{ lv_transport_adt_uri }|.
cl_gui_frontend_services=>execute( EXPORTING document = lv_adt_link
EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'ADT Jump Error' ).
ENDIF.
lv_adt_link = |adt://{ sy-sysid }{ lv_transport_adt_uri }|.
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = lv_adt_link ).
CATCH cx_root.
CALL FUNCTION 'TR_DISPLAY_REQUEST'
EXPORTING

View File

@ -10,6 +10,7 @@ CLASS zcl_abapgit_services_abapgit DEFINITION
CONSTANTS c_abapgit_wikipage TYPE string VALUE 'https://docs.abapgit.org' ##NO_TEXT.
CONSTANTS c_dotabap_homepage TYPE string VALUE 'https://dotabap.org' ##NO_TEXT.
CONSTANTS c_abapgit_class TYPE seoclsname VALUE `ZCX_ABAPGIT_EXCEPTION` ##NO_TEXT.
CONSTANTS c_changelog_path TYPE string VALUE '/blob/main/changelog.txt' ##NO_TEXT.
CLASS-METHODS open_abapgit_homepage
RAISING
@ -43,6 +44,11 @@ CLASS zcl_abapgit_services_abapgit DEFINITION
CLASS-METHODS check_sapgui
RAISING
zcx_abapgit_exception .
CLASS-METHODS open_url_in_browser
IMPORTING
!iv_url TYPE string
RAISING
zcx_abapgit_exception.
ENDCLASS.
@ -158,50 +164,22 @@ CLASS ZCL_ABAPGIT_SERVICES_ABAPGIT IMPLEMENTATION.
METHOD open_abapgit_changelog.
cl_gui_frontend_services=>execute(
EXPORTING document = c_abapgit_repo && '/blob/main/changelog.txt'
EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Opening page in external browser failed.' ).
ENDIF.
open_url_in_browser( |{ c_abapgit_repo }{ c_changelog_path }| ).
ENDMETHOD.
METHOD open_abapgit_homepage.
cl_gui_frontend_services=>execute(
EXPORTING document = c_abapgit_homepage
EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Opening page in external browser failed.' ).
ENDIF.
open_url_in_browser( c_abapgit_homepage ).
ENDMETHOD.
METHOD open_abapgit_wikipage.
cl_gui_frontend_services=>execute(
EXPORTING document = c_abapgit_wikipage
EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Opening page in external browser failed.' ).
ENDIF.
open_url_in_browser( c_abapgit_wikipage ).
ENDMETHOD.
METHOD open_dotabap_homepage.
cl_gui_frontend_services=>execute(
EXPORTING document = c_dotabap_homepage
EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Opening page in external browser failed.' ).
ENDIF.
open_url_in_browser( c_dotabap_homepage ).
ENDMETHOD.
@ -294,4 +272,16 @@ CLASS ZCL_ABAPGIT_SERVICES_ABAPGIT IMPLEMENTATION.
ENDIF.
ENDMETHOD.
METHOD open_url_in_browser.
DATA lx_error TYPE REF TO zcx_abapgit_exception.
TRY.
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = iv_url ).
CATCH zcx_abapgit_exception INTO lx_error.
zcx_abapgit_exception=>raise( iv_text = 'Opening page in external browser failed.'
ix_previous = lx_error ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -57,46 +57,20 @@ CLASS ZCL_ABAPGIT_SERVICES_BASIS IMPLEMENTATION.
METHOD open_ie_devtools.
DATA: lv_system_directory TYPE string,
lv_exe_full_path TYPE string.
lv_exe_full_path TYPE string,
lo_frontend_serv TYPE REF TO zif_abapgit_frontend_services.
IF zcl_abapgit_ui_factory=>get_gui_functions( )->is_sapgui_for_windows( ) = abap_false.
zcx_abapgit_exception=>raise( |IE DevTools not supported on frontend OS| ).
ENDIF.
cl_gui_frontend_services=>get_system_directory(
CHANGING
system_directory = lv_system_directory
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 GET_SYSTEM_DIRECTORY sy-subrc: { sy-subrc }| ).
ENDIF.
lo_frontend_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
lo_frontend_serv->get_system_directory( CHANGING cv_system_directory = lv_system_directory ).
cl_gui_cfw=>flush( ).
lv_exe_full_path = lv_system_directory && `\F12\IEChooser.exe`.
cl_gui_frontend_services=>execute(
EXPORTING
application = lv_exe_full_path
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10 ).
IF sy-subrc <> 0.
" IEChooser is only available on Windows 10
zcx_abapgit_exception=>raise( |Error from EXECUTE sy-subrc: { sy-subrc }| ).
ENDIF.
lo_frontend_serv->execute( iv_application = lv_exe_full_path ).
ENDMETHOD.

View File

@ -1,4 +1,7 @@
INTERFACE zif_abapgit_frontend_services PUBLIC.
TYPES ty_char1 TYPE c LENGTH 1.
METHODS file_upload
IMPORTING
!iv_path TYPE string
@ -37,4 +40,46 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
VALUE(it_data) TYPE STANDARD TABLE
RAISING
zcx_abapgit_exception.
METHODS execute
IMPORTING
!iv_document TYPE string OPTIONAL
!iv_application TYPE string OPTIONAL
!iv_parameter TYPE string OPTIONAL
!iv_default_directory TYPE string OPTIONAL
!iv_maximized TYPE string OPTIONAL
!iv_minimized TYPE string OPTIONAL
!iv_synchronous TYPE string OPTIONAL
!iv_operation TYPE string DEFAULT 'OPEN'
RAISING
zcx_abapgit_exception.
METHODS get_system_directory
CHANGING
!cv_system_directory TYPE string
RAISING
zcx_abapgit_exception.
METHODS directory_browse
IMPORTING
iv_window_title TYPE string OPTIONAL
iv_initial_folder TYPE string OPTIONAL
CHANGING
cv_selected_folder TYPE string
RAISING
zcx_abapgit_exception.
METHODS get_file_separator
CHANGING
cv_file_separator TYPE ty_char1
RAISING
zcx_abapgit_exception.
METHODS get_gui_version
CHANGING
ct_version_table TYPE filetable
cv_rc TYPE i
RAISING
zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -144,11 +144,12 @@ CLASS zcl_abapgit_zip IMPLEMENTATION.
METHOD export_object.
DATA: ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,
lv_folder TYPE string,
lv_fullpath TYPE string,
lv_sep TYPE c LENGTH 1,
ls_files_item TYPE zcl_abapgit_objects=>ty_serialization.
DATA: ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,
lv_folder TYPE string,
lv_fullpath TYPE string,
lv_sep TYPE c LENGTH 1,
ls_files_item TYPE zcl_abapgit_objects=>ty_serialization,
lo_frontend_serv TYPE REF TO zif_abapgit_frontend_services.
FIELD-SYMBOLS: <ls_file> LIKE LINE OF ls_files_item-files.
@ -170,17 +171,18 @@ CLASS zcl_abapgit_zip IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Empty' ).
ENDIF.
cl_gui_frontend_services=>directory_browse(
lo_frontend_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
lo_frontend_serv->directory_browse(
EXPORTING
initial_folder = gv_prev
iv_initial_folder = gv_prev
CHANGING
selected_folder = lv_folder ).
cv_selected_folder = lv_folder ).
IF lv_folder IS INITIAL.
RAISE EXCEPTION TYPE zcx_abapgit_cancel.
ENDIF.
gv_prev = lv_folder.
cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_sep ).
lo_frontend_serv->get_file_separator( CHANGING cv_file_separator = lv_sep ).
LOOP AT ls_files_item-files ASSIGNING <ls_file>.
lv_fullpath = |{ lv_folder }{ lv_sep }{ <ls_file>-filename }|.