diff --git a/src/ui/flow/package.devc.xml b/src/ui/flow/package.devc.xml
new file mode 100644
index 000000000..dac1fe39f
--- /dev/null
+++ b/src/ui/flow/package.devc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ abapGit - GUI Flow Page
+
+
+
+
diff --git a/src/ui/flow/zcl_abapgit_flow_exit.clas.abap b/src/ui/flow/zcl_abapgit_flow_exit.clas.abap
new file mode 100644
index 000000000..b2a886894
--- /dev/null
+++ b/src/ui/flow/zcl_abapgit_flow_exit.clas.abap
@@ -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.
diff --git a/src/ui/flow/zcl_abapgit_flow_exit.clas.xml b/src/ui/flow/zcl_abapgit_flow_exit.clas.xml
new file mode 100644
index 000000000..783c04f2c
--- /dev/null
+++ b/src/ui/flow/zcl_abapgit_flow_exit.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ ZCL_ABAPGIT_FLOW_EXIT
+ E
+ abapGit - Flow page default exit
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.abap b/src/ui/flow/zcl_abapgit_gui_page_flow.clas.abap
similarity index 83%
rename from src/ui/pages/zcl_abapgit_gui_page_flow.clas.abap
rename to src/ui/flow/zcl_abapgit_gui_page_flow.clas.abap
index 4f6ad137e..39aa9d968 100644
--- a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.abap
+++ b/src/ui/flow/zcl_abapgit_gui_page_flow.clas.abap
@@ -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( || ).
-* 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'.
- lo_toolbar->add( iv_txt = 'Pull'
- iv_act = |{ c_action-pull }?index={ iv_index }&key={ is_feature-repo-key }&branch={ lv_branch }|
- 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_opt = zif_abapgit_html=>c_html_opt-strong ).
+
+ 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 }{ lv_extra }|
+ iv_opt = zif_abapgit_html=>c_html_opt-strong ).
+ lo_toolbar->add( iv_txt = 'Stage'
+ 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 LIKE LINE OF ls_feature-changed_objects.
FIELD-SYMBOLS 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
| ).
ENDIF.
- ri_html->add( '
' ).
IF ls_feature-branch IS NOT INITIAL AND ls_feature-branch-up_to_date = abap_false.
ri_html->add( 'Branch not up to date
' ).
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
| ).
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.
diff --git a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_imp.abap b/src/ui/flow/zcl_abapgit_gui_page_flow.clas.locals_imp.abap
similarity index 96%
rename from src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_imp.abap
rename to src/ui/flow/zcl_abapgit_gui_page_flow.clas.locals_imp.abap
index 77713875d..06942df05 100644
--- a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_imp.abap
+++ b/src/ui/flow/zcl_abapgit_gui_page_flow.clas.locals_imp.abap
@@ -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 LIKE LINE OF ct_features.
FIELD-SYMBOLS LIKE LINE OF lt_local.
- FIELD-SYMBOLS TYPE ty_path_name.
+ FIELD-SYMBOLS TYPE zif_abapgit_gui_page_flow=>ty_path_name.
FIELD-SYMBOLS LIKE LINE OF lt_filter.
FIELD-SYMBOLS LIKE LINE OF -changed_objects.
diff --git a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.xml b/src/ui/flow/zcl_abapgit_gui_page_flow.clas.xml
similarity index 90%
rename from src/ui/pages/zcl_abapgit_gui_page_flow.clas.xml
rename to src/ui/flow/zcl_abapgit_gui_page_flow.clas.xml
index b30d50a8c..c5aab55d1 100644
--- a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.xml
+++ b/src/ui/flow/zcl_abapgit_gui_page_flow.clas.xml
@@ -5,7 +5,7 @@
ZCL_ABAPGIT_GUI_PAGE_FLOW
E
- abapGit - Flow page
+ abapGit - GUI Flow Page
1
X
X
diff --git a/src/ui/flow/zif_abapgit_flow_exit.intf.abap b/src/ui/flow/zif_abapgit_flow_exit.intf.abap
new file mode 100644
index 000000000..c63de2a89
--- /dev/null
+++ b/src/ui/flow/zif_abapgit_flow_exit.intf.abap
@@ -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.
diff --git a/src/ui/flow/zif_abapgit_flow_exit.intf.xml b/src/ui/flow/zif_abapgit_flow_exit.intf.xml
new file mode 100644
index 000000000..a5422c160
--- /dev/null
+++ b/src/ui/flow/zif_abapgit_flow_exit.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ ZIF_ABAPGIT_FLOW_EXIT
+ E
+ abapGit - Flow page user exit
+ 2
+ 1
+ X
+
+
+
+
diff --git a/src/ui/flow/zif_abapgit_gui_page_flow.intf.abap b/src/ui/flow/zif_abapgit_gui_page_flow.intf.abap
new file mode 100644
index 000000000..143549af8
--- /dev/null
+++ b/src/ui/flow/zif_abapgit_gui_page_flow.intf.abap
@@ -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.
diff --git a/src/ui/flow/zif_abapgit_gui_page_flow.intf.xml b/src/ui/flow/zif_abapgit_gui_page_flow.intf.xml
new file mode 100644
index 000000000..29ca27789
--- /dev/null
+++ b/src/ui/flow/zif_abapgit_gui_page_flow.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ ZIF_ABAPGIT_GUI_PAGE_FLOW
+ E
+ abapGit - GUI Flow Page definitions
+ 2
+ 1
+ X
+
+
+
+
diff --git a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_def.abap b/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_def.abap
deleted file mode 100644
index 03e29a2f1..000000000
--- a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_def.abap
+++ /dev/null
@@ -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.