mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
lcl_gui_view_repo_content - code reorg #280
This commit is contained in:
parent
a6a7523b0b
commit
9f9f6b191d
|
@ -42,7 +42,7 @@ INCLUDE zabapgit_html.
|
||||||
INCLUDE zabapgit_util.
|
INCLUDE zabapgit_util.
|
||||||
INCLUDE zabapgit_xml.
|
INCLUDE zabapgit_xml.
|
||||||
|
|
||||||
INCLUDE zabapgit_app. " Some deferred definitions here
|
INCLUDE zabapgit_app. " Some deferred definitions here
|
||||||
INCLUDE zabapgit_persistence_old.
|
INCLUDE zabapgit_persistence_old.
|
||||||
INCLUDE zabapgit_persistence.
|
INCLUDE zabapgit_persistence.
|
||||||
INCLUDE zabapgit_dot_abapgit.
|
INCLUDE zabapgit_dot_abapgit.
|
||||||
|
@ -60,14 +60,14 @@ INCLUDE zabapgit_popups.
|
||||||
INCLUDE zabapgit_zip.
|
INCLUDE zabapgit_zip.
|
||||||
INCLUDE zabapgit_objects_impl.
|
INCLUDE zabapgit_objects_impl.
|
||||||
|
|
||||||
INCLUDE zabapgit_object_serializing. " All serializing classes here
|
INCLUDE zabapgit_object_serializing. " All serializing classes here
|
||||||
|
|
||||||
INCLUDE zabapgit_repo_impl.
|
INCLUDE zabapgit_repo_impl.
|
||||||
INCLUDE zabapgit_background.
|
INCLUDE zabapgit_background.
|
||||||
INCLUDE zabapgit_transport.
|
INCLUDE zabapgit_transport.
|
||||||
|
|
||||||
INCLUDE zabapgit_services. " All services here
|
INCLUDE zabapgit_services. " All services here
|
||||||
INCLUDE zabapgit_gui_pages. " All GUI pages here
|
INCLUDE zabapgit_gui_pages. " All GUI pages here
|
||||||
INCLUDE zabapgit_gui_pages_userexit IF FOUND.
|
INCLUDE zabapgit_gui_pages_userexit IF FOUND.
|
||||||
INCLUDE zabapgit_gui_router.
|
INCLUDE zabapgit_gui_router.
|
||||||
INCLUDE zabapgit_gui.
|
INCLUDE zabapgit_gui.
|
||||||
|
|
|
@ -29,6 +29,10 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
INTERFACES lif_gui_page ABSTRACT METHODS render.
|
INTERFACES lif_gui_page ABSTRACT METHODS render.
|
||||||
|
|
||||||
|
CLASS-METHODS render_error
|
||||||
|
IMPORTING ix_error TYPE REF TO lcx_exception
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
METHODS render_repo_top
|
METHODS render_repo_top
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
|
@ -251,6 +255,16 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "render html footer & logo
|
ENDMETHOD. "render html footer & logo
|
||||||
|
|
||||||
|
METHOD render_error.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
ro_html->add( '<div class="dummydiv attention">' ).
|
||||||
|
ro_html->add( |Error: { ix_error->mv_text }| ).
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
|
|
||||||
|
ENDMETHOD. "render_error
|
||||||
|
|
||||||
METHOD redirect.
|
METHOD redirect.
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
*& Include ZABAPGIT_PAGE_MAIN
|
*& Include ZABAPGIT_PAGE_MAIN
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
INCLUDE zabapgit_view_repo.
|
||||||
|
|
||||||
CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
@ -15,32 +17,15 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CONSTANTS: BEGIN OF c_actions,
|
CONSTANTS: BEGIN OF c_actions,
|
||||||
show TYPE string VALUE 'show' ##NO_TEXT,
|
show TYPE string VALUE 'show' ##NO_TEXT,
|
||||||
toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
|
|
||||||
END OF c_actions.
|
END OF c_actions.
|
||||||
|
|
||||||
CONSTANTS: c_default_sortkey TYPE i VALUE 9999.
|
DATA: mv_show TYPE lcl_persistence_db=>ty_value.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_repo_item,
|
|
||||||
obj_type TYPE tadir-object,
|
|
||||||
obj_name TYPE tadir-obj_name,
|
|
||||||
is_first TYPE abap_bool,
|
|
||||||
files TYPE tt_repo_files,
|
|
||||||
sortkey TYPE i,
|
|
||||||
changes TYPE i,
|
|
||||||
END OF ty_repo_item.
|
|
||||||
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
|
||||||
|
|
||||||
DATA: mv_show TYPE lcl_persistence_db=>ty_value,
|
|
||||||
mv_hide_files TYPE abap_bool.
|
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
retrieve_active_repo
|
|
||||||
RAISING lcx_exception,
|
|
||||||
styles
|
styles
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||||
render_error
|
retrieve_active_repo
|
||||||
IMPORTING ix_error TYPE REF TO lcx_exception
|
RAISING lcx_exception,
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
|
||||||
render_toc
|
render_toc
|
||||||
IMPORTING it_list TYPE lcl_repo_srv=>ty_repo_tt
|
IMPORTING it_list TYPE lcl_repo_srv=>ty_repo_tt
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||||
|
@ -52,34 +37,18 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
RAISING lcx_exception,
|
RAISING lcx_exception,
|
||||||
build_main_menu
|
build_main_menu
|
||||||
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar,
|
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar,
|
||||||
render_repo_menu
|
render_explore
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||||
RAISING lcx_exception,
|
RAISING lcx_exception,
|
||||||
render_repo
|
render_repo
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
|
||||||
RAISING lcx_exception,
|
|
||||||
extract_repo_content
|
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
|
||||||
EXPORTING et_repo_items TYPE tt_repo_items
|
|
||||||
eo_log TYPE REF TO lcl_log
|
|
||||||
RAISING lcx_exception,
|
|
||||||
render_repo_item
|
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
|
||||||
is_item TYPE ty_repo_item
|
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
|
||||||
RAISING lcx_exception,
|
|
||||||
render_obj_jump_link
|
|
||||||
IMPORTING iv_obj_type TYPE tadir-object
|
|
||||||
iv_obj_name TYPE tadir-obj_name
|
|
||||||
RETURNING VALUE(rv_html) TYPE string,
|
|
||||||
render_explore
|
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS lcl_gui_page_main IMPLEMENTATION.
|
CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
|
@ -99,7 +68,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
WHEN c_actions-show. " Change displayed repo
|
WHEN c_actions-show. " Change displayed repo
|
||||||
lcl_app=>user( )->set_repo_show( lv_key ).
|
lcl_app=>user( )->set_repo_show( lv_key ).
|
||||||
ev_state = gc_event_state-re_render.
|
ev_state = gc_event_state-re_render.
|
||||||
WHEN c_actions-toggle_hide_files. " Toggle file diplay
|
WHEN lcl_gui_view_repo_content=>c_actions-toggle_hide_files. " Toggle file diplay
|
||||||
lcl_app=>user( )->toggle_hide_files( ).
|
lcl_app=>user( )->toggle_hide_files( ).
|
||||||
ev_state = gc_event_state-re_render.
|
ev_state = gc_event_state-re_render.
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
|
@ -117,7 +86,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
lo_repo LIKE LINE OF lt_repos.
|
lo_repo LIKE LINE OF lt_repos.
|
||||||
|
|
||||||
retrieve_active_repo( ). " Get and validate key of user default repo
|
retrieve_active_repo( ). " Get and validate key of user default repo
|
||||||
mv_hide_files = lcl_app=>user( )->get_hide_files( ).
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
@ -175,20 +143,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "retrieve_active_repo
|
ENDMETHOD. "retrieve_active_repo
|
||||||
|
|
||||||
METHOD render_obj_jump_link.
|
|
||||||
|
|
||||||
DATA: lv_encode TYPE string,
|
|
||||||
lo_html TYPE REF TO lcl_html_helper.
|
|
||||||
|
|
||||||
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = iv_obj_type
|
|
||||||
iv_obj_name = iv_obj_name ).
|
|
||||||
|
|
||||||
CREATE OBJECT lo_html.
|
|
||||||
lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |{ gc_action-jump }?{ lv_encode }| ).
|
|
||||||
rv_html = lo_html->mv_html.
|
|
||||||
|
|
||||||
ENDMETHOD. "render_obj_jump_link
|
|
||||||
|
|
||||||
METHOD build_main_menu.
|
METHOD build_main_menu.
|
||||||
|
|
||||||
DATA lo_betasub TYPE REF TO lcl_html_toolbar.
|
DATA lo_betasub TYPE REF TO lcl_html_toolbar.
|
||||||
|
@ -300,16 +254,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "render_toc_line
|
ENDMETHOD. "render_toc_line
|
||||||
|
|
||||||
METHOD render_error.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
|
|
||||||
ro_html->add( '<div class="dummydiv attention">' ).
|
|
||||||
ro_html->add( |Error: { ix_error->mv_text }| ).
|
|
||||||
ro_html->add( '</div>' ).
|
|
||||||
|
|
||||||
ENDMETHOD. "render_error
|
|
||||||
|
|
||||||
METHOD render_explore.
|
METHOD render_explore.
|
||||||
|
|
||||||
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||||
|
@ -326,339 +270,22 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "render_explore
|
ENDMETHOD. "render_explore
|
||||||
|
|
||||||
**********************************************************************
|
|
||||||
* SELECTED REPO RENDERING
|
|
||||||
**********************************************************************
|
|
||||||
|
|
||||||
METHOD render_repo.
|
METHOD render_repo.
|
||||||
|
|
||||||
DATA: lt_repo_items TYPE tt_repo_items,
|
DATA: lo_repo_content TYPE REF TO lcl_gui_view_repo_content.
|
||||||
lo_tab_menu TYPE REF TO lcl_html_toolbar,
|
|
||||||
lx_error TYPE REF TO lcx_exception,
|
|
||||||
lo_log TYPE REF TO lcl_log.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_tab_menu.
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
||||||
ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ).
|
ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ).
|
||||||
|
|
||||||
TRY.
|
CREATE OBJECT lo_repo_content EXPORTING io_repo = io_repo.
|
||||||
extract_repo_content( EXPORTING io_repo = io_repo
|
ro_html->add( lo_repo_content->render( ) ).
|
||||||
IMPORTING et_repo_items = lt_repo_items
|
|
||||||
eo_log = lo_log ).
|
|
||||||
|
|
||||||
" extract_repo_content must be called before rendering the menu
|
|
||||||
" so that lo_log is filled with errors from the serialization
|
|
||||||
ro_html->add( render_repo_menu( io_repo ) ).
|
|
||||||
|
|
||||||
IF io_repo->is_offline( ) = abap_false and lo_log->count( ) > 0.
|
|
||||||
ro_html->add( '<div class="log">' ).
|
|
||||||
ro_html->add( lo_log->to_html( ) ). " shows eg. list of unsupported objects
|
|
||||||
ro_html->add( '</div>' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ro_html->add( '<div class="repo_container">' ).
|
|
||||||
IF io_repo->is_offline( ) = abap_false.
|
|
||||||
IF mv_hide_files = abap_true.
|
|
||||||
lo_tab_menu->add( iv_txt = 'Show files' iv_act = c_actions-toggle_hide_files ).
|
|
||||||
ELSE.
|
|
||||||
lo_tab_menu->add( iv_txt = 'Hide files' iv_act = c_actions-toggle_hide_files ).
|
|
||||||
ENDIF.
|
|
||||||
ro_html->add( lo_tab_menu->render( iv_as_angle = abap_true ) ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ro_html->add( '<table width="100%" class="repo_tab">' ).
|
|
||||||
IF lines( lt_repo_items ) = 0.
|
|
||||||
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
|
||||||
&& '<center>Empty package</center>'
|
|
||||||
&& '</td></tr>' ) ##NO_TEXT.
|
|
||||||
ELSE.
|
|
||||||
LOOP AT lt_repo_items ASSIGNING <ls_item>.
|
|
||||||
ro_html->add( render_repo_item( io_repo = io_repo is_item = <ls_item> ) ).
|
|
||||||
ENDLOOP.
|
|
||||||
ENDIF.
|
|
||||||
ro_html->add( '</table>' ).
|
|
||||||
ro_html->add( '</div>' ).
|
|
||||||
|
|
||||||
CATCH lcx_exception INTO lx_error.
|
|
||||||
ro_html->add( render_repo_menu( io_repo ) ).
|
|
||||||
ro_html->add( render_error( lx_error ) ).
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
ro_html->add( '</div>' ).
|
ro_html->add( '</div>' ).
|
||||||
|
|
||||||
ENDMETHOD. "render_repo
|
ENDMETHOD. "render_repo
|
||||||
|
|
||||||
METHOD render_repo_menu.
|
|
||||||
|
|
||||||
DATA: lo_toolbar TYPE REF TO lcl_html_toolbar,
|
|
||||||
lo_tb_advanced TYPE REF TO lcl_html_toolbar,
|
|
||||||
lo_tb_branch TYPE REF TO lcl_html_toolbar,
|
|
||||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
|
||||||
lv_wp_opt LIKE gc_html_opt-crossout,
|
|
||||||
lv_pull_opt LIKE gc_html_opt-crossout,
|
|
||||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
CREATE OBJECT lo_toolbar.
|
|
||||||
CREATE OBJECT lo_tb_branch.
|
|
||||||
CREATE OBJECT lo_tb_advanced.
|
|
||||||
|
|
||||||
lv_key = io_repo->get_key( ).
|
|
||||||
IF io_repo->is_offline( ) = abap_false.
|
|
||||||
lo_repo_online ?= io_repo.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF io_repo->is_write_protected( ) = abap_true.
|
|
||||||
lv_wp_opt = gc_html_opt-crossout.
|
|
||||||
lv_pull_opt = gc_html_opt-crossout.
|
|
||||||
ELSE.
|
|
||||||
lv_pull_opt = gc_html_opt-emphas.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
" Build branch drop-down ========================
|
|
||||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
|
||||||
lo_tb_branch->add( iv_txt = 'Overview'
|
|
||||||
iv_act = |{ gc_action-go_branch_overview }?{ lv_key }| ).
|
|
||||||
lo_tb_branch->add( iv_txt = 'Switch'
|
|
||||||
iv_act = |{ gc_action-git_branch_switch }?{ lv_key }|
|
|
||||||
iv_opt = lv_wp_opt ).
|
|
||||||
lo_tb_branch->add( iv_txt = 'Create'
|
|
||||||
iv_act = |{ gc_action-git_branch_create }?{ lv_key }| ).
|
|
||||||
lo_tb_branch->add( iv_txt = 'Delete'
|
|
||||||
iv_act = |{ gc_action-git_branch_delete }?{ lv_key }| ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
" Build advanced drop-down ========================
|
|
||||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
|
||||||
lo_tb_advanced->add( iv_txt = 'Reset local'
|
|
||||||
iv_act = |{ gc_action-git_reset }?{ lv_key }|
|
|
||||||
iv_opt = lv_wp_opt ).
|
|
||||||
lo_tb_advanced->add( iv_txt = 'Background mode'
|
|
||||||
iv_act = |{ gc_action-go_background }?{ lv_key }| ).
|
|
||||||
lo_tb_advanced->add( iv_txt = 'Change remote'
|
|
||||||
iv_act = |{ gc_action-repo_remote_change }?{ lv_key }| ).
|
|
||||||
lo_tb_advanced->add( iv_txt = 'Make off-line'
|
|
||||||
iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ).
|
|
||||||
ELSE.
|
|
||||||
lo_tb_advanced->add( iv_txt = 'Make on-line'
|
|
||||||
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).
|
|
||||||
ENDIF.
|
|
||||||
lo_tb_advanced->add( iv_txt = 'Remove'
|
|
||||||
iv_act = |{ gc_action-repo_remove }?{ lv_key }| ).
|
|
||||||
lo_tb_advanced->add( iv_txt = 'Uninstall'
|
|
||||||
iv_act = |{ gc_action-repo_purge }?{ lv_key }|
|
|
||||||
iv_opt = lv_wp_opt ).
|
|
||||||
|
|
||||||
" Build main toolbar ==============================
|
|
||||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
|
||||||
TRY.
|
|
||||||
IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ).
|
|
||||||
lo_toolbar->add( iv_txt = 'Pull'
|
|
||||||
iv_act = |{ gc_action-git_pull }?{ lv_key }|
|
|
||||||
iv_opt = lv_pull_opt ).
|
|
||||||
ENDIF.
|
|
||||||
IF lcl_stage_logic=>count( lo_repo_online ) > 0.
|
|
||||||
lo_toolbar->add( iv_txt = 'Stage'
|
|
||||||
iv_act = |{ gc_action-go_stage }?{ lv_key }|
|
|
||||||
iv_opt = gc_html_opt-emphas ).
|
|
||||||
ENDIF.
|
|
||||||
CATCH lcx_exception ##NO_HANDLER.
|
|
||||||
" authorization error or repository does not exist
|
|
||||||
" ignore error
|
|
||||||
ENDTRY.
|
|
||||||
lo_toolbar->add( iv_txt = 'Branch'
|
|
||||||
io_sub = lo_tb_branch ) ##NO_TEXT.
|
|
||||||
ELSE.
|
|
||||||
lo_toolbar->add( iv_txt = 'Import ZIP'
|
|
||||||
iv_act = |{ gc_action-zip_import }?{ lv_key }|
|
|
||||||
iv_opt = gc_html_opt-emphas ).
|
|
||||||
lo_toolbar->add( iv_txt = 'Export ZIP'
|
|
||||||
iv_act = |{ gc_action-zip_export }?{ lv_key }|
|
|
||||||
iv_opt = gc_html_opt-emphas ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lo_toolbar->add( iv_txt = 'Advanced'
|
|
||||||
io_sub = lo_tb_advanced ) ##NO_TEXT.
|
|
||||||
lo_toolbar->add( iv_txt = 'Refresh'
|
|
||||||
iv_act = |{ gc_action-repo_refresh }?{ lv_key }| ).
|
|
||||||
|
|
||||||
" Render ==========================================
|
|
||||||
ro_html->add( '<div class="paddings right">' ).
|
|
||||||
ro_html->add( lo_toolbar->render( ) ).
|
|
||||||
ro_html->add( '</div>' ).
|
|
||||||
|
|
||||||
ENDMETHOD. "render_repo_menu
|
|
||||||
|
|
||||||
METHOD extract_repo_content.
|
|
||||||
|
|
||||||
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
|
|
||||||
lt_tadir TYPE ty_tadir_tt,
|
|
||||||
ls_file TYPE ty_repo_file,
|
|
||||||
lt_results TYPE ty_results_tt.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
|
||||||
<ls_repo_item> LIKE LINE OF et_repo_items,
|
|
||||||
<ls_tadir> LIKE LINE OF lt_tadir.
|
|
||||||
|
|
||||||
|
|
||||||
CLEAR et_repo_items.
|
|
||||||
|
|
||||||
IF io_repo->is_offline( ) = abap_true.
|
|
||||||
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
|
|
||||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
|
||||||
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
|
||||||
IF sy-tabix = 1.
|
|
||||||
<ls_repo_item>-is_first = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
<ls_repo_item>-obj_type = <ls_tadir>-object.
|
|
||||||
<ls_repo_item>-obj_name = <ls_tadir>-obj_name.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ELSE.
|
|
||||||
CREATE OBJECT eo_log.
|
|
||||||
lo_repo_online ?= io_repo.
|
|
||||||
lt_results = lo_repo_online->status( eo_log ).
|
|
||||||
LOOP AT lt_results ASSIGNING <ls_result>.
|
|
||||||
AT NEW obj_name. "obj_type + obj_name
|
|
||||||
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
|
||||||
<ls_repo_item>-obj_type = <ls_result>-obj_type.
|
|
||||||
<ls_repo_item>-obj_name = <ls_result>-obj_name.
|
|
||||||
<ls_repo_item>-sortkey = c_default_sortkey. " Default sort key
|
|
||||||
<ls_repo_item>-changes = 0.
|
|
||||||
ENDAT.
|
|
||||||
|
|
||||||
IF <ls_result>-filename IS NOT INITIAL.
|
|
||||||
ls_file-path = <ls_result>-path.
|
|
||||||
ls_file-filename = <ls_result>-filename.
|
|
||||||
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
|
||||||
ls_file-new = <ls_result>-new.
|
|
||||||
APPEND ls_file TO <ls_repo_item>-files.
|
|
||||||
|
|
||||||
IF ls_file-is_changed = abap_true OR ls_file-new IS NOT INITIAL.
|
|
||||||
<ls_repo_item>-sortkey = 2. " Changed files
|
|
||||||
<ls_repo_item>-changes = <ls_repo_item>-changes + 1.
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
AT END OF obj_name. "obj_type + obj_name
|
|
||||||
IF <ls_repo_item>-obj_type IS INITIAL.
|
|
||||||
<ls_repo_item>-sortkey = 0. "Virtual objects
|
|
||||||
ELSEIF lines( <ls_repo_item>-files ) = 0.
|
|
||||||
<ls_repo_item>-sortkey = 1. "New object to commit
|
|
||||||
ENDIF.
|
|
||||||
ENDAT.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
SORT et_repo_items BY sortkey obj_type obj_name ASCENDING.
|
|
||||||
READ TABLE et_repo_items ASSIGNING <ls_repo_item> INDEX 1.
|
|
||||||
IF sy-subrc IS INITIAL.
|
|
||||||
<ls_repo_item>-is_first = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
|
|
||||||
ENDMETHOD. "extract_repo_content
|
|
||||||
|
|
||||||
METHOD render_repo_item.
|
|
||||||
DATA:
|
|
||||||
lv_link TYPE string,
|
|
||||||
lv_icon TYPE string,
|
|
||||||
lv_difflink TYPE string,
|
|
||||||
ls_file LIKE LINE OF is_item-files,
|
|
||||||
lv_trclass TYPE string.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
|
|
||||||
IF is_item-is_first = abap_true. " TR class
|
|
||||||
lv_trclass = 'firstrow' ##NO_TEXT.
|
|
||||||
ENDIF.
|
|
||||||
IF is_item-obj_name IS INITIAL.
|
|
||||||
lv_trclass = lv_trclass && ' unsupported' ##NO_TEXT.
|
|
||||||
ENDIF.
|
|
||||||
IF is_item-sortkey > 0 AND is_item-sortkey < c_default_sortkey.
|
|
||||||
lv_trclass = lv_trclass && ' modified' ##NO_TEXT.
|
|
||||||
ENDIF.
|
|
||||||
IF lv_trclass IS NOT INITIAL.
|
|
||||||
SHIFT lv_trclass LEFT DELETING LEADING space.
|
|
||||||
lv_trclass = | class="{ lv_trclass }"|.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ro_html->add( |<tr{ lv_trclass }>| ).
|
|
||||||
|
|
||||||
IF is_item-obj_name IS INITIAL.
|
|
||||||
ro_html->add( '<td colspan="2"></td>'
|
|
||||||
&& '<td class="object"><i class="grey">non-code and meta files</i></td>' ).
|
|
||||||
ELSE.
|
|
||||||
CASE is_item-obj_type. "TODO ??
|
|
||||||
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
|
||||||
lv_icon = |<img src="img/code">|.
|
|
||||||
WHEN 'W3MI' OR 'W3HT'.
|
|
||||||
lv_icon = |<img src="img/bin">|.
|
|
||||||
WHEN ''.
|
|
||||||
lv_icon = space. " no icon
|
|
||||||
WHEN OTHERS.
|
|
||||||
lv_icon = |<img src="img/obj">|.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name
|
|
||||||
iv_obj_type = is_item-obj_type ).
|
|
||||||
ro_html->add( |<td class="icon">{ lv_icon }</td>| ).
|
|
||||||
ro_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
|
|
||||||
ro_html->add( |<td class="object">{ lv_link }</td>| ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
|
||||||
|
|
||||||
ro_html->add( '<td class="files">' ).
|
|
||||||
IF mv_hide_files = abap_false OR is_item-obj_type IS INITIAL.
|
|
||||||
LOOP AT is_item-files INTO ls_file.
|
|
||||||
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
|
||||||
ENDLOOP.
|
|
||||||
ENDIF.
|
|
||||||
ro_html->add( '</td>' ).
|
|
||||||
|
|
||||||
ro_html->add( '<td class="cmd">' ).
|
|
||||||
IF lines( is_item-files ) = 0.
|
|
||||||
ro_html->add( '<span class="grey">new @local</span>' ).
|
|
||||||
ELSEIF is_item-changes > 0.
|
|
||||||
IF mv_hide_files = abap_true AND is_item-obj_name IS NOT INITIAL.
|
|
||||||
lv_difflink = lcl_html_action_utils=>obj_encode(
|
|
||||||
iv_key = io_repo->get_key( )
|
|
||||||
ig_object = is_item ).
|
|
||||||
ro_html->add_anchor(
|
|
||||||
iv_txt = |diff ({ is_item-changes })|
|
|
||||||
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
|
||||||
ELSE.
|
|
||||||
LOOP AT is_item-files INTO ls_file.
|
|
||||||
IF ls_file-new = gc_new-remote.
|
|
||||||
ro_html->add( '<span class="grey">new @remote</span>' ).
|
|
||||||
ELSEIF ls_file-new = gc_new-local.
|
|
||||||
ro_html->add( '<span class="grey">new @local</span>' ).
|
|
||||||
ELSEIF ls_file-is_changed = abap_true.
|
|
||||||
lv_difflink = lcl_html_action_utils=>file_encode(
|
|
||||||
iv_key = io_repo->get_key( )
|
|
||||||
ig_file = ls_file ).
|
|
||||||
ro_html->add_anchor(
|
|
||||||
iv_txt = 'diff'
|
|
||||||
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
|
||||||
ELSE.
|
|
||||||
ro_html->add( |<span> </span>| ).
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
ro_html->add( '</td>' ).
|
|
||||||
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ro_html->add( '</tr>' ).
|
|
||||||
|
|
||||||
ENDMETHOD. "render_repo_item
|
|
||||||
|
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
* ASSETS, STYLES, SCRIPTS
|
* ASSETS, STYLES, SCRIPTS
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
|
|
405
src/zabapgit_view_repo.prog.abap
Normal file
405
src/zabapgit_view_repo.prog.abap
Normal file
|
@ -0,0 +1,405 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_VIEW_REPO
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_gui_view_repo_content DEFINITION FINAL.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
CONSTANTS: BEGIN OF c_actions,
|
||||||
|
toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
|
||||||
|
END OF c_actions.
|
||||||
|
|
||||||
|
METHODS constructor
|
||||||
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
|
RAISING lcx_exception.
|
||||||
|
METHODS render
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
CONSTANTS: c_default_sortkey TYPE i VALUE 9999.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_repo_item,
|
||||||
|
obj_type TYPE tadir-object,
|
||||||
|
obj_name TYPE tadir-obj_name,
|
||||||
|
is_first TYPE abap_bool,
|
||||||
|
files TYPE tt_repo_files,
|
||||||
|
sortkey TYPE i,
|
||||||
|
changes TYPE i,
|
||||||
|
END OF ty_repo_item.
|
||||||
|
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
DATA: mo_repo TYPE REF TO lcl_repo,
|
||||||
|
mv_hide_files TYPE abap_bool.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
render_repo_menu
|
||||||
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||||
|
RAISING lcx_exception,
|
||||||
|
extract_repo_content
|
||||||
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
|
EXPORTING et_repo_items TYPE tt_repo_items
|
||||||
|
eo_log TYPE REF TO lcl_log
|
||||||
|
RAISING lcx_exception,
|
||||||
|
render_repo_item
|
||||||
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
|
is_item TYPE ty_repo_item
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||||
|
RAISING lcx_exception,
|
||||||
|
render_obj_jump_link
|
||||||
|
IMPORTING iv_obj_type TYPE tadir-object
|
||||||
|
iv_obj_name TYPE tadir-obj_name
|
||||||
|
RETURNING VALUE(rv_html) TYPE string.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_view_repo_content
|
||||||
|
|
||||||
|
CLASS lcl_gui_view_repo_content IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD constructor.
|
||||||
|
|
||||||
|
mo_repo ?= io_repo.
|
||||||
|
mv_hide_files = lcl_app=>user( )->get_hide_files( ).
|
||||||
|
|
||||||
|
ENDMETHOD. "constructor
|
||||||
|
|
||||||
|
METHOD render.
|
||||||
|
|
||||||
|
DATA: lt_repo_items TYPE tt_repo_items,
|
||||||
|
lo_tab_menu TYPE REF TO lcl_html_toolbar,
|
||||||
|
lx_error TYPE REF TO lcx_exception,
|
||||||
|
lo_log TYPE REF TO lcl_log.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_tab_menu.
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
extract_repo_content( EXPORTING io_repo = mo_repo
|
||||||
|
IMPORTING et_repo_items = lt_repo_items
|
||||||
|
eo_log = lo_log ).
|
||||||
|
|
||||||
|
" extract_repo_content must be called before rendering the menu
|
||||||
|
" so that lo_log is filled with errors from the serialization
|
||||||
|
ro_html->add( render_repo_menu( mo_repo ) ).
|
||||||
|
|
||||||
|
IF mo_repo->is_offline( ) = abap_false and lo_log->count( ) > 0.
|
||||||
|
ro_html->add( '<div class="log">' ).
|
||||||
|
ro_html->add( lo_log->to_html( ) ). " shows eg. list of unsupported objects
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<div class="repo_container">' ).
|
||||||
|
IF mo_repo->is_offline( ) = abap_false.
|
||||||
|
IF mv_hide_files = abap_true.
|
||||||
|
* lo_tab_menu->add( iv_txt = 'Show files' iv_act = c_actions-toggle_hide_files ).
|
||||||
|
ELSE.
|
||||||
|
* lo_tab_menu->add( iv_txt = 'Hide files' iv_act = c_actions-toggle_hide_files ).
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add( lo_tab_menu->render( iv_as_angle = abap_true ) ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<table width="100%" class="repo_tab">' ).
|
||||||
|
IF lines( lt_repo_items ) = 0.
|
||||||
|
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
||||||
|
&& '<center>Empty package</center>'
|
||||||
|
&& '</td></tr>' ) ##NO_TEXT.
|
||||||
|
ELSE.
|
||||||
|
LOOP AT lt_repo_items ASSIGNING <ls_item>.
|
||||||
|
ro_html->add( render_repo_item( io_repo = mo_repo is_item = <ls_item> ) ).
|
||||||
|
ENDLOOP.
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add( '</table>' ).
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
|
|
||||||
|
CATCH lcx_exception INTO lx_error.
|
||||||
|
ro_html->add( render_repo_menu( mo_repo ) ).
|
||||||
|
ro_html->add( lcl_gui_page_super=>render_error( lx_error ) ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD. "render
|
||||||
|
|
||||||
|
METHOD render_repo_menu.
|
||||||
|
|
||||||
|
DATA: lo_toolbar TYPE REF TO lcl_html_toolbar,
|
||||||
|
lo_tb_advanced TYPE REF TO lcl_html_toolbar,
|
||||||
|
lo_tb_branch TYPE REF TO lcl_html_toolbar,
|
||||||
|
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||||
|
lv_wp_opt LIKE gc_html_opt-crossout,
|
||||||
|
lv_pull_opt LIKE gc_html_opt-crossout,
|
||||||
|
lo_repo_online TYPE REF TO lcl_repo_online.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
CREATE OBJECT lo_toolbar.
|
||||||
|
CREATE OBJECT lo_tb_branch.
|
||||||
|
CREATE OBJECT lo_tb_advanced.
|
||||||
|
|
||||||
|
lv_key = io_repo->get_key( ).
|
||||||
|
IF io_repo->is_offline( ) = abap_false.
|
||||||
|
lo_repo_online ?= io_repo.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF io_repo->is_write_protected( ) = abap_true.
|
||||||
|
lv_wp_opt = gc_html_opt-crossout.
|
||||||
|
lv_pull_opt = gc_html_opt-crossout.
|
||||||
|
ELSE.
|
||||||
|
lv_pull_opt = gc_html_opt-emphas.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" Build branch drop-down ========================
|
||||||
|
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||||
|
lo_tb_branch->add( iv_txt = 'Overview'
|
||||||
|
iv_act = |{ gc_action-go_branch_overview }?{ lv_key }| ).
|
||||||
|
lo_tb_branch->add( iv_txt = 'Switch'
|
||||||
|
iv_act = |{ gc_action-git_branch_switch }?{ lv_key }|
|
||||||
|
iv_opt = lv_wp_opt ).
|
||||||
|
lo_tb_branch->add( iv_txt = 'Create'
|
||||||
|
iv_act = |{ gc_action-git_branch_create }?{ lv_key }| ).
|
||||||
|
lo_tb_branch->add( iv_txt = 'Delete'
|
||||||
|
iv_act = |{ gc_action-git_branch_delete }?{ lv_key }| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" Build advanced drop-down ========================
|
||||||
|
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Reset local'
|
||||||
|
iv_act = |{ gc_action-git_reset }?{ lv_key }|
|
||||||
|
iv_opt = lv_wp_opt ).
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Background mode'
|
||||||
|
iv_act = |{ gc_action-go_background }?{ lv_key }| ).
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Change remote'
|
||||||
|
iv_act = |{ gc_action-repo_remote_change }?{ lv_key }| ).
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Make off-line'
|
||||||
|
iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ).
|
||||||
|
ELSE.
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Make on-line'
|
||||||
|
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).
|
||||||
|
ENDIF.
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Remove'
|
||||||
|
iv_act = |{ gc_action-repo_remove }?{ lv_key }| ).
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Uninstall'
|
||||||
|
iv_act = |{ gc_action-repo_purge }?{ lv_key }|
|
||||||
|
iv_opt = lv_wp_opt ).
|
||||||
|
|
||||||
|
" Build main toolbar ==============================
|
||||||
|
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||||
|
TRY.
|
||||||
|
IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ).
|
||||||
|
lo_toolbar->add( iv_txt = 'Pull'
|
||||||
|
iv_act = |{ gc_action-git_pull }?{ lv_key }|
|
||||||
|
iv_opt = lv_pull_opt ).
|
||||||
|
ENDIF.
|
||||||
|
IF lcl_stage_logic=>count( lo_repo_online ) > 0.
|
||||||
|
lo_toolbar->add( iv_txt = 'Stage'
|
||||||
|
iv_act = |{ gc_action-go_stage }?{ lv_key }|
|
||||||
|
iv_opt = gc_html_opt-emphas ).
|
||||||
|
ENDIF.
|
||||||
|
CATCH lcx_exception ##NO_HANDLER.
|
||||||
|
" authorization error or repository does not exist
|
||||||
|
" ignore error
|
||||||
|
ENDTRY.
|
||||||
|
lo_toolbar->add( iv_txt = 'Branch'
|
||||||
|
io_sub = lo_tb_branch ) ##NO_TEXT.
|
||||||
|
ELSE.
|
||||||
|
lo_toolbar->add( iv_txt = 'Import ZIP'
|
||||||
|
iv_act = |{ gc_action-zip_import }?{ lv_key }|
|
||||||
|
iv_opt = gc_html_opt-emphas ).
|
||||||
|
lo_toolbar->add( iv_txt = 'Export ZIP'
|
||||||
|
iv_act = |{ gc_action-zip_export }?{ lv_key }|
|
||||||
|
iv_opt = gc_html_opt-emphas ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lo_toolbar->add( iv_txt = 'Advanced'
|
||||||
|
io_sub = lo_tb_advanced ) ##NO_TEXT.
|
||||||
|
lo_toolbar->add( iv_txt = 'Refresh'
|
||||||
|
iv_act = |{ gc_action-repo_refresh }?{ lv_key }| ).
|
||||||
|
|
||||||
|
" Render ==========================================
|
||||||
|
ro_html->add( '<div class="paddings right">' ).
|
||||||
|
ro_html->add( lo_toolbar->render( ) ).
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
|
|
||||||
|
ENDMETHOD. "render_repo_menu
|
||||||
|
|
||||||
|
METHOD extract_repo_content.
|
||||||
|
|
||||||
|
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
|
||||||
|
lt_tadir TYPE ty_tadir_tt,
|
||||||
|
ls_file TYPE ty_repo_file,
|
||||||
|
lt_results TYPE ty_results_tt.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
||||||
|
<ls_repo_item> LIKE LINE OF et_repo_items,
|
||||||
|
<ls_tadir> LIKE LINE OF lt_tadir.
|
||||||
|
|
||||||
|
|
||||||
|
CLEAR et_repo_items.
|
||||||
|
|
||||||
|
IF io_repo->is_offline( ) = abap_true.
|
||||||
|
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
|
||||||
|
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||||
|
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
||||||
|
IF sy-tabix = 1.
|
||||||
|
<ls_repo_item>-is_first = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
<ls_repo_item>-obj_type = <ls_tadir>-object.
|
||||||
|
<ls_repo_item>-obj_name = <ls_tadir>-obj_name.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ELSE.
|
||||||
|
CREATE OBJECT eo_log.
|
||||||
|
lo_repo_online ?= io_repo.
|
||||||
|
lt_results = lo_repo_online->status( eo_log ).
|
||||||
|
LOOP AT lt_results ASSIGNING <ls_result>.
|
||||||
|
AT NEW obj_name. "obj_type + obj_name
|
||||||
|
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
||||||
|
<ls_repo_item>-obj_type = <ls_result>-obj_type.
|
||||||
|
<ls_repo_item>-obj_name = <ls_result>-obj_name.
|
||||||
|
<ls_repo_item>-sortkey = c_default_sortkey. " Default sort key
|
||||||
|
<ls_repo_item>-changes = 0.
|
||||||
|
ENDAT.
|
||||||
|
|
||||||
|
IF <ls_result>-filename IS NOT INITIAL.
|
||||||
|
ls_file-path = <ls_result>-path.
|
||||||
|
ls_file-filename = <ls_result>-filename.
|
||||||
|
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
||||||
|
ls_file-new = <ls_result>-new.
|
||||||
|
APPEND ls_file TO <ls_repo_item>-files.
|
||||||
|
|
||||||
|
IF ls_file-is_changed = abap_true OR ls_file-new IS NOT INITIAL.
|
||||||
|
<ls_repo_item>-sortkey = 2. " Changed files
|
||||||
|
<ls_repo_item>-changes = <ls_repo_item>-changes + 1.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
AT END OF obj_name. "obj_type + obj_name
|
||||||
|
IF <ls_repo_item>-obj_type IS INITIAL.
|
||||||
|
<ls_repo_item>-sortkey = 0. "Virtual objects
|
||||||
|
ELSEIF lines( <ls_repo_item>-files ) = 0.
|
||||||
|
<ls_repo_item>-sortkey = 1. "New object to commit
|
||||||
|
ENDIF.
|
||||||
|
ENDAT.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
SORT et_repo_items BY sortkey obj_type obj_name ASCENDING.
|
||||||
|
READ TABLE et_repo_items ASSIGNING <ls_repo_item> INDEX 1.
|
||||||
|
IF sy-subrc IS INITIAL.
|
||||||
|
<ls_repo_item>-is_first = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
|
||||||
|
ENDMETHOD. "extract_repo_content
|
||||||
|
|
||||||
|
METHOD render_repo_item.
|
||||||
|
DATA:
|
||||||
|
lv_link TYPE string,
|
||||||
|
lv_icon TYPE string,
|
||||||
|
lv_difflink TYPE string,
|
||||||
|
ls_file LIKE LINE OF is_item-files,
|
||||||
|
lv_trclass TYPE string.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
IF is_item-is_first = abap_true. " TR class
|
||||||
|
lv_trclass = 'firstrow' ##NO_TEXT.
|
||||||
|
ENDIF.
|
||||||
|
IF is_item-obj_name IS INITIAL.
|
||||||
|
lv_trclass = lv_trclass && ' unsupported' ##NO_TEXT.
|
||||||
|
ENDIF.
|
||||||
|
IF is_item-sortkey > 0 AND is_item-sortkey < c_default_sortkey.
|
||||||
|
lv_trclass = lv_trclass && ' modified' ##NO_TEXT.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_trclass IS NOT INITIAL.
|
||||||
|
SHIFT lv_trclass LEFT DELETING LEADING space.
|
||||||
|
lv_trclass = | class="{ lv_trclass }"|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( |<tr{ lv_trclass }>| ).
|
||||||
|
|
||||||
|
IF is_item-obj_name IS INITIAL.
|
||||||
|
ro_html->add( '<td colspan="2"></td>'
|
||||||
|
&& '<td class="object"><i class="grey">non-code and meta files</i></td>' ).
|
||||||
|
ELSE.
|
||||||
|
CASE is_item-obj_type. "TODO ??
|
||||||
|
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
||||||
|
lv_icon = |<img src="img/code">|.
|
||||||
|
WHEN 'W3MI' OR 'W3HT'.
|
||||||
|
lv_icon = |<img src="img/bin">|.
|
||||||
|
WHEN ''.
|
||||||
|
lv_icon = space. " no icon
|
||||||
|
WHEN OTHERS.
|
||||||
|
lv_icon = |<img src="img/obj">|.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name
|
||||||
|
iv_obj_type = is_item-obj_type ).
|
||||||
|
ro_html->add( |<td class="icon">{ lv_icon }</td>| ).
|
||||||
|
ro_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
|
||||||
|
ro_html->add( |<td class="object">{ lv_link }</td>| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
||||||
|
|
||||||
|
ro_html->add( '<td class="files">' ).
|
||||||
|
IF mv_hide_files = abap_false OR is_item-obj_type IS INITIAL.
|
||||||
|
LOOP AT is_item-files INTO ls_file.
|
||||||
|
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
||||||
|
ENDLOOP.
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add( '</td>' ).
|
||||||
|
|
||||||
|
ro_html->add( '<td class="cmd">' ).
|
||||||
|
IF lines( is_item-files ) = 0.
|
||||||
|
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||||
|
ELSEIF is_item-changes > 0.
|
||||||
|
IF mv_hide_files = abap_true AND is_item-obj_name IS NOT INITIAL.
|
||||||
|
lv_difflink = lcl_html_action_utils=>obj_encode(
|
||||||
|
iv_key = io_repo->get_key( )
|
||||||
|
ig_object = is_item ).
|
||||||
|
ro_html->add_anchor(
|
||||||
|
iv_txt = |diff ({ is_item-changes })|
|
||||||
|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
||||||
|
ELSE.
|
||||||
|
LOOP AT is_item-files INTO ls_file.
|
||||||
|
IF ls_file-new = gc_new-remote.
|
||||||
|
ro_html->add( '<span class="grey">new @remote</span>' ).
|
||||||
|
ELSEIF ls_file-new = gc_new-local.
|
||||||
|
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||||
|
ELSEIF ls_file-is_changed = abap_true.
|
||||||
|
lv_difflink = lcl_html_action_utils=>file_encode(
|
||||||
|
iv_key = io_repo->get_key( )
|
||||||
|
ig_file = ls_file ).
|
||||||
|
ro_html->add_anchor(
|
||||||
|
iv_txt = 'diff'
|
||||||
|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
||||||
|
ELSE.
|
||||||
|
ro_html->add( |<span> </span>| ).
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add( '</td>' ).
|
||||||
|
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '</tr>' ).
|
||||||
|
|
||||||
|
ENDMETHOD. "render_repo_item
|
||||||
|
|
||||||
|
METHOD render_obj_jump_link.
|
||||||
|
|
||||||
|
DATA: lv_encode TYPE string,
|
||||||
|
lo_html TYPE REF TO lcl_html_helper.
|
||||||
|
|
||||||
|
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = iv_obj_type
|
||||||
|
iv_obj_name = iv_obj_name ).
|
||||||
|
|
||||||
|
CREATE OBJECT lo_html.
|
||||||
|
lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |{ gc_action-jump }?{ lv_encode }| ).
|
||||||
|
rv_html = lo_html->mv_html.
|
||||||
|
|
||||||
|
ENDMETHOD. "render_obj_jump_link
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_view_repo_content
|
48
src/zabapgit_view_repo.prog.xml
Normal file
48
src/zabapgit_view_repo.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_VIEW_REPO</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_VIEW_REPO</ENTRY>
|
||||||
|
<LENGTH>26</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
Loading…
Reference in New Issue
Block a user