Handling unsupported objects in deserialize process (#6320)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-07-24 15:57:32 -04:00 committed by GitHub
parent a297f1e5cb
commit 402748d966
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 60 additions and 14 deletions

View File

@ -8,6 +8,14 @@ CLASS zcl_abapgit_object_common_aff DEFINITION
INTERFACES zif_abapgit_object
ABSTRACT METHODS changed_by .
METHODS constructor
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
!iv_language TYPE spras
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
TYPES: BEGIN OF ty_extension_mapper_pair,
extension TYPE string,
@ -37,11 +45,55 @@ ENDCLASS.
CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
METHOD constructor.
DATA:
lv_is_supported TYPE abap_bool,
li_aff_registry TYPE REF TO zif_abapgit_aff_registry,
lo_handler TYPE REF TO object.
super->constructor(
is_item = is_item
iv_language = iv_language ).
" Check if AFF handler exists and if object type is registered and supported
TRY.
lo_handler = get_object_handler( ).
CREATE OBJECT li_aff_registry TYPE zcl_abapgit_aff_registry.
lv_is_supported = li_aff_registry->is_supported_object_type( is_item-obj_type ).
CATCH cx_root.
lv_is_supported = abap_false.
ENDTRY.
IF lv_is_supported IS INITIAL.
zcx_abapgit_exception=>raise( |Object type { is_item-obj_type } is not supported by this system| ).
ENDIF.
ENDMETHOD.
METHOD get_additional_extensions.
RETURN.
ENDMETHOD.
METHOD get_object_handler.
DATA lo_handler_factory TYPE REF TO object.
CREATE OBJECT lo_handler_factory TYPE ('CL_AFF_OBJECT_HANDLER_FACTORY').
CALL METHOD lo_handler_factory->('IF_AFF_OBJECT_HANDLER_FACTORY~GET_OBJECT_HANDLER')
EXPORTING
object_type = ms_item-obj_type
RECEIVING
result = ro_object_handler.
ENDMETHOD.
METHOD is_file_empty.
CALL METHOD io_object_json_file->('IF_AFF_FILE~IS_DELETION')
@ -318,19 +370,6 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION.
ENDTRY.
ENDMETHOD.
METHOD get_object_handler.
DATA lo_handler_factory TYPE REF TO object.
CREATE OBJECT lo_handler_factory TYPE ('CL_AFF_OBJECT_HANDLER_FACTORY').
CALL METHOD lo_handler_factory->('IF_AFF_OBJECT_HANDLER_FACTORY~GET_OBJECT_HANDLER')
EXPORTING
object_type = ms_item-obj_type
RECEIVING
result = ro_object_handler.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lr_intf_aff_obj TYPE REF TO data,

View File

@ -68,7 +68,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECTS_CHECK IMPLEMENTATION.
CLASS zcl_abapgit_objects_check IMPLEMENTATION.
METHOD checks_adjust.
@ -211,6 +211,7 @@ CLASS ZCL_ABAPGIT_OBJECTS_CHECK IMPLEMENTATION.
METHOD warning_overwrite_find.
DATA:
ls_item TYPE zif_abapgit_definitions=>ty_item,
lv_status TYPE c LENGTH 2,
lt_changes TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_overwrite WITH DEFAULT KEY.
@ -224,11 +225,16 @@ CLASS ZCL_ABAPGIT_OBJECTS_CHECK IMPLEMENTATION.
APPEND INITIAL LINE TO lt_changes ASSIGNING <ls_changes>.
MOVE-CORRESPONDING <ls_result> TO <ls_changes>.
<ls_changes>-devclass = <ls_result>-package.
MOVE-CORRESPONDING <ls_changes> TO ls_item.
IF <ls_result>-packmove = abap_true.
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-packmove.
<ls_changes>-icon = icon_package_standard.
<ls_changes>-text = 'Change package assignment'.
ELSEIF zcl_abapgit_objects=>is_supported( ls_item ) = abap_false.
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-no_support.
<ls_changes>-icon = icon_no_status.
<ls_changes>-text = 'Object type not supported'.
ELSE.
CONCATENATE <ls_result>-lstate <ls_result>-rstate INTO lv_status RESPECTING BLANKS.
<ls_changes>-state = lv_status.

View File

@ -30,6 +30,7 @@ INTERFACE zif_abapgit_objects
CONSTANTS:
BEGIN OF c_deserialize_action,
" also used to determine priority if object has multiple changes, so don't change order
no_support TYPE i VALUE -1,
none TYPE i VALUE 0,
add TYPE i VALUE 1,
update TYPE i VALUE 2,