CLASS zcl_abapgit_gui_page_boverview DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM zcl_abapgit_gui_page. PUBLIC SECTION. METHODS: constructor IMPORTING io_repo TYPE REF TO zcl_abapgit_repo_online RAISING zcx_abapgit_exception, zif_abapgit_gui_event_handler~on_event REDEFINITION. PROTECTED SECTION. METHODS render_content REDEFINITION. PRIVATE SECTION. DATA: mo_repo TYPE REF TO zcl_abapgit_repo_online, mv_compress TYPE abap_bool VALUE abap_false, mt_commits TYPE zif_abapgit_definitions=>ty_commit_tt, mi_branch_overview TYPE REF TO zif_abapgit_branch_overview. CONSTANTS: BEGIN OF c_actions, uncompress TYPE string VALUE 'uncompress' ##NO_TEXT, compress TYPE string VALUE 'compress' ##NO_TEXT, refresh TYPE string VALUE 'refresh' ##NO_TEXT, merge TYPE string VALUE 'merge' ##NO_TEXT, END OF c_actions. TYPES: BEGIN OF ty_merge, source TYPE string, target TYPE string, END OF ty_merge. METHODS: refresh RAISING zcx_abapgit_exception, body RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html RAISING zcx_abapgit_exception, form_select IMPORTING iv_name TYPE string RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html, render_merge RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html RAISING zcx_abapgit_exception, decode_merge IMPORTING it_postdata TYPE cnht_post_data_tab RETURNING VALUE(rs_merge) TYPE ty_merge RAISING zcx_abapgit_exception, build_menu RETURNING VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar, escape_branch IMPORTING iv_string TYPE string RETURNING VALUE(rv_string) TYPE string, escape_message IMPORTING iv_string TYPE string RETURNING VALUE(rv_string) TYPE string, render_commit_popups RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html RAISING zcx_abapgit_exception. ENDCLASS. CLASS ZCL_ABAPGIT_GUI_PAGE_BOVERVIEW IMPLEMENTATION. METHOD body. DATA: lv_tag TYPE string, lv_branch_display_name TYPE string. FIELD-SYMBOLS: LIKE LINE OF mt_commits, LIKE LINE OF -create. CREATE OBJECT ro_html. ro_html->add( zcl_abapgit_gui_chunk_lib=>render_repo_top( io_repo = mo_repo iv_show_package = abap_false iv_show_branch = abap_false ) ). ro_html->add( '
' ). ro_html->add( '
' ). ro_html->add( render_merge( ) ). ro_html->add( '
' ). ro_html->add( build_menu( )->render( ) ). "CSS gitGraph-scrollWrapper, gitGraph-HTopScroller and gitGraph-Wrapper " - Used to manage the Horizonal Scroll bar on top of gitGraph Element ro_html->add( '
' ). "see http://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element ro_html->add( '
' ). ro_html->add( '
' ). ro_html->add( '
' ). ro_html->add( '' ). ro_html->add( '
' ). ro_html->add( '' ) ##NO_TEXT. ro_html->add( '' ). ro_html->add( '' ). ro_html->add( render_commit_popups( ) ). ENDMETHOD. METHOD build_menu. CREATE OBJECT ro_menu. IF mv_compress = abap_true. ro_menu->add( iv_txt = 'Uncompress Graph' iv_act = c_actions-uncompress ) ##NO_TEXT. ELSE. ro_menu->add( iv_txt = 'Compress Graph' iv_act = c_actions-compress ) ##NO_TEXT. ENDIF. ro_menu->add( iv_txt = 'Refresh' iv_act = c_actions-refresh ) ##NO_TEXT. ENDMETHOD. METHOD constructor. super->constructor( ). ms_control-page_title = 'BRANCH_OVERVIEW'. mo_repo = io_repo. refresh( ). ENDMETHOD. METHOD decode_merge. DATA: lv_string TYPE string, lt_fields TYPE tihttpnvp. FIELD-SYMBOLS: LIKE LINE OF lt_fields. CONCATENATE LINES OF it_postdata INTO lv_string. lt_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_string ). READ TABLE lt_fields ASSIGNING WITH KEY name = 'source' ##NO_TEXT. ASSERT sy-subrc = 0. rs_merge-source = -value. READ TABLE lt_fields ASSIGNING WITH KEY name = 'target' ##NO_TEXT. ASSERT sy-subrc = 0. rs_merge-target = -value. ENDMETHOD. METHOD escape_branch. rv_string = iv_string. TRANSLATE rv_string USING '-_._#_'. rv_string = |branch_{ rv_string }|. ENDMETHOD. METHOD escape_message. rv_string = iv_string. REPLACE ALL OCCURRENCES OF '\' IN rv_string WITH '\\'. REPLACE ALL OCCURRENCES OF '"' IN rv_string WITH '\"'. ENDMETHOD. METHOD form_select. DATA: lv_name TYPE string, lt_branches TYPE zif_abapgit_definitions=>ty_git_branch_list_tt. FIELD-SYMBOLS: LIKE LINE OF lt_branches. CREATE OBJECT ro_html. lt_branches = mi_branch_overview->get_branches( ). ro_html->add( |' ). ENDMETHOD. METHOD refresh. mi_branch_overview = zcl_abapgit_factory=>get_branch_overview( mo_repo ). mt_commits = mi_branch_overview->get_commits( ). IF mv_compress = abap_true. mt_commits = mi_branch_overview->compress( mt_commits ). ENDIF. ENDMETHOD. METHOD render_commit_popups. DATA: lv_time TYPE char10, lv_date TYPE sy-datum, lv_content TYPE string. FIELD-SYMBOLS: LIKE LINE OF mt_commits. CREATE OBJECT ro_html. LOOP AT mt_commits ASSIGNING . CLEAR: lv_time, lv_date. PERFORM p6_to_date_time_tz IN PROGRAM rstr0400 USING -time lv_time lv_date. lv_content = || && | | && | | && | | && | | && | | && | | && | | && | | && | | && | | && | | && | | && | | && | | && | | && | | && | |. IF -body IS NOT INITIAL. lv_content = lv_content && || && ||. ENDIF. lv_content = lv_content && | | && |
Author{ -author }
SHA1{ -sha1 }
Date/Time{ lv_date DATE = USER }
Message{ -message }
Body{ concat_lines_of( table = -body sep = |
| ) }
|. ro_html->add( zcl_abapgit_gui_chunk_lib=>render_commit_popup( iv_id = -sha1(7) iv_content = lv_content ) ). ENDLOOP. ENDMETHOD. METHOD render_content. CREATE OBJECT ro_html. ro_html->add( '
' ). ro_html->add( body( ) ). ro_html->add( '
' ). ENDMETHOD. METHOD render_merge. CREATE OBJECT ro_html. ro_html->add( '
' ). ro_html->add( 'Merge' ) ##NO_TEXT. ro_html->add( form_select( 'source' ) ) ##NO_TEXT. ro_html->add( 'into' ) ##NO_TEXT. ro_html->add( form_select( 'target' ) ) ##NO_TEXT. ro_html->add( '' ). ro_html->add( '
' ). ENDMETHOD. METHOD zif_abapgit_gui_event_handler~on_event. DATA: ls_merge TYPE ty_merge, lo_merge TYPE REF TO zcl_abapgit_gui_page_merge. CASE iv_action. WHEN c_actions-refresh. refresh( ). ev_state = zcl_abapgit_gui=>c_event_state-re_render. WHEN c_actions-uncompress. mv_compress = abap_false. refresh( ). ev_state = zcl_abapgit_gui=>c_event_state-re_render. WHEN c_actions-compress. mv_compress = abap_true. refresh( ). ev_state = zcl_abapgit_gui=>c_event_state-re_render. WHEN c_actions-merge. ls_merge = decode_merge( it_postdata ). CREATE OBJECT lo_merge EXPORTING io_repo = mo_repo iv_source = ls_merge-source iv_target = ls_merge-target. ei_page = lo_merge. 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_getdata = iv_getdata it_postdata = it_postdata IMPORTING ei_page = ei_page ev_state = ev_state ). ENDCASE. ENDMETHOD. ENDCLASS.