From 0831569297befb023a064190bd9bc57f11aefb83 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 16 May 2016 11:33:31 +0000 Subject: [PATCH] new friendly progress indicators --- zabapgit.prog.abap | 217 +++++++++++++++++++++++++++------------------ 1 file changed, 129 insertions(+), 88 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index af3e479a5..6bcaf19be 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.7.14'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.8.0'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -146,6 +146,107 @@ CLASS lcx_not_found IMPLEMENTATION. ENDCLASS. "lcx_not_found IMPLEMENTATION +CLASS lcl_progress DEFINITION. + + PUBLIC SECTION. + CLASS-METHODS: + show + IMPORTING + iv_key TYPE string + VALUE(iv_current) TYPE i + iv_total TYPE i + iv_text TYPE csequence. + + PRIVATE SECTION. + TYPES: BEGIN OF ty_stack, + key TYPE string, + current TYPE i, + total TYPE i, + text TYPE string, + END OF ty_stack. + + CLASS-DATA: + gt_stack TYPE STANDARD TABLE OF ty_stack WITH DEFAULT KEY. + + CLASS-METHODS: + calc_pct + RETURNING VALUE(rv_pct) TYPE i, + build_text + RETURNING VALUE(rv_text) TYPE string. + +ENDCLASS. + +CLASS lcl_progress IMPLEMENTATION. + + METHOD show. + + FIELD-SYMBOLS: LIKE LINE OF gt_stack. + +* assumption: +* all callers must end with calling this method with iv_current = iv_total +* to clear the progress of that sub element + ASSERT lines( gt_stack ) < 10. + + READ TABLE gt_stack INDEX lines( gt_stack ) ASSIGNING . + IF sy-subrc <> 0 OR -key <> iv_key. + APPEND INITIAL LINE TO gt_stack ASSIGNING . + ENDIF. + -key = iv_key. + -current = iv_current. + -total = iv_total. + -text = iv_text. + + CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' + EXPORTING + percentage = calc_pct( ) + text = build_text( ). + + IF iv_current = iv_total. + DELETE gt_stack INDEX lines( gt_stack ). + ENDIF. + + ENDMETHOD. + + METHOD build_text. + + FIELD-SYMBOLS: LIKE LINE OF gt_stack. + + + LOOP AT gt_stack ASSIGNING . + IF sy-tabix = 1. + rv_text = |{ -key } { -text }|. + ELSE. + rv_text = |{ rv_text } - { -key } { -text }|. + + IF -current <> 1 AND -total <> 1. + rv_text = |{ rv_text } ({ -current }/{ -total })|. + ENDIF. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + METHOD calc_pct. + + DATA: lv_f TYPE f. + + FIELD-SYMBOLS: LIKE LINE OF gt_stack. + + + READ TABLE gt_stack ASSIGNING INDEX 1. + ASSERT sy-subrc = 0. + + lv_f = ( -current / -total ) * 100. + rv_pct = lv_f. + + IF rv_pct = 100. + rv_pct = 99. + ENDIF. + + ENDMETHOD. + +ENDCLASS. + CLASS lcl_log DEFINITION. PUBLIC SECTION. @@ -12553,9 +12654,8 @@ CLASS lcl_repo DEFINITION ABSTRACT. RETURNING VALUE(rv_name) TYPE string RAISING lcx_exception, get_files_local - IMPORTING io_log TYPE REF TO lcl_log OPTIONAL - iv_show_progress TYPE abap_bool DEFAULT abap_false - RETURNING VALUE(rt_files) TYPE ty_files_tt + IMPORTING io_log TYPE REF TO lcl_log OPTIONAL + RETURNING VALUE(rt_files) TYPE ty_files_tt RAISING lcx_exception, get_files_remote RETURNING VALUE(rt_files) TYPE ty_files_tt @@ -12577,11 +12677,6 @@ CLASS lcl_repo DEFINITION ABSTRACT. mt_remote TYPE ty_files_tt, ms_data TYPE lcl_persistence_repo=>ty_repo. - CLASS-METHODS show_progress - IMPORTING iv_current TYPE i - iv_total TYPE i - iv_obj_name TYPE tadir-obj_name. - ENDCLASS. "lcl_repo DEFINITION *----------------------------------------------------------------------* @@ -12655,11 +12750,6 @@ CLASS lcl_objects DEFINITION FINAL. IMPORTING is_item TYPE ty_item RAISING lcx_exception. - CLASS-METHODS show_progress - IMPORTING iv_current TYPE i - iv_total TYPE i - iv_obj_name TYPE tadir-obj_name. - ENDCLASS. "lcl_object DEFINITION *----------------------------------------------------------------------* @@ -12836,6 +12926,11 @@ CLASS lcl_file_status IMPLEMENTATION. LOOP AT it_files ASSIGNING . + lcl_progress=>show( iv_key = 'Status' + iv_current = sy-tabix + iv_total = lines( it_files ) + iv_text = -filename ) ##NO_TEXT. + SPLIT -filename AT '.' INTO lv_pre lv_type lv_ext. TRANSLATE lv_pre TO UPPER CASE. TRANSLATE lv_type TO UPPER CASE. @@ -13157,21 +13252,6 @@ ENDCLASS. "lcl_package IMPLEMENTATION *----------------------------------------------------------------------* CLASS lcl_objects IMPLEMENTATION. - METHOD show_progress. - - DATA: lv_pct TYPE i, - lv_f TYPE f. - - - lv_f = ( iv_current / iv_total ) * 100. - lv_pct = lv_f. - CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' - EXPORTING - percentage = lv_pct - text = iv_obj_name. - - ENDMETHOD. "show_progress - METHOD check_warning. DATA: lv_question TYPE c LENGTH 200, @@ -13613,9 +13693,10 @@ CLASS lcl_objects IMPLEMENTATION. lt_results = prioritize_deser( lt_results ). LOOP AT lt_results ASSIGNING . - show_progress( iv_current = sy-tabix - iv_total = lines( lt_results ) - iv_obj_name = -obj_name ). + lcl_progress=>show( iv_key = 'Deserialize' + iv_current = sy-tabix + iv_total = lines( lt_results ) + iv_text = -obj_name ) ##NO_TEXT. CLEAR ls_item. ls_item-obj_type = -obj_type. @@ -15343,6 +15424,11 @@ CLASS lcl_repo_online IMPLEMENTATION. super->refresh( ). + lcl_progress=>show( iv_key = 'Fetch' + iv_current = 1 + iv_total = 1 + iv_text = 'Remote files' ) ##NO_TEXT. + lcl_git_porcelain=>pull( EXPORTING io_repo = me IMPORTING et_files = mt_remote et_objects = mt_objects @@ -15438,23 +15524,6 @@ CLASS lcl_repo IMPLEMENTATION. ENDMETHOD. - METHOD show_progress. - - DATA: lv_pct TYPE i, - lv_text TYPE string, - lv_f TYPE f. - - - lv_f = ( iv_current / iv_total ) * 100. - lv_pct = lv_f. - lv_text = |{ iv_obj_name } ({ iv_current }/{ iv_total })|. - CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' - EXPORTING - percentage = lv_pct - text = lv_text. - - ENDMETHOD. - METHOD get_files_local. DATA: lt_tadir TYPE lcl_tadir=>ty_tadir_tt, @@ -15472,11 +15541,10 @@ CLASS lcl_repo IMPLEMENTATION. lt_tadir = lcl_tadir=>read( get_package( ) ). LOOP AT lt_tadir ASSIGNING . - IF iv_show_progress = abap_true. - show_progress( iv_current = sy-tabix - iv_total = lines( lt_tadir ) - iv_obj_name = -obj_name ). - ENDIF. + lcl_progress=>show( iv_key = 'Files' + iv_current = sy-tabix + iv_total = lines( lt_tadir ) + iv_text = -obj_name ) ##NO_TEXT. ls_item-obj_type = -object. ls_item-obj_name = -obj_name. @@ -16586,8 +16654,7 @@ CLASS lcl_zip IMPLEMENTATION. CREATE OBJECT lo_log. - lt_zip = lo_repo->get_files_local( io_log = lo_log - iv_show_progress = abap_true ). + lt_zip = lo_repo->get_files_local( lo_log ). IF lo_log->count( ) > 0. lo_log->show( ). @@ -17655,12 +17722,6 @@ CLASS lcl_gui_page_main DEFINITION FINAL. CLASS-METHODS needs_installation RETURNING VALUE(rv_not_completely_installed) TYPE abap_bool. - CLASS-METHODS show_progress - IMPORTING - iv_current TYPE i - iv_total TYPE i - iv_text TYPE string. - ENDCLASS. CLASS lcl_gui_page_diff DEFINITION FINAL. @@ -19427,27 +19488,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. - METHOD show_progress. - - DATA: lv_text TYPE c LENGTH 100, - lv_pct TYPE i, - lv_f TYPE f. - - - lv_text = iv_text. - lv_f = ( iv_current / iv_total ) * 100. - lv_pct = lv_f. - IF lv_pct = 100. - lv_pct = 99. - ENDIF. - - CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' - EXPORTING - percentage = lv_pct - text = lv_text. - - ENDMETHOD. - METHOD render_error. CREATE OBJECT ro_html. @@ -19499,9 +19539,10 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( render_explore( ) ). ELSE. LOOP AT lt_repos INTO lo_repo. - show_progress( iv_current = sy-tabix - iv_total = lines( lt_repos ) - iv_text = lo_repo->get_name( ) ). + lcl_progress=>show( iv_key = 'Render' + iv_current = sy-tabix + iv_total = lines( lt_repos ) + iv_text = lo_repo->get_name( ) ) ##NO_TEXT. IF lo_repo->is_offline( ) = abap_true. lo_repo_offline ?= lo_repo. @@ -21509,7 +21550,7 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. lv_data = lo_db->read( iv_type = ms_key-type iv_value = ms_key-value ). - CATCH lcx_not_found. + CATCH lcx_not_found ##NO_HANDLER. ENDTRY. lv_data = lcl_xml_pretty=>print( lv_data ). @@ -21625,7 +21666,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. lv_data = lo_db->read( iv_type = ms_key-type iv_value = ms_key-value ). - CATCH lcx_not_found. + CATCH lcx_not_found ##NO_HANDLER. ENDTRY. lo_db->lock(