From 1ad16a03fe2c768d3a95eafe4f816b9e0c6b2ae9 Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Mon, 18 Mar 2019 16:58:34 +0200 Subject: [PATCH] SCI page deisgn (#2542) * codeinsp design, phase 1 * fix alpha_output * final design --- src/ui/zabapgit_css_common.w3mi.data.css | 40 +++++ .../zcl_abapgit_gui_page_code_insp.clas.abap | 29 ++-- .../zcl_abapgit_gui_page_codi_base.clas.abap | 145 ++++++++++-------- src/ui/zcl_abapgit_gui_page_main.clas.abap | 5 + src/utils/zcl_abapgit_convert.clas.abap | 18 +++ .../zcl_abapgit_convert.clas.testclasses.abap | 16 ++ 6 files changed, 178 insertions(+), 75 deletions(-) diff --git a/src/ui/zabapgit_css_common.w3mi.data.css b/src/ui/zabapgit_css_common.w3mi.data.css index b92624fdc..2d151d656 100644 --- a/src/ui/zabapgit_css_common.w3mi.data.css +++ b/src/ui/zabapgit_css_common.w3mi.data.css @@ -1013,3 +1013,43 @@ table.commit tr .title { width:1000px; height: 20px; } + +/* code inspector */ +.ci-head { + background-color: #f2f2f2; + padding: 0.5em 1em; +} +.ci-head .package-name span { + margin-left: 0.3em; + color: grey; +} +.ci-variant { + font-weight: bold; + color: #444; +} +.ci-result { + background-color: #f6f6f6; + padding: 6px; + margin-top: 4px; +} +.ci-result li { + list-style-type: none; + padding: 0.3em 0.8em; + margin-top: 6px; + color: #444; +} +.ci-result li:first-child { + margin-top: 0px; +} +.ci-result li.ci-error { + border-left: 4px solid #cd5353; +} +.ci-result li.ci-warning { + border-left: 4px solid #ecd227; +} +.ci-result li.ci-info { + border-left: 4px solid #acacac; +} +.ci-result li span { + display: block; +} diff --git a/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap b/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap index 6a6fae4c4..86ba1c71c 100644 --- a/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap @@ -188,27 +188,28 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODE_INSP IMPLEMENTATION. CREATE OBJECT ro_html. IF mv_check_variant IS INITIAL. - ro_html->add( |No check variant supplied.| ). + ro_html->add( zcl_abapgit_gui_chunk_lib=>render_error( iv_error = 'No check variant supplied.' ) ). RETURN. ENDIF. - ro_html->add( '

' ). - - ro_html->add( |Code inspector check variant: { - mv_check_variant - }
| ). + ro_html->add( '
' ). + ro_html->add( |Code inspector check variant: { mv_check_variant }| ). + ro_html->add( |
{ + zcl_abapgit_html=>icon( 'box/grey70' ) }{ + mo_repo->get_package( ) }
| ). + ro_html->add( '
' ). IF lines( mt_result ) = 0. - ro_html->add( '
No code inspector findings
' ). + ro_html->add( '
' ). + ro_html->add( zcl_abapgit_html=>icon( 'check' ) ). + ro_html->add( 'No code inspector findings' ). + ro_html->add( '
' ). + ELSE. + render_result( + io_html = ro_html + it_result = mt_result ). ENDIF. - ro_html->add( |
| ). - - render_result( io_html = ro_html - it_result = mt_result ). - - ro_html->add( '
' ). - ENDMETHOD. diff --git a/src/ui/zcl_abapgit_gui_page_codi_base.clas.abap b/src/ui/zcl_abapgit_gui_page_codi_base.clas.abap index 8c20e50e9..8e8c9729f 100644 --- a/src/ui/zcl_abapgit_gui_page_codi_base.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_codi_base.clas.abap @@ -13,6 +13,15 @@ CLASS zcl_abapgit_gui_page_codi_base DEFINITION PUBLIC ABSTRACT INHERITING FROM IMPORTING !io_html TYPE REF TO zcl_abapgit_html !it_result TYPE scit_alvlist . + METHODS render_result_line + IMPORTING + !io_html TYPE REF TO zcl_abapgit_html + !is_result TYPE scir_alvlist . + METHODS build_nav_link + IMPORTING + !is_result TYPE scir_alvlist + RETURNING + VALUE(rv_link) TYPE string. METHODS jump IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item @@ -21,7 +30,8 @@ CLASS zcl_abapgit_gui_page_codi_base DEFINITION PUBLIC ABSTRACT INHERITING FROM RAISING zcx_abapgit_exception . PRIVATE SECTION. - CONSTANTS: c_object_separator TYPE char1 VALUE '|'. + CONSTANTS c_object_separator TYPE char1 VALUE '|'. + CONSTANTS c_ci_sig TYPE string VALUE 'cinav:'. ENDCLASS. @@ -30,6 +40,16 @@ ENDCLASS. CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION. + METHOD build_nav_link. + + rv_link = |{ c_ci_sig }| && + |{ is_result-objtype }{ is_result-objname }| && + |{ c_object_separator }{ is_result-sobjtype }{ is_result-sobjname }| && + |{ c_object_separator }{ is_result-line }|. + + ENDMETHOD. + + METHOD jump. DATA: lo_test TYPE REF TO cl_ci_test_root, @@ -103,94 +123,97 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION. METHOD render_result. CONSTANTS: lc_limit TYPE i VALUE 500. - - DATA: lv_class TYPE string, - lv_line TYPE string. - FIELD-SYMBOLS: TYPE scir_alvlist. + io_html->add( '
' ). LOOP AT it_result ASSIGNING TO lc_limit. - - io_html->add( '
' ). - IF -sobjname IS INITIAL OR - ( -sobjname = -objname AND - -sobjtype = -sobjtype ). - io_html->add_a( iv_txt = |{ -objtype } { -objname }| - iv_act = |{ -objtype }{ -objname }| && - |{ c_object_separator }{ c_object_separator }{ -line }| - iv_typ = zif_abapgit_html=>c_action_type-sapevent ). - - ELSE. - io_html->add_a( iv_txt = |{ -objtype } { -objname }| && - | < { -sobjtype } { -sobjname }| - iv_act = |{ -objtype }{ -objname }| && - |{ c_object_separator }{ -sobjtype }{ -sobjname }| && - |{ c_object_separator }{ -line }| - iv_typ = zif_abapgit_html=>c_action_type-sapevent ). - - ENDIF. - io_html->add( '
' ). - - CASE -kind. - WHEN 'E'. - lv_class = 'error'. - WHEN 'W'. - lv_class = 'warning'. - WHEN OTHERS. - lv_class = 'grey'. - ENDCASE. - - CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' - EXPORTING - input = -line - IMPORTING - output = lv_line. - - io_html->add( |
Line { lv_line }: { -text }

| ). - + render_result_line( + io_html = io_html + is_result = ). ENDLOOP. + io_html->add( '
' ). + IF lines( it_result ) > lc_limit. + io_html->add( '
' ). + io_html->add( zcl_abapgit_html=>icon( 'exclamation-triangle' ) ). io_html->add( |Only first { lc_limit } findings shown in list!| ). + io_html->add( '
' ). ENDIF. ENDMETHOD. + METHOD render_result_line. + + DATA: lv_class TYPE string, + lv_obj_txt TYPE string, + lv_msg TYPE string. + + CASE is_result-kind. + WHEN 'E'. + lv_class = 'ci-error'. + WHEN 'W'. + lv_class = 'ci-warning'. + WHEN OTHERS. + lv_class = 'ci-info'. + ENDCASE. + + lv_msg = escape( val = is_result-text format = cl_abap_format=>e_html_attr ). + + IF is_result-sobjname IS INITIAL OR + ( is_result-sobjname = is_result-objname AND + is_result-sobjtype = is_result-sobjtype ). + lv_obj_txt = |{ is_result-objtype } { is_result-objname }|. + ELSE. + lv_obj_txt = |{ is_result-objtype } { is_result-objname } > { is_result-sobjtype } { is_result-sobjname }|. + ENDIF. + lv_obj_txt = |{ lv_obj_txt } [ @{ zcl_abapgit_convert=>alpha_output( is_result-line ) } ]|. + + io_html->add( |
  • | ). + io_html->add_a( + iv_txt = lv_obj_txt + iv_act = build_nav_link( is_result ) + iv_typ = zif_abapgit_html=>c_action_type-sapevent ). + io_html->add( |{ lv_msg }| ). + io_html->add( '
  • ' ). + + ENDMETHOD. + + METHOD zif_abapgit_gui_page~on_event. DATA: ls_item TYPE zif_abapgit_definitions=>ty_item, ls_sub_item TYPE zif_abapgit_definitions=>ty_item, + lv_temp TYPE string, lv_main_object TYPE string, lv_sub_object TYPE string, lv_line_number_s TYPE string, lv_line_number TYPE i. + lv_temp = iv_action. + SHIFT lv_temp LEFT DELETING LEADING c_ci_sig. - CASE iv_action. + IF lv_temp <> iv_action. " CI navigation request detected - WHEN zif_abapgit_definitions=>c_action-abapgit_home. - RETURN. + SPLIT lv_temp AT c_object_separator INTO lv_main_object lv_sub_object lv_line_number_s. + ls_item-obj_type = lv_main_object(4). + ls_item-obj_name = lv_main_object+4(*). - WHEN OTHERS. - SPLIT iv_action AT c_object_separator INTO lv_main_object lv_sub_object lv_line_number_s. - ls_item-obj_type = lv_main_object(4). - ls_item-obj_name = lv_main_object+4(*). + IF lv_sub_object IS NOT INITIAL. + ls_sub_item-obj_type = lv_sub_object(4). + ls_sub_item-obj_name = lv_sub_object+4(*). + ENDIF. - IF lv_sub_object IS NOT INITIAL. - ls_sub_item-obj_type = lv_sub_object(4). - ls_sub_item-obj_name = lv_sub_object+4(*). - ENDIF. + lv_line_number = lv_line_number_s. - lv_line_number = lv_line_number_s. + jump( is_item = ls_item + is_sub_item = ls_sub_item + iv_line_number = lv_line_number ). - jump( is_item = ls_item - is_sub_item = ls_sub_item - iv_line_number = lv_line_number ). + ev_state = zcl_abapgit_gui=>c_event_state-no_more_act. - ev_state = zcl_abapgit_gui=>c_event_state-no_more_act. - - ENDCASE. + ENDIF. ENDMETHOD. ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_main.clas.abap b/src/ui/zcl_abapgit_gui_page_main.clas.abap index 69caab11f..d6be14628 100644 --- a/src/ui/zcl_abapgit_gui_page_main.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_main.clas.abap @@ -356,6 +356,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION. ls_hotkey_action-default_hotkey = |d|. INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + ls_hotkey_action-name = |Run code inspector|. + ls_hotkey_action-action = zif_abapgit_definitions=>c_action-repo_code_inspector. + ls_hotkey_action-default_hotkey = |i|. + INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + ENDMETHOD. diff --git a/src/utils/zcl_abapgit_convert.clas.abap b/src/utils/zcl_abapgit_convert.clas.abap index 83790b725..311de841e 100644 --- a/src/utils/zcl_abapgit_convert.clas.abap +++ b/src/utils/zcl_abapgit_convert.clas.abap @@ -46,6 +46,11 @@ CLASS zcl_abapgit_convert DEFINITION iv_spras TYPE spras RETURNING VALUE(rv_spras) TYPE laiso. + CLASS-METHODS alpha_output + IMPORTING + iv_val TYPE clike + RETURNING + VALUE(rv_str) TYPE string. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -55,6 +60,19 @@ ENDCLASS. CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION. + METHOD alpha_output. + + CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' + EXPORTING + input = iv_val + IMPORTING + output = rv_str. + + CONDENSE rv_str. + + ENDMETHOD. + + METHOD bitbyte_to_int. DATA: lv_bitbyte TYPE string, diff --git a/src/utils/zcl_abapgit_convert.clas.testclasses.abap b/src/utils/zcl_abapgit_convert.clas.testclasses.abap index 4dd58dc92..ba4bb8e84 100644 --- a/src/utils/zcl_abapgit_convert.clas.testclasses.abap +++ b/src/utils/zcl_abapgit_convert.clas.testclasses.abap @@ -9,6 +9,7 @@ CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FIN METHODS convert_int FOR TESTING RAISING zcx_abapgit_exception. METHODS split_string FOR TESTING. METHODS convert_bitbyte FOR TESTING RAISING zcx_abapgit_exception. + METHODS alpha_output FOR TESTING. ENDCLASS. @@ -19,6 +20,21 @@ ENDCLASS. *----------------------------------------------------------------------* CLASS ltcl_convert IMPLEMENTATION. + METHOD alpha_output. + + DATA lv_alpha TYPE c LENGTH 10 VALUE '0000001234'. + DATA lv_numc TYPE n LENGTH 6 VALUE '001234'. + + cl_abap_unit_assert=>assert_equals( + act = zcl_abapgit_convert=>alpha_output( lv_alpha ) + exp = '1234' ). + + cl_abap_unit_assert=>assert_equals( + act = zcl_abapgit_convert=>alpha_output( lv_numc ) + exp = '1234' ). + + ENDMETHOD. + METHOD convert_bitbyte. DATA: lv_xstring TYPE xstring,