refactor progress indicator #1149

This commit is contained in:
larshp 2018-01-19 16:25:47 +00:00
parent 2c6e27da2a
commit a736957f58
7 changed files with 165 additions and 127 deletions

View File

@ -305,20 +305,23 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
METHOD decode_deltas. METHOD decode_deltas.
DATA: ls_object LIKE LINE OF ct_objects, DATA: ls_object LIKE LINE OF ct_objects,
lo_progress TYPE REF TO zcl_abapgit_progress,
lt_deltas LIKE ct_objects. lt_deltas LIKE ct_objects.
zcl_abapgit_progress=>show( iv_key = 'Decode'
iv_current = 1
iv_total = 1
iv_text = 'Deltas' ) ##NO_TEXT.
LOOP AT ct_objects INTO ls_object WHERE type = zif_abapgit_definitions=>gc_type-ref_d. LOOP AT ct_objects INTO ls_object WHERE type = zif_abapgit_definitions=>gc_type-ref_d.
DELETE ct_objects INDEX sy-tabix. DELETE ct_objects INDEX sy-tabix.
APPEND ls_object TO lt_deltas. APPEND ls_object TO lt_deltas.
ENDLOOP. ENDLOOP.
CREATE OBJECT lo_progress
EXPORTING
iv_total = lines( lt_deltas ).
LOOP AT lt_deltas INTO ls_object. LOOP AT lt_deltas INTO ls_object.
lo_progress->show( iv_current = sy-tabix
iv_text = 'Decode deltas' ) ##NO_TEXT.
delta( EXPORTING is_object = ls_object delta( EXPORTING is_object = ls_object
CHANGING ct_objects = ct_objects ). CHANGING ct_objects = ct_objects ).
ENDLOOP. ENDLOOP.
@ -518,8 +521,8 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
lv_adler32 TYPE zcl_abapgit_hash=>ty_adler32, lv_adler32 TYPE zcl_abapgit_hash=>ty_adler32,
lv_compressed TYPE xstring, lv_compressed TYPE xstring,
lv_xstring TYPE xstring, lv_xstring TYPE xstring,
lv_objects_total TYPE i, lo_progress TYPE REF TO zcl_abapgit_progress,
lv_objects_processed TYPE i. lv_objects_total TYPE i.
FIELD-SYMBOLS: <ls_object> LIKE LINE OF it_objects. FIELD-SYMBOLS: <ls_object> LIKE LINE OF it_objects.
@ -532,13 +535,15 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
lv_objects_total = lines( it_objects ). lv_objects_total = lines( it_objects ).
CREATE OBJECT lo_progress
EXPORTING
iv_total = lv_objects_total.
LOOP AT it_objects ASSIGNING <ls_object>. LOOP AT it_objects ASSIGNING <ls_object>.
lv_objects_processed = sy-tabix. lo_progress->show(
iv_current = sy-tabix
cl_progress_indicator=>progress_indicate( i_text = |encoding objects &1% ( &2 of &3 )| iv_text = |Encoding objects ( { sy-tabix } of { lv_objects_total } )| ).
i_processed = lv_objects_processed
i_total = lv_objects_total ).
lv_xstring = type_and_length( lv_xstring = type_and_length(
iv_type = <ls_object>-type iv_type = <ls_object>-type

View File

@ -5,34 +5,35 @@ CLASS zcl_abapgit_progress DEFINITION
PUBLIC SECTION. PUBLIC SECTION.
CLASS-METHODS: METHODS show
show
IMPORTING IMPORTING
!iv_key TYPE string
VALUE(iv_current) TYPE i VALUE(iv_current) TYPE i
!iv_total TYPE i
!iv_text TYPE csequence . !iv_text TYPE csequence .
METHODS constructor
IMPORTING
!iv_total TYPE i .
PROTECTED SECTION.
PRIVATE SECTION. DATA mv_total TYPE i .
CLASS-METHODS:
calc_pct METHODS calc_pct
IMPORTING IMPORTING
!iv_current TYPE i !iv_current TYPE i
!iv_total TYPE i
RETURNING RETURNING
VALUE(rv_pct) TYPE i . VALUE(rv_pct) TYPE i .
PRIVATE SECTION.
ENDCLASS. ENDCLASS.
CLASS zcl_abapgit_progress IMPLEMENTATION. CLASS ZCL_ABAPGIT_PROGRESS IMPLEMENTATION.
METHOD calc_pct. METHOD calc_pct.
DATA: lv_f TYPE f. DATA: lv_f TYPE f.
lv_f = ( iv_current / iv_total ) * 100. lv_f = ( iv_current / mv_total ) * 100.
rv_pct = lv_f. rv_pct = lv_f.
IF rv_pct = 100. IF rv_pct = 100.
@ -42,20 +43,23 @@ CLASS zcl_abapgit_progress IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD constructor.
mv_total = iv_total.
ENDMETHOD.
METHOD show. METHOD show.
DATA: lv_pct TYPE i, DATA: lv_pct TYPE i.
lv_text TYPE string.
lv_pct = calc_pct( iv_current = iv_current lv_pct = calc_pct( iv_current ).
iv_total = iv_total ).
CONCATENATE iv_key '-' iv_text INTO lv_text SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING EXPORTING
percentage = lv_pct percentage = lv_pct
text = lv_text. text = iv_text.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -189,25 +189,27 @@ CLASS lcl_objects_activation IMPLEMENTATION.
METHOD activate_new. METHOD activate_new.
DATA: lo_progress TYPE REF TO zcl_abapgit_progress.
IF gt_objects IS INITIAL. IF gt_objects IS INITIAL.
RETURN. RETURN.
ENDIF. ENDIF.
CREATE OBJECT lo_progress
EXPORTING
iv_total = 100.
IF iv_ddic = abap_true. IF iv_ddic = abap_true.
zcl_abapgit_progress=>show( iv_key = 'Activating DDIC' lo_progress->show( iv_current = 98
iv_current = '98' iv_text = 'Activating DDIC' ).
iv_total = '100'
iv_text = '...' ).
activate_ddic( ). activate_ddic( ).
ELSE. ELSE.
zcl_abapgit_progress=>show( iv_key = 'Activating non DDIC' lo_progress->show( iv_current = 98
iv_current = '98' iv_text = 'Activating non DDIC' ).
iv_total = '100'
iv_text = '...' ).
activate_old( ). activate_old( ).

View File

@ -293,7 +293,7 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD delete. METHOD delete.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item, DATA: ls_item TYPE zif_abapgit_definitions=>ty_item,
* lv_tabclass TYPE dd02l-tabclass, lo_progress TYPE REF TO zcl_abapgit_progress,
lt_tadir LIKE it_tadir. lt_tadir LIKE it_tadir.
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF it_tadir. FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF it_tadir.
@ -302,11 +302,13 @@ CLASS lcl_objects IMPLEMENTATION.
zcl_abapgit_dependencies=>resolve( CHANGING ct_tadir = lt_tadir ). zcl_abapgit_dependencies=>resolve( CHANGING ct_tadir = lt_tadir ).
CREATE OBJECT lo_progress
EXPORTING
iv_total = lines( lt_tadir ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>. LOOP AT lt_tadir ASSIGNING <ls_tadir>.
zcl_abapgit_progress=>show( iv_key = 'Delete' lo_progress->show( iv_current = sy-tabix
iv_current = sy-tabix iv_text = |Delete { <ls_tadir>-obj_name }| ) ##NO_TEXT.
iv_total = lines( lt_tadir )
iv_text = <ls_tadir>-obj_name ) ##NO_TEXT.
CLEAR ls_item. CLEAR ls_item.
ls_item-obj_type = <ls_tadir>-object. ls_item-obj_type = <ls_tadir>-object.
@ -435,6 +437,7 @@ CLASS lcl_objects IMPLEMENTATION.
lt_ddic TYPE TABLE OF ty_deserialization, lt_ddic TYPE TABLE OF ty_deserialization,
lt_rest TYPE TABLE OF ty_deserialization, lt_rest TYPE TABLE OF ty_deserialization,
lt_late TYPE TABLE OF ty_deserialization, lt_late TYPE TABLE OF ty_deserialization,
lo_progress TYPE REF TO zcl_abapgit_progress,
lv_path TYPE string. lv_path TYPE string.
FIELD-SYMBOLS: <ls_result> TYPE zif_abapgit_definitions=>ty_result, FIELD-SYMBOLS: <ls_result> TYPE zif_abapgit_definitions=>ty_result,
@ -457,12 +460,14 @@ CLASS lcl_objects IMPLEMENTATION.
warning_overwrite( CHANGING ct_results = lt_results ). warning_overwrite( CHANGING ct_results = lt_results ).
CREATE OBJECT lo_progress
EXPORTING
iv_total = lines( lt_results ).
LOOP AT lt_results ASSIGNING <ls_result> WHERE obj_type IS NOT INITIAL LOOP AT lt_results ASSIGNING <ls_result> WHERE obj_type IS NOT INITIAL
AND NOT ( lstate = zif_abapgit_definitions=>gc_state-added AND rstate IS INITIAL ). AND NOT ( lstate = zif_abapgit_definitions=>gc_state-added AND rstate IS INITIAL ).
zcl_abapgit_progress=>show( iv_key = 'Deserialize' lo_progress->show( iv_current = sy-tabix
iv_current = sy-tabix iv_text = |Deserialize { <ls_result>-obj_name }| ) ##NO_TEXT.
iv_total = lines( lt_results )
iv_text = <ls_result>-obj_name ) ##NO_TEXT.
CLEAR ls_item. CLEAR ls_item.
ls_item-obj_type = <ls_result>-obj_type. ls_item-obj_type = <ls_result>-obj_type.
@ -546,16 +551,21 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD deserialize_objects. METHOD deserialize_objects.
DATA: lo_progress TYPE REF TO zcl_abapgit_progress.
FIELD-SYMBOLS: <ls_obj> LIKE LINE OF it_objects. FIELD-SYMBOLS: <ls_obj> LIKE LINE OF it_objects.
lcl_objects_activation=>clear( ). lcl_objects_activation=>clear( ).
CREATE OBJECT lo_progress
EXPORTING
iv_total = lines( it_objects ).
LOOP AT it_objects ASSIGNING <ls_obj>. LOOP AT it_objects ASSIGNING <ls_obj>.
zcl_abapgit_progress=>show( iv_key = |Deserialize { iv_descr }| lo_progress->show(
iv_current = sy-tabix iv_current = sy-tabix
iv_total = lines( it_objects ) iv_text = |Deserialize { iv_descr } - { <ls_obj>-item-obj_name }| ) ##NO_TEXT.
iv_text = <ls_obj>-item-obj_name ) ##NO_TEXT.
<ls_obj>-obj->deserialize( iv_package = <ls_obj>-package <ls_obj>-obj->deserialize( iv_package = <ls_obj>-package
io_xml = <ls_obj>-xml ). io_xml = <ls_obj>-xml ).

View File

@ -158,12 +158,17 @@ CLASS lcl_branch_overview IMPLEMENTATION.
METHOD get_git_objects. METHOD get_git_objects.
DATA: lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list. DATA: lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list,
lo_progress TYPE REF TO zcl_abapgit_progress.
zcl_abapgit_progress=>show( iv_key = 'Get git objects'
CREATE OBJECT lo_progress
EXPORTING
iv_total = 1.
lo_progress->show(
iv_current = 1 iv_current = 1
iv_total = 1 iv_text = |Get git objects { io_repo->get_name( ) }| ) ##NO_TEXT.
iv_text = io_repo->get_name( ) ) ##NO_TEXT.
* get objects directly from git, mo_repo only contains a shallow clone of only * get objects directly from git, mo_repo only contains a shallow clone of only
* the selected branch * the selected branch

View File

@ -346,16 +346,21 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
METHOD render_content. METHOD render_content.
DATA ls_diff_file LIKE LINE OF mt_diff_files. DATA: ls_diff_file LIKE LINE OF mt_diff_files,
lo_progress TYPE REF TO zcl_abapgit_progress.
CREATE OBJECT ro_html. CREATE OBJECT ro_html.
CREATE OBJECT lo_progress
EXPORTING
iv_total = lines( mt_diff_files ).
ro_html->add( |<div id="diff-list" data-repo-key="{ mv_repo_key }">| ). ro_html->add( |<div id="diff-list" data-repo-key="{ mv_repo_key }">| ).
ro_html->add( lcl_gui_chunk_lib=>render_js_error_banner( ) ). ro_html->add( lcl_gui_chunk_lib=>render_js_error_banner( ) ).
LOOP AT mt_diff_files INTO ls_diff_file. LOOP AT mt_diff_files INTO ls_diff_file.
zcl_abapgit_progress=>show( iv_key = 'Diff' lo_progress->show(
iv_current = sy-tabix iv_current = sy-tabix
iv_total = lines( mt_diff_files )
iv_text = |Render Diff - { ls_diff_file-filename }| ). iv_text = |Render Diff - { ls_diff_file-filename }| ).
ro_html->add( render_diff( ls_diff_file ) ). ro_html->add( render_diff( ls_diff_file ) ).

View File

@ -70,15 +70,18 @@ CLASS lcl_repo_online IMPLEMENTATION.
METHOD refresh. METHOD refresh.
DATA: lx_exception TYPE REF TO zcx_abapgit_exception. DATA: lo_progress TYPE REF TO zcl_abapgit_progress,
lx_exception TYPE REF TO zcx_abapgit_exception.
super->refresh( iv_drop_cache ). super->refresh( iv_drop_cache ).
reset_status( ). reset_status( ).
zcl_abapgit_progress=>show( iv_key = 'Fetch' CREATE OBJECT lo_progress
iv_current = 1 EXPORTING
iv_total = 1 iv_total = 1.
iv_text = 'Remote files' ) ##NO_TEXT.
lo_progress->show( iv_current = 1
iv_text = 'Fetch remote files' ) ##NO_TEXT.
TRY. TRY.
@ -602,6 +605,7 @@ CLASS lcl_repo IMPLEMENTATION.
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt, DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
ls_item TYPE zif_abapgit_definitions=>ty_item, ls_item TYPE zif_abapgit_definitions=>ty_item,
lt_files TYPE zif_abapgit_definitions=>ty_files_tt, lt_files TYPE zif_abapgit_definitions=>ty_files_tt,
lo_progress TYPE REF TO zcl_abapgit_progress,
lt_cache TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_file_item lt_cache TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_file_item
WITH NON-UNIQUE KEY item. WITH NON-UNIQUE KEY item.
@ -638,6 +642,10 @@ CLASS lcl_repo IMPLEMENTATION.
lt_filter = it_filter. lt_filter = it_filter.
lv_filter_exist = boolc( lines( lt_filter ) > 0 ). lv_filter_exist = boolc( lines( lt_filter ) > 0 ).
CREATE OBJECT lo_progress
EXPORTING
iv_total = lines( lt_tadir ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>. LOOP AT lt_tadir ASSIGNING <ls_tadir>.
IF lv_filter_exist = abap_true. IF lv_filter_exist = abap_true.
READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = <ls_tadir>-object READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = <ls_tadir>-object
@ -648,10 +656,9 @@ CLASS lcl_repo IMPLEMENTATION.
ENDIF. ENDIF.
ENDIF. ENDIF.
zcl_abapgit_progress=>show( iv_key = 'Serialize' lo_progress->show(
iv_current = sy-tabix iv_current = sy-tabix
iv_total = lines( lt_tadir ) iv_text = |Serialize { <ls_tadir>-obj_name }| ) ##NO_TEXT.
iv_text = <ls_tadir>-obj_name ) ##NO_TEXT.
ls_item-obj_type = <ls_tadir>-object. ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name. ls_item-obj_name = <ls_tadir>-obj_name.