Gui refactor, part 1 (#3289)

* gui component and event registering

* remove iv_prev_page from event_handler if

* constructors raising zcx_abapgit_exception

* get_gui_services - UT friendly

* linter fixes

* more linter fixes

* zif_gui_services stub all methods

* linter fix

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Alexander Tsybulsky 2020-04-07 11:30:43 +03:00 committed by GitHub
parent fce71de4d1
commit 0eb22a0c87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 749 additions and 644 deletions

View File

@ -5,14 +5,14 @@ CLASS zcl_abapgit_gui DEFINITION
PUBLIC SECTION.
CONSTANTS:
BEGIN OF c_event_state,
not_handled TYPE c LENGTH 1 VALUE '0',
re_render TYPE c LENGTH 1 VALUE '1',
new_page TYPE c LENGTH 1 VALUE '2',
go_back TYPE c LENGTH 1 VALUE '3',
no_more_act TYPE c LENGTH 1 VALUE '4',
new_page_w_bookmark TYPE c LENGTH 1 VALUE '5',
go_back_to_bookmark TYPE c LENGTH 1 VALUE '6',
new_page_replacing TYPE c LENGTH 1 VALUE '7',
not_handled TYPE i VALUE 0,
re_render TYPE i VALUE 1,
new_page TYPE i VALUE 2,
go_back TYPE i VALUE 3,
no_more_act TYPE i VALUE 4,
new_page_w_bookmark TYPE i VALUE 5,
go_back_to_bookmark TYPE i VALUE 6,
new_page_replacing TYPE i VALUE 7,
END OF c_event_state .
CONSTANTS:
@ -72,6 +72,7 @@ CLASS zcl_abapgit_gui DEFINITION
DATA: mi_cur_page TYPE REF TO zif_abapgit_gui_renderable,
mt_stack TYPE STANDARD TABLE OF ty_page_stack,
mt_event_handlers TYPE STANDARD TABLE OF REF TO zif_abapgit_gui_event_handler,
mi_router TYPE REF TO zif_abapgit_gui_event_handler,
mi_asset_man TYPE REF TO zif_abapgit_gui_asset_manager,
mi_html_processor TYPE REF TO zif_abapgit_gui_html_processor,
@ -91,10 +92,6 @@ CLASS zcl_abapgit_gui DEFINITION
RAISING
zcx_abapgit_exception.
METHODS get_current_page_name
RETURNING
VALUE(rv_page_name) TYPE string.
METHODS call_page
IMPORTING
ii_page TYPE REF TO zif_abapgit_gui_renderable
@ -246,21 +243,13 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION.
ENDMETHOD.
METHOD get_current_page_name.
IF mi_cur_page IS BOUND.
rv_page_name = cl_abap_classdescr=>describe_by_object_ref( mi_cur_page )->get_relative_name( ).
ENDIF." ELSE - return is empty => initial page
ENDMETHOD.
METHOD go_home.
DATA ls_stack LIKE LINE OF mt_stack.
IF mi_router IS BOUND.
CLEAR mt_stack.
CLEAR: mt_stack, mt_event_handlers.
APPEND mi_router TO mt_event_handlers.
on_event( action = |{ c_action-go_home }| ). " doesn't accept strings directly
ELSE.
IF lines( mt_stack ) > 0.
@ -288,38 +277,24 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION.
METHOD handle_action.
DATA: lx_exception TYPE REF TO zcx_abapgit_exception,
li_page_eh TYPE REF TO zif_abapgit_gui_event_handler,
li_handler TYPE REF TO zif_abapgit_gui_event_handler,
li_page TYPE REF TO zif_abapgit_gui_renderable,
lv_state TYPE i.
TRY.
" Home must be processed by router if it presents
IF ( iv_action <> c_action-go_home OR mi_router IS NOT BOUND )
AND mi_cur_page IS BOUND
AND zcl_abapgit_gui_utils=>is_event_handler( mi_cur_page ) = abap_true.
li_page_eh ?= mi_cur_page.
li_page_eh->on_event(
LOOP AT mt_event_handlers INTO li_handler.
li_handler->on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = get_current_page_name( )
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
ei_page = li_page
ev_state = lv_state ).
ENDIF.
IF lv_state IS INITIAL AND mi_router IS BOUND.
mi_router->on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = get_current_page_name( )
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
ei_page = li_page
ev_state = lv_state ).
ENDIF.
IF lv_state IS NOT INITIAL AND lv_state <> c_event_state-not_handled. " is handled
EXIT.
ENDIF.
ENDLOOP.
CASE lv_state.
WHEN c_event_state-re_render.
@ -327,9 +302,13 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION.
WHEN c_event_state-new_page.
call_page( li_page ).
WHEN c_event_state-new_page_w_bookmark.
call_page( ii_page = li_page iv_with_bookmark = abap_true ).
call_page(
ii_page = li_page
iv_with_bookmark = abap_true ).
WHEN c_event_state-new_page_replacing.
call_page( ii_page = li_page iv_replacing = abap_true ).
call_page(
ii_page = li_page
iv_replacing = abap_true ).
WHEN c_event_state-go_back.
back( ).
WHEN c_event_state-go_back_to_bookmark.
@ -393,6 +372,11 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'GUI error: no current page' ).
ENDIF.
CLEAR mt_event_handlers.
IF mi_router IS BOUND.
APPEND mi_router TO mt_event_handlers.
ENDIF.
li_html = mi_cur_page->render( ).
lv_html = li_html->render( iv_no_indent_jscss = abap_true ).
@ -439,4 +423,19 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION.
SET HANDLER me->on_event FOR mo_html_viewer.
ENDMETHOD.
METHOD zif_abapgit_gui_services~get_current_page_name.
IF mi_cur_page IS BOUND.
rv_page_name = cl_abap_classdescr=>describe_by_object_ref( mi_cur_page )->get_relative_name( ).
ENDIF." ELSE - return is empty => initial page
ENDMETHOD.
METHOD zif_abapgit_gui_services~register_event_handler.
ASSERT ii_event_handler IS BOUND.
INSERT ii_event_handler INTO mt_event_handlers INDEX 1.
ENDMETHOD.
ENDCLASS.

View File

@ -21,6 +21,10 @@ CLASS ltcl_gui_mock IMPLEMENTATION.
ms_last_cache_signature-type = iv_type && '/' && iv_subtype.
ms_last_cache_signature-data = iv_text.
ENDMETHOD.
METHOD zif_abapgit_gui_services~register_event_handler.
ENDMETHOD.
METHOD zif_abapgit_gui_services~get_current_page_name.
ENDMETHOD.
METHOD get_asset.
rs_asset = ms_last_cache_signature.

View File

@ -4,7 +4,6 @@ INTERFACE zif_abapgit_gui_event_handler
METHODS on_event
IMPORTING
iv_action TYPE clike
iv_prev_page TYPE clike
iv_getdata TYPE clike OPTIONAL
it_postdata TYPE cnht_post_data_tab OPTIONAL
EXPORTING

View File

@ -11,6 +11,15 @@ INTERFACE zif_abapgit_gui_services
RETURNING
VALUE(rv_url) TYPE w3url.
METHODS register_event_handler
IMPORTING
ii_event_handler TYPE REF TO zif_abapgit_gui_event_handler.
METHODS get_current_page_name
RETURNING
VALUE(rv_page_name) TYPE string.
" For future refactoring
" Potentially also: back, go_home, go_page, +some access to page stack

View File

@ -7,7 +7,8 @@ CLASS zcl_abapgit_gui_page_db DEFINITION
PUBLIC SECTION.
INTERFACES: zif_abapgit_gui_page_hotkey.
METHODS constructor .
METHODS constructor
RAISING zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION .
@ -187,11 +188,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
DATA: ls_db TYPE zif_abapgit_persistence=>ty_content.
@ -204,4 +200,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB IMPLEMENTATION.
ENDCASE.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
ENDMETHOD.
ENDCLASS.

View File

@ -7,7 +7,8 @@ CLASS zcl_abapgit_gui_page_db_dis DEFINITION
INTERFACES: zif_abapgit_gui_page_hotkey.
METHODS: constructor
IMPORTING is_key TYPE zif_abapgit_persistence=>ty_content.
IMPORTING is_key TYPE zif_abapgit_persistence=>ty_content
RAISING zcx_abapgit_exception.
CLASS-METHODS: render_record_banner
IMPORTING is_key TYPE zif_abapgit_persistence=>ty_content

View File

@ -9,7 +9,8 @@ CLASS zcl_abapgit_gui_page_db_edit DEFINITION
METHODS constructor
IMPORTING
is_key TYPE zif_abapgit_persistence=>ty_content .
is_key TYPE zif_abapgit_persistence=>ty_content
RAISING zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION .
@ -139,11 +140,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB_EDIT IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
DATA: ls_db TYPE zif_abapgit_persistence=>ty_content.
@ -156,4 +152,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB_EDIT IMPLEMENTATION.
ENDCASE.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,20 @@
CLASS zcl_abapgit_gui_component DEFINITION ABSTRACT
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
METHODS constructor RAISING zcx_abapgit_exception.
PROTECTED SECTION.
DATA mi_gui_services TYPE REF TO zif_abapgit_gui_services.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_COMPONENT IMPLEMENTATION.
METHOD constructor.
mi_gui_services = zcl_abapgit_ui_factory=>get_gui_services( ).
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_GUI_COMPONENT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Abapgit GUI page component</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,4 +1,6 @@
CLASS zcl_abapgit_gui_page DEFINITION PUBLIC ABSTRACT CREATE PUBLIC.
CLASS zcl_abapgit_gui_page DEFINITION PUBLIC ABSTRACT
INHERITING FROM zcl_abapgit_gui_component
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES:
@ -19,7 +21,7 @@ CLASS zcl_abapgit_gui_page DEFINITION PUBLIC ABSTRACT CREATE PUBLIC.
VALUE(rt_hotkey) TYPE zif_abapgit_gui_page_hotkey=>tty_hotkey_with_name.
METHODS:
constructor.
constructor RAISING zcx_abapgit_exception.
PROTECTED SECTION.
TYPES: BEGIN OF ty_control,
@ -144,6 +146,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mo_settings = zcl_abapgit_persist_settings=>get_instance( )->read( ).
ENDMETHOD.
@ -463,10 +466,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
ENDIF.
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
WHEN OTHERS.
ev_state = zcl_abapgit_gui=>c_event_state-not_handled.
ENDCASE.
ENDMETHOD.
@ -480,6 +479,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
FIELD-SYMBOLS:
<ls_event> LIKE LINE OF lt_events.
mi_gui_services->register_event_handler( me ).
" Redirect
IF ms_control-redirect_url IS NOT INITIAL.
ri_html = redirect( ).
@ -497,10 +498,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
ri_html->add( '<body>' ). "#EC NOTEXT
ri_html->add( title( ) ).
ri_html->add( render_hotkey_overview( ) ).
ri_html->add( render_content( ) ).
ri_html->add( render_content( ) ). " TODO -> render child
ri_html->add( render_error_message_box( ) ).
lt_events = me->get_events( ).
lt_events = me->get_events( ). " TODO refactor ???
LOOP AT lt_events ASSIGNING <ls_event>.
ri_html->add( render_event_as_form( <ls_event> ) ).
ENDLOOP.
@ -508,7 +511,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
ri_html->add( footer( ) ).
ri_html->add( '</body>' ). "#EC NOTEXT
lo_script = scripts( ).
lo_script = scripts( ). " TODO refactor
IF lo_script IS BOUND AND lo_script->is_empty( ) = abap_false.
ri_html->add( '<script type="text/javascript">' ).

View File

@ -9,7 +9,8 @@ CLASS zcl_abapgit_gui_page_bkg DEFINITION
METHODS constructor
IMPORTING
iv_key TYPE zif_abapgit_persistence=>ty_repo-key .
iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RAISING zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION .
@ -315,7 +316,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BKG IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING

View File

@ -7,7 +7,8 @@ CLASS zcl_abapgit_gui_page_bkg_run DEFINITION
PUBLIC SECTION.
INTERFACES: zif_abapgit_gui_page_hotkey.
METHODS constructor .
METHODS constructor
RAISING zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION .
@ -74,12 +75,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BKG_RUN IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
ENDMETHOD.
ENDCLASS.

View File

@ -419,7 +419,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BOVERVIEW IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING

View File

@ -228,23 +228,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODE_INSP IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
DATA: ls_hotkey_action LIKE LINE OF rt_hotkey_actions.
ls_hotkey_action-name = |Stage|.
ls_hotkey_action-action = c_actions-stage.
ls_hotkey_action-hotkey = |s|.
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
ls_hotkey_action-name = |Re-Run|.
ls_hotkey_action-action = c_actions-rerun.
ls_hotkey_action-hotkey = |r|.
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online.
@ -299,7 +282,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODE_INSP IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
@ -310,6 +292,23 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODE_INSP IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
DATA: ls_hotkey_action LIKE LINE OF rt_hotkey_actions.
ls_hotkey_action-name = |Stage|.
ls_hotkey_action-action = c_actions-stage.
ls_hotkey_action-hotkey = |s|.
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
ls_hotkey_action-name = |Re-Run|.
ls_hotkey_action-action = c_actions-rerun.
ls_hotkey_action-hotkey = |r|.
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
ENDMETHOD.
METHOD zif_abapgit_gui_renderable~render.
ms_control-page_menu = build_menu( ).

View File

@ -384,7 +384,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING

View File

@ -7,7 +7,9 @@ CLASS zcl_abapgit_gui_page_debuginfo DEFINITION
PUBLIC SECTION.
INTERFACES: zif_abapgit_gui_page_hotkey.
METHODS constructor .
METHODS constructor
RAISING zcx_abapgit_exception.
PROTECTED SECTION.
METHODS:
render_content REDEFINITION,

View File

@ -185,35 +185,8 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
ENDCLASS.
CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
METHOD normalize_filename.
rv_normalized = replace( val = iv_filename
sub = '.'
occ = 0
with = '_' ).
ENDMETHOD.
METHOD normalize_path.
rv_normalized = replace( val = iv_path
sub = '/'
occ = 0
with = '_' ).
ENDMETHOD.
METHOD get_normalized_fname_with_path.
rv_filename = normalize_path( is_diff-path )
&& `_`
&& normalize_filename( is_diff-filename ).
ENDMETHOD.
CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
METHOD add_filter_sub_menu.
@ -294,6 +267,19 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD add_menu_begin.
ENDMETHOD.
METHOD add_menu_end.
io_menu->add( iv_txt = 'Split/Unified view'
iv_act = c_actions-toggle_unified ) ##NO_TEXT.
ENDMETHOD.
METHOD append_diff.
DATA:
@ -393,6 +379,56 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD calculate_diff.
DATA: lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
lt_status TYPE zif_abapgit_definitions=>ty_results_tt.
FIELD-SYMBOLS: <ls_status> LIKE LINE OF lt_status.
CLEAR: mt_diff_files.
lt_remote = mo_repo->get_files_remote( ).
lt_local = mo_repo->get_files_local( ).
mo_repo->reset_status( ).
lt_status = mo_repo->status( ).
IF is_file IS NOT INITIAL. " Diff for one file
READ TABLE lt_status ASSIGNING <ls_status>
WITH KEY path = is_file-path filename = is_file-filename.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ELSEIF is_object IS NOT INITIAL. " Diff for whole object
LOOP AT lt_status ASSIGNING <ls_status>
WHERE obj_type = is_object-obj_type
AND obj_name = is_object-obj_name
AND match IS INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ENDLOOP.
ELSE. " Diff for the whole repo
SORT lt_status BY
path ASCENDING
filename ASCENDING.
LOOP AT lt_status ASSIGNING <ls_status> WHERE match IS INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD constructor.
DATA: lv_ts TYPE timestamp.
@ -421,6 +457,20 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD get_normalized_fname_with_path.
rv_filename = normalize_path( is_diff-path )
&& `_`
&& normalize_filename( is_diff-filename ).
ENDMETHOD.
METHOD insert_nav.
ENDMETHOD.
METHOD is_binary.
FIELD-SYMBOLS <lv_data> LIKE iv_d1.
@ -436,6 +486,26 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD normalize_filename.
rv_normalized = replace( val = iv_filename
sub = '.'
occ = 0
with = '_' ).
ENDMETHOD.
METHOD normalize_path.
rv_normalized = replace( val = iv_path
sub = '/'
occ = 0
with = '_' ).
ENDMETHOD.
METHOD render_beacon.
DATA: lv_beacon TYPE string,
@ -471,6 +541,13 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD render_beacon_begin_of_row.
io_html->add( '<th class="num"></th>' ).
ENDMETHOD.
METHOD render_content.
DATA: ls_diff_file LIKE LINE OF mt_diff_files,
@ -583,6 +660,16 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD render_diff_head_after_state.
IF is_diff-fstate = c_fstate-both AND mv_unified = abap_true.
io_html->add( '<span class="attention pad-sides">Attention: Unified mode'
&& ' highlighting for MM assumes local file is newer ! </span>' ). "#EC NOTEXT
ENDIF.
ENDMETHOD.
METHOD render_lines.
DATA: lo_highlighter TYPE REF TO zcl_abapgit_syntax_highlighter,
@ -699,6 +786,19 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD render_line_split_row.
IF iv_fstate = c_fstate-remote. " Remote file leading changes
io_html->add( iv_old ). " local
io_html->add( iv_new ). " remote
ELSE. " Local leading changes or both were modified
io_html->add( iv_new ). " local
io_html->add( iv_old ). " remote
ENDIF.
ENDMETHOD.
METHOD render_line_unified.
FIELD-SYMBOLS <ls_diff_line> LIKE LINE OF mt_delayed_lines.
@ -776,6 +876,28 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDMETHOD.
METHOD render_table_head_non_unified.
io_html->add( '<th class="num"></th>' ). "#EC NOTEXT
io_html->add( '<th class="mark"></th>' ). "#EC NOTEXT
io_html->add( '<th>LOCAL</th>' ). "#EC NOTEXT
io_html->add( '<th class="num"></th>' ). "#EC NOTEXT
io_html->add( '<th class="mark"></th>' ). "#EC NOTEXT
io_html->add( '<th>REMOTE</th>' ). "#EC NOTEXT
ENDMETHOD.
METHOD render_table_head_unified.
io_html->add( '<th class="num">old</th>' ). "#EC NOTEXT
io_html->add( '<th class="num">new</th>' ). "#EC NOTEXT
io_html->add( '<th class="mark"></th>' ). "#EC NOTEXT
io_html->add( '<th>code</th>' ). "#EC NOTEXT
ENDMETHOD.
METHOD scripts.
ro_html = super->scripts( ).
@ -816,7 +938,6 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
@ -826,125 +947,4 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
ENDCASE.
ENDMETHOD.
METHOD calculate_diff.
DATA: lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
lt_status TYPE zif_abapgit_definitions=>ty_results_tt.
FIELD-SYMBOLS: <ls_status> LIKE LINE OF lt_status.
CLEAR: mt_diff_files.
lt_remote = mo_repo->get_files_remote( ).
lt_local = mo_repo->get_files_local( ).
mo_repo->reset_status( ).
lt_status = mo_repo->status( ).
IF is_file IS NOT INITIAL. " Diff for one file
READ TABLE lt_status ASSIGNING <ls_status>
WITH KEY path = is_file-path filename = is_file-filename.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ELSEIF is_object IS NOT INITIAL. " Diff for whole object
LOOP AT lt_status ASSIGNING <ls_status>
WHERE obj_type = is_object-obj_type
AND obj_name = is_object-obj_name
AND match IS INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ENDLOOP.
ELSE. " Diff for the whole repo
SORT lt_status BY
path ASCENDING
filename ASCENDING.
LOOP AT lt_status ASSIGNING <ls_status> WHERE match IS INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD add_menu_end.
io_menu->add( iv_txt = 'Split/Unified view'
iv_act = c_actions-toggle_unified ) ##NO_TEXT.
ENDMETHOD.
METHOD add_menu_begin.
ENDMETHOD.
METHOD render_table_head_non_unified.
io_html->add( '<th class="num"></th>' ). "#EC NOTEXT
io_html->add( '<th class="mark"></th>' ). "#EC NOTEXT
io_html->add( '<th>LOCAL</th>' ). "#EC NOTEXT
io_html->add( '<th class="num"></th>' ). "#EC NOTEXT
io_html->add( '<th class="mark"></th>' ). "#EC NOTEXT
io_html->add( '<th>REMOTE</th>' ). "#EC NOTEXT
ENDMETHOD.
METHOD render_beacon_begin_of_row.
io_html->add( '<th class="num"></th>' ).
ENDMETHOD.
METHOD render_diff_head_after_state.
IF is_diff-fstate = c_fstate-both AND mv_unified = abap_true.
io_html->add( '<span class="attention pad-sides">Attention: Unified mode'
&& ' highlighting for MM assumes local file is newer ! </span>' ). "#EC NOTEXT
ENDIF.
ENDMETHOD.
METHOD insert_nav.
ENDMETHOD.
METHOD render_line_split_row.
IF iv_fstate = c_fstate-remote. " Remote file leading changes
io_html->add( iv_old ). " local
io_html->add( iv_new ). " remote
ELSE. " Local leading changes or both were modified
io_html->add( iv_new ). " local
io_html->add( iv_old ). " remote
ENDIF.
ENDMETHOD.
METHOD render_table_head_unified.
io_html->add( '<th class="num">old</th>' ). "#EC NOTEXT
io_html->add( '<th class="num">new</th>' ). "#EC NOTEXT
io_html->add( '<th class="mark"></th>' ). "#EC NOTEXT
io_html->add( '<th>code</th>' ). "#EC NOTEXT
ENDMETHOD.
ENDCLASS.

View File

@ -9,11 +9,13 @@ CLASS zcl_abapgit_gui_page_explore DEFINITION
CONSTANTS c_explore_url TYPE string
VALUE 'https://dotabap.github.io/explore.html'.
METHODS constructor.
METHODS constructor
RAISING zcx_abapgit_exception.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
ENDCLASS.

View File

@ -153,7 +153,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION.
ro_html->add( zcl_abapgit_gui_chunk_lib=>render_news( io_news = lo_news ) ).
IF mo_repo_content IS BOUND.
ro_html->add( mo_repo_content->render( ) ).
ro_html->add( mo_repo_content->zif_abapgit_gui_renderable~render( ) ).
ENDIF.
ro_html->add( '</div>' ).
@ -322,7 +322,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION.
mo_repo_content->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
@ -361,7 +360,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING

View File

@ -238,7 +238,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING

View File

@ -176,20 +176,24 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_PAGE_PATCH IMPLEMENTATION.
METHOD constructor.
super->constructor(
iv_key = iv_key
is_file = is_file
is_object = is_object ).
METHOD add_menu_begin.
" While patching we always want to be in split mode
CLEAR: mv_unified.
CREATE OBJECT mo_stage.
io_menu->add(
iv_txt = |Refresh local|
iv_typ = zif_abapgit_html=>c_action_type-dummy
iv_act = c_actions-refresh_local
iv_id = c_actions-refresh_local
iv_title = |Refresh all local objects, without refreshing the remote| ).
ms_control-page_menu = build_menu( ).
io_menu->add(
iv_txt = |Refresh|
iv_typ = zif_abapgit_html=>c_action_type-dummy
iv_act = c_actions-refresh
iv_id = c_actions-refresh
iv_title = |Complete refresh of all objects, local and remote| ).
ENDMETHOD.
@ -205,118 +209,6 @@ CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
CASE iv_action.
WHEN c_actions-stage.
start_staging( it_postdata ).
CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_commit
EXPORTING
io_repo = mo_repo
io_stage = mo_stage.
ev_state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN OTHERS.
FIND FIRST OCCURRENCE OF REGEX |^{ c_actions-refresh }| IN iv_action.
IF sy-subrc = 0.
apply_patch_from_form_fields( it_postdata ).
refresh( iv_action ).
ev_state = zcl_abapgit_gui=>c_event_state-re_render.
ELSE.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
ei_page = ei_page
ev_state = ev_state ).
ENDIF.
ENDCASE.
ENDMETHOD.
METHOD start_staging.
apply_patch_from_form_fields( it_postdata ).
add_to_stage( ).
ENDMETHOD.
METHOD apply_patch_from_form_fields.
DATA: lv_string TYPE string,
lt_fields TYPE tihttpnvp,
lv_add TYPE string,
lv_remove TYPE string.
CONCATENATE LINES OF it_postdata INTO lv_string.
lt_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_string ).
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-add
it_field = lt_fields
CHANGING cg_field = lv_add ).
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-remove
it_field = lt_fields
CHANGING cg_field = lv_remove ).
apply_patch_all( iv_patch = lv_add
iv_patch_flag = abap_true ).
apply_patch_all( iv_patch = lv_remove
iv_patch_flag = abap_false ).
ENDMETHOD.
METHOD restore_patch_flags.
DATA:
lt_diff_old TYPE zif_abapgit_definitions=>ty_diffs_tt.
FIELD-SYMBOLS:
<ls_diff_file> TYPE ty_file_diff,
<ls_diff_file_old> TYPE ty_file_diff,
<ls_diff_old> TYPE zif_abapgit_definitions=>ty_diff.
LOOP AT mt_diff_files ASSIGNING <ls_diff_file>.
READ TABLE it_diff_files_old ASSIGNING <ls_diff_file_old>
WITH KEY secondary
COMPONENTS path = <ls_diff_file>-path
filename = <ls_diff_file>-filename.
IF sy-subrc <> 0.
CONTINUE. " e.g. new objects
ENDIF.
lt_diff_old = <ls_diff_file_old>-o_diff->get( ).
LOOP AT lt_diff_old ASSIGNING <ls_diff_old>
WHERE patch_flag = abap_true.
<ls_diff_file>-o_diff->set_patch_by_old_diff(
is_diff_old = <ls_diff_old>
iv_patch_flag = abap_true ).
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD add_to_stage.
DATA: lt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt,
@ -382,6 +274,225 @@ CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION.
ENDMETHOD.
METHOD apply_patch_all.
DATA: lv_filename TYPE string,
lt_patch TYPE string_table,
lv_line_index TYPE string.
FIELD-SYMBOLS: <lv_patch> TYPE LINE OF string_table.
SPLIT iv_patch AT ',' INTO TABLE lt_patch.
LOOP AT lt_patch ASSIGNING <lv_patch>.
get_patch_data(
EXPORTING
iv_patch = <lv_patch>
IMPORTING
ev_filename = lv_filename
ev_line_index = lv_line_index ).
apply_patch_for( iv_filename = lv_filename
iv_line_index = lv_line_index
iv_patch_flag = iv_patch_flag ).
ENDLOOP.
ENDMETHOD.
METHOD apply_patch_for.
DATA: lo_diff TYPE REF TO zcl_abapgit_diff,
ls_diff_line TYPE zif_abapgit_definitions=>ty_diff,
lv_line TYPE i.
lo_diff = get_diff_object( iv_filename ).
ls_diff_line = get_diff_line( io_diff = lo_diff
iv_line_index = iv_line_index ).
CASE ls_diff_line-result.
WHEN zif_abapgit_definitions=>c_diff-update
OR zif_abapgit_definitions=>c_diff-insert.
lv_line = ls_diff_line-new_num.
lo_diff->set_patch_new( iv_line_new = lv_line
iv_patch_flag = iv_patch_flag ).
WHEN zif_abapgit_definitions=>c_diff-delete.
lv_line = ls_diff_line-old_num.
lo_diff->set_patch_old( iv_line_old = lv_line
iv_patch_flag = iv_patch_flag ).
ENDCASE.
ENDMETHOD.
METHOD apply_patch_from_form_fields.
DATA: lv_string TYPE string,
lt_fields TYPE tihttpnvp,
lv_add TYPE string,
lv_remove TYPE string.
CONCATENATE LINES OF it_postdata INTO lv_string.
lt_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_string ).
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-add
it_field = lt_fields
CHANGING cg_field = lv_add ).
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-remove
it_field = lt_fields
CHANGING cg_field = lv_remove ).
apply_patch_all( iv_patch = lv_add
iv_patch_flag = abap_true ).
apply_patch_all( iv_patch = lv_remove
iv_patch_flag = abap_false ).
ENDMETHOD.
METHOD are_all_lines_patched.
DATA: lv_patch_count TYPE i.
FIELD-SYMBOLS: <ls_diff> TYPE zif_abapgit_definitions=>ty_diff.
LOOP AT it_diff ASSIGNING <ls_diff>
WHERE patch_flag = abap_true.
lv_patch_count = lv_patch_count + 1.
ENDLOOP.
rv_are_all_lines_patched = boolc( lv_patch_count = lines( it_diff ) ).
ENDMETHOD.
METHOD constructor.
super->constructor(
iv_key = iv_key
is_file = is_file
is_object = is_object ).
" While patching we always want to be in split mode
CLEAR: mv_unified.
CREATE OBJECT mo_stage.
ms_control-page_menu = build_menu( ).
ENDMETHOD.
METHOD get_diff_line.
DATA: lt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt,
lv_line_index TYPE sy-tabix.
lv_line_index = iv_line_index.
lt_diff = io_diff->get( ).
READ TABLE lt_diff INTO rs_diff
INDEX lv_line_index.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Invalid line index { lv_line_index }| ).
ENDIF.
ENDMETHOD.
METHOD get_diff_object.
FIELD-SYMBOLS: <ls_diff_file> LIKE LINE OF mt_diff_files.
LOOP AT mt_diff_files ASSIGNING <ls_diff_file>.
IF get_normalized_fname_with_path( <ls_diff_file> ) = iv_filename.
ro_diff = <ls_diff_file>-o_diff.
EXIT.
ENDIF.
ENDLOOP.
IF ro_diff IS NOT BOUND.
zcx_abapgit_exception=>raise( |Invalid filename { iv_filename }| ).
ENDIF.
ENDMETHOD.
METHOD get_patch_data.
DATA: lv_section TYPE string.
CLEAR: ev_filename, ev_line_index.
FIND FIRST OCCURRENCE OF REGEX `patch_line` && `_(.*)_(\d)+_(\d+)`
IN iv_patch
SUBMATCHES ev_filename lv_section ev_line_index.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Invalid patch| ).
ENDIF.
ENDMETHOD.
METHOD insert_nav.
" add beacon at beginning of file
rv_insert_nav = abap_true.
ENDMETHOD.
METHOD is_every_changed_line_patched.
DATA: lt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt.
FIELD-SYMBOLS:
<ls_diff_file> TYPE zcl_abapgit_gui_page_diff=>ty_file_diff,
<ls_diff> TYPE zif_abapgit_definitions=>ty_diff.
rv_everything_patched = abap_true.
LOOP AT mt_diff_files ASSIGNING <ls_diff_file>.
lt_diff = <ls_diff_file>-o_diff->get( ).
LOOP AT lt_diff ASSIGNING <ls_diff>
WHERE result IS NOT INITIAL
AND patch_flag = abap_false.
rv_everything_patched = abap_false.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD is_patch_line_possible.
IF is_diff_line-result = zif_abapgit_definitions=>c_diff-update
OR is_diff_line-result = zif_abapgit_definitions=>c_diff-insert
OR is_diff_line-result = zif_abapgit_definitions=>c_diff-delete.
rv_is_patch_line_possible = abap_true.
ENDIF.
ENDMETHOD.
METHOD refresh.
DATA:
@ -438,175 +549,76 @@ CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION.
ENDMETHOD.
METHOD apply_patch_all.
METHOD render_beacon_begin_of_row.
DATA: lv_filename TYPE string,
lt_patch TYPE string_table,
lv_line_index TYPE string.
mv_section_count = mv_section_count + 1.
FIELD-SYMBOLS: <lv_patch> TYPE LINE OF string_table.
SPLIT iv_patch AT ',' INTO TABLE lt_patch.
LOOP AT lt_patch ASSIGNING <lv_patch>.
get_patch_data(
EXPORTING
iv_patch = <lv_patch>
IMPORTING
ev_filename = lv_filename
ev_line_index = lv_line_index ).
apply_patch_for( iv_filename = lv_filename
iv_line_index = lv_line_index
iv_patch_flag = iv_patch_flag ).
ENDLOOP.
io_html->add( |<th class="patch">| ).
io_html->add_checkbox( iv_id = |patch_section_{ get_normalized_fname_with_path( is_diff ) }_{ mv_section_count }| ).
io_html->add( '</th>' ).
ENDMETHOD.
METHOD are_all_lines_patched.
METHOD render_content.
DATA: lv_patch_count TYPE i.
CLEAR: mv_section_count.
FIELD-SYMBOLS: <ls_diff> TYPE zif_abapgit_definitions=>ty_diff.
LOOP AT it_diff ASSIGNING <ls_diff>
WHERE patch_flag = abap_true.
lv_patch_count = lv_patch_count + 1.
ENDLOOP.
rv_are_all_lines_patched = boolc( lv_patch_count = lines( it_diff ) ).
ENDMETHOD.
METHOD get_patch_data.
DATA: lv_section TYPE string.
CLEAR: ev_filename, ev_line_index.
FIND FIRST OCCURRENCE OF REGEX `patch_line` && `_(.*)_(\d)+_(\d+)`
IN iv_patch
SUBMATCHES ev_filename lv_section ev_line_index.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Invalid patch| ).
IF mv_pushed = abap_true.
refresh_full( ).
calculate_diff( ).
CLEAR: mv_pushed.
ENDIF.
ENDMETHOD.
METHOD apply_patch_for.
DATA: lo_diff TYPE REF TO zcl_abapgit_diff,
ls_diff_line TYPE zif_abapgit_definitions=>ty_diff,
lv_line TYPE i.
lo_diff = get_diff_object( iv_filename ).
ls_diff_line = get_diff_line( io_diff = lo_diff
iv_line_index = iv_line_index ).
CASE ls_diff_line-result.
WHEN zif_abapgit_definitions=>c_diff-update
OR zif_abapgit_definitions=>c_diff-insert.
lv_line = ls_diff_line-new_num.
lo_diff->set_patch_new( iv_line_new = lv_line
iv_patch_flag = iv_patch_flag ).
WHEN zif_abapgit_definitions=>c_diff-delete.
lv_line = ls_diff_line-old_num.
lo_diff->set_patch_old( iv_line_old = lv_line
iv_patch_flag = iv_patch_flag ).
ENDCASE.
ro_html = super->render_content( ).
ENDMETHOD.
METHOD get_diff_object.
METHOD render_diff_head_after_state.
FIELD-SYMBOLS: <ls_diff_file> LIKE LINE OF mt_diff_files.
DATA: lv_act_id TYPE string.
LOOP AT mt_diff_files ASSIGNING <ls_diff_file>.
IF get_normalized_fname_with_path( <ls_diff_file> ) = iv_filename.
ro_diff = <ls_diff_file>-o_diff.
EXIT.
ENDIF.
ENDLOOP.
IF is_diff-obj_type IS NOT INITIAL AND is_diff-obj_name IS NOT INITIAL.
lv_act_id = |{ c_actions-refresh_local_object }_{ is_diff-obj_type }_{ is_diff-obj_name }|.
io_html->add_a(
iv_txt = |Refresh|
iv_typ = zif_abapgit_html=>c_action_type-dummy
iv_act = lv_act_id
iv_id = lv_act_id
iv_title = |Local refresh of this object| ).
IF ro_diff IS NOT BOUND.
zcx_abapgit_exception=>raise( |Invalid filename { iv_filename }| ).
ENDIF.
ENDMETHOD.
METHOD get_diff_line.
DATA: lt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt,
lv_line_index TYPE sy-tabix.
lv_line_index = iv_line_index.
lt_diff = io_diff->get( ).
READ TABLE lt_diff INTO rs_diff
INDEX lv_line_index.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Invalid line index { lv_line_index }| ).
ENDIF.
ENDMETHOD.
METHOD add_menu_begin.
io_menu->add(
iv_txt = |Refresh local|
iv_typ = zif_abapgit_html=>c_action_type-dummy
iv_act = c_actions-refresh_local
iv_id = c_actions-refresh_local
iv_title = |Refresh all local objects, without refreshing the remote| ).
io_menu->add(
iv_txt = |Refresh|
iv_typ = zif_abapgit_html=>c_action_type-dummy
iv_act = c_actions-refresh
iv_id = c_actions-refresh
iv_title = |Complete refresh of all objects, local and remote| ).
ENDMETHOD.
METHOD scripts.
ro_html = super->scripts( ).
ro_html->add( 'preparePatch();' ).
ro_html->add( 'registerStagePatch();' ).
ENDMETHOD.
METHOD render_table_head_non_unified.
render_patch_head( io_html = io_html
is_diff = is_diff ).
super->render_table_head_non_unified(
super->render_diff_head_after_state(
io_html = io_html
is_diff = is_diff ).
ENDMETHOD.
METHOD render_line_split_row.
render_patch( io_html = io_html
iv_filename = iv_filename
is_diff_line = is_diff_line
iv_fstate = iv_fstate
iv_index = iv_index ).
super->render_line_split_row(
io_html = io_html
iv_filename = iv_filename
is_diff_line = is_diff_line
iv_index = iv_index
iv_fstate = iv_fstate
iv_new = iv_new
iv_old = iv_old ).
ENDMETHOD.
METHOD render_patch.
CONSTANTS:
@ -654,120 +666,108 @@ CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION.
ENDMETHOD.
METHOD render_beacon_begin_of_row.
METHOD render_table_head_non_unified.
mv_section_count = mv_section_count + 1.
render_patch_head( io_html = io_html
is_diff = is_diff ).
io_html->add( |<th class="patch">| ).
io_html->add_checkbox( iv_id = |patch_section_{ get_normalized_fname_with_path( is_diff ) }_{ mv_section_count }| ).
io_html->add( '</th>' ).
ENDMETHOD.
METHOD render_content.
CLEAR: mv_section_count.
IF mv_pushed = abap_true.
refresh_full( ).
calculate_diff( ).
CLEAR: mv_pushed.
ENDIF.
ro_html = super->render_content( ).
ENDMETHOD.
METHOD render_diff_head_after_state.
DATA: lv_act_id TYPE string.
IF is_diff-obj_type IS NOT INITIAL AND is_diff-obj_name IS NOT INITIAL.
lv_act_id = |{ c_actions-refresh_local_object }_{ is_diff-obj_type }_{ is_diff-obj_name }|.
io_html->add_a(
iv_txt = |Refresh|
iv_typ = zif_abapgit_html=>c_action_type-dummy
iv_act = lv_act_id
iv_id = lv_act_id
iv_title = |Local refresh of this object| ).
ENDIF.
super->render_diff_head_after_state(
super->render_table_head_non_unified(
io_html = io_html
is_diff = is_diff ).
ENDMETHOD.
METHOD insert_nav.
METHOD restore_patch_flags.
" add beacon at beginning of file
rv_insert_nav = abap_true.
ENDMETHOD.
METHOD render_line_split_row.
render_patch( io_html = io_html
iv_filename = iv_filename
is_diff_line = is_diff_line
iv_fstate = iv_fstate
iv_index = iv_index ).
super->render_line_split_row(
io_html = io_html
iv_filename = iv_filename
is_diff_line = is_diff_line
iv_index = iv_index
iv_fstate = iv_fstate
iv_new = iv_new
iv_old = iv_old ).
ENDMETHOD.
METHOD is_every_changed_line_patched.
DATA: lt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt.
DATA:
lt_diff_old TYPE zif_abapgit_definitions=>ty_diffs_tt.
FIELD-SYMBOLS:
<ls_diff_file> TYPE zcl_abapgit_gui_page_diff=>ty_file_diff,
<ls_diff> TYPE zif_abapgit_definitions=>ty_diff.
rv_everything_patched = abap_true.
<ls_diff_file> TYPE ty_file_diff,
<ls_diff_file_old> TYPE ty_file_diff,
<ls_diff_old> TYPE zif_abapgit_definitions=>ty_diff.
LOOP AT mt_diff_files ASSIGNING <ls_diff_file>.
lt_diff = <ls_diff_file>-o_diff->get( ).
LOOP AT lt_diff ASSIGNING <ls_diff>
WHERE result IS NOT INITIAL
AND patch_flag = abap_false.
rv_everything_patched = abap_false.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
EXIT.
READ TABLE it_diff_files_old ASSIGNING <ls_diff_file_old>
WITH KEY secondary
COMPONENTS path = <ls_diff_file>-path
filename = <ls_diff_file>-filename.
IF sy-subrc <> 0.
CONTINUE. " e.g. new objects
ENDIF.
lt_diff_old = <ls_diff_file_old>-o_diff->get( ).
LOOP AT lt_diff_old ASSIGNING <ls_diff_old>
WHERE patch_flag = abap_true.
<ls_diff_file>-o_diff->set_patch_by_old_diff(
is_diff_old = <ls_diff_old>
iv_patch_flag = abap_true ).
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD is_patch_line_possible.
METHOD scripts.
IF is_diff_line-result = zif_abapgit_definitions=>c_diff-update
OR is_diff_line-result = zif_abapgit_definitions=>c_diff-insert
OR is_diff_line-result = zif_abapgit_definitions=>c_diff-delete.
rv_is_patch_line_possible = abap_true.
ENDIF.
ro_html = super->scripts( ).
ro_html->add( 'preparePatch();' ).
ro_html->add( 'registerStagePatch();' ).
ENDMETHOD.
METHOD start_staging.
apply_patch_from_form_fields( it_postdata ).
add_to_stage( ).
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
CASE iv_action.
WHEN c_actions-stage.
start_staging( it_postdata ).
CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_commit
EXPORTING
io_repo = mo_repo
io_stage = mo_stage.
ev_state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN OTHERS.
FIND FIRST OCCURRENCE OF REGEX |^{ c_actions-refresh }| IN iv_action.
IF sy-subrc = 0.
apply_patch_from_form_fields( it_postdata ).
refresh( iv_action ).
ev_state = zcl_abapgit_gui=>c_event_state-re_render.
ELSE.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
ei_page = ei_page
ev_state = ev_state ).
ENDIF.
ENDCASE.
ENDMETHOD.
@ -787,5 +787,4 @@ CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION.
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
ENDMETHOD.
ENDCLASS.

View File

@ -155,6 +155,8 @@ CLASS ltcl_is_patch_line_possible IMPLEMENTATION.
CONSTANTS:
lc_dummy_key TYPE zif_abapgit_persistence=>ty_value VALUE '000000000001'.
zcl_abapgit_ui_injector=>set_gui_services( zcl_abapgit_ui_injector=>get_dummy_gui_services( ) ).
CREATE OBJECT mo_cut
EXPORTING
iv_key = lc_dummy_key.

View File

@ -5,7 +5,8 @@ CLASS zcl_abapgit_gui_page_repo_over DEFINITION
CREATE PUBLIC .
PUBLIC SECTION.
METHODS constructor .
METHODS constructor
RAISING zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION .
@ -439,7 +440,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING

View File

@ -10,7 +10,8 @@ CLASS zcl_abapgit_gui_page_repo_sett DEFINITION
METHODS constructor
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo .
!io_repo TYPE REF TO zcl_abapgit_repo
RAISING zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION .

View File

@ -12,7 +12,8 @@ CLASS zcl_abapgit_gui_page_settings DEFINITION
change_proxy_bypass TYPE string VALUE 'change_proxy_bypass',
END OF c_action.
METHODS constructor.
METHODS constructor
RAISING zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event REDEFINITION.
PROTECTED SECTION.
@ -113,7 +114,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_settings IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION.
METHOD constructor.

View File

@ -90,7 +90,6 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION
VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar .
METHODS get_page_patch
IMPORTING iv_getdata TYPE clike
iv_prev_page TYPE clike
RETURNING VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING zcx_abapgit_exception.
METHODS render_master_language_warning
@ -103,7 +102,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
METHOD build_menu.
@ -667,16 +666,13 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
WHEN zif_abapgit_definitions=>c_action-go_patch. " Go Patch page
ei_page = get_page_patch(
iv_getdata = iv_getdata
iv_prev_page = iv_prev_page ).
ei_page = get_page_patch( iv_getdata ).
ev_state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN OTHERS.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING

View File

@ -43,15 +43,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_syntax IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'SYNTAX CHECK'.
mo_repo = io_repo.
run_syntax_check( ).
ENDMETHOD.
CLASS ZCL_ABAPGIT_GUI_PAGE_SYNTAX IMPLEMENTATION.
METHOD build_menu.
@ -65,6 +57,14 @@ CLASS zcl_abapgit_gui_page_syntax IMPLEMENTATION.
ENDMETHOD.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'SYNTAX CHECK'.
mo_repo = io_repo.
run_syntax_check( ).
ENDMETHOD.
METHOD render_content.
CREATE OBJECT ro_html.
@ -108,7 +108,6 @@ CLASS zcl_abapgit_gui_page_syntax IMPLEMENTATION.
super->zif_abapgit_gui_event_handler~on_event(
EXPORTING
iv_action = iv_action
iv_prev_page = iv_prev_page
iv_getdata = iv_getdata
it_postdata = it_postdata
IMPORTING
@ -123,11 +122,11 @@ CLASS zcl_abapgit_gui_page_syntax IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_renderable~render.
ms_control-page_menu = build_menu( ).
ri_html = super->zif_abapgit_gui_renderable~render( ).
ENDMETHOD.
ENDCLASS.

View File

@ -91,7 +91,6 @@ CLASS zcl_abapgit_gui_router DEFINITION
METHODS get_page_diff
IMPORTING
!iv_getdata TYPE clike
!iv_prev_page TYPE clike
RETURNING
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING
@ -131,7 +130,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_router IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
METHOD abapgit_services_actions.
@ -231,9 +230,7 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
ei_page = get_page_background( lv_key ).
ev_state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN zif_abapgit_definitions=>c_action-go_diff. " Go Diff page
ei_page = get_page_diff(
iv_getdata = is_event_data-getdata
iv_prev_page = is_event_data-prev_page ).
ei_page = get_page_diff( is_event_data-getdata ).
ev_state = zcl_abapgit_gui=>c_event_state-new_page_w_bookmark.
WHEN zif_abapgit_definitions=>c_action-go_stage. " Go Staging page
ei_page = get_page_stage( is_event_data-getdata ).
@ -577,7 +574,6 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
DATA: ls_event_data TYPE ty_event_data.
ls_event_data-action = iv_action.
ls_event_data-prev_page = iv_prev_page.
ls_event_data-getdata = iv_getdata.
ls_event_data-postdata = it_postdata.
@ -689,5 +685,4 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -1,6 +1,7 @@
CLASS zcl_abapgit_gui_view_repo DEFINITION
PUBLIC
FINAL
INHERITING FROM zcl_abapgit_gui_component
CREATE PUBLIC .
PUBLIC SECTION.
@ -9,9 +10,6 @@ CLASS zcl_abapgit_gui_view_repo DEFINITION
INTERFACES zif_abapgit_gui_event_handler .
INTERFACES zif_abapgit_gui_page_hotkey.
ALIASES render
FOR zif_abapgit_gui_renderable~render .
CONSTANTS:
BEGIN OF c_actions,
change_dir TYPE string VALUE 'change_dir' ##NO_TEXT,
@ -484,6 +482,8 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
DATA: lo_settings TYPE REF TO zcl_abapgit_settings,
lv_package TYPE devclass.
super->constructor( ).
mv_key = iv_key.
mo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
mv_cur_dir = '/'. " Root
@ -928,6 +928,8 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
mi_gui_services->register_event_handler( me ).
" Reinit, for the case of type change
mo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( mo_repo->get_key( ) ).

View File

@ -1,6 +1,7 @@
CLASS zcl_abapgit_gui_view_tutorial DEFINITION
PUBLIC
FINAL
INHERITING FROM zcl_abapgit_gui_component
CREATE PUBLIC .
PUBLIC SECTION.

View File

@ -19,6 +19,11 @@ CLASS zcl_abapgit_ui_factory DEFINITION
VALUE(ro_gui) TYPE REF TO zcl_abapgit_gui
RAISING
zcx_abapgit_exception .
CLASS-METHODS get_gui_services
RETURNING
VALUE(ri_gui_services) TYPE REF TO zif_abapgit_gui_services
RAISING
zcx_abapgit_exception .
CLASS-METHODS get_frontend_services
RETURNING
VALUE(ri_fe_serv) TYPE REF TO zif_abapgit_frontend_services .
@ -29,6 +34,7 @@ CLASS zcl_abapgit_ui_factory DEFINITION
CLASS-DATA gi_gui_functions TYPE REF TO zif_abapgit_gui_functions .
CLASS-DATA go_gui TYPE REF TO zcl_abapgit_gui .
CLASS-DATA gi_fe_services TYPE REF TO zif_abapgit_frontend_services .
CLASS-DATA gi_gui_services TYPE REF TO zif_abapgit_gui_services.
CLASS-METHODS init_asset_manager
RETURNING
@ -93,6 +99,14 @@ CLASS ZCL_ABAPGIT_UI_FACTORY IMPLEMENTATION.
ENDMETHOD.
METHOD get_gui_services.
IF gi_gui_services IS NOT BOUND.
gi_gui_services ?= get_gui( ).
ENDIF.
ri_gui_services = gi_gui_services.
ENDMETHOD.
METHOD get_popups.
IF gi_popups IS INITIAL.

View File

@ -14,8 +14,18 @@ CLASS zcl_abapgit_ui_injector DEFINITION
set_gui_functions
IMPORTING
ii_gui_functions TYPE REF TO zif_abapgit_gui_functions.
ii_gui_functions TYPE REF TO zif_abapgit_gui_functions,
set_gui_services
IMPORTING
ii_gui_services TYPE REF TO zif_abapgit_gui_services,
get_dummy_gui_services
RETURNING
VALUE(ri_gui_services) TYPE REF TO zif_abapgit_gui_services.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
@ -23,6 +33,13 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_UI_INJECTOR IMPLEMENTATION.
METHOD get_dummy_gui_services.
ri_gui_services = lcl_gui_services_dummy=>create( ).
ENDMETHOD.
METHOD set_gui_functions.
zcl_abapgit_ui_factory=>gi_gui_functions = ii_gui_functions.
@ -30,6 +47,13 @@ CLASS ZCL_ABAPGIT_UI_INJECTOR IMPLEMENTATION.
ENDMETHOD.
METHOD set_gui_services.
zcl_abapgit_ui_factory=>gi_gui_services = ii_gui_services.
ENDMETHOD.
METHOD set_popups.
zcl_abapgit_ui_factory=>gi_popups = ii_popups.

View File

@ -0,0 +1,19 @@
CLASS lcl_gui_services_dummy DEFINITION FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_gui_services.
CLASS-METHODS create
RETURNING
VALUE(ro_instance) TYPE REF TO lcl_gui_services_dummy.
ENDCLASS.
CLASS lcl_gui_services_dummy IMPLEMENTATION.
METHOD create.
CREATE OBJECT ro_instance.
ENDMETHOD.
METHOD zif_abapgit_gui_services~cache_asset.
ENDMETHOD.
METHOD zif_abapgit_gui_services~register_event_handler.
ENDMETHOD.
METHOD zif_abapgit_gui_services~get_current_page_name.
ENDMETHOD.
ENDCLASS.