flow page: add user exit (#6706)

This commit is contained in:
Lars Hvam 2023-12-19 16:20:51 +01:00 committed by GitHub
parent 20c1a3c610
commit 1059db6cc9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 261 additions and 74 deletions

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abapGit - GUI Flow Page</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,72 @@
CLASS zcl_abapgit_flow_exit DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_flow_exit .
CLASS-METHODS get_instance
RETURNING
VALUE(ri_exit) TYPE REF TO zif_abapgit_flow_exit.
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-DATA gi_global_exit TYPE REF TO zif_abapgit_flow_exit.
CLASS-DATA gi_exit TYPE REF TO zif_abapgit_flow_exit.
ENDCLASS.
CLASS ZCL_ABAPGIT_FLOW_EXIT IMPLEMENTATION.
METHOD get_instance.
* this exit only works with global classes
IF gi_global_exit IS NOT INITIAL.
ri_exit = gi_global_exit.
RETURN.
ENDIF.
TRY.
CREATE OBJECT gi_exit TYPE ('ZCL_ABAPGIT_FLOW_USER_EXIT').
CATCH cx_sy_create_object_error ##NO_HANDLER.
ENDTRY.
CREATE OBJECT gi_global_exit TYPE zcl_abapgit_flow_exit. " this class
ri_exit = gi_global_exit.
ENDMETHOD.
METHOD zif_abapgit_flow_exit~on_event.
IF gi_exit IS NOT INITIAL.
TRY.
rs_result = gi_exit->on_event(
ii_event = ii_event
it_features = it_features ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
ENDTRY.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_flow_exit~toolbar_extras.
IF gi_exit IS NOT INITIAL.
TRY.
gi_exit->toolbar_extras(
io_toolbar = io_toolbar
iv_index = iv_index
is_feature = is_feature ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
ENDTRY.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?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_FLOW_EXIT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Flow page default exit</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -2,24 +2,22 @@ CLASS zcl_abapgit_gui_page_flow DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_gui_component
FINAL
CREATE PRIVATE.
CREATE PRIVATE .
PUBLIC SECTION.
INTERFACES zif_abapgit_gui_event_handler.
INTERFACES zif_abapgit_gui_renderable.
INTERFACES zif_abapgit_gui_menu_provider.
INTERFACES zif_abapgit_gui_event_handler .
INTERFACES zif_abapgit_gui_renderable .
INTERFACES zif_abapgit_gui_menu_provider .
CLASS-METHODS create
RETURNING
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING
zcx_abapgit_exception.
zcx_abapgit_exception .
METHODS constructor
RAISING
zcx_abapgit_exception.
zcx_abapgit_exception .
PROTECTED SECTION.
PRIVATE SECTION.
@ -29,7 +27,7 @@ CLASS zcl_abapgit_gui_page_flow DEFINITION
pull TYPE string VALUE 'pull',
stage TYPE string VALUE 'stage',
END OF c_action .
DATA mt_features TYPE ty_features .
DATA mt_features TYPE zif_abapgit_gui_page_flow=>ty_features .
METHODS refresh
RAISING
@ -41,16 +39,21 @@ CLASS zcl_abapgit_gui_page_flow DEFINITION
RAISING
zcx_abapgit_exception .
METHODS render_table
IMPORTING
!is_feature TYPE zif_abapgit_gui_page_flow=>ty_feature
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
METHODS render_toolbar
IMPORTING
!iv_index TYPE i
!is_feature TYPE ty_feature
!is_feature TYPE zif_abapgit_gui_page_flow=>ty_feature
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
ENDCLASS.
CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_PAGE_FLOW IMPLEMENTATION.
METHOD constructor.
@ -92,7 +95,6 @@ CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
METHOD render_table.
DATA ls_path_name LIKE LINE OF is_feature-changed_files.
DATA lo_toolbar TYPE REF TO zcl_abapgit_html_toolbar.
DATA lv_status TYPE string.
DATA lv_branch TYPE string.
DATA lv_param TYPE string.
@ -128,15 +130,34 @@ CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
ENDLOOP.
ri_html->add( |</table>| ).
* todo: crossout if write protected
ENDMETHOD.
METHOD render_toolbar.
DATA lo_toolbar TYPE REF TO zcl_abapgit_html_toolbar.
DATA lv_extra TYPE string.
* todo: crossout pull if write protected
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
CREATE OBJECT lo_toolbar EXPORTING iv_id = 'toolbar-flow'.
IF is_feature-full_match = abap_false.
lv_extra = |?index={ iv_index }&key={ is_feature-repo-key }&branch={ is_feature-branch-display_name }|.
lo_toolbar->add( iv_txt = 'Pull'
iv_act = |{ c_action-pull }?index={ iv_index }&key={ is_feature-repo-key }&branch={ lv_branch }|
iv_act = |{ c_action-pull }{ lv_extra }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
lo_toolbar->add( iv_txt = 'Stage'
iv_act = |{ c_action-stage }?index={ iv_index }&key={ is_feature-repo-key }&branch={ lv_branch }|
iv_act = |{ c_action-stage }{ lv_extra }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
ENDIF.
zcl_abapgit_flow_exit=>get_instance( )->toolbar_extras(
io_toolbar = lo_toolbar
iv_index = iv_index
is_feature = is_feature ).
ri_html->add( lo_toolbar->render( ) ).
ENDMETHOD.
@ -167,6 +188,7 @@ CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
DATA lv_index TYPE i.
DATA lo_online TYPE REF TO zcl_abapgit_repo_online.
DATA ls_feature LIKE LINE OF mt_features.
DATA ls_event_result TYPE zif_abapgit_flow_exit=>ty_event_result.
FIELD-SYMBOLS <ls_object> LIKE LINE OF ls_feature-changed_objects.
FIELD-SYMBOLS <ls_filter> LIKE LINE OF lt_filter.
@ -238,6 +260,16 @@ CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
refresh( ).
WHEN OTHERS.
ls_event_result = zcl_abapgit_flow_exit=>get_instance( )->on_event(
ii_event = ii_event
it_features = mt_features ).
rs_handled = ls_event_result-handled.
IF ls_event_result-refresh = abap_true.
refresh( ).
ENDIF.
ENDCASE.
ENDMETHOD.
@ -317,18 +349,19 @@ CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
ri_html->add( |No corresponding transport found<br>| ).
ENDIF.
ri_html->add( '<br>' ).
IF ls_feature-branch IS NOT INITIAL AND ls_feature-branch-up_to_date = abap_false.
ri_html->add( 'Branch not up to date<br><br>' ).
CONTINUE.
ENDIF.
ri_html->add( render_toolbar(
iv_index = lv_index
is_feature = ls_feature ) ).
IF ls_feature-full_match = abap_true.
ri_html->add( |Full Match<br>| ).
ELSE.
ri_html->add( render_table(
is_feature = ls_feature
iv_index = lv_index ) ).
ri_html->add( render_table( ls_feature ) ).
ENDIF.
* todo LOOP AT ls_feature-changed_objects INTO ls_item.

View File

@ -74,7 +74,7 @@ CLASS lcl_helper DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS get_information
RETURNING
VALUE(rt_features) TYPE ty_features
VALUE(rt_features) TYPE zif_abapgit_gui_page_flow=>ty_features
RAISING
zcx_abapgit_exception.
@ -95,11 +95,11 @@ CLASS lcl_helper DEFINITION FINAL.
IMPORTING
io_online TYPE REF TO zif_abapgit_repo
RETURNING
VALUE(rs_data) TYPE ty_feature-repo.
VALUE(rs_data) TYPE zif_abapgit_gui_page_flow=>ty_feature-repo.
CLASS-METHODS map_files_to_objects
IMPORTING
it_files TYPE ty_path_name_tt
it_files TYPE zif_abapgit_gui_page_flow=>ty_path_name_tt
io_online TYPE REF TO zcl_abapgit_repo_online
RETURNING
VALUE(rt_changed_objects) TYPE zif_abapgit_definitions=>ty_items_ts
@ -113,7 +113,7 @@ CLASS lcl_helper DEFINITION FINAL.
EXPORTING
et_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
CHANGING
ct_features TYPE ty_features
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
RAISING
zcx_abapgit_exception.
@ -122,7 +122,7 @@ CLASS lcl_helper DEFINITION FINAL.
ii_repo TYPE REF TO zif_abapgit_repo
it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
CHANGING
ct_features TYPE ty_features
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
ct_transports TYPE ty_transports_tt
RAISING
zcx_abapgit_exception.
@ -134,7 +134,7 @@ CLASS lcl_helper DEFINITION FINAL.
it_transports TYPE ty_transports_tt
it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
CHANGING
cs_feature TYPE ty_feature
cs_feature TYPE zif_abapgit_gui_page_flow=>ty_feature
RAISING
zcx_abapgit_exception.
@ -143,7 +143,7 @@ CLASS lcl_helper DEFINITION FINAL.
iv_url TYPE string
it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
CHANGING
ct_features TYPE ty_features
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
RAISING
zcx_abapgit_exception.
@ -151,7 +151,7 @@ CLASS lcl_helper DEFINITION FINAL.
IMPORTING
iv_url TYPE string
CHANGING
ct_features TYPE ty_features
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
RAISING
zcx_abapgit_exception.
@ -159,7 +159,7 @@ CLASS lcl_helper DEFINITION FINAL.
IMPORTING
io_online TYPE REF TO zcl_abapgit_repo_online
CHANGING
ct_features TYPE ty_features
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
RAISING
zcx_abapgit_exception.
@ -174,7 +174,7 @@ CLASS lcl_helper DEFINITION FINAL.
it_expanded1 TYPE zif_abapgit_git_definitions=>ty_expanded_tt
it_expanded2 TYPE zif_abapgit_git_definitions=>ty_expanded_tt
RETURNING
VALUE(rt_files) TYPE ty_path_name_tt.
VALUE(rt_files) TYPE zif_abapgit_gui_page_flow=>ty_path_name_tt.
ENDCLASS.
CLASS lcl_helper IMPLEMENTATION.
@ -592,7 +592,7 @@ CLASS lcl_helper IMPLEMENTATION.
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
FIELD-SYMBOLS <ls_local> LIKE LINE OF lt_local.
FIELD-SYMBOLS <ls_changed_file> TYPE ty_path_name.
FIELD-SYMBOLS <ls_changed_file> TYPE zif_abapgit_gui_page_flow=>ty_path_name.
FIELD-SYMBOLS <ls_filter> LIKE LINE OF lt_filter.
FIELD-SYMBOLS <ls_object> LIKE LINE OF <ls_branch>-changed_objects.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_GUI_PAGE_FLOW</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Flow page</DESCRIPT>
<DESCRIPT>abapGit - GUI Flow Page</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -0,0 +1,25 @@
INTERFACE zif_abapgit_flow_exit
PUBLIC .
METHODS toolbar_extras
IMPORTING
!io_toolbar TYPE REF TO zcl_abapgit_html_toolbar
!is_feature TYPE zif_abapgit_gui_page_flow=>ty_feature
!iv_index TYPE i .
TYPES: BEGIN OF ty_event_result,
handled TYPE zif_abapgit_gui_event_handler=>ty_handling_result,
refresh TYPE abap_bool,
END OF ty_event_result.
METHODS on_event
IMPORTING
ii_event TYPE REF TO zif_abapgit_gui_event
it_features TYPE zif_abapgit_gui_page_flow=>ty_features
RETURNING
VALUE(rs_result) TYPE ty_event_result
RAISING
zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?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_FLOW_EXIT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Flow page user exit</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,40 @@
INTERFACE zif_abapgit_gui_page_flow
PUBLIC .
TYPES:
BEGIN OF ty_path_name,
path TYPE string,
filename TYPE string,
remote_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
local_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
END OF ty_path_name.
TYPES:
ty_path_name_tt TYPE HASHED TABLE OF ty_path_name WITH UNIQUE KEY path filename.
TYPES: BEGIN OF ty_feature,
BEGIN OF repo,
name TYPE string,
key TYPE zif_abapgit_persistence=>ty_repo-key,
package TYPE devclass,
END OF repo,
BEGIN OF branch,
display_name TYPE string,
sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
up_to_date TYPE abap_bool,
END OF branch,
BEGIN OF pr,
title TYPE string,
url TYPE string,
draft TYPE abap_bool,
END OF pr,
BEGIN OF transport,
trkorr TYPE trkorr,
title TYPE string,
END OF transport,
full_match TYPE abap_bool,
changed_files TYPE ty_path_name_tt,
changed_objects TYPE zif_abapgit_definitions=>ty_items_ts,
END OF ty_feature.
TYPES ty_features TYPE STANDARD TABLE OF ty_feature WITH DEFAULT KEY.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?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_GUI_PAGE_FLOW</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - GUI Flow Page definitions</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,39 +0,0 @@
*"* use this source file for any type of declarations (class
*"* definitions, interfaces or type declarations) you need for
*"* components in the private section
TYPES:
BEGIN OF ty_path_name,
path TYPE string,
filename TYPE string,
remote_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
local_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
END OF ty_path_name.
TYPES:
ty_path_name_tt TYPE HASHED TABLE OF ty_path_name WITH UNIQUE KEY path filename.
TYPES: BEGIN OF ty_feature,
BEGIN OF repo,
name TYPE string,
key TYPE zif_abapgit_persistence=>ty_repo-key,
package TYPE devclass,
END OF repo,
BEGIN OF branch,
display_name TYPE string,
sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
up_to_date TYPE abap_bool,
END OF branch,
BEGIN OF pr,
title TYPE string,
url TYPE string,
draft TYPE abap_bool,
END OF pr,
BEGIN OF transport,
trkorr TYPE trkorr,
title TYPE string,
END OF transport,
full_match TYPE abap_bool,
changed_files TYPE ty_path_name_tt,
changed_objects TYPE zif_abapgit_definitions=>ty_items_ts,
END OF ty_feature.
TYPES ty_features TYPE STANDARD TABLE OF ty_feature WITH DEFAULT KEY.