Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 9x 9x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10x 1x 9x 9x 9x 9x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | CLASS zcl_abapgit_repo_requirements DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_cvers TYPE STANDARD TABLE OF cvers WITH DEFAULT KEY. CLASS-METHODS requirements_popup IMPORTING !it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt RAISING zcx_abapgit_exception. CLASS-METHODS is_requirements_met IMPORTING !it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt RETURNING VALUE(rv_status) TYPE zif_abapgit_definitions=>ty_yes_no RAISING zcx_abapgit_exception. CLASS-METHODS inject_cvers IMPORTING !it_cvers TYPE ty_cvers. PROTECTED SECTION. PRIVATE SECTION. TYPES: BEGIN OF ty_requirement_status, met TYPE abap_bool, component TYPE tdevc-dlvunit, description TYPE string, installed_release TYPE saprelease, installed_patch TYPE sappatchlv, required_release TYPE saprelease, required_patch TYPE sappatchlv, END OF ty_requirement_status . TYPES: ty_requirement_status_tt TYPE STANDARD TABLE OF ty_requirement_status WITH DEFAULT KEY . CLASS-DATA gt_cvers TYPE ty_cvers. CLASS-METHODS get_cvers RETURNING VALUE(rt_cvers) TYPE ty_cvers RAISING zcx_abapgit_exception. CLASS-METHODS show_requirement_popup IMPORTING !it_requirements TYPE ty_requirement_status_tt RAISING zcx_abapgit_exception . CLASS-METHODS get_requirement_met_status IMPORTING !it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt RETURNING VALUE(rt_status) TYPE ty_requirement_status_tt RAISING zcx_abapgit_exception . CLASS-METHODS is_version_greater_or_equal IMPORTING !is_status TYPE ty_requirement_status RETURNING VALUE(rv_true) TYPE abap_bool . ENDCLASS. CLASS zcl_abapgit_repo_requirements IMPLEMENTATION. METHOD get_cvers. IF gt_cvers IS NOT INITIAL. rt_cvers = gt_cvers. RETURN. ENDIF. SELECT * FROM cvers INTO TABLE rt_cvers ORDER BY PRIMARY KEY. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |Error reading installed components| ). ENDIF. ENDMETHOD. METHOD get_requirement_met_status. DATA: lt_installed TYPE ty_cvers. FIELD-SYMBOLS: <ls_requirement> TYPE zif_abapgit_dot_abapgit=>ty_requirement, <ls_status> TYPE ty_requirement_status, <ls_installed_comp> TYPE cvers. lt_installed = get_cvers( ). LOOP AT it_requirements ASSIGNING <ls_requirement>. APPEND INITIAL LINE TO rt_status ASSIGNING <ls_status>. <ls_status>-component = <ls_requirement>-component. <ls_status>-required_release = <ls_requirement>-min_release. <ls_status>-required_patch = <ls_requirement>-min_patch. READ TABLE lt_installed WITH KEY component = <ls_requirement>-component ASSIGNING <ls_installed_comp>. IF sy-subrc = 0. " Component is installed, requirement is met if the installed version is greater or equal " to the required one. <ls_status>-installed_release = <ls_installed_comp>-release. <ls_status>-installed_patch = <ls_installed_comp>-extrelease. SELECT SINGLE desc_text FROM cvers_ref INTO <ls_status>-description WHERE component = <ls_installed_comp>-component AND langu = sy-langu ##SUBRC_OK. <ls_status>-met = is_version_greater_or_equal( <ls_status> ). ELSE. " Component is not installed at all <ls_status>-met = abap_false. ENDIF. UNASSIGN <ls_installed_comp>. ENDLOOP. ENDMETHOD. METHOD inject_cvers. " For testing only gt_cvers = it_cvers. ENDMETHOD. METHOD is_requirements_met. DATA: lt_met_status TYPE ty_requirement_status_tt. lt_met_status = get_requirement_met_status( it_requirements ). READ TABLE lt_met_status TRANSPORTING NO FIELDS WITH KEY met = abap_false. IF sy-subrc = 0. rv_status = zif_abapgit_definitions=>c_no. ELSE. rv_status = zif_abapgit_definitions=>c_yes. ENDIF. ENDMETHOD. METHOD is_version_greater_or_equal. DATA: lv_installed_release TYPE n LENGTH 4, lv_installed_patch TYPE n LENGTH 4, lv_required_release TYPE n LENGTH 4, lv_required_patch TYPE n LENGTH 4. TRY. MOVE EXACT: is_status-installed_release TO lv_installed_release, is_status-installed_patch TO lv_installed_patch, is_status-required_release TO lv_required_release, is_status-required_patch TO lv_required_patch. CATCH cx_sy_conversion_error. " Cannot compare by number, assume requirement not fulfilled (user can force install " anyways if this was an error) rv_true = abap_false. RETURN. ENDTRY. " Versions are comparable by number, compare release and if necessary patch level IF lv_installed_release > lv_required_release OR ( lv_installed_release = lv_required_release AND ( lv_required_patch = 0 OR lv_installed_patch >= lv_required_patch ) ). rv_true = abap_true. ENDIF. ENDMETHOD. METHOD requirements_popup. DATA: lt_met_status TYPE ty_requirement_status_tt, lv_answer TYPE c LENGTH 1. lt_met_status = get_requirement_met_status( it_requirements ). show_requirement_popup( lt_met_status ). lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm( iv_titlebar = 'Warning' iv_text_question = 'The project has unmet requirements. Do you want to continue?' ). IF lv_answer <> '1'. zcx_abapgit_exception=>raise( 'Cancelling because of unmet requirements.' ). ENDIF. ENDMETHOD. METHOD show_requirement_popup. TYPES: BEGIN OF ty_color_line, color TYPE lvc_t_scol. INCLUDE TYPE ty_requirement_status. TYPES: END OF ty_color_line. TYPES: ty_color_tab TYPE STANDARD TABLE OF ty_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 ty_color_tab, lt_color_negative TYPE lvc_t_scol, lt_color_positive TYPE lvc_t_scol, ls_color TYPE lvc_s_scol, ls_position TYPE zif_abapgit_popups=>ty_popup_position, lx_ex TYPE REF TO cx_root. FIELD-SYMBOLS: <ls_line> TYPE ty_color_line, <ls_requirement> LIKE LINE OF it_requirements. ls_color-color-col = col_negative. APPEND ls_color TO lt_color_negative. ls_color-color-col = col_positive. APPEND ls_color TO lt_color_positive. CLEAR ls_color. LOOP AT it_requirements ASSIGNING <ls_requirement>. APPEND INITIAL LINE TO lt_color_table ASSIGNING <ls_line>. MOVE-CORRESPONDING <ls_requirement> TO <ls_line>. ENDLOOP. LOOP AT lt_color_table ASSIGNING <ls_line>. IF <ls_line>-met = abap_false. <ls_line>-color = lt_color_negative. ELSE. <ls_line>-color = lt_color_positive. ENDIF. ENDLOOP. UNASSIGN <ls_line>. TRY. 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' ). lo_columns->set_color_column( 'COLOR' ). lo_columns->set_optimize( ). lo_column = lo_columns->get_column( 'REQUIRED_RELEASE' ). lo_column->set_short_text( 'Req. Rel.' ). lo_column = lo_columns->get_column( 'REQUIRED_PATCH' ). lo_column->set_short_text( 'Req. SP L.' ). ls_position = zcl_abapgit_popups=>center( iv_width = 70 iv_height = 10 ). lo_alv->set_screen_popup( start_column = ls_position-start_column end_column = ls_position-end_column start_line = ls_position-start_row end_line = ls_position-end_row ). 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. zcx_abapgit_exception=>raise( lx_ex->get_text( ) ). ENDTRY. ENDMETHOD. ENDCLASS. |