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_page~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, mo_branch_overview TYPE REF TO zcl_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. ENDCLASS. CLASS zcl_abapgit_gui_page_boverview IMPLEMENTATION. METHOD body. DATA: lv_tag 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( ) ). * see http://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element ro_html->add( '' ). ro_html->add( '' ) ##NO_TEXT. ro_html->add( '' ). 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 '\"'. 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 = mo_branch_overview->get_branches( ). ro_html->add( |' ). ENDMETHOD. METHOD refresh. mo_branch_overview = zcl_abapgit_branch_overview=>run( mo_repo ). mt_commits = mo_branch_overview->get_commits( ). IF mv_compress = abap_true. mt_commits = mo_branch_overview->compress( mt_commits ). ENDIF. ENDMETHOD. METHOD render_content. CREATE OBJECT ro_html. ro_html->add( '
' ). ro_html->add( body( ) ). ro_html->add( '
' ). ENDMETHOD. "render_content 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_page~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 = zif_abapgit_definitions=>gc_event_state-re_render. WHEN c_actions-uncompress. mv_compress = abap_false. refresh( ). ev_state = zif_abapgit_definitions=>gc_event_state-re_render. WHEN c_actions-compress. mv_compress = abap_true. refresh( ). ev_state = zif_abapgit_definitions=>gc_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 = zif_abapgit_definitions=>gc_event_state-new_page. ENDCASE. ENDMETHOD. ENDCLASS.