From a2fd6092d279dfcc0725aa93a10d7cb3030fa864 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 18 Mar 2017 15:17:46 +0100 Subject: [PATCH 1/7] Requirements to software components in .abapgit.xml --- src/zabapgit.prog.abap | 1 + src/zabapgit_dot_abapgit.prog.abap | 9 +- src/zabapgit_repo_impl.prog.abap | 7 +- src/zabapgit_requirements.prog.abap | 229 ++++++++++++++++++++++++++++ src/zabapgit_requirements.prog.xml | 25 +++ 5 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 src/zabapgit_requirements.prog.abap create mode 100644 src/zabapgit_requirements.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 679013375..a055e6d56 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -49,6 +49,7 @@ INCLUDE zabapgit_dot_abapgit. INCLUDE zabapgit_persistence. INCLUDE zabapgit_sap_package. INCLUDE zabapgit_folder_logic. +INCLUDE zabapgit_requirements. INCLUDE zabapgit_stage. INCLUDE zabapgit_git_helpers. diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index ee93e0270..833299f93 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -12,11 +12,18 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit. full TYPE string VALUE 'FULL', END OF c_folder_logic. - TYPES: BEGIN OF ty_dot_abapgit, + TYPES: BEGIN OF ty_requirement, + component TYPE dlvunit, + min_release TYPE saprelease, + min_patch TYPE sappatchlv, + END OF ty_requirement, + ty_requirement_tab TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY, + BEGIN OF ty_dot_abapgit, master_language TYPE spras, starting_folder TYPE string, folder_logic TYPE string, ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY, + requirements TYPE ty_requirement_tab, END OF ty_dot_abapgit. CLASS-METHODS: diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 9bfbe772a..bfddd093a 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -477,7 +477,8 @@ CLASS lcl_repo IMPLEMENTATION. METHOD deserialize. DATA: lt_updated_files TYPE ty_file_signatures_tt, - lo_dot_abapgit TYPE REF TO lcl_dot_abapgit. + lo_dot_abapgit TYPE REF TO lcl_dot_abapgit, + lt_requirements TYPE STANDARD TABLE OF lcl_dot_abapgit=>ty_requirement. IF get_dot_abapgit( )->get_master_language( ) <> sy-langu. @@ -487,6 +488,10 @@ CLASS lcl_repo IMPLEMENTATION. lo_dot_abapgit = find_remote_dot_abapgit( ). IF lo_dot_abapgit IS BOUND. set_dot_abapgit( lo_dot_abapgit ). + + " Check if requirements are met + lt_requirements = lo_dot_abapgit->get_data( )-requirements. + lcl_requirement_helper=>check_requirements( lt_requirements ). ENDIF. lt_updated_files = lcl_objects=>deserialize( me ). diff --git a/src/zabapgit_requirements.prog.abap b/src/zabapgit_requirements.prog.abap new file mode 100644 index 000000000..a23bbe596 --- /dev/null +++ b/src/zabapgit_requirements.prog.abap @@ -0,0 +1,229 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_requirements +*&---------------------------------------------------------------------* + +"! Helper class for checking requirements / dependencies +CLASS lcl_requirement_helper DEFINITION FINAL. + PUBLIC SECTION. + TYPES: + BEGIN OF gty_status, + met TYPE abap_bool, + component TYPE dlvunit, + description TYPE text80, + installed_release TYPE saprelease, + installed_patch TYPE sappatchlv, + required_release TYPE saprelease, + required_patch TYPE sappatchlv, + END OF gty_status, + gty_status_tab TYPE STANDARD TABLE OF gty_status WITH DEFAULT KEY. + CLASS-METHODS: + "! Check if the given requirements are met with user interaction + "!

+ "! Shows a popup if requested and asks the user if he wants to continue if there are unmet + "! requirements. If not an exception is raised. + "!

+ "! @parameter it_requirements | The requirements to check + "! @parameter iv_show_popup | Show popup with requirements + "! @raising lcx_exception | Cancelled by user or internal error + check_requirements IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tab + iv_show_popup TYPE abap_bool DEFAULT abap_true + RAISING lcx_exception, + "! Get a table with information about each requirement + "! @parameter it_requirements | Requirements + "! @parameter rt_status | Result + "! @raising lcx_exception | Internal error + get_requirement_met_status IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tab + RETURNING VALUE(rt_status) TYPE gty_status_tab + RAISING lcx_exception. + PROTECTED SECTION. + PRIVATE SECTION. + CLASS-METHODS: + show_requirement_popup IMPORTING it_requirements TYPE gty_status_tab + RAISING lcx_exception, + version_greater_or_equal IMPORTING is_status TYPE gty_status + RETURNING VALUE(rv_true) TYPE abap_bool. +ENDCLASS. + +CLASS lcl_requirement_helper IMPLEMENTATION. + METHOD check_requirements. + DATA: lt_met_status TYPE gty_status_tab, + lv_answer TYPE c LENGTH 1. + + lt_met_status = get_requirement_met_status( it_requirements ). + + IF iv_show_popup = abap_true. + show_requirement_popup( lt_met_status ). + ENDIF. + + LOOP AT lt_met_status TRANSPORTING NO FIELDS WHERE met = abap_false. + EXIT. + ENDLOOP. + + IF sy-subrc = 0. + CALL FUNCTION 'POPUP_TO_CONFIRM' + EXPORTING + text_question = 'The project has unmet requirements. Install anyways?' + IMPORTING + answer = lv_answer. + IF lv_answer <> '1'. + lcx_exception=>raise( 'Cancelling because of unmet requirements.' ). + ENDIF. + ENDIF. + ENDMETHOD. + + METHOD get_requirement_met_status. + DATA: lt_installed TYPE STANDARD TABLE OF cvers_sdu. + FIELD-SYMBOLS: TYPE lcl_dot_abapgit=>ty_requirement, + TYPE gty_status, + TYPE cvers_sdu. + + CALL FUNCTION 'DELIVERY_GET_INSTALLED_COMPS' + TABLES + tt_comptab = lt_installed + EXCEPTIONS + no_release_found = 1 + OTHERS = 2. + IF sy-subrc <> 0. + lcx_exception=>raise( |Error from DELIVERY_GET_INSTALLED_COMPS { sy-subrc }| ) ##NO_TEXT. + ENDIF. + + LOOP AT it_requirements ASSIGNING . + APPEND INITIAL LINE TO rt_status ASSIGNING . + -component = -component. + -required_release = -min_release. + -required_patch = -min_patch. + + READ TABLE lt_installed WITH KEY component = -component + ASSIGNING . + IF sy-subrc = 0. + -installed_release = -release. + -installed_patch = -extrelease. + -description = -desc_text. + + -met = version_greater_or_equal( ). + ENDIF. + + UNASSIGN . + ENDLOOP. + ENDMETHOD. + + METHOD version_greater_or_equal. + DATA: lv_number TYPE numc4. + + TRY. + MOVE EXACT: is_status-installed_release TO lv_number, + is_status-installed_patch TO lv_number, + is_status-required_release TO lv_number, + is_status-required_patch TO lv_number. + CATCH cx_sy_conversion_error. + " Cannot compare by number, assume requirement not fullfilled (user can force install + " anyways if this was an error) + rv_true = abap_false. + RETURN. + ENDTRY. + + " Check if versions are comparable by number + IF is_status-installed_release > is_status-required_release + OR ( is_status-installed_release = is_status-required_release + AND ( is_status-required_patch IS INITIAL OR + is_status-installed_patch >= is_status-required_patch ) ). + + rv_true = abap_true. + ENDIF. + ENDMETHOD. + + METHOD show_requirement_popup. + CONSTANTS: lc_color_column_name TYPE lvc_fname VALUE 'COLOR'. + DATA: lo_alv TYPE REF TO cl_salv_table, + lo_column TYPE REF TO cl_salv_column, + lr_colored_table TYPE REF TO data, + lo_tab_descr TYPE REF TO cl_abap_tabledescr, + lo_struct_descr TYPE REF TO cl_abap_structdescr, + lo_enh_struct_descr TYPE REF TO cl_abap_structdescr, + lo_enh_tab_descr TYPE REF TO cl_abap_tabledescr, + lt_comps TYPE cl_abap_structdescr=>component_table, + lt_color_neg TYPE lvc_t_scol, + lt_color_pos TYPE lvc_t_scol, + ls_color TYPE lvc_s_scol, + lx_ex TYPE REF TO cx_root. + FIELD-SYMBOLS: TYPE abap_componentdescr, + TYPE STANDARD TABLE, + TYPE data, + TYPE lvc_t_scol, + TYPE abap_bool. + + ls_color-color-col = col_negative. + APPEND ls_color TO lt_color_neg. + + ls_color-color-col = col_positive. + APPEND ls_color TO lt_color_pos. + + CLEAR ls_color. + + lo_tab_descr ?= cl_abap_typedescr=>describe_by_data( it_requirements ). + lo_struct_descr ?= lo_tab_descr->get_table_line_type( ). + lt_comps = lo_struct_descr->get_components( ). + APPEND INITIAL LINE TO lt_comps ASSIGNING . + -name = lc_color_column_name. + -type ?= cl_abap_typedescr=>describe_by_name( 'LVC_T_SCOL' ). + lo_enh_struct_descr = cl_abap_structdescr=>get( lt_comps ). + lo_enh_tab_descr = cl_abap_tabledescr=>get( lo_enh_struct_descr ). + + CREATE DATA lr_colored_table TYPE HANDLE lo_enh_tab_descr. + ASSERT lr_colored_table IS BOUND. + ASSIGN lr_colored_table->* TO . + ASSERT IS ASSIGNED. + + MOVE-CORRESPONDING it_requirements TO . + + LOOP AT ASSIGNING . + ASSIGN COMPONENT 'MET' OF STRUCTURE TO . + ASSERT IS ASSIGNED. + ASSIGN COMPONENT lc_color_column_name OF STRUCTURE TO . + ASSERT IS ASSIGNED. + IF = abap_false. + = lt_color_neg. + ELSE. + = lt_color_pos. + ENDIF. + UNASSIGN: , . + ENDLOOP. + UNASSIGN . + + TRY. + cl_salv_table=>factory( + IMPORTING + r_salv_table = lo_alv + CHANGING + t_table = + ). + + lo_alv->get_columns(: + )->get_column( 'MET' )->set_short_text( 'Met' ), + )->set_color_column( lc_color_column_name ), + )->set_optimize( ), + ). + + lo_column = lo_alv->get_columns( )->get_column( 'REQUIRED_RELEASE' ). + lo_column->set_fixed_header_text( 'S'). + lo_column->set_short_text( 'Req. Rel.' ). + + lo_column = lo_alv->get_columns( )->get_column( 'REQUIRED_PATCH' ). + lo_column->set_fixed_header_text( 'S'). + lo_column->set_short_text( 'Req. SP L.' ). + + lo_alv->set_screen_popup( start_column = 30 + end_column = 100 + start_line = 10 + end_line = 20 ). + lo_alv->get_display_settings( )->set_list_header( 'Requirements' ). + lo_alv->display( ). + + CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error INTO lx_ex. + RAISE EXCEPTION TYPE lcx_exception + EXPORTING + iv_text = lx_ex->get_text( ) + ix_previous = lx_ex. + ENDTRY. + ENDMETHOD. +ENDCLASS. diff --git a/src/zabapgit_requirements.prog.xml b/src/zabapgit_requirements.prog.xml new file mode 100644 index 000000000..6b4225a08 --- /dev/null +++ b/src/zabapgit_requirements.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_REQUIREMENTS + A + X + S + D$ + I + X + D$S + X + + + + R + ZABAPGIT_REQUIREMENTS + 21 + + + + + From 0aba096bc7ddc101dc07b6d8aade064acb0ff56a Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 18 Mar 2017 15:28:10 +0100 Subject: [PATCH 2/7] Remove unnecessary dynamic typing --- src/zabapgit_requirements.prog.abap | 66 +++++++++-------------------- 1 file changed, 21 insertions(+), 45 deletions(-) diff --git a/src/zabapgit_requirements.prog.abap b/src/zabapgit_requirements.prog.abap index a23bbe596..17cd4a6b2 100644 --- a/src/zabapgit_requirements.prog.abap +++ b/src/zabapgit_requirements.prog.abap @@ -133,24 +133,19 @@ CLASS lcl_requirement_helper IMPLEMENTATION. ENDMETHOD. METHOD show_requirement_popup. - CONSTANTS: lc_color_column_name TYPE lvc_fname VALUE 'COLOR'. - DATA: lo_alv TYPE REF TO cl_salv_table, - lo_column TYPE REF TO cl_salv_column, - lr_colored_table TYPE REF TO data, - lo_tab_descr TYPE REF TO cl_abap_tabledescr, - lo_struct_descr TYPE REF TO cl_abap_structdescr, - lo_enh_struct_descr TYPE REF TO cl_abap_structdescr, - lo_enh_tab_descr TYPE REF TO cl_abap_tabledescr, - lt_comps TYPE cl_abap_structdescr=>component_table, - lt_color_neg TYPE lvc_t_scol, - lt_color_pos TYPE lvc_t_scol, - ls_color TYPE lvc_s_scol, - lx_ex TYPE REF TO cx_root. - FIELD-SYMBOLS: TYPE abap_componentdescr, - TYPE STANDARD TABLE, - TYPE data, - TYPE lvc_t_scol, - TYPE abap_bool. + TYPES: BEGIN OF lty_color_line, + color TYPE lvc_t_scol. + INCLUDE TYPE gty_status. + TYPES: END OF lty_color_line, + lty_color_tab TYPE STANDARD TABLE OF lty_color_line WITH DEFAULT KEY. + DATA: lo_alv TYPE REF TO cl_salv_table, + lo_column TYPE REF TO cl_salv_column, + lt_color_table TYPE lty_color_tab, + lt_color_neg TYPE lvc_t_scol, + lt_color_pos TYPE lvc_t_scol, + ls_color TYPE lvc_s_scol, + lx_ex TYPE REF TO cx_root. + FIELD-SYMBOLS: TYPE lty_color_line. ls_color-color-col = col_negative. APPEND ls_color TO lt_color_neg. @@ -160,47 +155,28 @@ CLASS lcl_requirement_helper IMPLEMENTATION. CLEAR ls_color. - lo_tab_descr ?= cl_abap_typedescr=>describe_by_data( it_requirements ). - lo_struct_descr ?= lo_tab_descr->get_table_line_type( ). - lt_comps = lo_struct_descr->get_components( ). - APPEND INITIAL LINE TO lt_comps ASSIGNING . - -name = lc_color_column_name. - -type ?= cl_abap_typedescr=>describe_by_name( 'LVC_T_SCOL' ). - lo_enh_struct_descr = cl_abap_structdescr=>get( lt_comps ). - lo_enh_tab_descr = cl_abap_tabledescr=>get( lo_enh_struct_descr ). + MOVE-CORRESPONDING it_requirements TO lt_color_table. - CREATE DATA lr_colored_table TYPE HANDLE lo_enh_tab_descr. - ASSERT lr_colored_table IS BOUND. - ASSIGN lr_colored_table->* TO . - ASSERT IS ASSIGNED. - - MOVE-CORRESPONDING it_requirements TO . - - LOOP AT ASSIGNING . - ASSIGN COMPONENT 'MET' OF STRUCTURE TO . - ASSERT IS ASSIGNED. - ASSIGN COMPONENT lc_color_column_name OF STRUCTURE TO . - ASSERT IS ASSIGNED. - IF = abap_false. - = lt_color_neg. + LOOP AT lt_color_table ASSIGNING . + IF -met = abap_false. + -color = lt_color_neg. ELSE. - = lt_color_pos. + -color = lt_color_pos. ENDIF. - UNASSIGN: , . ENDLOOP. - UNASSIGN . + UNASSIGN . TRY. cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv CHANGING - t_table = + t_table = lt_color_table ). lo_alv->get_columns(: )->get_column( 'MET' )->set_short_text( 'Met' ), - )->set_color_column( lc_color_column_name ), + )->set_color_column( 'COLOR' ), )->set_optimize( ), ). From d94ed4798ff55978f258703241c7449bd96f5a1d Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 18 Mar 2017 16:11:12 +0100 Subject: [PATCH 3/7] Do not check requirements if there are none --- src/zabapgit_repo_impl.prog.abap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index bfddd093a..c4f9c2d69 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -491,7 +491,9 @@ CLASS lcl_repo IMPLEMENTATION. " Check if requirements are met lt_requirements = lo_dot_abapgit->get_data( )-requirements. - lcl_requirement_helper=>check_requirements( lt_requirements ). + IF lt_requirements IS NOT INITIAL. + lcl_requirement_helper=>check_requirements( lt_requirements ). + ENDIF. ENDIF. lt_updated_files = lcl_objects=>deserialize( me ). From 71f74f7752519f699de2c03626d6f21ab2fa806b Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 18 Mar 2017 16:16:07 +0100 Subject: [PATCH 4/7] Apply requested changes from code review --- src/zabapgit_requirements.prog.abap | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/zabapgit_requirements.prog.abap b/src/zabapgit_requirements.prog.abap index 17cd4a6b2..9e3cea8e6 100644 --- a/src/zabapgit_requirements.prog.abap +++ b/src/zabapgit_requirements.prog.abap @@ -140,6 +140,7 @@ CLASS lcl_requirement_helper IMPLEMENTATION. lty_color_tab TYPE STANDARD TABLE OF lty_color_line WITH DEFAULT KEY. DATA: lo_alv TYPE REF TO cl_salv_table, lo_column TYPE REF TO cl_salv_column, + lo_columns TYPE REF TO cl_salv_columns_table, lt_color_table TYPE lty_color_tab, lt_color_neg TYPE lvc_t_scol, lt_color_pos TYPE lvc_t_scol, @@ -174,17 +175,16 @@ CLASS lcl_requirement_helper IMPLEMENTATION. t_table = lt_color_table ). - lo_alv->get_columns(: - )->get_column( 'MET' )->set_short_text( 'Met' ), - )->set_color_column( 'COLOR' ), - )->set_optimize( ), - ). + lo_columns = lo_alv->get_columns( ). + lo_columns->get_column( 'MET' )->set_short_text( 'Met' ). + lo_columns->set_color_column( 'COLOR' ). + lo_columns->set_optimize( ). - lo_column = lo_alv->get_columns( )->get_column( 'REQUIRED_RELEASE' ). + lo_column = lo_columns->get_column( 'REQUIRED_RELEASE' ). lo_column->set_fixed_header_text( 'S'). lo_column->set_short_text( 'Req. Rel.' ). - lo_column = lo_alv->get_columns( )->get_column( 'REQUIRED_PATCH' ). + lo_column = lo_columns->get_column( 'REQUIRED_PATCH' ). lo_column->set_fixed_header_text( 'S'). lo_column->set_short_text( 'Req. SP L.' ). From 127e368fa124c4bde974d5785442a1e75325f1f4 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 18 Mar 2017 16:19:42 +0100 Subject: [PATCH 5/7] Fix code style --- src/zabapgit_requirements.prog.abap | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/zabapgit_requirements.prog.abap b/src/zabapgit_requirements.prog.abap index 9e3cea8e6..668e43277 100644 --- a/src/zabapgit_requirements.prog.abap +++ b/src/zabapgit_requirements.prog.abap @@ -168,12 +168,8 @@ CLASS lcl_requirement_helper IMPLEMENTATION. UNASSIGN . TRY. - cl_salv_table=>factory( - IMPORTING - r_salv_table = lo_alv - CHANGING - t_table = lt_color_table - ). + cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv + CHANGING t_table = lt_color_table ). lo_columns = lo_alv->get_columns( ). lo_columns->get_column( 'MET' )->set_short_text( 'Met' ). From 90a8a7f68ddefb6d6230b3ad9a39f4836f9de808 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 18 Mar 2017 18:59:36 +0100 Subject: [PATCH 6/7] Suppress empty tags in .abapgit.xml --- src/zabapgit_dot_abapgit.prog.abap | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index 833299f93..f1096cbcc 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -142,6 +142,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. METHOD to_xml. CALL TRANSFORMATION id + OPTIONS initial_components = 'suppress' SOURCE data = is_data RESULT XML rv_xml. From 705fa2821216a0588ad9937788b56d19fdd4d97a Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sun, 19 Mar 2017 15:19:04 +0100 Subject: [PATCH 7/7] Requirements: cleanup and code review changes --- src/zabapgit_dot_abapgit.prog.abap | 4 +-- src/zabapgit_repo_impl.prog.abap | 4 +-- src/zabapgit_requirements.prog.abap | 56 +++++++++++++++-------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index f1096cbcc..5588dfbfb 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -17,13 +17,13 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit. min_release TYPE saprelease, min_patch TYPE sappatchlv, END OF ty_requirement, - ty_requirement_tab TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY, + ty_requirement_tt TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY, BEGIN OF ty_dot_abapgit, master_language TYPE spras, starting_folder TYPE string, folder_logic TYPE string, ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY, - requirements TYPE ty_requirement_tab, + requirements TYPE ty_requirement_tt, END OF ty_dot_abapgit. CLASS-METHODS: diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index c4f9c2d69..0e106dc63 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -489,10 +489,10 @@ CLASS lcl_repo IMPLEMENTATION. IF lo_dot_abapgit IS BOUND. set_dot_abapgit( lo_dot_abapgit ). - " Check if requirements are met lt_requirements = lo_dot_abapgit->get_data( )-requirements. IF lt_requirements IS NOT INITIAL. - lcl_requirement_helper=>check_requirements( lt_requirements ). + lcl_requirement_helper=>check_requirements( it_requirements = lt_requirements + iv_show_popup = abap_true ). ENDIF. ENDIF. diff --git a/src/zabapgit_requirements.prog.abap b/src/zabapgit_requirements.prog.abap index 668e43277..250d56819 100644 --- a/src/zabapgit_requirements.prog.abap +++ b/src/zabapgit_requirements.prog.abap @@ -6,7 +6,7 @@ CLASS lcl_requirement_helper DEFINITION FINAL. PUBLIC SECTION. TYPES: - BEGIN OF gty_status, + BEGIN OF ty_requirement_status, met TYPE abap_bool, component TYPE dlvunit, description TYPE text80, @@ -14,8 +14,8 @@ CLASS lcl_requirement_helper DEFINITION FINAL. installed_patch TYPE sappatchlv, required_release TYPE saprelease, required_patch TYPE sappatchlv, - END OF gty_status, - gty_status_tab TYPE STANDARD TABLE OF gty_status WITH DEFAULT KEY. + END OF ty_requirement_status, + ty_requirement_status_tt TYPE STANDARD TABLE OF ty_requirement_status WITH DEFAULT KEY. CLASS-METHODS: "! Check if the given requirements are met with user interaction "!

@@ -25,28 +25,28 @@ CLASS lcl_requirement_helper DEFINITION FINAL. "! @parameter it_requirements | The requirements to check "! @parameter iv_show_popup | Show popup with requirements "! @raising lcx_exception | Cancelled by user or internal error - check_requirements IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tab + check_requirements IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tt iv_show_popup TYPE abap_bool DEFAULT abap_true RAISING lcx_exception, "! Get a table with information about each requirement "! @parameter it_requirements | Requirements "! @parameter rt_status | Result "! @raising lcx_exception | Internal error - get_requirement_met_status IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tab - RETURNING VALUE(rt_status) TYPE gty_status_tab + get_requirement_met_status IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tt + RETURNING VALUE(rt_status) TYPE ty_requirement_status_tt RAISING lcx_exception. PROTECTED SECTION. PRIVATE SECTION. CLASS-METHODS: - show_requirement_popup IMPORTING it_requirements TYPE gty_status_tab + show_requirement_popup IMPORTING it_requirements TYPE ty_requirement_status_tt RAISING lcx_exception, - version_greater_or_equal IMPORTING is_status TYPE gty_status + version_greater_or_equal IMPORTING is_status TYPE ty_requirement_status RETURNING VALUE(rv_true) TYPE abap_bool. ENDCLASS. CLASS lcl_requirement_helper IMPLEMENTATION. METHOD check_requirements. - DATA: lt_met_status TYPE gty_status_tab, + DATA: lt_met_status TYPE ty_requirement_status_tt, lv_answer TYPE c LENGTH 1. lt_met_status = get_requirement_met_status( it_requirements ). @@ -62,7 +62,7 @@ CLASS lcl_requirement_helper IMPLEMENTATION. IF sy-subrc = 0. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING - text_question = 'The project has unmet requirements. Install anyways?' + text_question = 'The project has unmet requirements. Do you want to continue?' IMPORTING answer = lv_answer. IF lv_answer <> '1'. @@ -74,7 +74,7 @@ CLASS lcl_requirement_helper IMPLEMENTATION. METHOD get_requirement_met_status. DATA: lt_installed TYPE STANDARD TABLE OF cvers_sdu. FIELD-SYMBOLS: TYPE lcl_dot_abapgit=>ty_requirement, - TYPE gty_status, + TYPE ty_requirement_status, TYPE cvers_sdu. CALL FUNCTION 'DELIVERY_GET_INSTALLED_COMPS' @@ -96,11 +96,15 @@ CLASS lcl_requirement_helper IMPLEMENTATION. READ TABLE lt_installed WITH KEY component = -component ASSIGNING . IF sy-subrc = 0. + " Component is installed, requirement is met if the installed version is greater or equal + " to the required one. -installed_release = -release. -installed_patch = -extrelease. -description = -desc_text. - -met = version_greater_or_equal( ). + ELSE. + " Component is not installed at all + -met = abap_false. ENDIF. UNASSIGN . @@ -122,7 +126,7 @@ CLASS lcl_requirement_helper IMPLEMENTATION. RETURN. ENDTRY. - " Check if versions are comparable by number + " Versions are comparable by number, compare release and if necessary patch level IF is_status-installed_release > is_status-required_release OR ( is_status-installed_release = is_status-required_release AND ( is_status-required_patch IS INITIAL OR @@ -135,24 +139,24 @@ CLASS lcl_requirement_helper IMPLEMENTATION. METHOD show_requirement_popup. TYPES: BEGIN OF lty_color_line, color TYPE lvc_t_scol. - INCLUDE TYPE gty_status. + INCLUDE TYPE ty_requirement_status. TYPES: END OF lty_color_line, lty_color_tab TYPE STANDARD TABLE OF lty_color_line WITH DEFAULT KEY. - DATA: lo_alv TYPE REF TO cl_salv_table, - lo_column TYPE REF TO cl_salv_column, - lo_columns TYPE REF TO cl_salv_columns_table, - lt_color_table TYPE lty_color_tab, - lt_color_neg TYPE lvc_t_scol, - lt_color_pos TYPE lvc_t_scol, - ls_color TYPE lvc_s_scol, - lx_ex TYPE REF TO cx_root. + DATA: lo_alv TYPE REF TO cl_salv_table, + lo_column TYPE REF TO cl_salv_column, + lo_columns TYPE REF TO cl_salv_columns_table, + lt_color_table TYPE lty_color_tab, + lt_color_negative TYPE lvc_t_scol, + lt_color_positive TYPE lvc_t_scol, + ls_color TYPE lvc_s_scol, + lx_ex TYPE REF TO cx_root. FIELD-SYMBOLS: TYPE lty_color_line. ls_color-color-col = col_negative. - APPEND ls_color TO lt_color_neg. + APPEND ls_color TO lt_color_negative. ls_color-color-col = col_positive. - APPEND ls_color TO lt_color_pos. + APPEND ls_color TO lt_color_positive. CLEAR ls_color. @@ -160,9 +164,9 @@ CLASS lcl_requirement_helper IMPLEMENTATION. LOOP AT lt_color_table ASSIGNING . IF -met = abap_false. - -color = lt_color_neg. + -color = lt_color_negative. ELSE. - -color = lt_color_pos. + -color = lt_color_positive. ENDIF. ENDLOOP. UNASSIGN .